diff --git a/src/images/gallery/img-1.jpg b/src/images/gallery/img-1.jpg new file mode 100644 index 000000000..0f68e92b1 Binary files /dev/null and b/src/images/gallery/img-1.jpg differ diff --git a/src/images/gallery/img-2.jpg b/src/images/gallery/img-2.jpg new file mode 100644 index 000000000..2882f4e36 Binary files /dev/null and b/src/images/gallery/img-2.jpg differ diff --git a/src/images/gallery/img-3.jpg b/src/images/gallery/img-3.jpg new file mode 100644 index 000000000..1b497b632 Binary files /dev/null and b/src/images/gallery/img-3.jpg differ diff --git a/src/images/gallery/img-4.jpg b/src/images/gallery/img-4.jpg new file mode 100644 index 000000000..e928d603a Binary files /dev/null and b/src/images/gallery/img-4.jpg differ diff --git a/src/images/header-img/header-bg.jpg b/src/images/header-img/header-bg.jpg new file mode 100644 index 000000000..10bd10c11 Binary files /dev/null and b/src/images/header-img/header-bg.jpg differ diff --git a/src/images/icons/arrow-up.svg b/src/images/icons/arrow-up.svg new file mode 100644 index 000000000..59f857ab0 --- /dev/null +++ b/src/images/icons/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/images/icons/button-arrow.svg b/src/images/icons/button-arrow.svg new file mode 100644 index 000000000..4c1cc2baa --- /dev/null +++ b/src/images/icons/button-arrow.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/images/icons/facebook-icon.svg b/src/images/icons/facebook-icon.svg new file mode 100644 index 000000000..bd675efdf --- /dev/null +++ b/src/images/icons/facebook-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/images/icons/instagram-icon.svg b/src/images/icons/instagram-icon.svg new file mode 100644 index 000000000..575d51788 --- /dev/null +++ b/src/images/icons/instagram-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/images/icons/namu-logo.svg b/src/images/icons/namu-logo.svg new file mode 100644 index 000000000..2cda206c3 --- /dev/null +++ b/src/images/icons/namu-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/images/pictures/img-1.jpg b/src/images/pictures/img-1.jpg new file mode 100644 index 000000000..8d6eacb16 Binary files /dev/null and b/src/images/pictures/img-1.jpg differ diff --git a/src/images/pictures/img-2.jpg b/src/images/pictures/img-2.jpg new file mode 100644 index 000000000..988421da3 Binary files /dev/null and b/src/images/pictures/img-2.jpg differ diff --git a/src/images/pictures/img-3.jpg b/src/images/pictures/img-3.jpg new file mode 100644 index 000000000..69bd1536b Binary files /dev/null and b/src/images/pictures/img-3.jpg differ diff --git a/src/images/pictures/img-4.jpg b/src/images/pictures/img-4.jpg new file mode 100644 index 000000000..d93b7220a Binary files /dev/null and b/src/images/pictures/img-4.jpg differ diff --git a/src/index.html b/src/index.html index 8019b83ec..fb08e1759 100644 --- a/src/index.html +++ b/src/index.html @@ -1,19 +1,465 @@ - + - Title + + + + + NAMU - -

Hello Mate Academy

+ + +
+
+
+ + + +
+
+ +
+

ХУДОЖНІЙ МУЗЕЙ

+ + КВИТКИ + + +

ПОДІЇ

+
+
+
+ + + + + + + +
+
+
+

Актуальні події

+
+
+ Event 1 +
+
+

ВИСТАВКА

+

26.08-29.11.2019

+
+ +

Йду і повертаюсь

+

+ Національний Художній Музей України презентує унікальну + частину колекції Градобанку - українське мистецтво другої + половини 1980-1995 років. +

+
+
+ +
+ Event 2 +
+
+

ВИСТАВКА

+

26.08-29.11.2019

+
+

І спогади і мрії

+

+ Національний художній музей України до 100 річчя від дня + народження видатної української художниці Тетяни Яблонської + відкриває ретроспективну ювілейну виставку «І спогади і мрії». +

+
+
+
+
+
+ +
+
+
+
+
+

ЛЕКЦІЯ

+

26/08/2019 - 11:00

+
+

Від класицизму до романтизму

+
+
+
+
+ + + +
+
+ +
+
+
+ + + + + + + - + \ No newline at end of file diff --git a/src/scripts/main.js b/src/scripts/main.js index ad9a93a7c..392acc5ca 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -1 +1,170 @@ 'use strict'; +// #region menu + +const menuBtn = document.querySelectorAll('.button-menu'); +const sideMenu = document.querySelector('.page__menu'); +const menuLinks = document.querySelectorAll('.page__menu .nav__link'); +const body = document.querySelector('.page__body'); + +function toggleMenu(forceState) { + const isActive + = forceState !== undefined + ? forceState + : !sideMenu.classList.contains('page__menu--is-open'); + + sideMenu.classList.toggle('page__menu--is-open', isActive); + body.classList.toggle('page__body--no-scroll', isActive); + body.classList.toggle('page__body--is-under-menu', isActive); + + menuBtn.forEach((btn) => { + btn.classList.toggle('button-menu--is-active', isActive); + }); +} + +menuBtn.forEach((btn) => { + btn.addEventListener('click', () => toggleMenu()); +}); + +menuLinks.forEach((link) => { + link.addEventListener('click', () => toggleMenu(false)); +}); +// #endregion + +// #region slider +function initSlider() { + const track = document.getElementById('slider-track'); + const slides = Array.from(track.querySelectorAll('.slider__slide')); + const dotsContainer = document.getElementById('slider-dots'); + + let slidesPerPage = calcSlidesPerPage(); + let pageCount = Math.ceil(slides.length / slidesPerPage); + + function calcSlidesPerPage() { + if (window.matchMedia('(min-width: 1280px)').matches) { + return slides.length; + } + + return window.matchMedia('(min-width: 768px)').matches ? 2 : 1; + } + + function renderDots() { + slidesPerPage = calcSlidesPerPage(); + pageCount = Math.ceil(slides.length / slidesPerPage); + + if (window.matchMedia('(min-width: 1024px)').matches) { + dotsContainer.style.display = 'none'; + + return; + } else { + dotsContainer.style.display = ''; + } + + dotsContainer.innerHTML = ''; + + for (let i = 0; i < pageCount; i++) { + const btn = document.createElement('button'); + + btn.className = 'slider__dots-button'; + btn.type = 'button'; + btn.setAttribute('aria-label', `Перейти на сторінку ${i + 1}`); + btn.dataset.index = String(i); + + if (i === 0) { + btn.classList.add('slider__dots-button--active'); + } + + btn.addEventListener('click', () => { + const left = i * track.clientWidth; + + track.scrollTo({ left, behavior: 'smooth' }); + updateActiveDot(); + }); + + dotsContainer.appendChild(btn); + } + } + + function updateActiveDot() { + let pageIndex = Math.round( + track.scrollLeft / (track.clientWidth / slidesPerPage), + ); + + if (track.scrollLeft + track.clientWidth >= track.scrollWidth - 2) { + pageIndex = pageCount - 1; + } + + const dots = dotsContainer.querySelectorAll('.slider__dots-button'); + + dots.forEach((d, i) => { + d.classList.toggle('slider__dots-button--active', i === pageIndex); + }); + } + + let rafPending = false; + + function onScroll() { + if (!rafPending) { + rafPending = true; + + window.requestAnimationFrame(() => { + updateActiveDot(); + rafPending = false; + }); + } + } + track.addEventListener('scroll', onScroll, { passive: true }); + + let resizeTimer; + + window.addEventListener('resize', () => { + clearTimeout(resizeTimer); + + resizeTimer = setTimeout(() => { + const oldSlidesPerPage = slidesPerPage; + const newSlidesPerPage = calcSlidesPerPage(); + + if (newSlidesPerPage !== oldSlidesPerPage) { + renderDots(); + track.scrollTo({ left: 0 }); + } + }, 150); + }); + + renderDots(); + setTimeout(updateActiveDot, 0); + + // open img + const lightbox = document.getElementById('slider-lightbox'); + const lightboxImg = document.getElementById('slider-lightbox-img'); + const lightboxClose = document.querySelector('.slider-lightbox__button'); + + slides.forEach((slide) => { + slide.addEventListener('click', () => { + const img = slide.querySelector('img'); + + if (!img) { + return; + } + + lightboxImg.src = img.src; + lightbox.classList.add('slider-lightbox--active'); + }); + }); + + function closeLightbox() { + lightbox.classList.remove('slider-lightbox--active'); + lightboxImg.src = ''; + } + + lightboxClose.addEventListener('click', closeLightbox); + + lightbox.addEventListener('click', (e) => { + if (e.target === lightbox) { + closeLightbox(); + } + }); +} + +document.addEventListener('DOMContentLoaded', initSlider); + +// #endregion \ No newline at end of file diff --git a/src/styles/_typography.scss b/src/styles/_typography.scss deleted file mode 100644 index 1837eb46e..000000000 --- a/src/styles/_typography.scss +++ /dev/null @@ -1,3 +0,0 @@ -h1 { - @extend %h1; -} diff --git a/src/styles/_utils.scss b/src/styles/_utils.scss deleted file mode 100644 index 3280c3fe1..000000000 --- a/src/styles/_utils.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import 'utils/vars'; -@import 'utils/mixins'; -@import 'utils/extends'; diff --git a/src/styles/css/blocks/button.css b/src/styles/css/blocks/button.css new file mode 100644 index 000000000..bdd49d8c6 --- /dev/null +++ b/src/styles/css/blocks/button.css @@ -0,0 +1,18 @@ +/* Error: Undefined variable. + * , + * 3 | color: $main-text-dark; + * | ^^^^^^^^^^^^^^^ + * ' + * src\styles\scss\blocks\button.scss 3:10 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined variable.\a \2577 \a 3 \2502 color: $main-text-dark;\a \2502 ^^^^^^^^^^^^^^^\a \2575 \a src\\styles\\scss\\blocks\\button.scss 3:10 root stylesheet'; +} diff --git a/src/styles/css/blocks/container.css b/src/styles/css/blocks/container.css new file mode 100644 index 000000000..7c9cdfe7f --- /dev/null +++ b/src/styles/css/blocks/container.css @@ -0,0 +1,19 @@ +/* Error: Undefined mixin. + * , + * 4 | / @include on-tablet { + * 5 | | padding-inline: 39px; + * 6 | \ } + * ' + * src\styles\scss\blocks\container.scss 4:3 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 4 \2502 \250c @include on-tablet {\a 5 \2502 \2502 padding-inline: 39px;\a 6 \2502 \2514 }\a \2575 \a src\\styles\\scss\\blocks\\container.scss 4:3 root stylesheet'; +} diff --git a/src/styles/css/blocks/events.css b/src/styles/css/blocks/events.css new file mode 100644 index 000000000..f81b1a7e7 --- /dev/null +++ b/src/styles/css/blocks/events.css @@ -0,0 +1,19 @@ +/* Error: Undefined mixin. + * , + * 5 | / @include on-tablet { + * 6 | | margin-bottom: 43px; + * 7 | \ } + * ' + * src\styles\scss\blocks\events.scss 5:5 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 5 \2502 \250c @include on-tablet {\a 6 \2502 \2502 margin-bottom: 43px;\a 7 \2502 \2514 }\a \2575 \a src\\styles\\scss\\blocks\\events.scss 5:5 root stylesheet'; +} diff --git a/src/styles/css/blocks/footer.css b/src/styles/css/blocks/footer.css new file mode 100644 index 000000000..e5dcc1b4e --- /dev/null +++ b/src/styles/css/blocks/footer.css @@ -0,0 +1,18 @@ +/* Error: Undefined mixin. + * , + * 5 | @include page-grid; + * | ^^^^^^^^^^^^^^^^^^ + * ' + * src\styles\scss\blocks\footer.scss 5:5 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 5 \2502 @include page-grid;\a \2502 ^^^^^^^^^^^^^^^^^^\a \2575 \a src\\styles\\scss\\blocks\\footer.scss 5:5 root stylesheet'; +} diff --git a/src/styles/css/blocks/gallery.css b/src/styles/css/blocks/gallery.css new file mode 100644 index 000000000..210279b7e --- /dev/null +++ b/src/styles/css/blocks/gallery.css @@ -0,0 +1,19 @@ +/* Error: Undefined mixin. + * , + * 5 | / @include on-desktop { + * 6 | | margin-bottom: 200px; + * 7 | \ } + * ' + * src\styles\scss\blocks\gallery.scss 5:5 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 5 \2502 \250c @include on-desktop {\a 6 \2502 \2502 margin-bottom: 200px;\a 7 \2502 \2514 }\a \2575 \a src\\styles\\scss\\blocks\\gallery.scss 5:5 root stylesheet'; +} diff --git a/src/styles/css/blocks/header.css b/src/styles/css/blocks/header.css new file mode 100644 index 000000000..e7c78c450 --- /dev/null +++ b/src/styles/css/blocks/header.css @@ -0,0 +1,19 @@ +/* Error: Undefined mixin. + * , + * 7 | / @include on-tablet { + * 8 | | margin-bottom: 30px; + * 9 | \ } + * ' + * src\styles\scss\blocks\header.scss 7:5 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 7 \2502 \250c @include on-tablet {\a 8 \2502 \2502 margin-bottom: 30px;\a 9 \2502 \2514 }\a \2575 \a src\\styles\\scss\\blocks\\header.scss 7:5 root stylesheet'; +} diff --git a/src/styles/css/blocks/icons.css b/src/styles/css/blocks/icons.css new file mode 100644 index 000000000..f13f0d29d --- /dev/null +++ b/src/styles/css/blocks/icons.css @@ -0,0 +1,18 @@ +/* Error: Undefined variable. + * , + * 5 | color: $main-text-dark; + * | ^^^^^^^^^^^^^^^ + * ' + * src\styles\scss\blocks\icons.scss 5:10 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined variable.\a \2577 \a 5 \2502 color: $main-text-dark;\a \2502 ^^^^^^^^^^^^^^^\a \2575 \a src\\styles\\scss\\blocks\\icons.scss 5:10 root stylesheet'; +} diff --git a/src/styles/css/blocks/lection.css b/src/styles/css/blocks/lection.css new file mode 100644 index 000000000..b7ba5d926 --- /dev/null +++ b/src/styles/css/blocks/lection.css @@ -0,0 +1,20 @@ +/* Error: Undefined mixin. + * , + * 17 | / @include on-tablet { + * 18 | | height: 390px; + * 19 | | margin-bottom: 208px; + * 20 | \ } + * ' + * src\styles\scss\blocks\lection.scss 17:3 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 17 \2502 \250c @include on-tablet {\a 18 \2502 \2502 height: 390px;\a 19 \2502 \2502 margin-bottom: 208px;\a 20 \2502 \2514 }\a \2575 \a src\\styles\\scss\\blocks\\lection.scss 17:3 root stylesheet'; +} diff --git a/src/styles/css/blocks/menu.css b/src/styles/css/blocks/menu.css new file mode 100644 index 000000000..b37c80859 --- /dev/null +++ b/src/styles/css/blocks/menu.css @@ -0,0 +1,18 @@ +/* Error: Undefined variable. + * , + * 3 | color: $main-text-light; + * | ^^^^^^^^^^^^^^^^ + * ' + * src\styles\scss\blocks\menu.scss 3:10 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined variable.\a \2577 \a 3 \2502 color: $main-text-light;\a \2502 ^^^^^^^^^^^^^^^^\a \2575 \a src\\styles\\scss\\blocks\\menu.scss 3:10 root stylesheet'; +} diff --git a/src/styles/css/blocks/nav.css b/src/styles/css/blocks/nav.css new file mode 100644 index 000000000..4a1f320f2 --- /dev/null +++ b/src/styles/css/blocks/nav.css @@ -0,0 +1,18 @@ +/* Error: Undefined mixin. + * , + * 12 | @include effects; + * | ^^^^^^^^^^^^^^^^ + * ' + * src\styles\scss\blocks\nav.scss 12:5 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 12 \2502 @include effects;\a \2502 ^^^^^^^^^^^^^^^^\a \2575 \a src\\styles\\scss\\blocks\\nav.scss 12:5 root stylesheet'; +} diff --git a/src/styles/css/blocks/page.css b/src/styles/css/blocks/page.css new file mode 100644 index 000000000..5ae129b99 --- /dev/null +++ b/src/styles/css/blocks/page.css @@ -0,0 +1,42 @@ +.page { + font-family: 'IBM Plex Sans', sans-serif; + font-weight: 500; + font-size: 14px; + line-height: 100%; + scroll-behavior: smooth; +} + +.page--no-scroll { + overflow: hidden; +} + +.page__body::after { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background: rgba(0, 0, 0, 0.5); + z-index: -1; + display: none; +} + +.page__body--is-under-menu::after { + z-index: 999; + display: block; +} + +.page__menu { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + transform: translateY(-100%); +} + +.page__menu--is-open { + transform: translateY(0); + transition: transform 0.3s ease-in-out; +} diff --git a/src/styles/css/blocks/page.css.map b/src/styles/css/blocks/page.css.map new file mode 100644 index 000000000..8ff85efcc --- /dev/null +++ b/src/styles/css/blocks/page.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../scss/blocks/page.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EAEA;;AAEA;EACE;;AAIA;EACE;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAIA;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACE;EACA","file":"page.css"} \ No newline at end of file diff --git a/src/styles/css/blocks/subscribe.css b/src/styles/css/blocks/subscribe.css new file mode 100644 index 000000000..557e45b32 --- /dev/null +++ b/src/styles/css/blocks/subscribe.css @@ -0,0 +1,18 @@ +/* Error: Undefined variable. + * , + * 3 | color: $main-text-light; + * | ^^^^^^^^^^^^^^^^ + * ' + * src\styles\scss\blocks\subscribe.scss 3:10 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined variable.\a \2577 \a 3 \2502 color: $main-text-light;\a \2502 ^^^^^^^^^^^^^^^^\a \2575 \a src\\styles\\scss\\blocks\\subscribe.scss 3:10 root stylesheet'; +} diff --git a/src/styles/css/blocks/top-bar.css b/src/styles/css/blocks/top-bar.css new file mode 100644 index 000000000..029b6ee4a --- /dev/null +++ b/src/styles/css/blocks/top-bar.css @@ -0,0 +1,21 @@ +/* Error: Undefined mixin. + * , + * 7 | / @include on-tablet { + * 8 | | @include page-grid; + * 9 | | + * 10 | | padding-block: 15px; + * 11 | \ } + * ' + * src\styles\scss\blocks\top-bar.scss 7:3 root stylesheet */ + +body::before { + font-family: + 'Source Code Pro', 'SF Mono', Monaco, Inconsolata, 'Fira Mono', + 'Droid Sans Mono', monospace; + white-space: pre; + display: block; + padding: 1em; + margin-bottom: 1em; + border-bottom: 2px solid black; + content: 'Error: Undefined mixin.\a \2577 \a 7 \2502 \250c @include on-tablet {\a 8 \2502 \2502 @include page-grid;\a 9 \2502 \2502 \a 10 \2502 \2502 padding-block: 15px;\a 11 \2502 \2514 }\a \2575 \a src\\styles\\scss\\blocks\\top-bar.scss 7:3 root stylesheet'; +} diff --git a/src/styles/_fonts.scss b/src/styles/css/fonts.css similarity index 61% rename from src/styles/_fonts.scss rename to src/styles/css/fonts.css index 45cdd5400..733968002 100644 --- a/src/styles/_fonts.scss +++ b/src/styles/css/fonts.css @@ -1,6 +1,6 @@ @font-face { font-family: Roboto, Arial, Helvetica, sans-serif; - src: url('../fonts/Roboto-Regular-webfont.woff') format('woff'); + src: url('../../fonts/Roboto-Regular-webfont.woff') format('woff'); font-weight: normal; font-style: normal; } diff --git a/src/styles/css/fonts.css.map b/src/styles/css/fonts.css.map new file mode 100644 index 000000000..582d779ab --- /dev/null +++ b/src/styles/css/fonts.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/fonts.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","file":"fonts.css"} \ No newline at end of file diff --git a/src/styles/css/main.css b/src/styles/css/main.css new file mode 100644 index 000000000..e36c158b3 --- /dev/null +++ b/src/styles/css/main.css @@ -0,0 +1,1652 @@ +/* === reset + normalize hybrid (2025) === */ +@layer reset { + /* Base */ + *, + *::before, + *::after { + box-sizing: border-box; + } + * { + margin: 0; + } + html { + font-size: 16px; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + } + body { + min-height: 100dvh; + line-height: 1.5; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + main { + display: block; + } + + /* Typography */ + h1, + h2, + h3, + h4, + h5, + h6 { + font: inherit; + } + p, + figure, + blockquote, + dl, + dd { + margin: 0; + } + b, + strong { + font-weight: bolder; + } + i, + em { + font-style: italic; + } + small { + font-size: 80%; + } + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + a { + display: inline-block; + color: inherit; + background: transparent; + text-decoration: none; + -webkit-tap-highlight-color: transparent; + } + a:focus-visible { + outline: 2px solid currentColor; + outline-offset: 2px; + } + ::selection { + background: #bcdcff; + color: #000; + } + + /* Lists */ + ul, + ol { + padding: 0; + list-style: none; + } + + /* Media */ + img, + picture, + video, + canvas, + svg { + display: block; + max-width: 100%; + height: auto; + } + + /* Tables */ + table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + } + th, + td { + padding: 0; + } + + /* Forms */ + button, + input, + select, + textarea { + font: inherit; + color: inherit; + margin: 0; + padding: 0; + border: 0; + background: transparent; + } + button, + [role='button'] { + cursor: pointer; + } + :disabled { + cursor: not-allowed; + } + textarea { + resize: vertical; + } + textarea::placeholder, + input::placeholder { + opacity: 0.6; + } + input, + textarea, + select { + -webkit-appearance: none; + appearance: none; + border-radius: 0; + } + [type='number']::-webkit-inner-spin-button, + [type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + } + [type='search']::-webkit-search-decoration { + -webkit-appearance: none; + } + fieldset, + legend { + margin: 0; + padding: 0; + border: 0; + } + label { + cursor: pointer; + } + *:focus-visible { + outline: transparent; + } + + /* Autofill fixes */ + input:-webkit-autofill, + input:-webkit-autofill:hover, + input:-webkit-autofill:focus, + textarea:-webkit-autofill, + textarea:-webkit-autofill:hover, + textarea:-webkit-autofill:focus, + select:-webkit-autofill, + select:-webkit-autofill:hover, + select:-webkit-autofill:focus { + -webkit-box-shadow: 0 0 0 1000px transparent inset; + -webkit-text-fill-color: currentColor; + transition: background-color 5000s ease-in-out 0s; + } + + /* Misc */ + hr { + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.12); + } + [hidden], + template { + display: none; + } + details { + display: block; + } + summary { + cursor: pointer; + list-style: none; + } + summary::-webkit-details-marker { + display: none; + } + .visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; + } +} + +h1 { + font-family: Roboto, sans-serif; + font-weight: 400; +} + +@media (min-width: 768px) { + h1 { + text-align: left; + line-height: 120%; + } +} + +.title { + font-family: Montserrat, sans-serif; + font-size: 36px; + font-weight: 700; + text-align: center; +} + +@media (min-width: 768px) { + .title { + text-align: left; + font-size: 48px; + margin-bottom: 43px; + } +} + +@media (min-width: 1280px) { + .title { + margin-bottom: 56px; + } +} + +@font-face { + font-family: Roboto, Arial, Helvetica, sans-serif; + src: url('../../fonts/Roboto-Regular-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@media (min-width: 768px) { + h1 { + text-align: left; + line-height: 120%; + } +} + +@media (min-width: 768px) { + .title { + text-align: left; + font-size: 48px; + margin-bottom: 43px; + } +} + +@media (min-width: 1280px) { + .title { + margin-bottom: 56px; + } +} + +body { + background: #eee; +} + +.page { + font-family: 'IBM Plex Sans', sans-serif; + font-weight: 500; + font-size: 14px; + line-height: 100%; + scroll-behavior: smooth; +} + +.page--no-scroll { + overflow: hidden; +} + +.page__body::after { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background: rgba(0, 0, 0, 0.5); + z-index: -1; + display: none; +} + +.page__body--is-under-menu::after { + z-index: 999; + display: block; +} + +.page__menu { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + transform: translateY(-100%); +} + +.page__menu--is-open { + transform: translateY(0); + transition: transform 0.3s ease-in-out; +} + +.header { + position: relative; +} + +.header__top-bar { + margin-bottom: 239px; +} + +@media (min-width: 768px) { + .header__top-bar { + margin-bottom: 30px; + } +} + +@media (min-width: 1280px) { + .header__top-bar { + margin-bottom: 104px; + } +} + +.header__content { + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); +} + +@media (min-width: 768px) { + .header__content { + --columns: 6; + + column-gap: 30px; + } +} + +@media (min-width: 1280px) { + .header__content { + --columns: 12; + } +} + +@media (min-width: 768px) { + .header__content { + margin-bottom: 107px; + } +} + +@media (min-width: 1280px) { + .header__content { + padding-bottom: 118px; + margin-bottom: 200px; + } +} + +.header__title { + text-transform: uppercase; + grid-column: 1/-1; + font-size: 45px; + margin-bottom: 20px; +} + +@media (min-width: 768px) { + .header__title { + grid-column: 1/4; + font-size: 53px; + margin-bottom: 38px; + } +} + +@media (min-width: 1280px) { + .header__title { + grid-column: 1/6; + font-size: 72px; + margin-bottom: 89px; + } +} + +.header__button { + grid-column: 1/-1; + border: 1px solid #1a5a4c; +} + +.header__button::after { + background-color: #1a5a4c; +} + +@media (min-width: 768px) { + .header__button { + grid-column: 1/4; + } +} + +@media (min-width: 1280px) { + .header__button { + grid-column: 3/6; + } +} + +.header__events { + display: none; + transform: rotate(-90deg); + position: absolute; + bottom: 0; + left: 0; + color: #687480; +} + +.header__events::before { + content: ''; + display: inline-block; + width: 70px; + height: 1px; + background-color: #1a5a4c; + margin: 0 auto; +} + +@media (min-width: 1280px) { + .header__events { + display: flex; + justify-content: space-between; + align-items: center; + gap: 20px; + } +} + +.header__bg { + width: 100%; + position: absolute; + top: 0; + right: 0; + z-index: -1; + height: 300px; + background-image: url('/src/images/header-img/header-bg.jpg'); + background-repeat: no-repeat; + background-size: cover; + transform: scaleX(-1); + background-position: center; +} + +@media (min-width: 768px) { + .header__bg { + width: 50%; + height: 384px; + } +} + +@media (min-width: 1280px) { + .header__bg { + height: 655px; + } +} + +.top-bar { + display: flex; + flex-direction: row; + align-items: center; + padding-block: 10px; +} + +@media (min-width: 768px) { + .top-bar { + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); + padding-block: 15px; + } +} + +@media (min-width: 768px) and (min-width: 768px) { + .top-bar { + --columns: 6; + + column-gap: 30px; + } +} + +@media (min-width: 768px) and (min-width: 1280px) { + .top-bar { + --columns: 12; + } +} + +.top-bar__logo { + margin: 0 auto; + height: 61px; + width: 55px; +} + +@media (min-width: 768px) { + .top-bar__logo { + grid-column: 4/6; + } +} + +@media (min-width: 1280px) { + .top-bar__logo { + grid-column: 7/9; + } +} + +.button { + position: relative; + color: #0f0e08; + line-height: 100%; + height: 50px; + border-right: none; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + text-transform: uppercase; + transition: all 0.3s ease-in; +} + +.button span { + margin: 0 auto; +} + +@media (min-width: 768px) { + .button { + height: 70px; + } +} + +.button::after { + content: ''; + display: inline-block; + width: 50px; + height: 100%; + background-image: url('/src/images/icons/button-arrow.svg'); + background-repeat: no-repeat; + background-size: 24px 24px; + background-position: center; +} + +@media (min-width: 768px) { + .button::after { + width: 70px; + } +} + +.button:hover { + background-color: #1a5a4c; + color: #fff; +} + +.button-menu { + border: none; + padding: 0; + margin: 0; + cursor: pointer; + position: relative; + height: 24px; + width: 24px; +} + +.button-menu span { + transition: all 0.3s ease-in; + position: absolute; + left: 3px; + right: 3px; + width: 18px; + height: 2px; + background-color: #0f0e08; +} + +.button-menu span:nth-child(1) { + top: 6px; +} + +.button-menu span:nth-child(2) { + top: 11px; +} + +.button-menu span:nth-child(3) { + top: 16px; +} + +.button-menu--is-active span:nth-child(1) { + transform: rotate(45deg); + left: 3px; + top: 11px; + background-color: #fff; +} + +.button-menu--is-active span:nth-child(2) { + display: none; +} + +.button-menu--is-active span:nth-child(3) { + transform: rotate(-45deg); + left: 3px; + top: 11px; + background-color: #fff; +} + +.button-menu:hover span { + background-color: #f14a27; +} + +.button-menu:hover span:nth-child(1) { + transform: translateX(-2px); +} + +.button-menu:hover span:nth-child(2) { + transform: translateX(2px); +} + +.button-menu:hover span:nth-child(3) { + transform: translateX(-2px); +} + +.button-menu--is-active:hover span:nth-child(1) { + transform: rotate(45deg) scale(1.2); +} + +.container { + padding-inline: 20px; +} + +@media (min-width: 768px) { + .container { + padding-inline: 39px; + } +} + +@media (min-width: 1280px) { + .container { + padding-inline: 55px; + margin: 0 auto; + max-width: 1440px; + } +} + +.menu { + font-weight: 400; + color: #fff; + background-color: #1a5a4c; +} + +.menu__wrapper { + display: flex; + flex-direction: column; + gap: 24px; +} + +@media (min-width: 768px) { + .menu__wrapper { + flex-direction: row; + gap: 38px; + } +} + +@media (min-width: 1280px) { + .menu__wrapper { + gap: 102px; + } +} + +.menu__top-bar { + position: relative; + align-items: flex-start; + justify-content: space-between; + gap: 28px; + padding-top: 27px; + padding-bottom: 24px; +} + +@media (min-width: 768px) { + .menu__top-bar { + padding-top: 40px; + display: flex; + } +} + +@media (min-width: 1280px) { + .menu__top-bar { + gap: 102px; + } +} + +.menu__top-bar::after { + position: absolute; + content: ''; + display: inline-block; + width: 100%; + height: 1px; + background-color: #fff; + bottom: 0; +} + +@media (min-width: 768px) { + .menu__top-bar::after { + width: 1px; + height: 145px; + top: 40px; + right: 0; + } +} + +.menu__top-bar .nav__list { + gap: 24px 28px; +} + +@media (min-width: 768px) { + .menu__top-bar .nav__list { + margin-right: 36px; + } +} + +@media (min-width: 1280px) { + .menu__top-bar .nav__list { + margin-right: 102px; + } +} + +.menu__top-bar .nav__link { + font-size: 16px; + font-weight: 500; +} + +.menu__content { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: space-between; + gap: 20px; + padding-bottom: 27px; +} + +@media (min-width: 768px) { + .menu__content { + padding-block: 40px; + max-width: 340px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 26px; + } +} + +@media (min-width: 768px) { + .menu__content { + min-width: 370px; + } +} + +.menu__accent { + font-weight: 600; +} + +.nav .nav__list { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, auto); + grid-auto-flow: column; + justify-content: center; +} + +.nav .nav__item { + transition: all 0.3s ease-in; +} + +.nav .nav__item:hover { + color: #f14a27; +} + +.events__title { + margin-bottom: 40px; +} + +@media (min-width: 768px) { + .events__title { + margin-bottom: 43px; + } +} + +@media (min-width: 1280px) { + .events__title { + margin-bottom: 56px; + } +} + +.events__cards { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + gap: 60px; + margin-bottom: 60px; +} + +@media (min-width: 768px) { + .events__cards { + margin-bottom: 112px; + } +} + +@media (min-width: 1280px) { + .events__cards { + margin-bottom: 104px; + } +} + +.events__card { + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); +} + +@media (min-width: 768px) { + .events__card { + --columns: 6; + + column-gap: 30px; + } +} + +@media (min-width: 1280px) { + .events__card { + --columns: 12; + } +} + +@media (min-width: 768px) { + .events__card { + row-gap: 40px; + } +} + +.events__image { + object-fit: cover; + grid-column: 1/-1; + width: 100%; + height: 210px; + transition: all 0.3s ease-in; +} + +.events__image:hover { + transform: scale(1.02); +} + +@media (min-width: 768px) { + .events__image { + height: 420px; + } +} + +@media (min-width: 1280px) { + .events__image { + height: 520px; + grid-column: 1/8; + } +} + +.events__info { + grid-column: 1/-1; + display: flex; + flex-direction: column; +} + +@media (min-width: 1280px) { + .events__info { + grid-column: 9/-1; + place-self: center center; + } +} + +.events__tech-info { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + margin-bottom: 15px; + font-size: 16px; +} + +@media (min-width: 768px) { + .events__tech-info { + justify-content: flex-start; + gap: 27px; + margin-bottom: 32px; + } +} + +@media (min-width: 1280px) { + .events__tech-info { + margin-bottom: 30; + } +} + +.events__type { + font-weight: 500; + color: #687480; + line-height: 100%; +} + +@media (min-width: 768px) { + .events__type { + font-size: 14px; + } +} + +.events__date { + color: #1a5a4c; + font-weight: 700; + line-height: 150%; +} + +.events__name { + font-family: Montserrat, sans-serif; + position: relative; + font-size: 28px; + font-weight: 400; + line-height: 100%; + margin-bottom: 10px; + display: flex; + align-items: center; + gap: 10px; +} + +@media (min-width: 768px) { + .events__name { + margin-bottom: 15px; + font-size: 36px; + gap: 24px; + } +} + +.events__name::after { + content: ''; + display: inline-block; + width: 10px; + height: 10px; + background-color: #f14a27; +} + +.events__description { + font-size: 16px; + font-weight: 300; + line-height: 150%; +} + +.lection { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + background-image: url('/src/images/pictures/img-3.jpg'); + background-repeat: no-repeat; + background-size: cover; + background-position: top; + position: relative; + width: 100%; + height: 210px; + margin-bottom: 183px; +} + +@media (min-width: 768px) { + .lection { + height: 390px; + margin-bottom: 208px; + } +} + +@media (min-width: 1280px) { + .lection { + height: 550px; + margin-bottom: 302px; + } +} + +.lection__info { + display: flex; + flex-direction: column; + margin: 0 auto; + max-width: 280px; + position: absolute; + align-items: center; + top: 153px; + left: 0; + right: 0; + background-color: #fff; + gap: 24px; + padding-block: 20px; + box-shadow: 0 2px 0 0 rgba(26, 90, 76, 0.25); +} + +@media (min-width: 768px) { + .lection__info { + align-items: flex-start; + max-width: 570px; + padding: 45px 55px 50px; + top: 306px; + gap: 16px; + } +} + +@media (min-width: 1280px) { + .lection__info { + grid-column: 1/-1; + top: 448px; + } +} + +.lection__tech-info { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-evenly; + gap: 27px; + font-size: 16px; + margin: 0; +} + +@media (min-width: 768px) { + .lection__tech-info { + gap: 186px; + } +} + +@media (min-width: 1280px) { + .lection__tech-info { + gap: 130px; + } +} + +.lection__type { + font-weight: 500; + color: #687480; + line-height: 100%; +} + +@media (min-width: 768px) { + .lection__type { + font-size: 14px; + } +} + +.lection__date { + color: #1a5a4c; + font-weight: 700; + line-height: 150%; +} + +.lection__name { + font-family: Montserrat, sans-serif; + position: relative; + font-size: 28px; + font-weight: 400; + line-height: 100%; + display: flex; + align-items: center; + gap: 10px; + margin: 0; + text-align: center; +} + +@media (min-width: 768px) { + .lection__name { + margin-bottom: 15px; + font-size: 36px; + gap: 24px; + text-align: left; + } +} + +.gallery__slider { + margin-bottom: 100px; +} + +@media (min-width: 1280px) { + .gallery__slider { + margin-bottom: 200px; + } +} + +.slider__track { + gap: 20px; + margin-bottom: 20px; + display: flex; + overflow-x: auto; + scroll-snap-type: x mandatory; + -webkit-overflow-scrolling: touch; + scroll-behavior: smooth; +} + +.slider__track::-webkit-scrollbar { + display: none; +} + +@media (min-width: 768px) { + .slider__track { + margin-bottom: 32px; + } +} + +@media (min-width: 1280px) { + .slider__track { + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); + } +} + +@media (min-width: 1280px) and (min-width: 768px) { + .slider__track { + --columns: 6; + + column-gap: 30px; + } +} + +@media (min-width: 1280px) and (min-width: 1280px) { + .slider__track { + --columns: 12; + } +} + +.slider__slide { + flex: 0 0 100%; + scroll-snap-align: center; + text-align: center; + height: 410px; + transition: all 0.3s ease-in; +} + +.slider__slide:hover { + transform: scale(1.02); +} + +@media (min-width: 768px) { + .slider__slide { + flex: 0 0 50%; + height: 543px; + } +} + +@media (min-width: 1280px) { + .slider__slide { + height: 600px; + } + .slider__slide--width--small { + grid-column: span 4; + } + .slider__slide--width--big { + grid-column: span 8; + } + .slider__slide--height--small { + height: 360px; + } +} + +.slider__image { + display: block; + object-fit: cover; + object-position: top; + width: 100%; + height: 100%; +} + +.slider__dots { + display: flex; + justify-content: center; + gap: 22px; +} + +.slider__dots-button { + width: 9px; + height: 9px; + border-radius: 50%; + border: none; + background-color: #e0e0e0; +} + +.slider__dots-button--active { + background-color: #1a5a4c; +} + +.slider-lightbox { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background-color: rgba(0, 0, 0, 0.85); + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 9999; + display: none; +} + +.slider-lightbox__img { + max-width: 90%; + max-height: 90%; + object-fit: contain; + border-radius: 8px; +} + +.slider-lightbox__button { + position: absolute; + width: 24px; + height: 24px; + top: 20px; + right: 20px; + border: none; + padding: 0; + margin: 0; + cursor: pointer; + min-width: 24px; +} + +/* stylelint-disable-next-line no-descending-specificity */ +.slider-lightbox__button span:nth-child(2) { + left: 3px; + top: 11px; + transform: rotate(-45deg); +} + +.slider-lightbox__button:hover .button-close span:nth-child(1) { + transform: rotate(45deg) scale(1.2); +} + +.slider-lightbox__button:hover .button-close span:nth-child(2) { + transform: rotate(-45deg) scale(1.2); +} + +.slider-lightbox--active { + display: flex; +} + +.subscribe { + background-image: url('/src/images/pictures/img-4.jpg'); + color: #fff; +} + +.subscribe__wrapper { + padding-block: 82px; + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); +} + +@media (min-width: 768px) { + .subscribe__wrapper { + --columns: 6; + + column-gap: 30px; + } +} + +@media (min-width: 1280px) { + .subscribe__wrapper { + --columns: 12; + } +} + +.subscribe__title { + grid-column: 1/-1; + text-align: center; + margin-bottom: 20px; +} + +@media (min-width: 768px) { + .subscribe__title { + grid-column: 2/-2; + margin-bottom: 16px; + } +} + +@media (min-width: 1280px) { + .subscribe__title { + grid-column: 4/10; + } +} + +.subscribe__text { + grid-column: 1/-1; + font-size: 18px; + line-height: 150%; + text-align: center; + margin-bottom: 50px; +} + +@media (min-width: 768px) { + .subscribe__text { + grid-column: 2/-2; + margin-bottom: 64px; + } +} + +@media (min-width: 1280px) { + .subscribe__text { + grid-column: 4/10; + margin-bottom: 72px; + } +} + +.subscribe__form { + width: 100%; + grid-column: 1/-1; + margin: 0 auto; +} + +@media (min-width: 768px) { + .subscribe__form { + grid-column: 2/-2; + } +} + +@media (min-width: 1280px) { + .subscribe__form { + grid-column: 4/10; + } +} + +.subscribe__label { + display: flex; + justify-content: space-between; + height: 50px; +} + +@media (min-width: 768px) { + .subscribe__label { + height: 70px; + gap: 18px; + } +} + +@media (min-width: 1280px) { + .subscribe__label { + gap: 30px; + } +} + +.subscribe__button { + flex-shrink: 0; + display: block; + content: ''; + width: 50px; + height: 100%; + background-color: #f14a27; + background-image: url(/src/images/icons/button-arrow.svg); + background-repeat: no-repeat; + background-size: 24px 24px; + background-position: center; + transition: all 0.3s ease-in; +} + +.subscribe__button:hover { + background-size: 48px 48px; +} + +@media (min-width: 768px) { + .subscribe__button { + width: 70px; + } +} + +.subscribe__email { + border: 0; + font-family: Montserrat, sans-serif; + padding: 18px 32px; + width: 100%; + color: #0f0e08; + font-size: 14px; + background-color: #fff; + transition: all 0.3s ease-in; +} + +@media (min-width: 768px) { + .subscribe__email { + padding-inline: 24px; + } +} + +@media (min-width: 1280px) { + .subscribe__email { + padding-inline: 32px; + } +} + +.subscribe__email::placeholder { + color: #687480; +} + +.subscribe__email:hover { + border: 1px solid #f14a27; + border-right: none; +} + +@media (min-width: 768px) { + .subscribe__email:hover { + border-right: 1px solid #f14a27; + } +} + +.subscribe__email:focus { + border-width: 2px; +} + +.footer__wrapper { + padding-block: 50px; + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); +} + +@media (min-width: 768px) { + .footer__wrapper { + --columns: 6; + + column-gap: 30px; + } +} + +@media (min-width: 1280px) { + .footer__wrapper { + --columns: 12; + } +} + +.footer__accent { + font-weight: 600; +} + +.footer__top { + grid-column: 1/-1; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 40px; +} + +@media (min-width: 768px) { + .footer__top { + flex-direction: column; + justify-content: flex-start; + gap: 62px; + grid-column: span 1; + margin-bottom: 0; + } +} + +.footer__socials { + display: flex; + gap: 20px; +} + +.footer__info { + grid-column: 1/2; + display: flex; + flex-direction: column; + margin-bottom: 20px; + gap: 20px; +} + +@media (min-width: 768px) { + .footer__info { + grid-column: 2/4; + margin-bottom: 64px; + } +} + +@media (min-width: 1280px) { + .footer__info { + grid-column: 3/5; + margin-bottom: 87px; + } +} + +.footer__contacts { + display: flex; + flex-direction: column; + gap: 20px; + grid-column: 2/3; +} + +@media (min-width: 768px) { + .footer__contacts { + grid-column: 4/-2; + } +} + +@media (min-width: 1280px) { + .footer__contacts { + grid-column: 5/7; + } +} + +.footer__contacts a { + transition: all 0.3s ease-in; +} + +.footer__contacts a:hover { + color: #f14a27; +} + +.footer__button-to-top { + place-self: flex-end flex-end; + grid-column: 2/3; + padding: 17px; + width: 50px; + height: 50px; + border: 1px solid #1a5a4c; + border-radius: 50%; + background-image: url(/src/images/icons/arrow-up.svg); + background-repeat: no-repeat; + background-position: center; +} + +@media (min-width: 768px) { + .footer__button-to-top { + display: none; + } +} + +.footer__line { + grid-column: 1/-1; + display: block; + background-color: #1a5a4c; + height: 1px; + width: 100%; + margin-bottom: 40px; +} + +@media (min-width: 768px) { + .footer__line { + grid-column: 2/-2; + margin-bottom: 64px; + } +} + +@media (min-width: 1280px) { + .footer__line { + justify-self: center; + height: 260px; + width: 1px; + grid-column: 7/8; + } +} + +.footer__nav { + grid-column: 1/-1; + margin-bottom: 80px; +} + +@media (min-width: 768px) { + .footer__nav { + grid-column: 2/-2; + } +} + +@media (min-width: 1280px) { + .footer__nav { + grid-column: 8/-2; + } +} + +.footer__nav .nav__list { + gap: 20px; +} + +@media (min-width: 768px) { + .footer__nav .nav__list { + column-gap: 30px; + } +} + +@media (min-width: 1280px) { + .footer__nav .nav__list { + column-gap: 32px; + } +} + +.footer__designed-info { + grid-column: 1/-1; + font-size: 12px; + text-align: center; + color: #687480; +} + +@media (min-width: 768px) { + .footer__designed-info { + display: flex; + justify-content: space-between; + } +} + +.icon { + display: block; + height: 24px; + width: 24px; + color: #0f0e08; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + transition: all 0.3s ease-in; +} + +.icon:hover { + color: #f14a27; +} + +.icon--facebook { + background-color: currentColor; + -webkit-mask: url(/src/images/icons/facebook-icon.svg); + mask: url(/src/images/icons/facebook-icon.svg); +} + +.icon--instagram { + background-color: currentColor; + -webkit-mask: url(/src/images/icons/facebook-icon.svg); + mask: url(/src/images/icons/instagram-icon.svg); +} diff --git a/src/styles/css/main.css.map b/src/styles/css/main.css.map new file mode 100644 index 000000000..cafa28edf --- /dev/null +++ b/src/styles/css/main.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../utils/normalize.scss","../utils/extends.scss","../utils/mixins.scss","../utils/typography.scss","../scss/fonts.scss","../scss/main.scss","../utils/vars.scss","../scss/blocks/page.scss","../scss/blocks/header.scss","../scss/blocks/top-bar.scss","../scss/blocks/button.scss","../scss/blocks/container.scss","../scss/blocks/menu.scss","../scss/blocks/nav.scss","../scss/blocks/events.scss","../scss/blocks/lection.scss","../scss/blocks/gallery.scss","../scss/blocks/subscribe.scss","../scss/blocks/footer.scss","../scss/blocks/icons.scss"],"names":[],"mappings":"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ACA;EAEA;EACA;EACA;;AZnHF;EYyGA;IAaI;IACA;IACA;;;AAGF;EACE;EACA;EACA;EACA;EACA,kBRlIa;;AQsIjB;EACE;EACA;EACA;;;AC/IJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AbNA;EaRF;IAiBI;IACA;;;AbJF;EadF;IAsBI;IACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBTlCc;ESmCd;EACA;EACA;;Ab/BF;EakBA;IAgBI;IACA;IACA;IACA;IACA;;;AbhCJ;EaYA;IAwBI;IACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AbtDF;Ea+CA;IAUI;;;AbnDJ;EayCA;IAcI;;;AAIJ;EACE;EACA,OTvEc;ESwEd;;AbpEF;EaiEA;IAMI;;;AAIJ;EACE,OT/Ea;ESgFb;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;Ab5FF;EaiFA;IAcI;IACA;IACA;IACA;;;;ACzGJ;EACE;;AdYF;EcbA;IAII;;;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AARJ;EAWE;EACA;;AdfF;EcGA;IAeI;;;AdZJ;EcHA;IdSA;IACA;IAEA;IAEA;;;AAjBA;EcGA;IdiBE;IAEA;;;AAhBF;EcHA;IduBE;;;AcAF;EACE;EACA;EACA;EACA;EdCF;;AcGE;EACE;;AdnCJ;Ec0BA;IAaI;IAEA;;;AdnCJ;EcoBA;IAmBI;;EACA;IACE;;EAGF;IACE;;EAGF;IACE;;;AAKN;EACE;EACA;EACA;EAEA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE,kBVrFS;;;AU2FjB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA,kBVxIY;;AU0IZ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAEF;EACE;;AAKN;EACE;;;ACpKJ;EACE;EACA;;AAEA;EfgBA;EACA;EAEA;EAEA;;AAjBA;EeJA;IfwBE;IAEA;;;AAhBF;EeVA;If8BE;;;Ae9BF;EAGE;;AAGF;EACE;EACA;EACA;;AfLF;EeEA;IAMI;IACA;;;AfHJ;EeJA;IAWI;;;AAIJ;EACE;EACA;EACA;EACA;EAEA;;AfvBF;EeiBA;IASI;IACA;;;AfrBJ;EeWA;IAcI;IACA;;;AAIJ;EACE;EACA;EACA;;AfvCF;EeoCA;IAMI;;;AfpCJ;Ee8BA;IAUI;;;AAIJ;EACE;EACA;EACA;;AfrDF;EekDA;IAMI;IACA;;;AfnDJ;Ee4CA;IAWI;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,kBXzEe;EW0Ef;EACA;EACA;EACA;Ef5CF;;Ae+CE;EACE;;Af/EJ;EeiEA;IAkBI;;;AAIJ;EACE;EACA;EACA;EACA;EACA,OXnGa;EWoGb;EACA,kBXpGc;EJqChB;;AA/BA;EeuFA;IAYI;;;Af7FJ;EeiFA;IAgBI;;;AAGF;EACE,OX/GY;;AWkHd;EACE;EACA;;AfhHJ;Ee8GE;IAKI;;;AAIJ;EACE;;;AC/HJ;EACE;EhBkBF;EACA;EAEA;EAEA;;AAjBA;EgBPA;IhB2BE;IAEA;;;AAhBF;EgBbA;IhBiCE;;;AgB3BF;EACE;;AAIF;EACE;EACA;EACA;EACA;EAEA;;AhBVF;EgBIA;IASI;IACA;IAEA;IACA;IACA;;;AAIJ;EACE;EACA;;AAMF;EACE;EACA;EACA;EACA;EAEA;;AhBpCF;EgB8BA;IASI;IACA;;;AhBlCJ;EgBwBA;IAcI;IACA;;;AAIJ;EACE;EACA;EACA;EACA;;AhBrDF;EgBiDA;IAOI;;;AhBlDJ;EgB2CA;IAWI;;;AAGF;EhBhCF;;AgBmCI;EACE,OZrEW;;AY0EjB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AhBlFF;EgBwEA;IAaI;;;AAMJ;EACE;EACA;EACA,kBZjGa;EYkGb;EACA;EACA;;AhBjGF;EgB2FA;IASI;IACA;;;AhB/FJ;EgBqFA;IAcI;IACA;IACA;IACA;;;AAIJ;EACE;EAEA;;AhBnHF;EgBgHA;IAMI;;;AhBhHJ;EgB0GA;IAUI;;;AAGF;EACE;;AhB9HJ;EgB6HE;IAII;;;AhB3HN;EgBuHE;IAQI;;;AAKN;EACE;EACA;EACA;EACA,OZlJc;;AJIhB;EgB0IA;IAOI;IACA;;;;AC1JN;EACE;EACA;EACA;EACA,ObHe;EaKf;EACA;EACA;EjB+BA;;AiB3BA;EACE,ObPe;;AaUjB;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA","file":"main.css"} \ No newline at end of file diff --git a/src/styles/css/utils.css b/src/styles/css/utils.css new file mode 100644 index 000000000..063689a93 --- /dev/null +++ b/src/styles/css/utils.css @@ -0,0 +1,244 @@ +/* === reset + normalize hybrid (2025) === */ +@layer reset { + /* Base */ + *, + *::before, + *::after { + box-sizing: border-box; + } + * { + margin: 0; + } + html { + font-size: 16px; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + } + body { + min-height: 100dvh; + line-height: 1.5; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + main { + display: block; + } + + /* Typography */ + h1, + h2, + h3, + h4, + h5, + h6 { + font: inherit; + } + p, + figure, + blockquote, + dl, + dd { + margin: 0; + } + b, + strong { + font-weight: bolder; + } + i, + em { + font-style: italic; + } + small { + font-size: 80%; + } + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + a { + display: inline-block; + color: inherit; + background: transparent; + text-decoration: none; + -webkit-tap-highlight-color: transparent; + } + a:focus-visible { + outline: 2px solid currentColor; + outline-offset: 2px; + } + ::selection { + background: #bcdcff; + color: #000; + } + + /* Lists */ + ul, + ol { + padding: 0; + list-style: none; + } + + /* Media */ + img, + picture, + video, + canvas, + svg { + display: block; + max-width: 100%; + height: auto; + } + + /* Tables */ + table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + } + th, + td { + padding: 0; + } + + /* Forms */ + button, + input, + select, + textarea { + font: inherit; + color: inherit; + margin: 0; + padding: 0; + border: 0; + background: transparent; + } + button, + [role='button'] { + cursor: pointer; + } + :disabled { + cursor: not-allowed; + } + textarea { + resize: vertical; + } + textarea::placeholder, + input::placeholder { + opacity: 0.6; + } + input, + textarea, + select { + -webkit-appearance: none; + appearance: none; + border-radius: 0; + } + [type='number']::-webkit-inner-spin-button, + [type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + } + [type='search']::-webkit-search-decoration { + -webkit-appearance: none; + } + fieldset, + legend { + margin: 0; + padding: 0; + border: 0; + } + label { + cursor: pointer; + } + *:focus-visible { + outline: transparent; + } + + /* Autofill fixes */ + input:-webkit-autofill, + input:-webkit-autofill:hover, + input:-webkit-autofill:focus, + textarea:-webkit-autofill, + textarea:-webkit-autofill:hover, + textarea:-webkit-autofill:focus, + select:-webkit-autofill, + select:-webkit-autofill:hover, + select:-webkit-autofill:focus { + -webkit-box-shadow: 0 0 0 1000px transparent inset; + -webkit-text-fill-color: currentColor; + transition: background-color 5000s ease-in-out 0s; + } + + /* Misc */ + hr { + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.12); + } + [hidden], + template { + display: none; + } + details { + display: block; + } + summary { + cursor: pointer; + list-style: none; + } + summary::-webkit-details-marker { + display: none; + } + .visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; + } +} + +h1 { + font-family: Roboto, sans-serif; + font-weight: 400; +} + +@media (min-width: 768px) { + h1 { + text-align: left; + line-height: 120%; + } +} + +.title { + font-family: Montserrat, sans-serif; + font-size: 36px; + font-weight: 700; + text-align: center; +} + +@media (min-width: 768px) { + .title { + text-align: left; + font-size: 48px; + margin-bottom: 43px; + } +} + +@media (min-width: 1280px) { + .title { + margin-bottom: 56px; + } +} diff --git a/src/styles/css/utils.css.map b/src/styles/css/utils.css.map new file mode 100644 index 000000000..b4b27512f --- /dev/null +++ b/src/styles/css/utils.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../utils/normalize.scss","../utils/extends.scss","../utils/mixins.scss","../utils/typography.scss"],"names":[],"mappings":"AAAA;AACA;AACE;EACA;AAAA;AAAA;IAGE;;EAEF;IACE;;EAGF;IACE;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;;EAGF;IACE;;AAGF;EACA;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAEF;AAAA;AAAA;AAAA;AAAA;IAKE;;EAGF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;IACE;;EAGF;AAAA;IAEE;IACA;IACA;IACA;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;AAGF;EACA;AAAA;IAEE;IACA;;AAGF;EACA;AAAA;AAAA;AAAA;AAAA;IAKE;IACA;IACA;;AAGF;EACA;IACE;IACA;IACA;;EAEF;AAAA;IAEE;;AAGF;EACA;AAAA;AAAA;AAAA;IAIE;IACA;IACA;IACA;IACA;IACA;;EAEF;AAAA;IAEE;;EAEF;IACE;;EAGF;IACE;;EAEF;AAAA;IAEE;;EAGF;AAAA;AAAA;IAGE;IACA;IACA;;EAEF;AAAA;IAEE;;EAEF;IACE;;EAGF;AAAA;IAEE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;;AAGF;EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IASE;IACA;IACA;;AAGF;EACA;IACE;IACA;;EAGF;AAAA;IAEE;;EAGF;IACE;;EAEF;IACE;IACA;;EAEF;IACE;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;AChOJ;EACE;EACA;;;ACMA;ECJF;IAEI;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;;ADPA;ECGF;IAOI;IACA;IACA;;;ADNF;ECHF;IAaI","file":"utils.css"} \ No newline at end of file diff --git a/src/styles/main.scss b/src/styles/main.scss deleted file mode 100644 index fb9195d12..000000000 --- a/src/styles/main.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import 'utils'; -@import 'fonts'; -@import 'typography'; - -body { - background: $c-gray; -} diff --git a/src/styles/scss/blocks/button.scss b/src/styles/scss/blocks/button.scss new file mode 100644 index 000000000..9abad75be --- /dev/null +++ b/src/styles/scss/blocks/button.scss @@ -0,0 +1,117 @@ +.button { + position: relative; + color: $main-text-dark; + line-height: 100%; + + height: 50px; + + border-right: none; + + display: flex; + flex-direction: row; + + justify-content: space-between; + align-items: center; + text-transform: uppercase; + + @include effects; + + span { + margin: 0 auto; + } + + @include on-tablet { + height: 70px; + } + + &::after { + content: ''; + display: inline-block; + width: 50px; + height: 100%; + + background-image: url('/src/images/icons/button-arrow.svg'); + background-repeat: no-repeat; + background-size: 24px 24px; + background-position: center; + + @include on-tablet { + width: 70px; + } + } + + &:hover { + background-color: $accent-primary; + color: $main-text-light; + } +} + +.button-menu { + border: none; + padding: 0; + margin: 0; + cursor: pointer; + position: relative; + height: 24px; + width: 24px; + + span { + @include effects; + + position: absolute; + left: 3px; + right: 3px; + width: 18px; + height: 2px; + background-color: $main-text-dark; + } + + span:nth-child(1) { + top: 6px; + } + span:nth-child(2) { + top: 11px; + } + span:nth-child(3) { + top: 16px; + } + + /* active */ + &--is-active span:nth-child(1) { + transform: rotate(45deg); + left: 3px; + top: 11px; + background-color: $main-text-light; + } + &--is-active span:nth-child(2) { + display: none; + } + &--is-active span:nth-child(3) { + transform: rotate(-45deg); + left: 3px; + top: 11px; + background-color: $main-text-light; + } + + /* hover */ + &:hover span { + background-color: $accent-secondary; + } + &:hover span:nth-child(1) { + transform: translateX(-2px); + } + &:hover span:nth-child(2) { + transform: translateX(2px); + } + &:hover span:nth-child(3) { + transform: translateX(-2px); + } + + /* active + hover */ + &--is-active:hover span:nth-child(1) { + transform: rotate(45deg) scale(1.2); + } + &--is-active:hover span:nth-child(3) { + transform: rotate(-45deg) scale(1.2); + } +} diff --git a/src/styles/scss/blocks/container.scss b/src/styles/scss/blocks/container.scss new file mode 100644 index 000000000..0f9865546 --- /dev/null +++ b/src/styles/scss/blocks/container.scss @@ -0,0 +1,13 @@ +.container { + padding-inline: 20px; + + @include on-tablet { + padding-inline: 39px; + } + + @include on-desktop { + padding-inline: 55px; + margin: 0 auto; + max-width: $max-content-width; + } +} diff --git a/src/styles/scss/blocks/events.scss b/src/styles/scss/blocks/events.scss new file mode 100644 index 000000000..4e0a69583 --- /dev/null +++ b/src/styles/scss/blocks/events.scss @@ -0,0 +1,146 @@ +.events { + &__title { + margin-bottom: 40px; + + @include on-tablet { + margin-bottom: 43px; + } + + @include on-desktop { + margin-bottom: 56px; + } + } + + &__cards { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + gap: 60px; + + margin-bottom: 60px; + + @include on-tablet { + margin-bottom: 112px; + } + + @include on-desktop { + margin-bottom: 104px; + } + } + + &__card { + @include page-grid; + + row-gap: 60px; + + @include on-tablet { + row-gap: 40px; + } + } + + &__image { + object-fit: cover; + grid-column: 1 / -1; + + width: 100%; + height: 210px; + + @include effects; + + &:hover { + transform: scale(1.02); + } + + @include on-tablet { + height: 420px; + } + + @include on-desktop { + height: 520px; + + grid-column: 1 / 8; + } + } + + &__info { + grid-column: 1 / -1; + + display: flex; + flex-direction: column; + + @include on-desktop { + grid-column: 9 / -1; + place-self: center center; + } + } + + &__tech-info { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + + margin-bottom: 15px; + font-size: 16px; + + @include on-tablet { + justify-content: flex-start; + gap: 27px; + margin-bottom: 32px; + } + + @include on-desktop { + margin-bottom: 30; + } + } + + &__type { + font-weight: 500; + color: $additional-text; + line-height: 100%; + + @include on-tablet { + font-size: 14px; + } + } + + &__date { + color: $accent-primary; + font-weight: 700; + line-height: 150%; + } + + &__name { + font-family: Montserrat, sans-serif; + position: relative; + font-size: 28px; + font-weight: 400; + line-height: 100%; + margin-bottom: 10px; + + display: flex; + align-items: center; + gap: 10px; + + @include on-tablet { + margin-bottom: 15px; + font-size: 36px; + gap: 24px; + } + + &::after { + content: ''; + display: inline-block; + width: 10px; + height: 10px; + background-color: $accent-secondary; + } + } + + &__description { + font-size: 16px; + font-weight: 300; + line-height: 150%; + } +} diff --git a/src/styles/scss/blocks/footer.scss b/src/styles/scss/blocks/footer.scss new file mode 100644 index 000000000..712627a63 --- /dev/null +++ b/src/styles/scss/blocks/footer.scss @@ -0,0 +1,158 @@ +.footer { + &__wrapper { + padding-block: 50px; + + @include page-grid; + } + + &__accent { + font-weight: 600; + } + + // #region footer__top + &__top { + grid-column: 1 / -1; + display: flex; + align-items: center; + justify-content: space-between; + + margin-bottom: 40px; + + @include on-tablet { + flex-direction: column; + justify-content: flex-start; + + gap: 62px; + grid-column: span 1; + margin-bottom: 0; + } + } + + &__socials { + display: flex; + gap: 20px; + } + + // #endregion + + // #region footer__information + &__info { + grid-column: 1 / 2; + display: flex; + flex-direction: column; + margin-bottom: 20px; + + gap: 20px; + + @include on-tablet { + grid-column: 2 / 4; + margin-bottom: 64px; + } + + @include on-desktop { + grid-column: 3 / 5; + margin-bottom: 87px; + } + } + + &__contacts { + display: flex; + flex-direction: column; + gap: 20px; + grid-column: 2 / 3; + + @include on-tablet { + grid-column: 4 / -2; + } + + @include on-desktop { + grid-column: 5 / 7; + } + + & a { + @include effects; + + &:hover { + color: $accent-secondary; + } + } + } + + &__button-to-top { + place-self: flex-end flex-end; + grid-column: 2 / 3; + padding: 17px; + width: 50px; + height: 50px; + border: 1px solid $accent-primary; + border-radius: 50%; + background-image: url(/src/images/icons/arrow-up.svg); + background-repeat: no-repeat; + background-position: center; + + @include on-tablet { + display: none; + } + } + + // #endregion + + &__line { + grid-column: 1 / -1; + display: block; + background-color: $accent-primary; + height: 1px; + width: 100%; + margin-bottom: 40px; + + @include on-tablet { + grid-column: 2 / -2; + margin-bottom: 64px; + } + + @include on-desktop { + justify-self: center; + height: 260px; + width: 1px; + grid-column: 7 / 8; + } + } + + &__nav { + grid-column: 1 / -1; + + margin-bottom: 80px; + + @include on-tablet { + grid-column: 2 / -2; + } + + @include on-desktop { + grid-column: 8 / -2; + } + + .nav__list { + gap: 20px; + + @include on-tablet { + column-gap: 30px; + } + + @include on-desktop { + column-gap: 32px; + } + } + } + + &__designed-info { + grid-column: 1 / -1; + font-size: 12px; + text-align: center; + color: $additional-text; + + @include on-tablet { + display: flex; + justify-content: space-between; + } + } +} diff --git a/src/styles/scss/blocks/gallery.scss b/src/styles/scss/blocks/gallery.scss new file mode 100644 index 000000000..e86e68c1f --- /dev/null +++ b/src/styles/scss/blocks/gallery.scss @@ -0,0 +1,167 @@ +.gallery { + &__slider { + margin-bottom: 100px; + + @include on-desktop { + margin-bottom: 200px; + } + } +} + +.slider { + &__track { + display: flex; + overflow-x: auto; + scroll-snap-type: x mandatory; + -webkit-overflow-scrolling: touch; + scroll-behavior: smooth; + + &::-webkit-scrollbar { + display: none; + } + + gap: 20px; + margin-bottom: 20px; + + @include on-tablet { + margin-bottom: 32px; + } + + @include on-desktop { + @include page-grid; + } + } + + &__slide { + flex: 0 0 100%; + scroll-snap-align: center; + text-align: center; + height: 410px; + + @include effects; + + &:hover { + transform: scale(1.02); + } + + @include on-tablet { + flex: 0 0 50%; + + height: 543px; + } + + @include on-desktop { + height: 600px; + &--width--small { + grid-column: span 4; + } + + &--width--big { + grid-column: span 8; + } + + &--height--small { + height: 360px; + } + } + } + + &__image { + display: block; + object-fit: cover; + object-position: top; + + width: 100%; + height: 100%; + } + + &__dots { + display: flex; + justify-content: center; + gap: 22px; + + &-button { + width: 9px; + height: 9px; + border-radius: 50%; + border: none; + background-color: #e0e0e0; + + &--active { + background-color: $accent-primary; + } + } + } +} + +.slider-lightbox { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background-color: rgba(0, 0, 0, 0.85); + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 9999; + + display: none; + + &__img { + max-width: 90%; + max-height: 90%; + object-fit: contain; + border-radius: 8px; + } + + &__button { + position: absolute; + width: 24px; + height: 24px; + + top: 20px; + right: 20px; + + border: none; + padding: 0; + margin: 0; + cursor: pointer; + + min-width: 24px; + + span { + position: absolute; + left: 3px; + right: 3px; + width: 18px; + height: 2px; + background-color: $main-text-light; + + &:nth-child(1) { + left: 3px; + top: 11px; + transform: rotate(45deg); + } + + &:nth-child(2) { + left: 3px; + top: 11px; + transform: rotate(-45deg); + } + } + + &:hover .button-close span { + &:nth-child(1) { + transform: rotate(45deg) scale(1.2); + } + &:nth-child(2) { + transform: rotate(-45deg) scale(1.2); + } + } + } + + &--active { + display: flex; + } +} diff --git a/src/styles/scss/blocks/header.scss b/src/styles/scss/blocks/header.scss new file mode 100644 index 000000000..6ba16cc12 --- /dev/null +++ b/src/styles/scss/blocks/header.scss @@ -0,0 +1,119 @@ +.header { + position: relative; + + &__top-bar { + margin-bottom: 239px; + + @include on-tablet { + margin-bottom: 30px; + } + + @include on-desktop { + margin-bottom: 104px; + } + } + + &__content { + @include page-grid; + + margin-bottom: 70px; + + @include on-tablet { + margin-bottom: 107px; + } + + @include on-desktop { + padding-bottom: 118px; + margin-bottom: 200px; + } + } + + &__title { + text-transform: uppercase; + grid-column: 1 / -1; + font-size: 45px; + margin-bottom: 20px; + + @include on-tablet { + grid-column: 1 / 4; + + font-size: 53px; + margin-bottom: 38px; + } + + @include on-desktop { + grid-column: 1 / 6; + + font-size: 72px; + margin-bottom: 89px; + } + } + + &__button { + grid-column: 1 / -1; + border: 1px solid $accent-primary; + + &::after { + background-color: $accent-primary; + } + + @include on-tablet { + grid-column: 1 / 4; + } + + @include on-desktop { + grid-column: 3 / 6; + } + } + + &__events { + display: none; + transform: rotate(-90deg); + position: absolute; + bottom: 0; + left: 0; + color: $additional-text; + + &::before { + content: ''; + display: inline-block; + width: 70px; + height: 1px; + background-color: $accent-primary; + margin: 0 auto; + } + + @include on-desktop { + display: flex; + justify-content: space-between; + align-items: center; + gap: 20px; + } + } + + &__bg { + width: 100%; + + position: absolute; + top: 0; + right: 0; + + z-index: -1; + height: 300px; + background-image: url('/src/images/header-img/header-bg.jpg'); + background-repeat: no-repeat; + background-size: cover; + transform: scaleX(-1); + + background-position: center; + + @include on-tablet { + width: 50%; + height: 384px; + } + + @include on-desktop { + height: 655px; + } + } +} diff --git a/src/styles/scss/blocks/icons.scss b/src/styles/scss/blocks/icons.scss new file mode 100644 index 000000000..916bc781e --- /dev/null +++ b/src/styles/scss/blocks/icons.scss @@ -0,0 +1,28 @@ +.icon { + display: block; + height: 24px; + width: 24px; + color: $main-text-dark; + + background-repeat: no-repeat; + background-position: center; + background-size: cover; + + @include effects; + + &:hover { + color: $accent-secondary; + } + + &--facebook { + background-color: currentColor; + -webkit-mask: url(/src/images/icons/facebook-icon.svg); + mask: url(/src/images/icons/facebook-icon.svg); + } + + &--instagram { + background-color: currentColor; + -webkit-mask: url(/src/images/icons/facebook-icon.svg); + mask: url(/src/images/icons/instagram-icon.svg); + } +} diff --git a/src/styles/scss/blocks/lection.scss b/src/styles/scss/blocks/lection.scss new file mode 100644 index 000000000..f545816d7 --- /dev/null +++ b/src/styles/scss/blocks/lection.scss @@ -0,0 +1,110 @@ +.lection { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + background-image: url('/src/images/pictures/img-3.jpg'); + background-repeat: no-repeat; + background-size: cover; + background-position: top; + + position: relative; + width: 100%; + height: 210px; + + margin-bottom: 183px; + + @include on-tablet { + height: 390px; + margin-bottom: 208px; + } + + @include on-desktop { + height: 550px; + margin-bottom: 302px; + } + + &__info { + display: flex; + flex-direction: column; + margin: 0 auto; + max-width: 280px; + position: absolute; + align-items: center; + top: 153px; + left: 0; + right: 0; + background-color: $main-text-light; + gap: 24px; + padding-block: 20px; + box-shadow: 0 2px 0 0 rgba(26, 90, 76, 0.25); + + @include on-tablet { + align-items: flex-start; + max-width: 570px; + padding: 45px 55px 50px; + top: 306px; + gap: 16px; + } + + @include on-desktop { + grid-column: 1 / -1; + top: 448px; + } + } + + &__tech-info { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-evenly; + gap: 27px; + font-size: 16px; + margin: 0; + + @include on-tablet { + gap: 186px; + } + + @include on-desktop { + gap: 130px; + } + } + + &__type { + font-weight: 500; + color: $additional-text; + line-height: 100%; + + @include on-tablet { + font-size: 14px; + } + } + + &__date { + color: $accent-primary; + font-weight: 700; + line-height: 150%; + } + + &__name { + font-family: Montserrat, sans-serif; + position: relative; + font-size: 28px; + font-weight: 400; + line-height: 100%; + + display: flex; + align-items: center; + gap: 10px; + margin: 0; + text-align: center; + + @include on-tablet { + margin-bottom: 15px; + font-size: 36px; + gap: 24px; + text-align: left; + } + } +} diff --git a/src/styles/scss/blocks/menu.scss b/src/styles/scss/blocks/menu.scss new file mode 100644 index 000000000..9bd3fcaa5 --- /dev/null +++ b/src/styles/scss/blocks/menu.scss @@ -0,0 +1,97 @@ +.menu { + font-weight: 400; + color: $main-text-light; + background-color: $accent-primary; + + &__wrapper { + display: flex; + flex-direction: column; + gap: 24px; + + @include on-tablet { + flex-direction: row; + gap: 38px; + } + + @include on-desktop { + gap: 102px; + } + } + + &__top-bar { + position: relative; + align-items: flex-start; + justify-content: space-between; + gap: 28px; + padding-top: 27px; + padding-bottom: 24px; + + @include on-tablet { + padding-top: 40px; + display: flex; + } + + @include on-desktop { + gap: 102px; + } + + &::after { + position: absolute; + content: ''; + display: inline-block; + width: 100%; + height: 1px; + background-color: $main-text-light; + bottom: 0; + + @include on-tablet { + width: 1px; + height: 145px; + top: 40px; + right: 0; + } + } + + .nav__list { + gap: 24px 28px; + + @include on-tablet { + margin-right: 36px; + } + + @include on-desktop { + margin-right: 102px; + } + } + + .nav__link { + font-size: 16px; + font-weight: 500; + } + } + + &__content { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: space-between; + gap: 20px; + padding-bottom: 27px; + + @include on-tablet { + padding-block: 40px; + max-width: 340px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 26px; + } + + @include on-tablet { + min-width: 370px; + } + } + + &__accent { + font-weight: 600; + } +} diff --git a/src/styles/scss/blocks/nav.scss b/src/styles/scss/blocks/nav.scss new file mode 100644 index 000000000..efef6f7ba --- /dev/null +++ b/src/styles/scss/blocks/nav.scss @@ -0,0 +1,18 @@ +.nav { + .nav__list { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, auto); + + grid-auto-flow: column; + justify-content: center; + } + + .nav__item { + @include effects; + + &:hover { + color: $accent-secondary; + } + } +} diff --git a/src/styles/scss/blocks/page.scss b/src/styles/scss/blocks/page.scss new file mode 100644 index 000000000..56d971e24 --- /dev/null +++ b/src/styles/scss/blocks/page.scss @@ -0,0 +1,52 @@ +.page { + font-family: 'IBM Plex Sans', sans-serif; + font-weight: 500; + font-size: 14px; + line-height: 100%; + + scroll-behavior: smooth; + + &--no-scroll { + overflow: hidden; + } + + &__body { + &::after { + content: ''; + + position: fixed; + + top: 0; + left: 0; + width: 100%; + height: 100vh; + + background: rgba(0, 0, 0, 0.5); + z-index: -1; + + display: none; + } + + &--is-under-menu { + &::after { + z-index: 999; + display: block; + } + } + } + + &__menu { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + + transform: translateY(-100%); + + &--is-open { + transform: translateY(0); + transition: transform 0.3s ease-in-out; + } + } +} diff --git a/src/styles/scss/blocks/subscribe.scss b/src/styles/scss/blocks/subscribe.scss new file mode 100644 index 000000000..c08fe563f --- /dev/null +++ b/src/styles/scss/blocks/subscribe.scss @@ -0,0 +1,132 @@ +.subscribe { + background-image: url('/src/images/pictures/img-4.jpg'); + color: $main-text-light; + + &__wrapper { + @include page-grid; + + padding-block: 82px; + } + + &__title { + grid-column: 1 / -1; + text-align: center; + margin-bottom: 20px; + + @include on-tablet { + grid-column: 2 / -2; + margin-bottom: 16px; + } + + @include on-desktop { + grid-column: 4 / 10; + } + } + + &__text { + grid-column: 1 / -1; + font-size: 18px; + line-height: 150%; + text-align: center; + + margin-bottom: 50px; + + @include on-tablet { + grid-column: 2 / -2; + margin-bottom: 64px; + } + + @include on-desktop { + grid-column: 4 / 10; + margin-bottom: 72px; + } + } + + &__form { + width: 100%; + grid-column: 1 / -1; + margin: 0 auto; + + @include on-tablet { + grid-column: 2 / -2; + } + + @include on-desktop { + grid-column: 4 / 10; + } + } + + &__label { + display: flex; + justify-content: space-between; + height: 50px; + + @include on-tablet { + height: 70px; + gap: 18px; + } + + @include on-desktop { + gap: 30px; + } + } + + &__button { + flex-shrink: 0; + display: block; + content: ''; + width: 50px; + height: 100%; + background-color: $accent-secondary; + background-image: url(/src/images/icons/button-arrow.svg); + background-repeat: no-repeat; + background-size: 24px 24px; + background-position: center; + + @include effects; + &:hover { + background-size: 48px 48px; + } + + @include on-tablet { + width: 70px; + } + } + + &__email { + border: 0; + font-family: Montserrat, sans-serif; + padding: 18px 32px; + width: 100%; + color: $main-text-dark; + font-size: 14px; + background-color: $main-text-light; + + @include effects; + + @include on-tablet { + padding-inline: 24px; + } + + @include on-desktop { + padding-inline: 32px; + } + + &::placeholder { + color: $additional-text; + } + + &:hover { + border: 1px solid $accent-secondary; + border-right: none; + + @include on-tablet { + border-right: 1px solid $accent-secondary; + } + } + + &:focus { + border-width: 2px; + } + } +} diff --git a/src/styles/scss/blocks/top-bar.scss b/src/styles/scss/blocks/top-bar.scss new file mode 100644 index 000000000..df2c2f8ac --- /dev/null +++ b/src/styles/scss/blocks/top-bar.scss @@ -0,0 +1,26 @@ +.top-bar { + display: flex; + flex-direction: row; + align-items: center; + padding-block: 10px; + + @include on-tablet { + @include page-grid; + + padding-block: 15px; + } + + &__logo { + margin: 0 auto; + height: 61px; + width: 55px; + + @include on-tablet { + grid-column: 4 / 6; + } + + @include on-desktop { + grid-column: 7 / 9; + } + } +} diff --git a/src/styles/scss/fonts.scss b/src/styles/scss/fonts.scss new file mode 100644 index 000000000..733968002 --- /dev/null +++ b/src/styles/scss/fonts.scss @@ -0,0 +1,6 @@ +@font-face { + font-family: Roboto, Arial, Helvetica, sans-serif; + src: url('../../fonts/Roboto-Regular-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} diff --git a/src/styles/scss/main.scss b/src/styles/scss/main.scss new file mode 100644 index 000000000..111d7dfe4 --- /dev/null +++ b/src/styles/scss/main.scss @@ -0,0 +1,21 @@ +@import 'utils'; +@import 'fonts'; +@import '../utils/typography'; + +body { + background: $c-gray; +} + +@import 'blocks/page'; +@import 'blocks/header'; +@import 'blocks/top-bar'; +@import 'blocks/button'; +@import 'blocks/container'; +@import 'blocks/menu'; +@import 'blocks/nav'; +@import 'blocks/events'; +@import 'blocks/lection'; +@import 'blocks/gallery'; +@import 'blocks/subscribe'; +@import 'blocks/footer'; +@import 'blocks/icons'; diff --git a/src/styles/scss/utils.scss b/src/styles/scss/utils.scss new file mode 100644 index 000000000..4b2d6aa91 --- /dev/null +++ b/src/styles/scss/utils.scss @@ -0,0 +1,5 @@ +@import '../utils/normalize'; +@import '../utils/vars'; +@import '../utils/mixins'; +@import '../utils/extends'; +@import '../utils/typography'; diff --git a/src/styles/utils/_mixins.scss b/src/styles/utils/_mixins.scss deleted file mode 100644 index 80c79780d..000000000 --- a/src/styles/utils/_mixins.scss +++ /dev/null @@ -1,6 +0,0 @@ -@mixin hover($_property, $_toValue) { - transition: #{$_property} 0.3s; - &:hover { - #{$_property}: $_toValue; - } -} diff --git a/src/styles/utils/_vars.scss b/src/styles/utils/_vars.scss deleted file mode 100644 index aeb006ffb..000000000 --- a/src/styles/utils/_vars.scss +++ /dev/null @@ -1 +0,0 @@ -$c-gray: #eee; diff --git a/src/styles/utils/_extends.scss b/src/styles/utils/extends.scss similarity index 100% rename from src/styles/utils/_extends.scss rename to src/styles/utils/extends.scss diff --git a/src/styles/utils/mixins.scss b/src/styles/utils/mixins.scss new file mode 100644 index 000000000..a9e36f48d --- /dev/null +++ b/src/styles/utils/mixins.scss @@ -0,0 +1,41 @@ +@mixin hover($_property, $_toValue) { + transition: #{$_property} 0.3s; + &:hover { + #{$_property}: $_toValue; + } +} + +@mixin on-tablet { + @media (min-width: $tablet-width) { + @content; + } +} + +@mixin on-desktop { + @media (min-width: $desktop-width) { + @content; + } +} + +@mixin page-grid { + display: grid; + column-gap: 20px; + + --columns: 2; + + grid-template-columns: repeat(var(--columns), 1fr); + + @include on-tablet { + --columns: 6; + + column-gap: 30px; + } + + @include on-desktop { + --columns: 12; + } +} + +@mixin effects { + transition: all $animation-time ease-in; +} diff --git a/src/styles/utils/normalize.scss b/src/styles/utils/normalize.scss new file mode 100644 index 000000000..33814c557 --- /dev/null +++ b/src/styles/utils/normalize.scss @@ -0,0 +1,227 @@ +/* === reset + normalize hybrid (2025) === */ +@layer reset { + /* Base */ + *, + *::before, + *::after { + box-sizing: border-box; + } + * { + margin: 0; + } + + html { + font-size: 16px; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + } + + body { + min-height: 100dvh; + line-height: 1.5; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + main { + display: block; + } + + /* Typography */ + h1, + h2, + h3, + h4, + h5, + h6 { + font: inherit; + } + p, + figure, + blockquote, + dl, + dd { + margin: 0; + } + + b, + strong { + font-weight: bolder; + } + i, + em { + font-style: italic; + } + small { + font-size: 80%; + } + + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + + a { + display: inline-block; + color: inherit; + background: transparent; + text-decoration: none; + -webkit-tap-highlight-color: transparent; + } + + a:focus-visible { + outline: 2px solid currentColor; + outline-offset: 2px; + } + + ::selection { + background: #bcdcff; + color: #000; + } + + /* Lists */ + ul, + ol { + padding: 0; + list-style: none; + } + + /* Media */ + img, + picture, + video, + canvas, + svg { + display: block; + max-width: 100%; + height: auto; + } + + /* Tables */ + table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + } + th, + td { + padding: 0; + } + + /* Forms */ + button, + input, + select, + textarea { + font: inherit; + color: inherit; + margin: 0; + padding: 0; + border: 0; + background: transparent; + } + button, + [role='button'] { + cursor: pointer; + } + :disabled { + cursor: not-allowed; + } + + textarea { + resize: vertical; + } + textarea::placeholder, + input::placeholder { + opacity: 0.6; + } + + input, + textarea, + select { + -webkit-appearance: none; + appearance: none; + border-radius: 0; + } + [type='number']::-webkit-inner-spin-button, + [type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + } + [type='search']::-webkit-search-decoration { + -webkit-appearance: none; + } + + fieldset, + legend { + margin: 0; + padding: 0; + border: 0; + } + + label { + cursor: pointer; + } + + *:focus-visible { + outline: transparent; + } + + /* Autofill fixes */ + input:-webkit-autofill, + input:-webkit-autofill:hover, + input:-webkit-autofill:focus, + textarea:-webkit-autofill, + textarea:-webkit-autofill:hover, + textarea:-webkit-autofill:focus, + select:-webkit-autofill, + select:-webkit-autofill:hover, + select:-webkit-autofill:focus { + -webkit-box-shadow: 0 0 0 1000px transparent inset; + -webkit-text-fill-color: currentColor; + transition: background-color 5000s ease-in-out 0s; + } + + /* Misc */ + hr { + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.12); + } + + [hidden], + template { + display: none; + } + + details { + display: block; + } + summary { + cursor: pointer; + list-style: none; + } + summary::-webkit-details-marker { + display: none; + } + + .visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; + } +} diff --git a/src/styles/utils/typography.scss b/src/styles/utils/typography.scss new file mode 100644 index 000000000..8d792bad9 --- /dev/null +++ b/src/styles/utils/typography.scss @@ -0,0 +1,25 @@ +h1 { + @extend %h1; + + @include on-tablet { + text-align: left; + line-height: 120%; + } +} + +.title { + font-family: Montserrat, sans-serif; + font-size: 36px; + font-weight: 700; + text-align: center; + + @include on-tablet { + text-align: left; + font-size: 48px; + margin-bottom: 43px; + } + + @include on-desktop { + margin-bottom: 56px; + } +} diff --git a/src/styles/utils/vars.scss b/src/styles/utils/vars.scss new file mode 100644 index 000000000..0e7568530 --- /dev/null +++ b/src/styles/utils/vars.scss @@ -0,0 +1,11 @@ +$c-gray: #eee; +$main-text-dark: #0f0e08; +$main-text-light: #fff; +$secondary-text: #4e4e4e; +$additional-text: #687480; +$accent-primary: #1a5a4c; +$accent-secondary: #f14a27; +$tablet-width: 768px; +$desktop-width: 1280px; +$max-content-width: 1440px; +$animation-time: 0.3s;