feat: making a draft, a peer-reviewed first page #1

Merged
elarmethu merged 1 commits from feature/init into main 2026-04-23 12:11:45 +00:00
13 changed files with 6095 additions and 11 deletions

750
assets/css/main.css Normal file
View File

@@ -0,0 +1,750 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
:root {
color-scheme: dark;
}
* {
box-sizing: border-box;
}
html,
body {
background: #121212;
color: #ffffff;
font-family: "Segoe UI", "Segoe UI Variable", "Helvetica Neue", Arial, sans-serif;
min-width: 1200px;
}
body {
line-height: 1;
}
a {
color: inherit;
text-decoration: none;
}
img {
display: block;
max-width: 100%;
}
.container {
width: 100%;
max-width: 1400px;
margin: 0 auto;
padding: 0 24px;
}
.site {
position: relative;
overflow: hidden;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 18px 24px;
border-radius: 14px;
background: #cf1717;
color: #ffffff;
font-size: 16px;
font-weight: 700;
line-height: 24px;
box-shadow: 0 25px 50px rgba(231, 0, 11, 0.5);
border: 0;
cursor: pointer;
}
.btn--small {
padding: 10px 24px;
font-size: 14px;
line-height: 20px;
box-shadow: 0 10px 15px rgba(231, 0, 11, 0.4), 0 4px 6px rgba(231, 0, 11, 0.4);
}
.btn--ghost {
background: rgba(41, 49, 51, 0.6);
border: 2px solid rgba(255, 255, 255, 0.2);
box-shadow: none;
}
.header {
position: fixed;
inset: 0 0 auto;
z-index: 20;
background: rgba(18, 18, 18, 0.95);
border-bottom: 1px solid rgba(207, 23, 23, 0.2);
}
.header__inner {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 72px;
}
.logo {
display: inline-flex;
width: 137px;
height: 30px;
}
.logo img {
width: 100%;
height: 100%;
object-fit: cover;
}
.header__nav {
display: flex;
align-items: center;
gap: 32px;
margin-left: auto;
margin-right: 32px;
}
.header__nav a {
font-size: 14px;
line-height: 20px;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
}
.hero {
position: relative;
min-height: 852px;
padding-top: 72px;
}
.hero__bg {
position: absolute;
inset: 0;
background: linear-gradient(90deg, rgba(18, 18, 18, 0.9) 0%, rgba(18, 18, 18, 0.7) 50%, rgba(0, 0, 0, 0) 100%), url("https://www.figma.com/api/mcp/asset/e5a37fb1-e23a-4258-855e-e6951519202d") center/cover no-repeat;
}
.hero__bg::after {
content: "";
position: absolute;
inset: 0;
background-image: repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.045) 0 1px, transparent 1px 8px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.045) 0 1px, transparent 1px 8px);
mix-blend-mode: soft-light;
}
.hero__content {
position: relative;
z-index: 1;
max-width: 816px;
margin-left: 528px;
padding-top: 104px;
}
.hero h1 {
max-width: 768px;
font-size: 72px;
line-height: 90px;
font-weight: 800;
margin-bottom: 24px;
}
.hero h1 span {
color: #cf1717;
}
.hero p {
max-width: 768px;
font-size: 20px;
line-height: 32.5px;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 32px;
}
.hero__tags {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 28px;
}
.hero__tags li {
padding: 9px 17px;
border-radius: 999px;
border: 1px solid rgba(207, 23, 23, 0.3);
background: rgba(41, 49, 51, 0.6);
font-size: 14px;
line-height: 20px;
font-weight: 600;
white-space: nowrap;
}
.hero__actions {
display: flex;
gap: 16px;
}
.highlights {
background: #293133;
padding: 96px 0;
}
.highlights__grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 24px;
}
.info-card {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
min-height: 178px;
padding: 33px;
}
.info-card h3 {
font-size: 20px;
line-height: 28px;
font-weight: 700;
margin-bottom: 8px;
}
.info-card p {
color: rgba(255, 255, 255, 0.7);
font-size: 16px;
line-height: 24px;
}
.section {
position: relative;
padding: 96px 0;
}
.section--pattern {
background: #1a2124;
}
.section--pattern::before {
content: "";
position: absolute;
inset: 0;
background-image: radial-gradient(circle at 80px 80px, rgba(207, 23, 23, 0.25) 0 2px, transparent 2px 70px), radial-gradient(circle at 120px 120px, rgba(255, 255, 255, 0.06) 0 1px, transparent 1px 48px);
background-size: 320px 320px;
opacity: 0.4;
pointer-events: none;
}
.section > .container {
position: relative;
z-index: 1;
}
.section__head {
margin-bottom: 64px;
text-align: center;
}
.section__head h2 {
font-size: 48px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.section__head p {
font-size: 28px;
line-height: 1;
color: rgba(255, 255, 255, 0.8);
}
.advantages__grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 24px;
}
.feature-card {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
min-height: 162px;
padding: 25px;
position: relative;
}
.feature-card::before {
content: "";
width: 48px;
height: 48px;
border-radius: 14px;
background: rgba(207, 23, 23, 0.16);
border: 1px solid rgba(207, 23, 23, 0.32);
display: block;
margin-bottom: 16px;
}
.feature-card h3 {
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 8px;
}
.feature-card p {
font-size: 20px;
line-height: 1;
color: rgba(255, 255, 255, 0.7);
}
.objects .section__head {
margin-bottom: 64px;
}
.object-card {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 32px;
margin-bottom: 48px;
}
.object-card:last-child {
margin-bottom: 0;
}
.object-card--reverse .object-card__image {
order: 2;
}
.object-card--reverse .object-card__content {
order: 1;
}
.object-card__image {
min-height: 400px;
border-radius: 16px;
background-size: cover;
background-position: center;
}
.object-card__content {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
min-height: 338px;
align-self: center;
padding: 33px;
}
.object-card__content h3 {
font-size: 36px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.object-card__content p {
font-size: 20px;
line-height: 28px;
color: rgba(255, 255, 255, 0.7);
margin-bottom: 24px;
}
.object-card__content ul {
margin-bottom: 24px;
}
.object-card__content li {
position: relative;
padding-left: 14px;
font-size: 20px;
line-height: 28px;
color: rgba(255, 255, 255, 0.8);
}
.object-card__content li + li {
margin-top: 8px;
}
.object-card__content li::before {
content: "";
position: absolute;
left: 0;
top: 12px;
width: 6px;
height: 6px;
border-radius: 50%;
background: #cf1717;
}
.services {
background: #293133;
}
.services__grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 24px;
}
.service-card {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
padding: 33px;
min-height: 260px;
display: flex;
flex-direction: column;
}
.service-card h3 {
font-size: 28px;
line-height: 1.15;
font-weight: 700;
margin-bottom: 12px;
}
.service-card p {
color: rgba(255, 255, 255, 0.7);
font-size: 20px;
line-height: 28px;
margin-bottom: auto;
}
.service-card a {
display: inline-flex;
width: fit-content;
margin-top: 20px;
font-size: 14px;
line-height: 20px;
font-weight: 700;
padding: 10px 20px;
border-radius: 14px;
background: #cf1717;
}
.gallery {
background: #1b2225;
}
.gallery__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 24px;
}
.gallery__item {
aspect-ratio: 16/10;
border-radius: 16px;
background-size: cover;
background-position: center;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.reviews {
background: #1a2023;
}
.reviews__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 32px;
margin-bottom: 64px;
}
.review-card {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
padding: 33px;
min-height: 206px;
}
.review-card p {
font-size: 24px;
line-height: 1.5;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 24px;
}
.review-card strong {
display: block;
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 8px;
}
.review-card span {
font-size: 20px;
line-height: 1;
color: rgba(255, 255, 255, 0.7);
}
.stats {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 32px;
}
.stats article {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
min-height: 144px;
padding: 32px;
text-align: center;
}
.stats strong {
display: block;
font-size: 48px;
line-height: 1;
font-weight: 700;
color: #cf1717;
margin-bottom: 8px;
}
.stats span {
font-size: 24px;
line-height: 1;
}
.booking {
background: #1b2225;
}
.booking__wrap {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
}
.booking h2 {
font-size: 64px;
line-height: 1;
font-weight: 700;
margin-bottom: 24px;
}
.booking p {
font-size: 28px;
line-height: 1.4;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 32px;
}
.booking form {
display: flex;
flex-direction: column;
gap: 16px;
}
.booking input {
width: 100%;
height: 58px;
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(18, 18, 18, 0.35);
border-radius: 14px;
padding: 0 24px;
color: #ffffff;
font-size: 20px;
line-height: 22px;
}
.booking input::placeholder {
color: rgba(255, 255, 255, 0.75);
}
.booking form .btn {
width: 100%;
margin-top: 4px;
height: 56px;
padding: 0 24px;
}
.contacts-card,
.hours-card {
background: rgba(18, 18, 18, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);
padding: 33px;
}
.contacts-card {
margin-bottom: 32px;
}
.contacts-card h3 {
font-size: 32px;
line-height: 1;
font-weight: 700;
margin-bottom: 24px;
}
.contacts-card ul {
display: flex;
flex-direction: column;
gap: 16px;
}
.contacts-card li strong {
display: block;
font-size: 24px;
line-height: 1;
margin-bottom: 8px;
}
.contacts-card li span {
font-size: 20px;
line-height: 1.5;
color: rgba(255, 255, 255, 0.8);
}
.hours-card h4 {
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.hours-card p {
margin: 0;
font-size: 24px;
line-height: 1;
}
.footer {
background: #12161a;
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding: 49px 0;
}
.footer__top {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 32px;
margin-bottom: 32px;
}
.footer__col h4 {
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.footer__col p,
.footer__col span,
.footer__col a {
display: block;
font-size: 20px;
line-height: 1;
color: rgba(255, 255, 255, 0.8);
}
.footer__col p {
margin-top: 16px;
line-height: 1.4;
}
.footer__col a + a,
.footer__col span + span {
margin-top: 8px;
}
.footer__socials {
display: flex;
gap: 12px;
}
.footer__socials a {
width: 40px;
height: 40px;
border-radius: 10px;
border: 1px solid rgba(255, 255, 255, 0.1);
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 700;
}
.footer__bottom {
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding-top: 24px;
display: flex;
align-items: center;
justify-content: space-between;
}
.footer__bottom span,
.footer__bottom a {
font-size: 20px;
line-height: 1;
color: rgba(255, 255, 255, 0.7);
}
.footer__bottom div {
display: flex;
gap: 24px;
}

1
assets/css/main.min.css vendored Normal file

File diff suppressed because one or more lines are too long

674
assets/scss/_base.scss Normal file
View File

@@ -0,0 +1,674 @@
@use "vars" as *;
@use "mixins" as *;
* {
box-sizing: border-box;
}
html,
body {
background: $color-bg;
color: $color-text;
font-family: $font-main;
min-width: 1200px;
}
body {
line-height: 1;
}
a {
color: inherit;
text-decoration: none;
}
img {
display: block;
max-width: 100%;
}
.container {
@include container;
padding: 0 $container-padding;
}
.site {
position: relative;
overflow: hidden;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 18px 24px;
border-radius: $radius-sm;
background: $color-accent;
color: $color-text;
font-size: 16px;
font-weight: 700;
line-height: 24px;
box-shadow: $shadow-accent;
border: 0;
cursor: pointer;
}
.btn--small {
padding: 10px 24px;
font-size: 14px;
line-height: 20px;
box-shadow: 0 10px 15px rgba(231, 0, 11, 0.4), 0 4px 6px rgba(231, 0, 11, 0.4);
}
.btn--ghost {
background: rgba(41, 49, 51, 0.6);
border: 2px solid rgba(255, 255, 255, 0.2);
box-shadow: none;
}
.header {
position: fixed;
inset: 0 0 auto;
z-index: 20;
background: rgba(18, 18, 18, 0.95);
border-bottom: 1px solid rgba(207, 23, 23, 0.2);
}
.header__inner {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 72px;
}
.logo {
display: inline-flex;
width: 137px;
height: 30px;
}
.logo img {
width: 100%;
height: 100%;
object-fit: cover;
}
.header__nav {
display: flex;
align-items: center;
gap: 32px;
margin-left: auto;
margin-right: 32px;
}
.header__nav a {
font-size: 14px;
line-height: 20px;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
}
.hero {
position: relative;
min-height: 852px;
padding-top: 72px;
}
.hero__bg {
position: absolute;
inset: 0;
background:
linear-gradient(90deg, rgba(18, 18, 18, 0.9) 0%, rgba(18, 18, 18, 0.7) 50%, rgba(0, 0, 0, 0) 100%),
url("https://www.figma.com/api/mcp/asset/e5a37fb1-e23a-4258-855e-e6951519202d") center/cover no-repeat;
}
.hero__bg::after {
content: "";
position: absolute;
inset: 0;
background-image: repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.045) 0 1px, transparent 1px 8px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.045) 0 1px, transparent 1px 8px);
mix-blend-mode: soft-light;
}
.hero__content {
position: relative;
z-index: 1;
max-width: 816px;
margin-left: 528px;
padding-top: 104px;
}
.hero h1 {
max-width: 768px;
font-size: 72px;
line-height: 90px;
font-weight: 800;
margin-bottom: 24px;
}
.hero h1 span {
color: $color-accent;
}
.hero p {
max-width: 768px;
font-size: 20px;
line-height: 32.5px;
color: $color-text-soft;
margin-bottom: 32px;
}
.hero__tags {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 28px;
}
.hero__tags li {
padding: 9px 17px;
border-radius: 999px;
border: 1px solid $color-border-strong;
background: rgba(41, 49, 51, 0.6);
font-size: 14px;
line-height: 20px;
font-weight: 600;
white-space: nowrap;
}
.hero__actions {
display: flex;
gap: 16px;
}
.highlights {
background: $color-surface;
padding: 96px 0;
}
.highlights__grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 24px;
}
.info-card {
@include card;
min-height: 178px;
padding: 33px;
}
.info-card h3 {
font-size: 20px;
line-height: 28px;
font-weight: 700;
margin-bottom: 8px;
}
.info-card p {
color: $color-text-muted;
font-size: 16px;
line-height: 24px;
}
.section {
position: relative;
padding: 96px 0;
}
.section--pattern {
background: #1a2124;
}
.section--pattern::before {
content: "";
position: absolute;
inset: 0;
background-image: radial-gradient(circle at 80px 80px, rgba(207, 23, 23, 0.25) 0 2px, transparent 2px 70px), radial-gradient(circle at 120px 120px, rgba(255, 255, 255, 0.06) 0 1px, transparent 1px 48px);
background-size: 320px 320px;
opacity: 0.4;
pointer-events: none;
}
.section > .container {
position: relative;
z-index: 1;
}
.section__head {
margin-bottom: 64px;
text-align: center;
}
.section__head h2 {
font-size: 48px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.section__head p {
font-size: 28px;
line-height: 1;
color: $color-text-soft;
}
.advantages__grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 24px;
}
.feature-card {
@include card;
min-height: 162px;
padding: 25px;
position: relative;
}
.feature-card::before {
content: "";
width: 48px;
height: 48px;
border-radius: 14px;
background: rgba(207, 23, 23, 0.16);
border: 1px solid rgba(207, 23, 23, 0.32);
display: block;
margin-bottom: 16px;
}
.feature-card h3 {
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 8px;
}
.feature-card p {
font-size: 20px;
line-height: 1;
color: $color-text-muted;
}
.objects .section__head {
margin-bottom: 64px;
}
.object-card {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 32px;
margin-bottom: 48px;
}
.object-card:last-child {
margin-bottom: 0;
}
.object-card--reverse .object-card__image {
order: 2;
}
.object-card--reverse .object-card__content {
order: 1;
}
.object-card__image {
min-height: 400px;
border-radius: $radius-md;
background-size: cover;
background-position: center;
}
.object-card__content {
@include card;
min-height: 338px;
align-self: center;
padding: 33px;
}
.object-card__content h3 {
font-size: 36px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.object-card__content p {
font-size: 20px;
line-height: 28px;
color: $color-text-muted;
margin-bottom: 24px;
}
.object-card__content ul {
margin-bottom: 24px;
}
.object-card__content li {
position: relative;
padding-left: 14px;
font-size: 20px;
line-height: 28px;
color: $color-text-soft;
}
.object-card__content li + li {
margin-top: 8px;
}
.object-card__content li::before {
content: "";
position: absolute;
left: 0;
top: 12px;
width: 6px;
height: 6px;
border-radius: 50%;
background: $color-accent;
}
.services {
background: $color-surface;
}
.services__grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 24px;
}
.service-card {
@include card;
padding: 33px;
min-height: 260px;
display: flex;
flex-direction: column;
}
.service-card h3 {
font-size: 28px;
line-height: 1.15;
font-weight: 700;
margin-bottom: 12px;
}
.service-card p {
color: $color-text-muted;
font-size: 20px;
line-height: 28px;
margin-bottom: auto;
}
.service-card a {
display: inline-flex;
width: fit-content;
margin-top: 20px;
font-size: 14px;
line-height: 20px;
font-weight: 700;
padding: 10px 20px;
border-radius: $radius-sm;
background: $color-accent;
}
.gallery {
background: #1b2225;
}
.gallery__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 24px;
}
.gallery__item {
aspect-ratio: 16 / 10;
border-radius: $radius-md;
background-size: cover;
background-position: center;
border: 1px solid $color-border;
}
.reviews {
background: #1a2023;
}
.reviews__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 32px;
margin-bottom: 64px;
}
.review-card {
@include card;
padding: 33px;
min-height: 206px;
}
.review-card p {
font-size: 24px;
line-height: 1.5;
color: $color-text-soft;
margin-bottom: 24px;
}
.review-card strong {
display: block;
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 8px;
}
.review-card span {
font-size: 20px;
line-height: 1;
color: $color-text-muted;
}
.stats {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 32px;
}
.stats article {
@include card;
min-height: 144px;
padding: 32px;
text-align: center;
}
.stats strong {
display: block;
font-size: 48px;
line-height: 1;
font-weight: 700;
color: $color-accent;
margin-bottom: 8px;
}
.stats span {
font-size: 24px;
line-height: 1;
}
.booking {
background: #1b2225;
}
.booking__wrap {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
}
.booking h2 {
font-size: 64px;
line-height: 1;
font-weight: 700;
margin-bottom: 24px;
}
.booking p {
font-size: 28px;
line-height: 1.4;
color: $color-text-soft;
margin-bottom: 32px;
}
.booking form {
display: flex;
flex-direction: column;
gap: 16px;
}
.booking input {
width: 100%;
height: 58px;
border: 1px solid $color-border;
background: rgba(18, 18, 18, 0.35);
border-radius: 14px;
padding: 0 24px;
color: $color-text;
font-size: 20px;
line-height: 22px;
}
.booking input::placeholder {
color: rgba(255, 255, 255, 0.75);
}
.booking form .btn {
width: 100%;
margin-top: 4px;
height: 56px;
padding: 0 24px;
}
.contacts-card,
.hours-card {
@include card;
padding: 33px;
}
.contacts-card {
margin-bottom: 32px;
}
.contacts-card h3 {
font-size: 32px;
line-height: 1;
font-weight: 700;
margin-bottom: 24px;
}
.contacts-card ul {
display: flex;
flex-direction: column;
gap: 16px;
}
.contacts-card li strong {
display: block;
font-size: 24px;
line-height: 1;
margin-bottom: 8px;
}
.contacts-card li span {
font-size: 20px;
line-height: 1.5;
color: $color-text-soft;
}
.hours-card h4 {
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.hours-card p {
margin: 0;
font-size: 24px;
line-height: 1;
}
.footer {
background: #12161a;
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding: 49px 0;
}
.footer__top {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 32px;
margin-bottom: 32px;
}
.footer__col h4 {
font-size: 24px;
line-height: 1;
font-weight: 700;
margin-bottom: 16px;
}
.footer__col p,
.footer__col span,
.footer__col a {
display: block;
font-size: 20px;
line-height: 1;
color: $color-text-soft;
}
.footer__col p {
margin-top: 16px;
line-height: 1.4;
}
.footer__col a + a,
.footer__col span + span {
margin-top: 8px;
}
.footer__socials {
display: flex;
gap: 12px;
}
.footer__socials a {
width: 40px;
height: 40px;
border-radius: 10px;
border: 1px solid $color-border;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 700;
}
.footer__bottom {
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding-top: 24px;
display: flex;
align-items: center;
justify-content: space-between;
}
.footer__bottom span,
.footer__bottom a {
font-size: 20px;
line-height: 1;
color: rgba(255, 255, 255, 0.7);
}
.footer__bottom div {
display: flex;
gap: 24px;
}

3
assets/scss/_fonts.scss Normal file
View File

@@ -0,0 +1,3 @@
:root {
color-scheme: dark;
}

17
assets/scss/_mixin.scss Normal file
View File

@@ -0,0 +1,17 @@
@use "vars" as *;
@mixin container{
width: 100%;
max-width: $container;
margin: 0 auto;
@media only screen and (max-width: 1400px){
padding: 0 20px;
}
}
@mixin image{
width: 100%;
height: 100%;
object-fit: contain;
}

14
assets/scss/_mixins.scss Normal file
View File

@@ -0,0 +1,14 @@
@use "vars" as *;
@mixin container {
width: 100%;
max-width: $container;
margin: 0 auto;
}
@mixin card {
background: rgba(18, 18, 18, 0.4);
border: 1px solid $color-border;
border-radius: $radius-md;
box-shadow: $shadow-card;
}

47
assets/scss/_reset.scss Normal file
View File

@@ -0,0 +1,47 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body { line-height: 1; }
ol, ul { list-style: none; }
blockquote, q { quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

21
assets/scss/_vars.scss Normal file
View File

@@ -0,0 +1,21 @@
$container: 1400px;
$container-padding: 24px;
$font-main: "Segoe UI", "Segoe UI Variable", "Helvetica Neue", Arial, sans-serif;
$color-bg: #121212;
$color-surface: #293133;
$color-surface-2: #20272a;
$color-border: rgba(255, 255, 255, 0.1);
$color-border-strong: rgba(207, 23, 23, 0.3);
$color-text: #ffffff;
$color-text-muted: rgba(255, 255, 255, 0.7);
$color-text-soft: rgba(255, 255, 255, 0.8);
$color-accent: #cf1717;
$radius-sm: 14px;
$radius-md: 16px;
$radius-lg: 20px;
$shadow-accent: 0 25px 50px rgba(231, 0, 11, 0.5);
$shadow-card: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);

5
assets/scss/main.scss Normal file
View File

@@ -0,0 +1,5 @@
@use "reset";
@use "fonts";
@use "vars" as *;
@use "mixins" as *;
@use "base";

View File

@@ -1,11 +1,312 @@
<!DOCTYPE html>
<html lang="en">
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OlimpArena</title>
<link rel="stylesheet" href="./assets/css/main.min.css">
</head>
<body>
<h1>OlimpArena IN DEV</h1>
<div class="site">
<header class="header" id="top">
<div class="container header__inner">
<a class="logo" href="#top" aria-label="OlimpArena">
<img src="https://www.figma.com/api/mcp/asset/8a836c8e-ef3b-4a4c-80e1-57e33b81f3f2" alt="OlimpArena">
</a>
<nav class="header__nav" aria-label="Основная навигация">
<a href="#objects">Объекты</a>
<a href="#services">Услуги</a>
<a href="#gallery">Галерея</a>
<a href="#contacts">Контакты</a>
</nav>
<a class="btn btn--small" href="#booking">Забронировать</a>
</div>
</header>
<main>
<section class="hero">
<div class="hero__bg" aria-hidden="true"></div>
<div class="container hero__content">
<h1>
Современная
<span>спортивная арена</span>
в центре Москвы
</h1>
<p>
Два ледовых поля 56×26 м и полный комплекс для тренировок —
15 минут пешком от метро Волгоградский проспект
</p>
<ul class="hero__tags">
<li>2 ледовых поля 56×26 м</li>
<li>Универсальный зал</li>
<li>Фитнес-центр</li>
<li>Апарт-комплекс на 150+ спортсменов</li>
</ul>
<div class="hero__actions">
<a class="btn" href="#booking">Забронировать лед / зал</a>
<a class="btn btn--ghost" href="#">Посмотреть расписание</a>
</div>
</div>
</section>
<section class="highlights">
<div class="container highlights__grid">
<article class="info-card">
<h3>Развитая спортивная инфраструктура</h3>
<p>Всё для тренировок в одном месте</p>
</article>
<article class="info-card">
<h3>Идеальная транспортная доступность</h3>
<p>15 минут пешком от метро</p>
</article>
<article class="info-card">
<h3>Комфортные условия</h3>
<p>Проживание и питание на территории</p>
</article>
<article class="info-card">
<h3>Профессиональный сервис</h3>
<p>Современное оборудование и команда</p>
</article>
</div>
</section>
<section class="section section--pattern advantages">
<div class="container">
<header class="section__head">
<h2>Преимущества</h2>
<p>Всё для профессионального спорта и активного отдыха</p>
</header>
<div class="advantages__grid">
<article class="feature-card"><h3>Два ледовых поля</h3><p>Профессиональные поля 56×26 м</p></article>
<article class="feature-card"><h3>Универсальный зал</h3><p>Для любых тренировок</p></article>
<article class="feature-card"><h3>Фитнес-центр</h3><p>Новейшее оборудование</p></article>
<article class="feature-card"><h3>Зал хореографии</h3><p>Для фигуристов и танцоров</p></article>
<article class="feature-card"><h3>Зал единоборств</h3><p>Оборудованный татами</p></article>
<article class="feature-card"><h3>Апарт-комплекс</h3><p>150+ мест для спортсменов</p></article>
<article class="feature-card"><h3>Ресторан</h3><p>Спортивное питание</p></article>
<article class="feature-card"><h3>Отличная локация</h3><p>15 минут от метро</p></article>
</div>
</div>
</section>
<section class="section section--pattern objects" id="objects">
<div class="container">
<header class="section__head">
<h2>Наши объекты</h2>
<p>Профессиональная инфраструктура для ваших целей</p>
</header>
<article class="object-card">
<div class="object-card__image" style="background-image: linear-gradient(0deg, rgba(18,18,18,.3), rgba(18,18,18,.3)), url('https://images.unsplash.com/photo-1515703407324-5f753afd8be8?auto=format&fit=crop&w=1400&q=80');"></div>
<div class="object-card__content">
<h3>Ледовые поля</h3>
<p>Два профессиональных поля 56×26 м для хоккея, фигурного катания и массовых катаний.</p>
<ul>
<li>56×26 м, профессиональное покрытие и LED-освещение</li>
<li>Хоккей, фигурное катание, массовые катания</li>
</ul>
<a class="btn btn--small" href="#booking">Забронировать</a>
</div>
</article>
<article class="object-card object-card--reverse">
<div class="object-card__image" style="background-image: linear-gradient(0deg, rgba(18,18,18,.3), rgba(18,18,18,.3)), url('https://images.unsplash.com/photo-1544717305-2782549b5136?auto=format&fit=crop&w=1400&q=80');"></div>
<div class="object-card__content">
<h3>Универсальный зал</h3>
<p>Многофункциональное пространство для командных и индивидуальных тренировок.</p>
<ul>
<li>Полноразмерный зал с современным покрытием</li>
<li>Баскетбол, волейбол, мини-футбол, ОФП</li>
</ul>
<a class="btn btn--small" href="#booking">Забронировать</a>
</div>
</article>
<article class="object-card">
<div class="object-card__image" style="background-image: linear-gradient(0deg, rgba(18,18,18,.3), rgba(18,18,18,.3)), url('https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?auto=format&fit=crop&w=1400&q=80');"></div>
<div class="object-card__content">
<h3>Фитнес-центр</h3>
<p>Современная зона для силовых и функциональных тренировок.</p>
<ul>
<li>Кардио и силовое оборудование нового поколения</li>
<li>Персональные и групповые тренировки</li>
</ul>
<a class="btn btn--small" href="#booking">Забронировать</a>
</div>
</article>
<article class="object-card object-card--reverse">
<div class="object-card__image" style="background-image: linear-gradient(0deg, rgba(18,18,18,.3), rgba(18,18,18,.3)), url('https://images.unsplash.com/photo-1571902943202-507ec2618e8f?auto=format&fit=crop&w=1400&q=80');"></div>
<div class="object-card__content">
<h3>Апарт-комплекс</h3>
<p>Комфортное проживание спортсменов и команд на территории комплекса.</p>
<ul>
<li>150+ мест с современной инфраструктурой</li>
<li>Кухня, прачечная, зоны отдыха и восстановления</li>
</ul>
<a class="btn btn--small" href="#booking">Забронировать</a>
</div>
</article>
<article class="object-card">
<div class="object-card__image" style="background-image: linear-gradient(0deg, rgba(18,18,18,.3), rgba(18,18,18,.3)), url('https://images.unsplash.com/photo-1556909212-d5b604d0c90d?auto=format&fit=crop&w=1400&q=80');"></div>
<div class="object-card__content">
<h3>Ресторан</h3>
<p>Полноценное спортивное питание и меню для командных сборов.</p>
<ul>
<li>Баланс БЖУ, восстановительные рационы</li>
<li>Обслуживание турниров и корпоративных мероприятий</li>
</ul>
<a class="btn btn--small" href="#booking">Забронировать</a>
</div>
</article>
</div>
</section>
<section class="section services" id="services">
<div class="container">
<header class="section__head">
<h2>Услуги</h2>
<p>Полный цикл сопровождения тренировочного процесса</p>
</header>
<div class="services__grid">
<article class="service-card"><h3>Аренда площадок</h3><p>Лед, залы и специализированные пространства под задачи команды.</p><a href="#booking">Подробнее</a></article>
<article class="service-card"><h3>Тренировочные сборы</h3><p>Проживание, питание и логистика в рамках одного комплекса.</p><a href="#booking">Подробнее</a></article>
<article class="service-card"><h3>Турниры и мероприятия</h3><p>Организация соревнований, матчей и корпоративных ивентов.</p><a href="#booking">Подробнее</a></article>
<article class="service-card"><h3>Реабилитация и ОФП</h3><p>Фитнес, восстановление и индивидуальные программы подготовки.</p><a href="#booking">Подробнее</a></article>
</div>
</div>
</section>
<section class="section gallery" id="gallery">
<div class="container">
<header class="section__head">
<h2>Галерея</h2>
<p>Пространства OlimpArena в деталях</p>
</header>
<div class="gallery__grid">
<div class="gallery__item" style="background-image:url('https://images.unsplash.com/photo-1541534741688-6078c6bfb5c5?auto=format&fit=crop&w=1000&q=80');"></div>
<div class="gallery__item" style="background-image:url('https://images.unsplash.com/photo-1546519638-68e109498ffc?auto=format&fit=crop&w=1000&q=80');"></div>
<div class="gallery__item" style="background-image:url('https://images.unsplash.com/photo-1517466787929-bc90951d0974?auto=format&fit=crop&w=1000&q=80');"></div>
<div class="gallery__item" style="background-image:url('https://images.unsplash.com/photo-1593079831268-3381b0db4a77?auto=format&fit=crop&w=1000&q=80');"></div>
<div class="gallery__item" style="background-image:url('https://images.unsplash.com/photo-1571019613914-85f342c55f5f?auto=format&fit=crop&w=1000&q=80');"></div>
<div class="gallery__item" style="background-image:url('https://images.unsplash.com/photo-1623874514711-0f321325f318?auto=format&fit=crop&w=1000&q=80');"></div>
</div>
</div>
</section>
<section class="section reviews">
<div class="container">
<header class="section__head">
<h2>Отзывы</h2>
<p>Что говорят о нас спортсмены и тренеры</p>
</header>
<div class="reviews__grid">
<article class="review-card">
<p>"Лучшие ледовые условия в Москве. Качество льда на высочайшем уровне, всё организовано профессионально."</p>
<strong>Александр Иванов</strong>
<span>Тренер хоккейной школы</span>
</article>
<article class="review-card">
<p>"Отличный комплекс для тренировок. Залы хореографии и фитнеса действительно помогают прогрессировать быстрее."</p>
<strong>Елена Петрова</strong>
<span>Фигуристка</span>
</article>
<article class="review-card">
<p>"Проводим здесь турниры уже второй год. Профессиональный подход команды и высокая готовность площадок."</p>
<strong>Дмитрий Соколов</strong>
<span>Организатор турниров</span>
</article>
</div>
<div class="stats">
<article><strong>150+</strong><span>Мест для проживания</span></article>
<article><strong>2</strong><span>Профессиональных ледовых поля</span></article>
<article><strong>10</strong><span>Оборудованных раздевалок</span></article>
</div>
</div>
</section>
<section class="section booking" id="booking">
<div class="container booking__wrap">
<div class="booking__form">
<h2>Забронировать время</h2>
<p>Заполните форму, и мы свяжемся с вами в ближайшее время для подтверждения заявки.</p>
<form action="#" method="post">
<label>
<input type="text" name="sport" placeholder="Вид спорта">
</label>
<label>
<input type="text" name="date" placeholder="Желаемая дата">
</label>
<label>
<input type="text" name="name" placeholder="Ваше имя">
</label>
<label>
<input type="tel" name="phone" placeholder="Телефон">
</label>
<button class="btn" type="submit">Отправить заявку</button>
</form>
</div>
<div class="booking__contacts" id="contacts">
<div class="contacts-card">
<h3>Контакты</h3>
<ul>
<li><strong>Адрес</strong><span>Москва, в пределах ТТК<br>15 минут от м. Волгоградский проспект</span></li>
<li><strong>Телефон</strong><span>+7 (495) 123-45-67</span></li>
<li><strong>Email</strong><span>info@olimparena.ru</span></li>
</ul>
</div>
<div class="hours-card">
<h4>Режим работы</h4>
<p>Ежедневно: 06:00 — 23:00</p>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer__top">
<div class="footer__col">
<a class="logo" href="#top" aria-label="OlimpArena">
<img src="https://www.figma.com/api/mcp/asset/8a836c8e-ef3b-4a4c-80e1-57e33b81f3f2" alt="OlimpArena">
</a>
<p>Современный спортивный комплекс в центре Москвы</p>
</div>
<div class="footer__col">
<h4>Навигация</h4>
<a href="#objects">Объекты</a>
<a href="#services">Услуги</a>
<a href="#gallery">Галерея</a>
<a href="#contacts">Контакты</a>
</div>
<div class="footer__col">
<h4>Контакты</h4>
<span>+7 (495) 123-45-67</span>
<span>info@olimparena.ru</span>
<span>Москва, ТТК</span>
</div>
<div class="footer__col">
<h4>Социальные сети</h4>
<div class="footer__socials">
<a href="#" aria-label="Telegram">Tg</a>
<a href="#" aria-label="VK">Vk</a>
</div>
</div>
</div>
<div class="footer__bottom">
<span>© 2026 OlimpArena. Все права защищены.</span>
<div>
<a href="#">Политика конфиденциальности</a>
<a href="#">Условия использования</a>
</div>
</div>
</div>
</footer>
</div>
</body>
</html>

4219
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

26
package.json Normal file
View File

@@ -0,0 +1,26 @@
{
"name": "olymparena",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"scss:build": "sass assets/scss/main.scss assets/css/main.css --no-source-map",
"css:minify": "postcss assets/css/main.css -o assets/css/main.min.css",
"css:build": "npm-run-all scss:build css:minify",
"scss:watch": "sass --watch assets/scss:assets/css --no-source-map",
"css:watch": "postcss assets/css/main.css -o assets/css/main.min.css --watch",
"dev": "npm-run-all --parallel scss:watch css:watch"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"devDependencies": {
"autoprefixer": "^10.4.27",
"cssnano": "^7.1.2",
"npm-run-all": "^4.1.5",
"postcss": "^8.5.6",
"postcss-cli": "^11.0.1",
"sass": "^1.97.3"
}
}

6
postcss.config.cjs Normal file
View File

@@ -0,0 +1,6 @@
module.exports = {
plugins: [
require('autoprefixer'),
require('cssnano')({ preset: 'default' })
]
};