поправил мобильную верстку

This commit is contained in:
Lobstervova
2026-03-31 23:41:56 +03:00
parent a080304b00
commit daa96f8480
62 changed files with 772 additions and 14082 deletions

View File

@@ -127,3 +127,16 @@ footer {
background: var(--love-red); background: var(--love-red);
transform: translateY(-3px); transform: translateY(-3px);
} }
@media (max-width: 767px) {
.hero-title {
font-size: 2rem;
}
.filter-card {
padding: 15px;
}
.filter-btn {
padding: 7px 14px;
margin: 3px;
}
}

View File

@@ -1,5 +1,53 @@
@import "fonts.css"; @import "fonts.css";
:root {
--tennis-green: #2ecc71;
--tennis-orange: #e67e22;
--tennis-dark: #2c3e50;
}
/* ── Global button ── */
.btn-tennis {
background: var(--tennis-green, #2ecc71) !important;
color: #fff !important;
border: none;
border-radius: 25px;
padding: 10px 28px;
font-weight: 700;
transition: background 0.2s, transform 0.1s;
}
.btn-tennis:hover {
background: #27ae60;
color: #fff;
transform: translateY(-1px);
}
/* ── Footer ── */
footer {
background: #1a252f;
color: rgba(255,255,255,0.8);
padding: 60px 0 0;
}
footer .footer-brand { font-size: 1.5rem; font-weight: 800; color: #fff; }
footer .footer-heading { font-size: 0.8rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,255,255,0.5); margin-bottom: 16px; }
footer .footer-link { color: rgba(255,255,255,0.7); text-decoration: none; display: block; margin-bottom: 8px; font-size: 0.9rem; transition: color 0.2s; }
footer .footer-link:hover { color: #fff; }
footer .footer-bottom { border-top: 1px solid rgba(255,255,255,0.1); padding: 20px 0; margin-top: 40px; font-size: 0.85rem; color: rgba(255,255,255,0.5); }
footer .social-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
border-radius: 50%;
background: rgba(255,255,255,0.1);
color: rgba(255,255,255,0.8);
font-size: 1rem;
text-decoration: none;
transition: background 0.2s, color 0.2s;
}
footer .social-icon:hover { background: var(--tennis-green, #2ecc71); color: #fff; }
.modal-section-label { .modal-section-label {
font-size: 0.68rem; font-size: 0.68rem;
font-weight: 700; font-weight: 700;

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap Grid v5.3.8 (https://getbootstrap.com/) * Bootstrap Grid v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
.container, .container,
@@ -73,7 +73,7 @@
} }
.col { .col {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-auto > * { .row-cols-auto > * {
@@ -282,7 +282,7 @@
@media (min-width: 576px) { @media (min-width: 576px) {
.col-sm { .col-sm {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-sm-auto > * { .row-cols-sm-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -451,7 +451,7 @@
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.col-md { .col-md {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-md-auto > * { .row-cols-md-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -620,7 +620,7 @@
} }
@media (min-width: 992px) { @media (min-width: 992px) {
.col-lg { .col-lg {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-lg-auto > * { .row-cols-lg-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -789,7 +789,7 @@
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.col-xl { .col-xl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xl-auto > * { .row-cols-xl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -958,7 +958,7 @@
} }
@media (min-width: 1400px) { @media (min-width: 1400px) {
.col-xxl { .col-xxl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xxl-auto > * { .row-cols-xxl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap Grid v5.3.8 (https://getbootstrap.com/) * Bootstrap Grid v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
.container, .container,
@@ -73,7 +73,7 @@
} }
.col { .col {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-auto > * { .row-cols-auto > * {
@@ -282,7 +282,7 @@
@media (min-width: 576px) { @media (min-width: 576px) {
.col-sm { .col-sm {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-sm-auto > * { .row-cols-sm-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -451,7 +451,7 @@
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.col-md { .col-md {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-md-auto > * { .row-cols-md-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -620,7 +620,7 @@
} }
@media (min-width: 992px) { @media (min-width: 992px) {
.col-lg { .col-lg {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-lg-auto > * { .row-cols-lg-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -789,7 +789,7 @@
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.col-xl { .col-xl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xl-auto > * { .row-cols-xl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -958,7 +958,7 @@
} }
@media (min-width: 1400px) { @media (min-width: 1400px) {
.col-xxl { .col-xxl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xxl-auto > * { .row-cols-xxl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap Reboot v5.3.8 (https://getbootstrap.com/) * Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root, :root,
@@ -516,8 +516,8 @@ legend {
width: 100%; width: 100%;
padding: 0; padding: 0;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw); font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
legend { legend {
@@ -546,10 +546,6 @@ legend + * {
-webkit-appearance: textfield; -webkit-appearance: textfield;
outline-offset: -2px; outline-offset: -2px;
} }
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
/* rtl:raw: /* rtl:raw:
[type="tel"], [type="tel"],

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap Reboot v5.3.8 (https://getbootstrap.com/) * Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root, :root,
@@ -516,8 +516,8 @@ legend {
width: 100%; width: 100%;
padding: 0; padding: 0;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw); font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
legend { legend {
@@ -546,10 +546,6 @@ legend + * {
-webkit-appearance: textfield; -webkit-appearance: textfield;
outline-offset: -2px; outline-offset: -2px;
} }
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
[type="tel"], [type="tel"],
[type="url"], [type="url"],

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap Utilities v5.3.8 (https://getbootstrap.com/) * Bootstrap Utilities v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root, :root,
@@ -519,10 +519,6 @@
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important; position: absolute !important;
} }
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after { .stretched-link::after {
position: absolute; position: absolute;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap Utilities v5.3.8 (https://getbootstrap.com/) * Bootstrap Utilities v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root, :root,
@@ -519,10 +519,6 @@
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important; position: absolute !important;
} }
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after { .stretched-link::after {
position: absolute; position: absolute;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
@charset "UTF-8"; @charset "UTF-8";
/*! /*!
* Bootstrap v5.3.8 (https://getbootstrap.com/) * Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root, :root,
@@ -517,8 +517,8 @@ legend {
width: 100%; width: 100%;
padding: 0; padding: 0;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw); font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
legend { legend {
@@ -547,10 +547,6 @@ legend + * {
-webkit-appearance: textfield; -webkit-appearance: textfield;
outline-offset: -2px; outline-offset: -2px;
} }
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
/* rtl:raw: /* rtl:raw:
[type="tel"], [type="tel"],
@@ -605,9 +601,9 @@ progress {
} }
.display-1 { .display-1 {
font-size: calc(1.625rem + 4.5vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.625rem + 4.5vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-1 { .display-1 {
@@ -616,9 +612,9 @@ progress {
} }
.display-2 { .display-2 {
font-size: calc(1.575rem + 3.9vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.575rem + 3.9vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-2 { .display-2 {
@@ -627,9 +623,9 @@ progress {
} }
.display-3 { .display-3 {
font-size: calc(1.525rem + 3.3vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.525rem + 3.3vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-3 { .display-3 {
@@ -638,9 +634,9 @@ progress {
} }
.display-4 { .display-4 {
font-size: calc(1.475rem + 2.7vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.475rem + 2.7vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-4 { .display-4 {
@@ -649,9 +645,9 @@ progress {
} }
.display-5 { .display-5 {
font-size: calc(1.425rem + 2.1vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.425rem + 2.1vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-5 { .display-5 {
@@ -660,9 +656,9 @@ progress {
} }
.display-6 { .display-6 {
font-size: calc(1.375rem + 1.5vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.375rem + 1.5vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-6 { .display-6 {
@@ -807,7 +803,7 @@ progress {
} }
.col { .col {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-auto > * { .row-cols-auto > * {
@@ -1016,7 +1012,7 @@ progress {
@media (min-width: 576px) { @media (min-width: 576px) {
.col-sm { .col-sm {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-sm-auto > * { .row-cols-sm-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1185,7 +1181,7 @@ progress {
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.col-md { .col-md {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-md-auto > * { .row-cols-md-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1354,7 +1350,7 @@ progress {
} }
@media (min-width: 992px) { @media (min-width: 992px) {
.col-lg { .col-lg {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-lg-auto > * { .row-cols-lg-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1523,7 +1519,7 @@ progress {
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.col-xl { .col-xl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xl-auto > * { .row-cols-xl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1692,7 +1688,7 @@ progress {
} }
@media (min-width: 1400px) { @media (min-width: 1400px) {
.col-xxl { .col-xxl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xxl-auto > * { .row-cols-xxl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -2160,6 +2156,10 @@ progress {
display: block; display: block;
padding: 0; padding: 0;
} }
.form-control::-moz-placeholder {
color: var(--bs-secondary-color);
opacity: 1;
}
.form-control::placeholder { .form-control::placeholder {
color: var(--bs-secondary-color); color: var(--bs-secondary-color);
opacity: 1; opacity: 1;
@@ -2607,11 +2607,9 @@ textarea.form-control-lg {
top: 0; top: 0;
left: 0; left: 0;
z-index: 2; z-index: 2;
max-width: 100%;
height: 100%; height: 100%;
padding: 1rem 0.75rem; padding: 1rem 0.75rem;
overflow: hidden; overflow: hidden;
color: rgba(var(--bs-body-color-rgb), 0.65);
text-align: start; text-align: start;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -2629,10 +2627,17 @@ textarea.form-control-lg {
.form-floating > .form-control-plaintext { .form-floating > .form-control-plaintext {
padding: 1rem 0.75rem; padding: 1rem 0.75rem;
} }
.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {
color: transparent;
}
.form-floating > .form-control::placeholder, .form-floating > .form-control::placeholder,
.form-floating > .form-control-plaintext::placeholder { .form-floating > .form-control-plaintext::placeholder {
color: transparent; color: transparent;
} }
.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {
padding-top: 1.625rem;
padding-bottom: 0.625rem;
}
.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),
.form-floating > .form-control-plaintext:focus, .form-floating > .form-control-plaintext:focus,
.form-floating > .form-control-plaintext:not(:placeholder-shown) { .form-floating > .form-control-plaintext:not(:placeholder-shown) {
@@ -2647,19 +2652,19 @@ textarea.form-control-lg {
.form-floating > .form-select { .form-floating > .form-select {
padding-top: 1.625rem; padding-top: 1.625rem;
padding-bottom: 0.625rem; padding-bottom: 0.625rem;
padding-left: 0.75rem; }
.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
color: rgba(var(--bs-body-color-rgb), 0.65);
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
} }
.form-floating > .form-control:focus ~ label, .form-floating > .form-control:focus ~ label,
.form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label,
.form-floating > .form-control-plaintext ~ label, .form-floating > .form-control-plaintext ~ label,
.form-floating > .form-select ~ label { .form-floating > .form-select ~ label {
color: rgba(var(--bs-body-color-rgb), 0.65);
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
} }
.form-floating > .form-control:-webkit-autofill ~ label { .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
}
.form-floating > textarea:focus ~ label::after,
.form-floating > textarea:not(:placeholder-shown) ~ label::after {
position: absolute; position: absolute;
inset: 1rem 0.375rem; inset: 1rem 0.375rem;
z-index: -1; z-index: -1;
@@ -2668,8 +2673,21 @@ textarea.form-control-lg {
background-color: var(--bs-body-bg); background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius); border-radius: var(--bs-border-radius);
} }
.form-floating > textarea:disabled ~ label::after { .form-floating > .form-control:focus ~ label::after,
background-color: var(--bs-secondary-bg); .form-floating > .form-control:not(:placeholder-shown) ~ label::after,
.form-floating > .form-control-plaintext ~ label::after,
.form-floating > .form-select ~ label::after {
position: absolute;
inset: 1rem 0.375rem;
z-index: -1;
height: 1.5em;
content: "";
background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius);
}
.form-floating > .form-control:-webkit-autofill ~ label {
color: rgba(var(--bs-body-color-rgb), 0.65);
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
} }
.form-floating > .form-control-plaintext ~ label { .form-floating > .form-control-plaintext ~ label {
border-width: var(--bs-border-width) 0; border-width: var(--bs-border-width) 0;
@@ -2678,6 +2696,10 @@ textarea.form-control-lg {
.form-floating > .form-control:disabled ~ label { .form-floating > .form-control:disabled ~ label {
color: #6c757d; color: #6c757d;
} }
.form-floating > :disabled ~ label::after,
.form-floating > .form-control:disabled ~ label::after {
background-color: var(--bs-secondary-bg);
}
.input-group { .input-group {
position: relative; position: relative;
@@ -2760,7 +2782,7 @@ textarea.form-control-lg {
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
margin-left: calc(-1 * var(--bs-border-width)); margin-left: calc(var(--bs-border-width) * -1);
border-top-left-radius: 0; border-top-left-radius: 0;
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
@@ -2802,7 +2824,7 @@ textarea.form-control-lg {
.was-validated .form-control:valid, .form-control.is-valid { .was-validated .form-control:valid, .form-control.is-valid {
border-color: var(--bs-form-valid-border-color); border-color: var(--bs-form-valid-border-color);
padding-right: calc(1.5em + 0.75rem); padding-right: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: right calc(0.375em + 0.1875rem) center; background-position: right calc(0.375em + 0.1875rem) center;
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2821,7 +2843,7 @@ textarea.form-control-lg {
border-color: var(--bs-form-valid-border-color); border-color: var(--bs-form-valid-border-color);
} }
.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
padding-right: 4.125rem; padding-right: 4.125rem;
background-position: right 0.75rem center, center right 2.25rem; background-position: right 0.75rem center, center right 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -3733,7 +3755,7 @@ textarea.form-control-lg {
} }
.btn-group > :not(.btn-check:first-child) + .btn, .btn-group > :not(.btn-check:first-child) + .btn,
.btn-group > .btn-group:not(:first-child) { .btn-group > .btn-group:not(:first-child) {
margin-left: calc(-1 * var(--bs-border-width)); margin-left: calc(var(--bs-border-width) * -1);
} }
.btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group > .btn.dropdown-toggle-split:first-child, .btn-group > .btn.dropdown-toggle-split:first-child,
@@ -3780,15 +3802,14 @@ textarea.form-control-lg {
} }
.btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn:not(:first-child),
.btn-group-vertical > .btn-group:not(:first-child) { .btn-group-vertical > .btn-group:not(:first-child) {
margin-top: calc(-1 * var(--bs-border-width)); margin-top: calc(var(--bs-border-width) * -1);
} }
.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group-vertical > .btn-group:not(:last-child) > .btn { .btn-group-vertical > .btn-group:not(:last-child) > .btn {
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
.btn-group-vertical > .btn:nth-child(n+3), .btn-group-vertical > .btn ~ .btn,
.btn-group-vertical > :not(.btn-check) + .btn,
.btn-group-vertical > .btn-group:not(:first-child) > .btn { .btn-group-vertical > .btn-group:not(:first-child) > .btn {
border-top-left-radius: 0; border-top-left-radius: 0;
border-top-right-radius: 0; border-top-right-radius: 0;
@@ -3912,8 +3933,8 @@ textarea.form-control-lg {
.nav-justified > .nav-link, .nav-justified > .nav-link,
.nav-justified .nav-item { .nav-justified .nav-item {
flex-grow: 1;
flex-basis: 0; flex-basis: 0;
flex-grow: 1;
text-align: center; text-align: center;
} }
@@ -4014,8 +4035,8 @@ textarea.form-control-lg {
} }
.navbar-collapse { .navbar-collapse {
flex-grow: 1;
flex-basis: 100%; flex-basis: 100%;
flex-grow: 1;
align-items: center; align-items: center;
} }
@@ -4510,7 +4531,7 @@ textarea.form-control-lg {
flex-flow: row wrap; flex-flow: row wrap;
} }
.card-group > .card { .card-group > .card {
flex: 1 0 0; flex: 1 0 0%;
margin-bottom: 0; margin-bottom: 0;
} }
.card-group > .card + .card { .card-group > .card + .card {
@@ -4521,24 +4542,24 @@ textarea.form-control-lg {
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
.card-group > .card:not(:last-child) > .card-img-top, .card-group > .card:not(:last-child) .card-img-top,
.card-group > .card:not(:last-child) > .card-header { .card-group > .card:not(:last-child) .card-header {
border-top-right-radius: 0; border-top-right-radius: 0;
} }
.card-group > .card:not(:last-child) > .card-img-bottom, .card-group > .card:not(:last-child) .card-img-bottom,
.card-group > .card:not(:last-child) > .card-footer { .card-group > .card:not(:last-child) .card-footer {
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
.card-group > .card:not(:first-child) { .card-group > .card:not(:first-child) {
border-top-left-radius: 0; border-top-left-radius: 0;
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
.card-group > .card:not(:first-child) > .card-img-top, .card-group > .card:not(:first-child) .card-img-top,
.card-group > .card:not(:first-child) > .card-header { .card-group > .card:not(:first-child) .card-header {
border-top-left-radius: 0; border-top-left-radius: 0;
} }
.card-group > .card:not(:first-child) > .card-img-bottom, .card-group > .card:not(:first-child) .card-img-bottom,
.card-group > .card:not(:first-child) > .card-footer { .card-group > .card:not(:first-child) .card-footer {
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
} }
@@ -4555,11 +4576,11 @@ textarea.form-control-lg {
--bs-accordion-btn-padding-y: 1rem; --bs-accordion-btn-padding-y: 1rem;
--bs-accordion-btn-color: var(--bs-body-color); --bs-accordion-btn-color: var(--bs-body-color);
--bs-accordion-btn-bg: var(--bs-accordion-bg); --bs-accordion-btn-bg: var(--bs-accordion-bg);
--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
--bs-accordion-btn-icon-width: 1.25rem; --bs-accordion-btn-icon-width: 1.25rem;
--bs-accordion-btn-icon-transform: rotate(-180deg); --bs-accordion-btn-icon-transform: rotate(-180deg);
--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-accordion-body-padding-x: 1.25rem; --bs-accordion-body-padding-x: 1.25rem;
--bs-accordion-body-padding-y: 1rem; --bs-accordion-body-padding-y: 1rem;
@@ -4669,15 +4690,16 @@ textarea.form-control-lg {
.accordion-flush > .accordion-item:last-child { .accordion-flush > .accordion-item:last-child {
border-bottom: 0; border-bottom: 0;
} }
.accordion-flush > .accordion-item > .accordion-collapse, .accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {
.accordion-flush > .accordion-item > .accordion-header .accordion-button, border-radius: 0;
.accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { }
.accordion-flush > .accordion-item > .accordion-collapse {
border-radius: 0; border-radius: 0;
} }
[data-bs-theme=dark] .accordion-button::after { [data-bs-theme=dark] .accordion-button::after {
--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
} }
.breadcrumb { .breadcrumb {
@@ -4781,7 +4803,7 @@ textarea.form-control-lg {
} }
.page-item:not(:first-child) .page-link { .page-item:not(:first-child) .page-link {
margin-left: calc(-1 * var(--bs-border-width)); margin-left: calc(var(--bs-border-width) * -1);
} }
.page-item:first-child .page-link { .page-item:first-child .page-link {
border-top-left-radius: var(--bs-pagination-border-radius); border-top-left-radius: var(--bs-pagination-border-radius);
@@ -4930,7 +4952,7 @@ textarea.form-control-lg {
@keyframes progress-bar-stripes { @keyframes progress-bar-stripes {
0% { 0% {
background-position-x: var(--bs-progress-height); background-position-x: 1rem;
} }
} }
.progress, .progress,
@@ -5024,6 +5046,22 @@ textarea.form-control-lg {
counter-increment: section; counter-increment: section;
} }
.list-group-item-action {
width: 100%;
color: var(--bs-list-group-action-color);
text-align: inherit;
}
.list-group-item-action:hover, .list-group-item-action:focus {
z-index: 1;
color: var(--bs-list-group-action-hover-color);
text-decoration: none;
background-color: var(--bs-list-group-action-hover-bg);
}
.list-group-item-action:active {
color: var(--bs-list-group-action-active-color);
background-color: var(--bs-list-group-action-active-bg);
}
.list-group-item { .list-group-item {
position: relative; position: relative;
display: block; display: block;
@@ -5060,22 +5098,6 @@ textarea.form-control-lg {
border-top-width: var(--bs-list-group-border-width); border-top-width: var(--bs-list-group-border-width);
} }
.list-group-item-action {
width: 100%;
color: var(--bs-list-group-action-color);
text-align: inherit;
}
.list-group-item-action:not(.active):hover, .list-group-item-action:not(.active):focus {
z-index: 1;
color: var(--bs-list-group-action-hover-color);
text-decoration: none;
background-color: var(--bs-list-group-action-hover-bg);
}
.list-group-item-action:not(.active):active {
color: var(--bs-list-group-action-active-color);
background-color: var(--bs-list-group-action-active-bg);
}
.list-group-horizontal { .list-group-horizontal {
flex-direction: row; flex-direction: row;
} }
@@ -5335,19 +5357,19 @@ textarea.form-control-lg {
.btn-close { .btn-close {
--bs-btn-close-color: #000; --bs-btn-close-color: #000;
--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e"); --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");
--bs-btn-close-opacity: 0.5; --bs-btn-close-opacity: 0.5;
--bs-btn-close-hover-opacity: 0.75; --bs-btn-close-hover-opacity: 0.75;
--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-btn-close-focus-opacity: 1; --bs-btn-close-focus-opacity: 1;
--bs-btn-close-disabled-opacity: 0.25; --bs-btn-close-disabled-opacity: 0.25;
--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
box-sizing: content-box; box-sizing: content-box;
width: 1em; width: 1em;
height: 1em; height: 1em;
padding: 0.25em 0.25em; padding: 0.25em 0.25em;
color: var(--bs-btn-close-color); color: var(--bs-btn-close-color);
background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
filter: var(--bs-btn-close-filter);
border: 0; border: 0;
border-radius: 0.375rem; border-radius: 0.375rem;
opacity: var(--bs-btn-close-opacity); opacity: var(--bs-btn-close-opacity);
@@ -5371,16 +5393,11 @@ textarea.form-control-lg {
} }
.btn-close-white { .btn-close-white {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%); filter: var(--bs-btn-close-white-filter);
} }
:root, [data-bs-theme=dark] .btn-close {
[data-bs-theme=light] { filter: var(--bs-btn-close-white-filter);
--bs-btn-close-filter: ;
}
[data-bs-theme=dark] {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
} }
.toast { .toast {
@@ -5457,7 +5474,7 @@ textarea.form-control-lg {
--bs-modal-width: 500px; --bs-modal-width: 500px;
--bs-modal-padding: 1rem; --bs-modal-padding: 1rem;
--bs-modal-margin: 0.5rem; --bs-modal-margin: 0.5rem;
--bs-modal-color: var(--bs-body-color); --bs-modal-color: ;
--bs-modal-bg: var(--bs-body-bg); --bs-modal-bg: var(--bs-body-bg);
--bs-modal-border-color: var(--bs-border-color-translucent); --bs-modal-border-color: var(--bs-border-color-translucent);
--bs-modal-border-width: var(--bs-border-width); --bs-modal-border-width: var(--bs-border-width);
@@ -5493,8 +5510,8 @@ textarea.form-control-lg {
pointer-events: none; pointer-events: none;
} }
.modal.fade .modal-dialog { .modal.fade .modal-dialog {
transform: translate(0, -50px);
transition: transform 0.3s ease-out; transition: transform 0.3s ease-out;
transform: translate(0, -50px);
} }
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
.modal.fade .modal-dialog { .modal.fade .modal-dialog {
@@ -5569,10 +5586,7 @@ textarea.form-control-lg {
} }
.modal-header .btn-close { .modal-header .btn-close {
padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);
margin-top: calc(-0.5 * var(--bs-modal-header-padding-y)); margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;
margin-right: calc(-0.5 * var(--bs-modal-header-padding-x));
margin-bottom: calc(-0.5 * var(--bs-modal-header-padding-y));
margin-left: auto;
} }
.modal-title { .modal-title {
@@ -6093,7 +6107,6 @@ textarea.form-control-lg {
color: #fff; color: #fff;
text-align: center; text-align: center;
background: none; background: none;
filter: var(--bs-carousel-control-icon-filter);
border: 0; border: 0;
opacity: 0.5; opacity: 0.5;
transition: opacity 0.15s ease; transition: opacity 0.15s ease;
@@ -6132,11 +6145,11 @@ textarea.form-control-lg {
} }
.carousel-control-prev-icon { .carousel-control-prev-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")*/; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/;
} }
.carousel-control-next-icon { .carousel-control-next-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e")*/; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/;
} }
.carousel-indicators { .carousel-indicators {
@@ -6162,7 +6175,7 @@ textarea.form-control-lg {
margin-left: 3px; margin-left: 3px;
text-indent: -999px; text-indent: -999px;
cursor: pointer; cursor: pointer;
background-color: var(--bs-carousel-indicator-active-bg); background-color: #fff;
background-clip: padding-box; background-clip: padding-box;
border: 0; border: 0;
border-top: 10px solid transparent; border-top: 10px solid transparent;
@@ -6186,33 +6199,36 @@ textarea.form-control-lg {
left: 15%; left: 15%;
padding-top: 1.25rem; padding-top: 1.25rem;
padding-bottom: 1.25rem; padding-bottom: 1.25rem;
color: var(--bs-carousel-caption-color); color: #fff;
text-align: center; text-align: center;
} }
.carousel-dark { .carousel-dark .carousel-control-prev-icon,
--bs-carousel-indicator-active-bg: #000; .carousel-dark .carousel-control-next-icon {
--bs-carousel-caption-color: #000; filter: invert(1) grayscale(100);
--bs-carousel-control-icon-filter: invert(1) grayscale(100); }
.carousel-dark .carousel-indicators [data-bs-target] {
background-color: #000;
}
.carousel-dark .carousel-caption {
color: #000;
} }
:root, [data-bs-theme=dark] .carousel .carousel-control-prev-icon,
[data-bs-theme=light] { [data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,
--bs-carousel-indicator-active-bg: #fff; [data-bs-theme=dark].carousel .carousel-control-next-icon {
--bs-carousel-caption-color: #fff; filter: invert(1) grayscale(100);
--bs-carousel-control-icon-filter: ;
} }
[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {
[data-bs-theme=dark] { background-color: #000;
--bs-carousel-indicator-active-bg: #000; }
--bs-carousel-caption-color: #000; [data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {
--bs-carousel-control-icon-filter: invert(1) grayscale(100); color: #000;
} }
.spinner-grow, .spinner-grow,
.spinner-border { .spinner-border {
display: inline-block; display: inline-block;
flex-shrink: 0;
width: var(--bs-spinner-width); width: var(--bs-spinner-width);
height: var(--bs-spinner-height); height: var(--bs-spinner-height);
vertical-align: var(--bs-spinner-vertical-align); vertical-align: var(--bs-spinner-vertical-align);
@@ -6757,10 +6773,7 @@ textarea.form-control-lg {
} }
.offcanvas-header .btn-close { .offcanvas-header .btn-close {
padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);
margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto;
margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));
margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
margin-left: auto;
} }
.offcanvas-title { .offcanvas-title {
@@ -7161,10 +7174,6 @@ textarea.form-control-lg {
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important; position: absolute !important;
} }
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after { .stretched-link::after {
position: absolute; position: absolute;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
@charset "UTF-8"; @charset "UTF-8";
/*! /*!
* Bootstrap v5.3.8 (https://getbootstrap.com/) * Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors * Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root, :root,
@@ -517,8 +517,8 @@ legend {
width: 100%; width: 100%;
padding: 0; padding: 0;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw); font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
legend { legend {
@@ -547,10 +547,6 @@ legend + * {
-webkit-appearance: textfield; -webkit-appearance: textfield;
outline-offset: -2px; outline-offset: -2px;
} }
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
[type="tel"], [type="tel"],
[type="url"], [type="url"],
@@ -603,9 +599,9 @@ progress {
} }
.display-1 { .display-1 {
font-size: calc(1.625rem + 4.5vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.625rem + 4.5vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-1 { .display-1 {
@@ -614,9 +610,9 @@ progress {
} }
.display-2 { .display-2 {
font-size: calc(1.575rem + 3.9vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.575rem + 3.9vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-2 { .display-2 {
@@ -625,9 +621,9 @@ progress {
} }
.display-3 { .display-3 {
font-size: calc(1.525rem + 3.3vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.525rem + 3.3vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-3 { .display-3 {
@@ -636,9 +632,9 @@ progress {
} }
.display-4 { .display-4 {
font-size: calc(1.475rem + 2.7vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.475rem + 2.7vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-4 { .display-4 {
@@ -647,9 +643,9 @@ progress {
} }
.display-5 { .display-5 {
font-size: calc(1.425rem + 2.1vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.425rem + 2.1vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-5 { .display-5 {
@@ -658,9 +654,9 @@ progress {
} }
.display-6 { .display-6 {
font-size: calc(1.375rem + 1.5vw);
font-weight: 300; font-weight: 300;
line-height: 1.2; line-height: 1.2;
font-size: calc(1.375rem + 1.5vw);
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.display-6 { .display-6 {
@@ -805,7 +801,7 @@ progress {
} }
.col { .col {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-auto > * { .row-cols-auto > * {
@@ -1014,7 +1010,7 @@ progress {
@media (min-width: 576px) { @media (min-width: 576px) {
.col-sm { .col-sm {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-sm-auto > * { .row-cols-sm-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1183,7 +1179,7 @@ progress {
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.col-md { .col-md {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-md-auto > * { .row-cols-md-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1352,7 +1348,7 @@ progress {
} }
@media (min-width: 992px) { @media (min-width: 992px) {
.col-lg { .col-lg {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-lg-auto > * { .row-cols-lg-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1521,7 +1517,7 @@ progress {
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
.col-xl { .col-xl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xl-auto > * { .row-cols-xl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -1690,7 +1686,7 @@ progress {
} }
@media (min-width: 1400px) { @media (min-width: 1400px) {
.col-xxl { .col-xxl {
flex: 1 0 0; flex: 1 0 0%;
} }
.row-cols-xxl-auto > * { .row-cols-xxl-auto > * {
flex: 0 0 auto; flex: 0 0 auto;
@@ -2158,6 +2154,10 @@ progress {
display: block; display: block;
padding: 0; padding: 0;
} }
.form-control::-moz-placeholder {
color: var(--bs-secondary-color);
opacity: 1;
}
.form-control::placeholder { .form-control::placeholder {
color: var(--bs-secondary-color); color: var(--bs-secondary-color);
opacity: 1; opacity: 1;
@@ -2605,11 +2605,9 @@ textarea.form-control-lg {
top: 0; top: 0;
right: 0; right: 0;
z-index: 2; z-index: 2;
max-width: 100%;
height: 100%; height: 100%;
padding: 1rem 0.75rem; padding: 1rem 0.75rem;
overflow: hidden; overflow: hidden;
color: rgba(var(--bs-body-color-rgb), 0.65);
text-align: start; text-align: start;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -2627,10 +2625,17 @@ textarea.form-control-lg {
.form-floating > .form-control-plaintext { .form-floating > .form-control-plaintext {
padding: 1rem 0.75rem; padding: 1rem 0.75rem;
} }
.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {
color: transparent;
}
.form-floating > .form-control::placeholder, .form-floating > .form-control::placeholder,
.form-floating > .form-control-plaintext::placeholder { .form-floating > .form-control-plaintext::placeholder {
color: transparent; color: transparent;
} }
.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {
padding-top: 1.625rem;
padding-bottom: 0.625rem;
}
.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),
.form-floating > .form-control-plaintext:focus, .form-floating > .form-control-plaintext:focus,
.form-floating > .form-control-plaintext:not(:placeholder-shown) { .form-floating > .form-control-plaintext:not(:placeholder-shown) {
@@ -2645,19 +2650,19 @@ textarea.form-control-lg {
.form-floating > .form-select { .form-floating > .form-select {
padding-top: 1.625rem; padding-top: 1.625rem;
padding-bottom: 0.625rem; padding-bottom: 0.625rem;
padding-right: 0.75rem; }
.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
color: rgba(var(--bs-body-color-rgb), 0.65);
transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
} }
.form-floating > .form-control:focus ~ label, .form-floating > .form-control:focus ~ label,
.form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label,
.form-floating > .form-control-plaintext ~ label, .form-floating > .form-control-plaintext ~ label,
.form-floating > .form-select ~ label { .form-floating > .form-select ~ label {
color: rgba(var(--bs-body-color-rgb), 0.65);
transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem); transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
} }
.form-floating > .form-control:-webkit-autofill ~ label { .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {
transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
}
.form-floating > textarea:focus ~ label::after,
.form-floating > textarea:not(:placeholder-shown) ~ label::after {
position: absolute; position: absolute;
inset: 1rem 0.375rem; inset: 1rem 0.375rem;
z-index: -1; z-index: -1;
@@ -2666,8 +2671,21 @@ textarea.form-control-lg {
background-color: var(--bs-body-bg); background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius); border-radius: var(--bs-border-radius);
} }
.form-floating > textarea:disabled ~ label::after { .form-floating > .form-control:focus ~ label::after,
background-color: var(--bs-secondary-bg); .form-floating > .form-control:not(:placeholder-shown) ~ label::after,
.form-floating > .form-control-plaintext ~ label::after,
.form-floating > .form-select ~ label::after {
position: absolute;
inset: 1rem 0.375rem;
z-index: -1;
height: 1.5em;
content: "";
background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius);
}
.form-floating > .form-control:-webkit-autofill ~ label {
color: rgba(var(--bs-body-color-rgb), 0.65);
transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
} }
.form-floating > .form-control-plaintext ~ label { .form-floating > .form-control-plaintext ~ label {
border-width: var(--bs-border-width) 0; border-width: var(--bs-border-width) 0;
@@ -2676,6 +2694,10 @@ textarea.form-control-lg {
.form-floating > .form-control:disabled ~ label { .form-floating > .form-control:disabled ~ label {
color: #6c757d; color: #6c757d;
} }
.form-floating > :disabled ~ label::after,
.form-floating > .form-control:disabled ~ label::after {
background-color: var(--bs-secondary-bg);
}
.input-group { .input-group {
position: relative; position: relative;
@@ -2758,7 +2780,7 @@ textarea.form-control-lg {
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
margin-right: calc(-1 * var(--bs-border-width)); margin-right: calc(var(--bs-border-width) * -1);
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
@@ -2800,7 +2822,7 @@ textarea.form-control-lg {
.was-validated .form-control:valid, .form-control.is-valid { .was-validated .form-control:valid, .form-control.is-valid {
border-color: var(--bs-form-valid-border-color); border-color: var(--bs-form-valid-border-color);
padding-left: calc(1.5em + 0.75rem); padding-left: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: left calc(0.375em + 0.1875rem) center; background-position: left calc(0.375em + 0.1875rem) center;
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2819,7 +2841,7 @@ textarea.form-control-lg {
border-color: var(--bs-form-valid-border-color); border-color: var(--bs-form-valid-border-color);
} }
.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e"); --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
padding-left: 4.125rem; padding-left: 4.125rem;
background-position: left 0.75rem center, center left 2.25rem; background-position: left 0.75rem center, center left 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2951,7 +2973,6 @@ textarea.form-control-lg {
.btn { .btn {
--bs-btn-padding-x: 0.75rem; --bs-btn-padding-x: 0.75rem;
--bs-btn-padding-y: 0.375rem; --bs-btn-padding-y: 0.375rem;
--bs-btn-font-family: ;
--bs-btn-font-size: 1rem; --bs-btn-font-size: 1rem;
--bs-btn-font-weight: 400; --bs-btn-font-weight: 400;
--bs-btn-line-height: 1.5; --bs-btn-line-height: 1.5;
@@ -3680,7 +3701,6 @@ textarea.form-control-lg {
--bs-dropdown-color: #dee2e6; --bs-dropdown-color: #dee2e6;
--bs-dropdown-bg: #343a40; --bs-dropdown-bg: #343a40;
--bs-dropdown-border-color: var(--bs-border-color-translucent); --bs-dropdown-border-color: var(--bs-border-color-translucent);
--bs-dropdown-box-shadow: ;
--bs-dropdown-link-color: #dee2e6; --bs-dropdown-link-color: #dee2e6;
--bs-dropdown-link-hover-color: #fff; --bs-dropdown-link-hover-color: #fff;
--bs-dropdown-divider-bg: var(--bs-border-color-translucent); --bs-dropdown-divider-bg: var(--bs-border-color-translucent);
@@ -3731,7 +3751,7 @@ textarea.form-control-lg {
} }
.btn-group > :not(.btn-check:first-child) + .btn, .btn-group > :not(.btn-check:first-child) + .btn,
.btn-group > .btn-group:not(:first-child) { .btn-group > .btn-group:not(:first-child) {
margin-right: calc(-1 * var(--bs-border-width)); margin-right: calc(var(--bs-border-width) * -1);
} }
.btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group > .btn.dropdown-toggle-split:first-child, .btn-group > .btn.dropdown-toggle-split:first-child,
@@ -3778,15 +3798,14 @@ textarea.form-control-lg {
} }
.btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn:not(:first-child),
.btn-group-vertical > .btn-group:not(:first-child) { .btn-group-vertical > .btn-group:not(:first-child) {
margin-top: calc(-1 * var(--bs-border-width)); margin-top: calc(var(--bs-border-width) * -1);
} }
.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group-vertical > .btn-group:not(:last-child) > .btn { .btn-group-vertical > .btn-group:not(:last-child) > .btn {
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
.btn-group-vertical > .btn:nth-child(n+3), .btn-group-vertical > .btn ~ .btn,
.btn-group-vertical > :not(.btn-check) + .btn,
.btn-group-vertical > .btn-group:not(:first-child) > .btn { .btn-group-vertical > .btn-group:not(:first-child) > .btn {
border-top-right-radius: 0; border-top-right-radius: 0;
border-top-left-radius: 0; border-top-left-radius: 0;
@@ -3795,7 +3814,6 @@ textarea.form-control-lg {
.nav { .nav {
--bs-nav-link-padding-x: 1rem; --bs-nav-link-padding-x: 1rem;
--bs-nav-link-padding-y: 0.5rem; --bs-nav-link-padding-y: 0.5rem;
--bs-nav-link-font-weight: ;
--bs-nav-link-color: var(--bs-link-color); --bs-nav-link-color: var(--bs-link-color);
--bs-nav-link-hover-color: var(--bs-link-hover-color); --bs-nav-link-hover-color: var(--bs-link-hover-color);
--bs-nav-link-disabled-color: var(--bs-secondary-color); --bs-nav-link-disabled-color: var(--bs-secondary-color);
@@ -3910,8 +3928,8 @@ textarea.form-control-lg {
.nav-justified > .nav-link, .nav-justified > .nav-link,
.nav-justified .nav-item { .nav-justified .nav-item {
flex-grow: 1;
flex-basis: 0; flex-basis: 0;
flex-grow: 1;
text-align: center; text-align: center;
} }
@@ -3983,7 +4001,6 @@ textarea.form-control-lg {
.navbar-nav { .navbar-nav {
--bs-nav-link-padding-x: 0; --bs-nav-link-padding-x: 0;
--bs-nav-link-padding-y: 0.5rem; --bs-nav-link-padding-y: 0.5rem;
--bs-nav-link-font-weight: ;
--bs-nav-link-color: var(--bs-navbar-color); --bs-nav-link-color: var(--bs-navbar-color);
--bs-nav-link-hover-color: var(--bs-navbar-hover-color); --bs-nav-link-hover-color: var(--bs-navbar-hover-color);
--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);
@@ -4012,8 +4029,8 @@ textarea.form-control-lg {
} }
.navbar-collapse { .navbar-collapse {
flex-grow: 1;
flex-basis: 100%; flex-basis: 100%;
flex-grow: 1;
align-items: center; align-items: center;
} }
@@ -4358,19 +4375,13 @@ textarea.form-control-lg {
--bs-card-spacer-y: 1rem; --bs-card-spacer-y: 1rem;
--bs-card-spacer-x: 1rem; --bs-card-spacer-x: 1rem;
--bs-card-title-spacer-y: 0.5rem; --bs-card-title-spacer-y: 0.5rem;
--bs-card-title-color: ;
--bs-card-subtitle-color: ;
--bs-card-border-width: var(--bs-border-width); --bs-card-border-width: var(--bs-border-width);
--bs-card-border-color: var(--bs-border-color-translucent); --bs-card-border-color: var(--bs-border-color-translucent);
--bs-card-border-radius: var(--bs-border-radius); --bs-card-border-radius: var(--bs-border-radius);
--bs-card-box-shadow: ;
--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));
--bs-card-cap-padding-y: 0.5rem; --bs-card-cap-padding-y: 0.5rem;
--bs-card-cap-padding-x: 1rem; --bs-card-cap-padding-x: 1rem;
--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);
--bs-card-cap-color: ;
--bs-card-height: ;
--bs-card-color: ;
--bs-card-bg: var(--bs-body-bg); --bs-card-bg: var(--bs-body-bg);
--bs-card-img-overlay-padding: 1rem; --bs-card-img-overlay-padding: 1rem;
--bs-card-group-margin: 0.75rem; --bs-card-group-margin: 0.75rem;
@@ -4508,7 +4519,7 @@ textarea.form-control-lg {
flex-flow: row wrap; flex-flow: row wrap;
} }
.card-group > .card { .card-group > .card {
flex: 1 0 0; flex: 1 0 0%;
margin-bottom: 0; margin-bottom: 0;
} }
.card-group > .card + .card { .card-group > .card + .card {
@@ -4519,24 +4530,24 @@ textarea.form-control-lg {
border-top-left-radius: 0; border-top-left-radius: 0;
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
.card-group > .card:not(:last-child) > .card-img-top, .card-group > .card:not(:last-child) .card-img-top,
.card-group > .card:not(:last-child) > .card-header { .card-group > .card:not(:last-child) .card-header {
border-top-left-radius: 0; border-top-left-radius: 0;
} }
.card-group > .card:not(:last-child) > .card-img-bottom, .card-group > .card:not(:last-child) .card-img-bottom,
.card-group > .card:not(:last-child) > .card-footer { .card-group > .card:not(:last-child) .card-footer {
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
.card-group > .card:not(:first-child) { .card-group > .card:not(:first-child) {
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
.card-group > .card:not(:first-child) > .card-img-top, .card-group > .card:not(:first-child) .card-img-top,
.card-group > .card:not(:first-child) > .card-header { .card-group > .card:not(:first-child) .card-header {
border-top-right-radius: 0; border-top-right-radius: 0;
} }
.card-group > .card:not(:first-child) > .card-img-bottom, .card-group > .card:not(:first-child) .card-img-bottom,
.card-group > .card:not(:first-child) > .card-footer { .card-group > .card:not(:first-child) .card-footer {
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
} }
@@ -4553,11 +4564,11 @@ textarea.form-control-lg {
--bs-accordion-btn-padding-y: 1rem; --bs-accordion-btn-padding-y: 1rem;
--bs-accordion-btn-color: var(--bs-body-color); --bs-accordion-btn-color: var(--bs-body-color);
--bs-accordion-btn-bg: var(--bs-accordion-bg); --bs-accordion-btn-bg: var(--bs-accordion-bg);
--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
--bs-accordion-btn-icon-width: 1.25rem; --bs-accordion-btn-icon-width: 1.25rem;
--bs-accordion-btn-icon-transform: rotate(-180deg); --bs-accordion-btn-icon-transform: rotate(-180deg);
--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-accordion-body-padding-x: 1.25rem; --bs-accordion-body-padding-x: 1.25rem;
--bs-accordion-body-padding-y: 1rem; --bs-accordion-body-padding-y: 1rem;
@@ -4667,23 +4678,22 @@ textarea.form-control-lg {
.accordion-flush > .accordion-item:last-child { .accordion-flush > .accordion-item:last-child {
border-bottom: 0; border-bottom: 0;
} }
.accordion-flush > .accordion-item > .accordion-collapse, .accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {
.accordion-flush > .accordion-item > .accordion-header .accordion-button, border-radius: 0;
.accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { }
.accordion-flush > .accordion-item > .accordion-collapse {
border-radius: 0; border-radius: 0;
} }
[data-bs-theme=dark] .accordion-button::after { [data-bs-theme=dark] .accordion-button::after {
--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
} }
.breadcrumb { .breadcrumb {
--bs-breadcrumb-padding-x: 0; --bs-breadcrumb-padding-x: 0;
--bs-breadcrumb-padding-y: 0; --bs-breadcrumb-padding-y: 0;
--bs-breadcrumb-margin-bottom: 1rem; --bs-breadcrumb-margin-bottom: 1rem;
--bs-breadcrumb-bg: ;
--bs-breadcrumb-border-radius: ;
--bs-breadcrumb-divider-color: var(--bs-secondary-color); --bs-breadcrumb-divider-color: var(--bs-secondary-color);
--bs-breadcrumb-item-padding-x: 0.5rem; --bs-breadcrumb-item-padding-x: 0.5rem;
--bs-breadcrumb-item-active-color: var(--bs-secondary-color); --bs-breadcrumb-item-active-color: var(--bs-secondary-color);
@@ -4779,7 +4789,7 @@ textarea.form-control-lg {
} }
.page-item:not(:first-child) .page-link { .page-item:not(:first-child) .page-link {
margin-right: calc(-1 * var(--bs-border-width)); margin-right: calc(var(--bs-border-width) * -1);
} }
.page-item:first-child .page-link { .page-item:first-child .page-link {
border-top-right-radius: var(--bs-pagination-border-radius); border-top-right-radius: var(--bs-pagination-border-radius);
@@ -4928,7 +4938,7 @@ textarea.form-control-lg {
@keyframes progress-bar-stripes { @keyframes progress-bar-stripes {
0% { 0% {
background-position-x: var(--bs-progress-height); background-position-x: 1rem;
} }
} }
.progress, .progress,
@@ -5022,6 +5032,22 @@ textarea.form-control-lg {
counter-increment: section; counter-increment: section;
} }
.list-group-item-action {
width: 100%;
color: var(--bs-list-group-action-color);
text-align: inherit;
}
.list-group-item-action:hover, .list-group-item-action:focus {
z-index: 1;
color: var(--bs-list-group-action-hover-color);
text-decoration: none;
background-color: var(--bs-list-group-action-hover-bg);
}
.list-group-item-action:active {
color: var(--bs-list-group-action-active-color);
background-color: var(--bs-list-group-action-active-bg);
}
.list-group-item { .list-group-item {
position: relative; position: relative;
display: block; display: block;
@@ -5058,22 +5084,6 @@ textarea.form-control-lg {
border-top-width: var(--bs-list-group-border-width); border-top-width: var(--bs-list-group-border-width);
} }
.list-group-item-action {
width: 100%;
color: var(--bs-list-group-action-color);
text-align: inherit;
}
.list-group-item-action:not(.active):hover, .list-group-item-action:not(.active):focus {
z-index: 1;
color: var(--bs-list-group-action-hover-color);
text-decoration: none;
background-color: var(--bs-list-group-action-hover-bg);
}
.list-group-item-action:not(.active):active {
color: var(--bs-list-group-action-active-color);
background-color: var(--bs-list-group-action-active-bg);
}
.list-group-horizontal { .list-group-horizontal {
flex-direction: row; flex-direction: row;
} }
@@ -5333,19 +5343,19 @@ textarea.form-control-lg {
.btn-close { .btn-close {
--bs-btn-close-color: #000; --bs-btn-close-color: #000;
--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e"); --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");
--bs-btn-close-opacity: 0.5; --bs-btn-close-opacity: 0.5;
--bs-btn-close-hover-opacity: 0.75; --bs-btn-close-hover-opacity: 0.75;
--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-btn-close-focus-opacity: 1; --bs-btn-close-focus-opacity: 1;
--bs-btn-close-disabled-opacity: 0.25; --bs-btn-close-disabled-opacity: 0.25;
--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
box-sizing: content-box; box-sizing: content-box;
width: 1em; width: 1em;
height: 1em; height: 1em;
padding: 0.25em 0.25em; padding: 0.25em 0.25em;
color: var(--bs-btn-close-color); color: var(--bs-btn-close-color);
background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
filter: var(--bs-btn-close-filter);
border: 0; border: 0;
border-radius: 0.375rem; border-radius: 0.375rem;
opacity: var(--bs-btn-close-opacity); opacity: var(--bs-btn-close-opacity);
@@ -5369,16 +5379,11 @@ textarea.form-control-lg {
} }
.btn-close-white { .btn-close-white {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%); filter: var(--bs-btn-close-white-filter);
} }
:root, [data-bs-theme=dark] .btn-close {
[data-bs-theme=light] { filter: var(--bs-btn-close-white-filter);
--bs-btn-close-filter: ;
}
[data-bs-theme=dark] {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
} }
.toast { .toast {
@@ -5388,7 +5393,6 @@ textarea.form-control-lg {
--bs-toast-spacing: 1.5rem; --bs-toast-spacing: 1.5rem;
--bs-toast-max-width: 350px; --bs-toast-max-width: 350px;
--bs-toast-font-size: 0.875rem; --bs-toast-font-size: 0.875rem;
--bs-toast-color: ;
--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);
--bs-toast-border-width: var(--bs-border-width); --bs-toast-border-width: var(--bs-border-width);
--bs-toast-border-color: var(--bs-border-color-translucent); --bs-toast-border-color: var(--bs-border-color-translucent);
@@ -5455,7 +5459,6 @@ textarea.form-control-lg {
--bs-modal-width: 500px; --bs-modal-width: 500px;
--bs-modal-padding: 1rem; --bs-modal-padding: 1rem;
--bs-modal-margin: 0.5rem; --bs-modal-margin: 0.5rem;
--bs-modal-color: var(--bs-body-color);
--bs-modal-bg: var(--bs-body-bg); --bs-modal-bg: var(--bs-body-bg);
--bs-modal-border-color: var(--bs-border-color-translucent); --bs-modal-border-color: var(--bs-border-color-translucent);
--bs-modal-border-width: var(--bs-border-width); --bs-modal-border-width: var(--bs-border-width);
@@ -5469,7 +5472,6 @@ textarea.form-control-lg {
--bs-modal-header-border-width: var(--bs-border-width); --bs-modal-header-border-width: var(--bs-border-width);
--bs-modal-title-line-height: 1.5; --bs-modal-title-line-height: 1.5;
--bs-modal-footer-gap: 0.5rem; --bs-modal-footer-gap: 0.5rem;
--bs-modal-footer-bg: ;
--bs-modal-footer-border-color: var(--bs-border-color); --bs-modal-footer-border-color: var(--bs-border-color);
--bs-modal-footer-border-width: var(--bs-border-width); --bs-modal-footer-border-width: var(--bs-border-width);
position: fixed; position: fixed;
@@ -5491,8 +5493,8 @@ textarea.form-control-lg {
pointer-events: none; pointer-events: none;
} }
.modal.fade .modal-dialog { .modal.fade .modal-dialog {
transform: translate(0, -50px);
transition: transform 0.3s ease-out; transition: transform 0.3s ease-out;
transform: translate(0, -50px);
} }
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
.modal.fade .modal-dialog { .modal.fade .modal-dialog {
@@ -5567,10 +5569,7 @@ textarea.form-control-lg {
} }
.modal-header .btn-close { .modal-header .btn-close {
padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);
margin-top: calc(-0.5 * var(--bs-modal-header-padding-y)); margin: calc(-0.5 * var(--bs-modal-header-padding-y)) auto calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x));
margin-left: calc(-0.5 * var(--bs-modal-header-padding-x));
margin-bottom: calc(-0.5 * var(--bs-modal-header-padding-y));
margin-right: auto;
} }
.modal-title { .modal-title {
@@ -5749,7 +5748,6 @@ textarea.form-control-lg {
--bs-tooltip-max-width: 200px; --bs-tooltip-max-width: 200px;
--bs-tooltip-padding-x: 0.5rem; --bs-tooltip-padding-x: 0.5rem;
--bs-tooltip-padding-y: 0.25rem; --bs-tooltip-padding-y: 0.25rem;
--bs-tooltip-margin: ;
--bs-tooltip-font-size: 0.875rem; --bs-tooltip-font-size: 0.875rem;
--bs-tooltip-color: var(--bs-body-bg); --bs-tooltip-color: var(--bs-body-bg);
--bs-tooltip-bg: var(--bs-emphasis-color); --bs-tooltip-bg: var(--bs-emphasis-color);
@@ -6075,7 +6073,6 @@ textarea.form-control-lg {
color: #fff; color: #fff;
text-align: center; text-align: center;
background: none; background: none;
filter: var(--bs-carousel-control-icon-filter);
border: 0; border: 0;
opacity: 0.5; opacity: 0.5;
transition: opacity 0.15s ease; transition: opacity 0.15s ease;
@@ -6114,11 +6111,11 @@ textarea.form-control-lg {
} }
.carousel-control-prev-icon { .carousel-control-prev-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e"); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
} }
.carousel-control-next-icon { .carousel-control-next-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e"); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
} }
.carousel-indicators { .carousel-indicators {
@@ -6144,7 +6141,7 @@ textarea.form-control-lg {
margin-right: 3px; margin-right: 3px;
text-indent: -999px; text-indent: -999px;
cursor: pointer; cursor: pointer;
background-color: var(--bs-carousel-indicator-active-bg); background-color: #fff;
background-clip: padding-box; background-clip: padding-box;
border: 0; border: 0;
border-top: 10px solid transparent; border-top: 10px solid transparent;
@@ -6168,33 +6165,36 @@ textarea.form-control-lg {
right: 15%; right: 15%;
padding-top: 1.25rem; padding-top: 1.25rem;
padding-bottom: 1.25rem; padding-bottom: 1.25rem;
color: var(--bs-carousel-caption-color); color: #fff;
text-align: center; text-align: center;
} }
.carousel-dark { .carousel-dark .carousel-control-prev-icon,
--bs-carousel-indicator-active-bg: #000; .carousel-dark .carousel-control-next-icon {
--bs-carousel-caption-color: #000; filter: invert(1) grayscale(100);
--bs-carousel-control-icon-filter: invert(1) grayscale(100); }
.carousel-dark .carousel-indicators [data-bs-target] {
background-color: #000;
}
.carousel-dark .carousel-caption {
color: #000;
} }
:root, [data-bs-theme=dark] .carousel .carousel-control-prev-icon,
[data-bs-theme=light] { [data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,
--bs-carousel-indicator-active-bg: #fff; [data-bs-theme=dark].carousel .carousel-control-next-icon {
--bs-carousel-caption-color: #fff; filter: invert(1) grayscale(100);
--bs-carousel-control-icon-filter: ;
} }
[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {
[data-bs-theme=dark] { background-color: #000;
--bs-carousel-indicator-active-bg: #000; }
--bs-carousel-caption-color: #000; [data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {
--bs-carousel-control-icon-filter: invert(1) grayscale(100); color: #000;
} }
.spinner-grow, .spinner-grow,
.spinner-border { .spinner-border {
display: inline-block; display: inline-block;
flex-shrink: 0;
width: var(--bs-spinner-width); width: var(--bs-spinner-width);
height: var(--bs-spinner-height); height: var(--bs-spinner-height);
vertical-align: var(--bs-spinner-vertical-align); vertical-align: var(--bs-spinner-vertical-align);
@@ -6739,10 +6739,7 @@ textarea.form-control-lg {
} }
.offcanvas-header .btn-close { .offcanvas-header .btn-close {
padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);
margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) auto calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x));
margin-left: calc(-0.5 * var(--bs-offcanvas-padding-x));
margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
margin-right: auto;
} }
.offcanvas-title { .offcanvas-title {
@@ -7143,10 +7140,6 @@ textarea.form-control-lg {
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important; position: absolute !important;
} }
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after { .stretched-link::after {
position: absolute; position: absolute;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v5.3.8 (https://getbootstrap.com/) * Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -205,7 +205,7 @@
* @param {HTMLElement} element * @param {HTMLElement} element
* @return void * @return void
* *
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/ */
const reflow = element => { const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions element.offsetHeight; // eslint-disable-line no-unused-expressions
@@ -250,7 +250,7 @@
}); });
}; };
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue; return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
}; };
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) { if (!waitForTransition) {
@@ -572,7 +572,7 @@
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) { for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, ''); let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]); attributes[pureKey] = normalizeData(element.dataset[key]);
} }
return attributes; return attributes;
@@ -647,7 +647,7 @@
* Constants * Constants
*/ */
const VERSION = '5.3.8'; const VERSION = '5.3.3';
/** /**
* Class definition * Class definition
@@ -673,8 +673,6 @@
this[propertyName] = null; this[propertyName] = null;
} }
} }
// Private
_queueCallback(callback, element, isAnimated = true) { _queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated); executeAfterTransition(callback, element, isAnimated);
} }
@@ -1606,11 +1604,11 @@
this._element.style[dimension] = ''; this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true); this._queueCallback(complete, this._element, true);
} }
// Private
_isShown(element = this._element) { _isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7); return element.classList.contains(CLASS_NAME_SHOW$7);
} }
// Private
_configAfterMerge(config) { _configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = getElement(config.parent); config.parent = getElement(config.parent);
@@ -2668,6 +2666,7 @@
var popperOffsets = computeOffsets({ var popperOffsets = computeOffsets({
reference: referenceClientRect, reference: referenceClientRect,
element: popperRect, element: popperRect,
strategy: 'absolute',
placement: placement placement: placement
}); });
var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
@@ -2995,6 +2994,7 @@
state.modifiersData[name] = computeOffsets({ state.modifiersData[name] = computeOffsets({
reference: state.rects.reference, reference: state.rects.reference,
element: state.rects.popper, element: state.rects.popper,
strategy: 'absolute',
placement: state.placement placement: state.placement
}); });
} // eslint-disable-next-line import/no-unused-modules } // eslint-disable-next-line import/no-unused-modules
@@ -3701,7 +3701,7 @@
} }
_createPopper() { _createPopper() {
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org/docs/v2/)'); throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
} }
let referenceElement = this._element; let referenceElement = this._element;
if (this._config.reference === 'parent') { if (this._config.reference === 'parent') {
@@ -3780,7 +3780,7 @@
} }
return { return {
...defaultBsPopperConfig, ...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_selectMenuItem({ _selectMenuItem({
@@ -4802,6 +4802,7 @@
* *
* Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
*/ */
// eslint-disable-next-line unicorn/better-regex
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
const allowedAttribute = (attribute, allowedAttributeList) => { const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase(); const attributeName = attribute.nodeName.toLowerCase();
@@ -4966,7 +4967,7 @@
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return execute(arg, [undefined, this]); return execute(arg, [this]);
} }
_putElementInTemplate(element, templateElement) { _putElementInTemplate(element, templateElement) {
if (this._config.html) { if (this._config.html) {
@@ -5065,7 +5066,7 @@
class Tooltip extends BaseComponent { class Tooltip extends BaseComponent {
constructor(element, config) { constructor(element, config) {
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org/docs/v2/)'); throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
} }
super(element, config); super(element, config);
@@ -5111,6 +5112,7 @@
if (!this._isEnabled) { if (!this._isEnabled) {
return; return;
} }
this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) { if (this._isShown()) {
this._leave(); this._leave();
return; return;
@@ -5298,7 +5300,7 @@
return offset; return offset;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return execute(arg, [this._element, this._element]); return execute(arg, [this._element]);
} }
_getPopperConfig(attachment) { _getPopperConfig(attachment) {
const defaultBsPopperConfig = { const defaultBsPopperConfig = {
@@ -5336,7 +5338,7 @@
}; };
return { return {
...defaultBsPopperConfig, ...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_setListeners() { _setListeners() {
@@ -5345,7 +5347,6 @@
if (trigger === 'click') { if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event); const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);
context.toggle(); context.toggle();
}); });
} else if (trigger !== TRIGGER_MANUAL) { } else if (trigger !== TRIGGER_MANUAL) {
@@ -6211,6 +6212,7 @@
} }
// Private // Private
_maybeScheduleHide() { _maybeScheduleHide() {
if (!this._config.autohide) { if (!this._config.autohide) {
return; return;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v5.3.8 (https://getbootstrap.com/) * Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
import * as Popper from '@popperjs/core'; import * as Popper from '@popperjs/core';
@@ -201,7 +201,7 @@ const noop = () => {};
* @param {HTMLElement} element * @param {HTMLElement} element
* @return void * @return void
* *
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/ */
const reflow = element => { const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions element.offsetHeight; // eslint-disable-line no-unused-expressions
@@ -246,7 +246,7 @@ const defineJQueryPlugin = plugin => {
}); });
}; };
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue; return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
}; };
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) { if (!waitForTransition) {
@@ -568,7 +568,7 @@ const Manipulator = {
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) { for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, ''); let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]); attributes[pureKey] = normalizeData(element.dataset[key]);
} }
return attributes; return attributes;
@@ -643,7 +643,7 @@ class Config {
* Constants * Constants
*/ */
const VERSION = '5.3.8'; const VERSION = '5.3.3';
/** /**
* Class definition * Class definition
@@ -669,8 +669,6 @@ class BaseComponent extends Config {
this[propertyName] = null; this[propertyName] = null;
} }
} }
// Private
_queueCallback(callback, element, isAnimated = true) { _queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated); executeAfterTransition(callback, element, isAnimated);
} }
@@ -1602,11 +1600,11 @@ class Collapse extends BaseComponent {
this._element.style[dimension] = ''; this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true); this._queueCallback(complete, this._element, true);
} }
// Private
_isShown(element = this._element) { _isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7); return element.classList.contains(CLASS_NAME_SHOW$7);
} }
// Private
_configAfterMerge(config) { _configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = getElement(config.parent); config.parent = getElement(config.parent);
@@ -1860,7 +1858,7 @@ class Dropdown extends BaseComponent {
} }
_createPopper() { _createPopper() {
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org/docs/v2/)'); throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
} }
let referenceElement = this._element; let referenceElement = this._element;
if (this._config.reference === 'parent') { if (this._config.reference === 'parent') {
@@ -1939,7 +1937,7 @@ class Dropdown extends BaseComponent {
} }
return { return {
...defaultBsPopperConfig, ...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_selectMenuItem({ _selectMenuItem({
@@ -2961,6 +2959,7 @@ const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longde
* *
* Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
*/ */
// eslint-disable-next-line unicorn/better-regex
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
const allowedAttribute = (attribute, allowedAttributeList) => { const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase(); const attributeName = attribute.nodeName.toLowerCase();
@@ -3125,7 +3124,7 @@ class TemplateFactory extends Config {
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return execute(arg, [undefined, this]); return execute(arg, [this]);
} }
_putElementInTemplate(element, templateElement) { _putElementInTemplate(element, templateElement) {
if (this._config.html) { if (this._config.html) {
@@ -3224,7 +3223,7 @@ const DefaultType$3 = {
class Tooltip extends BaseComponent { class Tooltip extends BaseComponent {
constructor(element, config) { constructor(element, config) {
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org/docs/v2/)'); throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
} }
super(element, config); super(element, config);
@@ -3270,6 +3269,7 @@ class Tooltip extends BaseComponent {
if (!this._isEnabled) { if (!this._isEnabled) {
return; return;
} }
this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) { if (this._isShown()) {
this._leave(); this._leave();
return; return;
@@ -3457,7 +3457,7 @@ class Tooltip extends BaseComponent {
return offset; return offset;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return execute(arg, [this._element, this._element]); return execute(arg, [this._element]);
} }
_getPopperConfig(attachment) { _getPopperConfig(attachment) {
const defaultBsPopperConfig = { const defaultBsPopperConfig = {
@@ -3495,7 +3495,7 @@ class Tooltip extends BaseComponent {
}; };
return { return {
...defaultBsPopperConfig, ...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_setListeners() { _setListeners() {
@@ -3504,7 +3504,6 @@ class Tooltip extends BaseComponent {
if (trigger === 'click') { if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event); const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);
context.toggle(); context.toggle();
}); });
} else if (trigger !== TRIGGER_MANUAL) { } else if (trigger !== TRIGGER_MANUAL) {
@@ -4370,6 +4369,7 @@ class Toast extends BaseComponent {
} }
// Private // Private
_maybeScheduleHide() { _maybeScheduleHide() {
if (!this._config.autohide) { if (!this._config.autohide) {
return; return;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v5.3.8 (https://getbootstrap.com/) * Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -224,7 +224,7 @@
* @param {HTMLElement} element * @param {HTMLElement} element
* @return void * @return void
* *
* @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/ */
const reflow = element => { const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions element.offsetHeight; // eslint-disable-line no-unused-expressions
@@ -269,7 +269,7 @@
}); });
}; };
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue; return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
}; };
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) { if (!waitForTransition) {
@@ -591,7 +591,7 @@
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) { for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, ''); let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]); attributes[pureKey] = normalizeData(element.dataset[key]);
} }
return attributes; return attributes;
@@ -666,7 +666,7 @@
* Constants * Constants
*/ */
const VERSION = '5.3.8'; const VERSION = '5.3.3';
/** /**
* Class definition * Class definition
@@ -692,8 +692,6 @@
this[propertyName] = null; this[propertyName] = null;
} }
} }
// Private
_queueCallback(callback, element, isAnimated = true) { _queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated); executeAfterTransition(callback, element, isAnimated);
} }
@@ -1625,11 +1623,11 @@
this._element.style[dimension] = ''; this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true); this._queueCallback(complete, this._element, true);
} }
// Private
_isShown(element = this._element) { _isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7); return element.classList.contains(CLASS_NAME_SHOW$7);
} }
// Private
_configAfterMerge(config) { _configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = getElement(config.parent); config.parent = getElement(config.parent);
@@ -1883,7 +1881,7 @@
} }
_createPopper() { _createPopper() {
if (typeof Popper__namespace === 'undefined') { if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org/docs/v2/)'); throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
} }
let referenceElement = this._element; let referenceElement = this._element;
if (this._config.reference === 'parent') { if (this._config.reference === 'parent') {
@@ -1962,7 +1960,7 @@
} }
return { return {
...defaultBsPopperConfig, ...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_selectMenuItem({ _selectMenuItem({
@@ -2984,6 +2982,7 @@
* *
* Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
*/ */
// eslint-disable-next-line unicorn/better-regex
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
const allowedAttribute = (attribute, allowedAttributeList) => { const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase(); const attributeName = attribute.nodeName.toLowerCase();
@@ -3148,7 +3147,7 @@
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return execute(arg, [undefined, this]); return execute(arg, [this]);
} }
_putElementInTemplate(element, templateElement) { _putElementInTemplate(element, templateElement) {
if (this._config.html) { if (this._config.html) {
@@ -3247,7 +3246,7 @@
class Tooltip extends BaseComponent { class Tooltip extends BaseComponent {
constructor(element, config) { constructor(element, config) {
if (typeof Popper__namespace === 'undefined') { if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org/docs/v2/)'); throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
} }
super(element, config); super(element, config);
@@ -3293,6 +3292,7 @@
if (!this._isEnabled) { if (!this._isEnabled) {
return; return;
} }
this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) { if (this._isShown()) {
this._leave(); this._leave();
return; return;
@@ -3480,7 +3480,7 @@
return offset; return offset;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return execute(arg, [this._element, this._element]); return execute(arg, [this._element]);
} }
_getPopperConfig(attachment) { _getPopperConfig(attachment) {
const defaultBsPopperConfig = { const defaultBsPopperConfig = {
@@ -3518,7 +3518,7 @@
}; };
return { return {
...defaultBsPopperConfig, ...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_setListeners() { _setListeners() {
@@ -3527,7 +3527,6 @@
if (trigger === 'click') { if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event); const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);
context.toggle(); context.toggle();
}); });
} else if (trigger !== TRIGGER_MANUAL) { } else if (trigger !== TRIGGER_MANUAL) {
@@ -4393,6 +4392,7 @@
} }
// Private // Private
_maybeScheduleHide() { _maybeScheduleHide() {
if (!this._config.autohide) { if (!this._config.autohide) {
return; return;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,53 @@
function initFooter($footer){ function initFooter($container) {
$container.html(`
<div class="row">
<div class="col-lg-4 mb-4">
<div class="footer-brand mb-3">
<span style="color:var(--tennis-green,#2ecc71)">Tennis</span>Hub
</div>
<p style="color:rgba(255,255,255,0.6);font-size:0.9rem;max-width:280px">
Найдите свой теннисный клуб, запишитесь на тренировку или участвуйте в турнире.
</p>
<div class="d-flex gap-2 mt-3">
<a href="#" class="social-icon"><i class="bi bi-telegram"></i></a>
<a href="#" class="social-icon"><i class="bi bi-vk"></i></a>
<a href="#" class="social-icon"><i class="bi bi-instagram"></i></a>
</div>
</div>
} <div class="col-lg-2 col-md-4 mb-4">
<div class="footer-heading">Навигация</div>
<a href="/" class="footer-link">Главная</a>
<a href="/#clubs-section" class="footer-link">Клубы</a>
<a href="/#events-section" class="footer-link">Мероприятия</a>
<a href="/admin" class="footer-link">Кабинет</a>
</div>
<div class="col-lg-3 col-md-4 mb-4">
<div class="footer-heading">Организациям</div>
<a href="/admin" class="footer-link">Добавить клуб</a>
<a href="/admin" class="footer-link">Создать мероприятие</a>
<a href="/admin" class="footer-link">Управление кортами</a>
</div>
<div class="col-lg-3 col-md-4 mb-4">
<div class="footer-heading">Контакты</div>
<p class="footer-link"><i class="bi bi-envelope me-2"></i>info@tennishub.ru</p>
<p class="footer-link"><i class="bi bi-telephone me-2"></i>+7 (800) 555-35-35</p>
<p class="footer-link"><i class="bi bi-geo-alt me-2"></i>Москва, Россия</p>
</div>
</div>
<div class="footer-bottom">
<div class="row align-items-center">
<div class="col-md-6">
<span>&copy; 2025 TennisHub. Все права защищены.</span>
</div>
<div class="col-md-6 text-md-end mt-2 mt-md-0">
<a href="#" class="footer-link d-inline me-3">Политика конфиденциальности</a>
<a href="#" class="footer-link d-inline">Условия использования</a>
</div>
</div>
</div>
`);
}

View File

@@ -18,7 +18,7 @@ export function initHeader($header) {
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarNav"> <div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto align-items-center gap-1"> <ul class="navbar-nav ms-auto align-items-lg-center gap-1">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/#clubs-section"> <a class="nav-link" href="/#clubs-section">
<i class="bi bi-building me-1"></i>Клубы <i class="bi bi-building me-1"></i>Клубы
@@ -30,7 +30,7 @@ export function initHeader($header) {
</a> </a>
</li> </li>
</ul> </ul>
<div class="ms-3 d-flex gap-2 align-items-center"> <div class="ms-0 ms-lg-3 mt-2 mt-lg-0 d-flex gap-2 align-items-center pb-2 pb-lg-0">
${authed ${authed
? `<div class="dropdown"> ? `<div class="dropdown">
<button class="btn btn-sm fw-semibold dropdown-toggle" <button class="btn btn-sm fw-semibold dropdown-toggle"

View File

@@ -53,13 +53,14 @@ function loadClubs($container, onStats) {
} }
// Render all club cards, then load courts for each // Render all club cards, then load courts for each
const $grid = $('<div class="admin-cards-grid"></div>'); const $grid = $('<div class="row g-3"></div>');
let courtTotal = 0; let courtTotal = 0;
let pending = clubs.length; let pending = clubs.length;
clubs.forEach(club => { clubs.forEach(club => {
const $card = buildClubCard(club); const $card = buildClubCard(club);
$grid.append($card); const $col = $('<div class="col-12 col-md-6 col-xl-4"></div>').append($card);
$grid.append($col);
// Load courts per club // Load courts per club
$.ajax({ $.ajax({

View File

@@ -39,8 +39,11 @@ function loadEvents($container, onStats, page) {
return; return;
} }
const $grid = $('<div class="admin-cards-grid"></div>'); const $grid = $('<div class="row g-3"></div>');
resp.content.forEach(event => $grid.append(buildEventCard(event))); resp.content.forEach(event => {
const $col = $('<div class="col-12 col-md-6 col-xl-4"></div>').append(buildEventCard(event));
$grid.append($col);
});
onStats({ events: resp.totalElements, active: resp.content.length }); onStats({ events: resp.totalElements, active: resp.content.length });
$container.append($grid); $container.append($grid);

View File

@@ -76,7 +76,7 @@ function renderBody(club) {
const $info = $('<div class="club-section row g-4"></div>'); const $info = $('<div class="club-section row g-4"></div>');
// Description // Description
const $descCol = $('<div class="col-lg-8"></div>'); const $descCol = $('<div class="col-12 col-lg-8"></div>');
if (club.description) { if (club.description) {
$descCol.append(` $descCol.append(`
<h2 class="section-title">О клубе</h2> <h2 class="section-title">О клубе</h2>
@@ -100,7 +100,7 @@ function renderBody(club) {
} }
// Contacts // Contacts
const $ctaCol = $('<div class="col-lg-4"></div>'); const $ctaCol = $('<div class="col-12 col-lg-4"></div>');
const contactItems = buildContactItems(club); const contactItems = buildContactItems(club);
if (contactItems.length > 0) { if (contactItems.length > 0) {
$ctaCol.append(` $ctaCol.append(`
@@ -190,7 +190,7 @@ function buildCourtCard(court, club) {
const cover = court.cover ? `<span class="court-cover-badge">${esc(court.cover)}</span>` : ''; const cover = court.cover ? `<span class="court-cover-badge">${esc(court.cover)}</span>` : '';
const price = court.price ? `<span class="fw-bold" style="color:var(--tennis-green)">${court.price} ₽/час</span>` : ''; const price = court.price ? `<span class="fw-bold" style="color:var(--tennis-green)">${court.price} ₽/час</span>` : '';
const $col = $(`<div class="col-md-6 col-lg-4"></div>`); const $col = $(`<div class="col-12 col-md-6 col-lg-4"></div>`);
const $card = $(` const $card = $(`
<div class="court-card"> <div class="court-card">
<img src="${esc(img)}" class="court-img" alt="${esc(court.name)}"> <img src="${esc(img)}" class="court-img" alt="${esc(court.name)}">
@@ -252,7 +252,7 @@ function buildEventCard(event, isUpcoming) {
</button>` </button>`
: ''; : '';
const $col = $('<div class="col-md-6 col-lg-4"></div>'); const $col = $('<div class="col-12 col-md-6 col-lg-4"></div>');
const $card = $(` const $card = $(`
<div class="ev-card h-100"> <div class="ev-card h-100">
<div class="d-flex justify-content-between align-items-start mb-2"> <div class="d-flex justify-content-between align-items-start mb-2">

View File

@@ -36,7 +36,7 @@ function buildClubCard(club) {
: ''; : '';
return $(` return $(`
<div class="col-md-6 col-lg-4"> <div class="col-12 col-lg-4">
<div class="card card-hover club-card h-100"> <div class="card card-hover club-card h-100">
<img src="${img}" class="card-img-top" style="height:200px;object-fit:cover" alt="${club.name}"> <img src="${img}" class="card-img-top" style="height:200px;object-fit:cover" alt="${club.name}">
<div class="card-body"> <div class="card-body">

View File

@@ -43,7 +43,7 @@ function buildEventCard(event) {
}[event.type] || 'bg-secondary'; }[event.type] || 'bg-secondary';
return $(` return $(`
<div class="col-md-6 col-lg-4"> <div class="col-12 col-md-6 col-lg-4">
<div class="card card-hover event-card h-100"> <div class="card card-hover event-card h-100">
<img src="${img}" class="card-img-top" style="height:200px;object-fit:cover" alt="${event.title}"> <img src="${img}" class="card-img-top" style="height:200px;object-fit:cover" alt="${event.title}">
<div class="card-body"> <div class="card-body">

View File

@@ -47,13 +47,13 @@ export function initLoginForm($container) {
</div> </div>
<div class="text-center mt-3"> <div class="text-center mt-3">
<span class="text-muted small">Нет аккаунта?</span> <!-- <span class="text-muted small">Нет аккаунта?</span>-->
<button type="button" class="btn btn-link btn-sm p-0 ms-1" <!-- <button type="button" class="btn btn-link btn-sm p-0 ms-1"-->
data-bs-toggle="modal" data-bs-target="#register-modal" <!-- data-bs-toggle="modal" data-bs-target="#register-modal"-->
style="color:var(--tennis-green);font-size:0.875rem; text-decoration:none;"> <!-- style="color:var(&#45;&#45;tennis-green);font-size:0.875rem; text-decoration:none;">-->
Зарегистрироваться <!-- Зарегистрироваться-->
</button> <!-- </button>-->
</div> <!-- </div>-->
</form> </form>
</div> </div>
</div> </div>

View File

@@ -15,12 +15,12 @@
--tennis-dark: #2c3e50; --tennis-dark: #2c3e50;
--tennis-light: #ecf0f1; --tennis-light: #ecf0f1;
} }
.navbar-brand { .navbar-brand {
font-weight: 800; font-weight: 800;
font-size: 1.8rem; font-size: 1.8rem;
} }
.tennis-bg { .tennis-bg {
background: linear-gradient(rgba(44, 62, 80, 0.9), rgba(44, 62, 80, 0.9)), background: linear-gradient(rgba(44, 62, 80, 0.9), rgba(44, 62, 80, 0.9)),
url('https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height'); url('https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height');
@@ -28,19 +28,19 @@
background-position: center; background-position: center;
color: white; color: white;
} }
.hero-section { .hero-section {
padding: 180px 0 120px; padding: 180px 0 120px;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
} }
.hero-title { .hero-title {
font-size: 3.5rem; font-size: 3.5rem;
font-weight: 800; font-weight: 800;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3); text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
} }
.ball-animation { .ball-animation {
position: absolute; position: absolute;
width: 100px; width: 100px;
@@ -50,56 +50,56 @@
animation: bounce 3s infinite alternate; animation: bounce 3s infinite alternate;
opacity: 0.2; opacity: 0.2;
} }
@keyframes bounce { @keyframes bounce {
0% { transform: translateY(0) rotate(0deg); } 0% { transform: translateY(0) rotate(0deg); }
100% { transform: translateY(-500px) rotate(360deg); } 100% { transform: translateY(-500px) rotate(360deg); }
} }
.ball-1 { .ball-1 {
top: 20%; top: 20%;
left: 10%; left: 10%;
animation-delay: 0s; animation-delay: 0s;
} }
.ball-2 { .ball-2 {
top: 40%; top: 40%;
right: 15%; right: 15%;
animation-delay: 1s; animation-delay: 1s;
background: var(--tennis-orange); background: var(--tennis-orange);
} }
.ball-3 { .ball-3 {
bottom: 30%; bottom: 30%;
left: 20%; left: 20%;
animation-delay: 2s; animation-delay: 2s;
background: var(--tennis-blue); background: var(--tennis-blue);
} }
.card-hover { .card-hover {
transition: transform 0.3s, box-shadow 0.3s; transition: transform 0.3s, box-shadow 0.3s;
border: none; border: none;
border-radius: 15px; border-radius: 15px;
overflow: hidden; overflow: hidden;
} }
.card-hover:hover { .card-hover:hover {
transform: translateY(-10px); transform: translateY(-10px);
box-shadow: 0 15px 30px rgba(0,0,0,0.1); box-shadow: 0 15px 30px rgba(0,0,0,0.1);
} }
.club-card { .club-card {
border-top: 4px solid var(--tennis-green); border-top: 4px solid var(--tennis-green);
} }
.event-card { .event-card {
border-top: 4px solid var(--tennis-orange); border-top: 4px solid var(--tennis-orange);
} }
.admin-card { .admin-card {
border-top: 4px solid var(--tennis-blue); border-top: 4px solid var(--tennis-blue);
} }
.court-icon { .court-icon {
width: 60px; width: 60px;
height: 60px; height: 60px;
@@ -112,7 +112,7 @@
font-size: 24px; font-size: 24px;
margin: 0 auto 15px; margin: 0 auto 15px;
} }
.event-date { .event-date {
position: absolute; position: absolute;
top: 15px; top: 15px;
@@ -123,24 +123,24 @@
border-radius: 10px; border-radius: 10px;
font-weight: 600; font-weight: 600;
} }
.badge-tennis { .badge-tennis {
background: var(--tennis-green); background: var(--tennis-green);
color: white; color: white;
} }
.stats-number { .stats-number {
font-size: 2.5rem; font-size: 2.5rem;
font-weight: 700; font-weight: 700;
color: var(--tennis-green); color: var(--tennis-green);
line-height: 1; line-height: 1;
} }
.timeline { .timeline {
position: relative; position: relative;
padding-left: 30px; padding-left: 30px;
} }
.timeline::before { .timeline::before {
content: ''; content: '';
position: absolute; position: absolute;
@@ -150,12 +150,12 @@
width: 3px; width: 3px;
background: var(--tennis-green); background: var(--tennis-green);
} }
.timeline-item { .timeline-item {
position: relative; position: relative;
margin-bottom: 30px; margin-bottom: 30px;
} }
.timeline-item::before { .timeline-item::before {
content: ''; content: '';
position: absolute; position: absolute;
@@ -168,12 +168,12 @@
border: 3px solid white; border: 3px solid white;
box-shadow: 0 0 0 3px var(--tennis-green); box-shadow: 0 0 0 3px var(--tennis-green);
} }
.form-control:focus { .form-control:focus {
border-color: var(--tennis-green); border-color: var(--tennis-green);
box-shadow: 0 0 0 0.25rem rgba(46, 204, 113, 0.25); box-shadow: 0 0 0 0.25rem rgba(46, 204, 113, 0.25);
} }
.btn-tennis { .btn-tennis {
background: var(--tennis-green); background: var(--tennis-green);
border: none; border: none;
@@ -183,14 +183,14 @@
font-weight: 600; font-weight: 600;
transition: all 0.3s; transition: all 0.3s;
} }
.btn-tennis:hover { .btn-tennis:hover {
background: #27ae60; background: #27ae60;
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(46, 204, 113, 0.3); box-shadow: 0 5px 15px rgba(46, 204, 113, 0.3);
color: white; color: white;
} }
.btn-outline-tennis { .btn-outline-tennis {
border: 2px solid var(--tennis-green); border: 2px solid var(--tennis-green);
color: var(--tennis-green); color: var(--tennis-green);
@@ -199,24 +199,24 @@
font-weight: 600; font-weight: 600;
transition: all 0.3s; transition: all 0.3s;
} }
.btn-outline-tennis:hover { .btn-outline-tennis:hover {
background: var(--tennis-green); background: var(--tennis-green);
color: white; color: white;
transform: translateY(-2px); transform: translateY(-2px);
} }
.nav-pills .nav-link.active { .nav-pills .nav-link.active {
background: var(--tennis-green); background: var(--tennis-green);
} }
.tab-content { .tab-content {
border: 1px solid #dee2e6; border: 1px solid #dee2e6;
border-top: none; border-top: none;
border-radius: 0 0 10px 10px; border-radius: 0 0 10px 10px;
padding: 30px; padding: 30px;
} }
.court-table { .court-table {
width: 100%; width: 100%;
border-collapse: separate; border-collapse: separate;
@@ -225,43 +225,43 @@
overflow: hidden; overflow: hidden;
box-shadow: 0 5px 15px rgba(0,0,0,0.05); box-shadow: 0 5px 15px rgba(0,0,0,0.05);
} }
.court-table th { .court-table th {
background: var(--tennis-green); background: var(--tennis-green);
color: white; color: white;
padding: 15px; padding: 15px;
text-align: center; text-align: center;
} }
.court-table td { .court-table td {
padding: 12px; padding: 12px;
text-align: center; text-align: center;
border-bottom: 1px solid #dee2e6; border-bottom: 1px solid #dee2e6;
} }
.court-available { .court-available {
background: rgba(46, 204, 113, 0.1); background: rgba(46, 204, 113, 0.1);
color: var(--tennis-green); color: var(--tennis-green);
font-weight: 600; font-weight: 600;
} }
.court-booked { .court-booked {
background: rgba(231, 76, 60, 0.1); background: rgba(231, 76, 60, 0.1);
color: #e74c3c; color: #e74c3c;
font-weight: 600; font-weight: 600;
} }
.court-time { .court-time {
font-weight: 600; font-weight: 600;
color: var(--tennis-dark); color: var(--tennis-dark);
} }
footer { footer {
background: var(--tennis-dark); background: var(--tennis-dark);
color: white; color: white;
padding: 60px 0 30px; padding: 60px 0 30px;
} }
.social-icon { .social-icon {
width: 40px; width: 40px;
height: 40px; height: 40px;
@@ -273,40 +273,40 @@
margin-right: 10px; margin-right: 10px;
transition: all 0.3s; transition: all 0.3s;
} }
.social-icon:hover { .social-icon:hover {
background: var(--tennis-green); background: var(--tennis-green);
transform: translateY(-3px); transform: translateY(-3px);
} }
.admin-section { .admin-section {
background: #f8f9fa; background: #f8f9fa;
border-radius: 15px; border-radius: 15px;
padding: 30px; padding: 30px;
margin-top: 30px; margin-top: 30px;
} }
@media (max-width: 768px) { @media (max-width: 768px) {
.hero-title { .hero-title {
font-size: 2.5rem; font-size: 2.5rem;
} }
.hero-section { .hero-section {
padding: 120px 0 80px; padding: 120px 0 80px;
} }
.stats-number { .stats-number {
font-size: 2rem; font-size: 2rem;
} }
} }
.court-grid { .court-grid {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 15px; gap: 15px;
margin-top: 20px; margin-top: 20px;
} }
.court-item { .court-item {
background: white; background: white;
border: 2px solid #e0e0e0; border: 2px solid #e0e0e0;
@@ -316,16 +316,16 @@
transition: all 0.3s; transition: all 0.3s;
cursor: pointer; cursor: pointer;
} }
.court-item.available { .court-item.available {
border-color: var(--tennis-green); border-color: var(--tennis-green);
} }
.court-item.booked { .court-item.booked {
border-color: #e74c3c; border-color: #e74c3c;
opacity: 0.7; opacity: 0.7;
} }
.court-item:hover { .court-item:hover {
transform: translateY(-3px); transform: translateY(-3px);
box-shadow: 0 5px 15px rgba(0,0,0,0.1); box-shadow: 0 5px 15px rgba(0,0,0,0.1);
@@ -369,7 +369,7 @@
<div class="ball-animation ball-1"></div> <div class="ball-animation ball-1"></div>
<div class="ball-animation ball-2"></div> <div class="ball-animation ball-2"></div>
<div class="ball-animation ball-3"></div> <div class="ball-animation ball-3"></div>
<div class="container"> <div class="container">
<div class="row align-items-center"> <div class="row align-items-center">
<div class="col-lg-6"> <div class="col-lg-6">
@@ -385,8 +385,8 @@
</div> </div>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<img src="https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height" <img src="https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height"
class="img-fluid rounded-3 shadow-lg" class="img-fluid rounded-3 shadow-lg"
alt="Теннисный корт"> alt="Теннисный корт">
</div> </div>
</div> </div>
@@ -426,12 +426,12 @@
<p class="text-muted">Найдите идеальный клуб для тренировок и игр</p> <p class="text-muted">Найдите идеальный клуб для тренировок и игр</p>
</div> </div>
</div> </div>
<div class="row g-4"> <div class="row g-4">
<div class="col-md-4"> <div class="col-md-4">
<div class="card card-hover club-card"> <div class="card card-hover club-card">
<img src="https://avatars.mds.yandex.net/get-altay/13234017/2a0000018f10863585acfe01f89a2cc9f5bf/XXL_height" <img src="https://avatars.mds.yandex.net/get-altay/13234017/2a0000018f10863585acfe01f89a2cc9f5bf/XXL_height"
class="card-img-top" class="card-img-top"
height="200" height="200"
style="object-fit: cover;" style="object-fit: cover;"
alt="Премиум клуб"> alt="Премиум клуб">
@@ -453,11 +453,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<div class="card card-hover club-card"> <div class="card card-hover club-card">
<img src="https://avatars.mds.yandex.net/get-altay/9717139/2a00000189f35961d519003fa4d01c7abc03/XXXL" <img src="https://avatars.mds.yandex.net/get-altay/9717139/2a00000189f35961d519003fa4d01c7abc03/XXXL"
class="card-img-top" class="card-img-top"
height="200" height="200"
style="object-fit: cover;" style="object-fit: cover;"
alt="Семейный клуб"> alt="Семейный клуб">
@@ -479,11 +479,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<div class="card card-hover club-card"> <div class="card card-hover club-card">
<img src="https://avatars.mds.yandex.net/get-altay/9704097/2a000001879afb065e3d55101628110130ad/XXL_height" <img src="https://avatars.mds.yandex.net/get-altay/9704097/2a000001879afb065e3d55101628110130ad/XXL_height"
class="card-img-top" class="card-img-top"
height="200" height="200"
style="object-fit: cover;" style="object-fit: cover;"
alt="Клуб для начинающих"> alt="Клуб для начинающих">
@@ -506,7 +506,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="text-center mt-5"> <div class="text-center mt-5">
<button class="btn btn-outline-tennis"> <button class="btn btn-outline-tennis">
<i class="fas fa-plus me-2"></i>Показать все клубы (24) <i class="fas fa-plus me-2"></i>Показать все клубы (24)
@@ -524,7 +524,7 @@
<p class="text-muted">Участвуйте в соревнованиях и теннисных событиях</p> <p class="text-muted">Участвуйте в соревнованиях и теннисных событиях</p>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<div class="row g-4"> <div class="row g-4">
@@ -533,8 +533,8 @@
<div class="event-date"> <div class="event-date">
15-18 НОЯ 15-18 НОЯ
</div> </div>
<img src="https://shvsm-penza.ru/wp-content/uploads/2021/08/%D0%A2%D0%B5%D0%BD%D0%BD%D0%B8%D1%81-3.jpg" <img src="https://shvsm-penza.ru/wp-content/uploads/2021/08/%D0%A2%D0%B5%D0%BD%D0%BD%D0%B8%D1%81-3.jpg"
class="card-img-top" class="card-img-top"
height="180" height="180"
style="object-fit: cover;" style="object-fit: cover;"
alt="Чемпионат города"> alt="Чемпионат города">
@@ -549,14 +549,14 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="card card-hover event-card position-relative"> <div class="card card-hover event-card position-relative">
<div class="event-date"> <div class="event-date">
22-24 НОЯ 22-24 НОЯ
</div> </div>
<img src="https://cspovsmo.ru/wp-content/uploads/2022/06/%D1%82%D0%B5%D0%BD%D0%BD%D0%B8%D1%81-3.jpg" <img src="https://cspovsmo.ru/wp-content/uploads/2022/06/%D1%82%D0%B5%D0%BD%D0%BD%D0%B8%D1%81-3.jpg"
class="card-img-top" class="card-img-top"
height="180" height="180"
style="object-fit: cover;" style="object-fit: cover;"
alt="Детский турнир"> alt="Детский турнир">
@@ -572,7 +572,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="mt-5"> <div class="mt-5">
<h4 class="mb-4">Расписание событий</h4> <h4 class="mb-4">Расписание событий</h4>
<div class="timeline"> <div class="timeline">
@@ -594,7 +594,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
<div class="card"> <div class="card">
<div class="card-header bg-success text-white"> <div class="card-header bg-success text-white">
@@ -651,7 +651,7 @@
<p class="text-muted">Забронируйте корт онлайн в удобное время</p> <p class="text-muted">Забронируйте корт онлайн в удобное время</p>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<div class="card"> <div class="card">
@@ -667,7 +667,7 @@
<button class="nav-link" id="week-tab" data-bs-toggle="pill" data-bs-target="#week">Неделя</button> <button class="nav-link" id="week-tab" data-bs-toggle="pill" data-bs-target="#week">Неделя</button>
</li> </li>
</ul> </ul>
<div class="tab-content" id="bookingTabContent"> <div class="tab-content" id="bookingTabContent">
<div class="tab-pane fade show active" id="today"> <div class="tab-pane fade show active" id="today">
<h5 class="mb-3">Доступные корты на сегодня</h5> <h5 class="mb-3">Доступные корты на сегодня</h5>
@@ -704,11 +704,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="tab-pane fade" id="tomorrow"> <div class="tab-pane fade" id="tomorrow">
<!-- Контент для завтра --> <!-- Контент для завтра -->
</div> </div>
<div class="tab-pane fade" id="week"> <div class="tab-pane fade" id="week">
<!-- Контент для недели --> <!-- Контент для недели -->
</div> </div>
@@ -716,7 +716,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
<div class="card"> <div class="card">
<div class="card-header bg-primary text-white"> <div class="card-header bg-primary text-white">
@@ -747,7 +747,7 @@
<p class="text-muted">Управляйте клубами, событиями и пользователями</p> <p class="text-muted">Управляйте клубами, событиями и пользователями</p>
</div> </div>
</div> </div>
<div class="admin-section"> <div class="admin-section">
<div class="row"> <div class="row">
<div class="col-md-4 mb-4"> <div class="col-md-4 mb-4">
@@ -764,7 +764,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-4 mb-4"> <div class="col-md-4 mb-4">
<div class="card admin-card card-hover"> <div class="card admin-card card-hover">
<div class="card-body text-center p-4"> <div class="card-body text-center p-4">
@@ -779,7 +779,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-4 mb-4"> <div class="col-md-4 mb-4">
<div class="card admin-card card-hover"> <div class="card admin-card card-hover">
<div class="card-body text-center p-4"> <div class="card-body text-center p-4">
@@ -795,7 +795,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row mt-4"> <div class="row mt-4">
<div class="col-12"> <div class="col-12">
<div class="card"> <div class="card">
@@ -833,7 +833,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row mt-4"> <div class="row mt-4">
<div class="col-12"> <div class="col-12">
<div class="card"> <div class="card">
@@ -877,7 +877,7 @@
<a href="#" class="social-icon"><i class="fab fa-youtube"></i></a> <a href="#" class="social-icon"><i class="fab fa-youtube"></i></a>
</div> </div>
</div> </div>
<div class="col-lg-2 col-md-4 mb-4"> <div class="col-lg-2 col-md-4 mb-4">
<h5>Разделы</h5> <h5>Разделы</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
@@ -887,7 +887,7 @@
<li><a href="#admin" class="text-light text-decoration-none">Админка</a></li> <li><a href="#admin" class="text-light text-decoration-none">Админка</a></li>
</ul> </ul>
</div> </div>
<div class="col-lg-3 col-md-4 mb-4"> <div class="col-lg-3 col-md-4 mb-4">
<h5>Помощь</h5> <h5>Помощь</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
@@ -897,7 +897,7 @@
<li><a href="#" class="text-light text-decoration-none">Контакты</a></li> <li><a href="#" class="text-light text-decoration-none">Контакты</a></li>
</ul> </ul>
</div> </div>
<div class="col-lg-3 col-md-4 mb-4"> <div class="col-lg-3 col-md-4 mb-4">
<h5>Контакты</h5> <h5>Контакты</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
@@ -907,9 +907,9 @@
</ul> </ul>
</div> </div>
</div> </div>
<hr class="my-4"> <hr class="my-4">
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<p>© 2024 TennisHub. Все права защищены.</p> <p>© 2024 TennisHub. Все права защищены.</p>
@@ -994,7 +994,7 @@
// Инициализация модальных окон // Инициализация модальных окон
const loginModal = new bootstrap.Modal(document.getElementById('loginModal')); const loginModal = new bootstrap.Modal(document.getElementById('loginModal'));
const bookingModal = new bootstrap.Modal(document.getElementById('bookingModal')); const bookingModal = new bootstrap.Modal(document.getElementById('bookingModal'));
// Данные системы // Данные системы
let bookings = []; let bookings = [];
let events = []; let events = [];
@@ -1003,12 +1003,12 @@
{ id: 2, name: 'Family Tennis', courts: 8, price: 800 }, { id: 2, name: 'Family Tennis', courts: 8, price: 800 },
{ id: 3, name: 'Start Tennis', courts: 6, price: 500 } { id: 3, name: 'Start Tennis', courts: 6, price: 500 }
]; ];
// Функции показа модальных окон // Функции показа модальных окон
function showLoginModal() { function showLoginModal() {
loginModal.show(); loginModal.show();
} }
// Бронирование корта // Бронирование корта
function bookCourt(courtNumber) { function bookCourt(courtNumber) {
const courtInfo = `Корт #${courtNumber} • Tennis Premium Club`; const courtInfo = `Корт #${courtNumber} • Tennis Premium Club`;
@@ -1016,64 +1016,64 @@
document.getElementById('bookingDateTime').value = 'Сегодня, 10:00-11:00'; document.getElementById('bookingDateTime').value = 'Сегодня, 10:00-11:00';
bookingModal.show(); bookingModal.show();
} }
// Просмотр деталей клуба // Просмотр деталей клуба
function viewClubDetails(clubId) { function viewClubDetails(clubId) {
const club = clubs.find(c => c.id === clubId); const club = clubs.find(c => c.id === clubId);
alert(`Клуб: ${club.name}\nКортов: ${club.courts}\nЦена от: ${club.price}₽/час`); alert(`Клуб: ${club.name}\nКортов: ${club.courts}\nЦена от: ${club.price}₽/час`);
} }
// Регистрация на событие // Регистрация на событие
function registerForEvent(eventId) { function registerForEvent(eventId) {
alert('Вы зарегистрированы на событие! Подтверждение отправлено на email.'); alert('Вы зарегистрированы на событие! Подтверждение отправлено на email.');
} }
// Админские функции // Админские функции
function manageClubs() { function manageClubs() {
alert('Переход в панель управления клубами'); alert('Переход в панель управления клубами');
// Здесь будет переход на страницу управления // Здесь будет переход на страницу управления
} }
function manageEvents() { function manageEvents() {
alert('Переход в панель управления событиями'); alert('Переход в панель управления событиями');
} }
function manageUsers() { function manageUsers() {
alert('Переход в панель управления пользователями'); alert('Переход в панель управления пользователями');
} }
function addNewClub() { function addNewClub() {
alert('Форма добавления нового клуба'); alert('Форма добавления нового клуба');
} }
function createTournament() { function createTournament() {
alert('Создание нового турнира'); alert('Создание нового турнира');
} }
function sendNotification() { function sendNotification() {
alert('Отправка уведомления пользователям'); alert('Отправка уведомления пользователям');
} }
function generateReport() { function generateReport() {
alert('Генерация отчета по активности'); alert('Генерация отчета по активности');
} }
function showBookingHistory() { function showBookingHistory() {
alert('Показать историю бронирований'); alert('Показать историю бронирований');
} }
// Обработка форм // Обработка форм
document.getElementById('loginForm').addEventListener('submit', function(e) { document.getElementById('loginForm').addEventListener('submit', function(e) {
e.preventDefault(); e.preventDefault();
alert('Вход выполнен успешно!'); alert('Вход выполнен успешно!');
loginModal.hide(); loginModal.hide();
}); });
document.getElementById('bookingForm').addEventListener('submit', function(e) { document.getElementById('bookingForm').addEventListener('submit', function(e) {
e.preventDefault(); e.preventDefault();
alert('Корт успешно забронирован!'); alert('Корт успешно забронирован!');
bookingModal.hide(); bookingModal.hide();
// Добавляем бронирование // Добавляем бронирование
const booking = { const booking = {
id: bookings.length + 1, id: bookings.length + 1,
@@ -1081,19 +1081,19 @@
date: document.getElementById('bookingDateTime').value, date: document.getElementById('bookingDateTime').value,
duration: document.getElementById('duration').value duration: document.getElementById('duration').value
}; };
bookings.push(booking); bookings.push(booking);
updateBookingsDisplay(); updateBookingsDisplay();
updateStats(); updateStats();
}); });
document.getElementById('createEventForm').addEventListener('submit', function(e) { document.getElementById('createEventForm').addEventListener('submit', function(e) {
e.preventDefault(); e.preventDefault();
alert('Событие создано! Ожидает модерации.'); alert('Событие создано! Ожидает модерации.');
this.reset(); this.reset();
updateStats(); updateStats();
}); });
// Обновление отображения бронирований // Обновление отображения бронирований
function updateBookingsDisplay() { function updateBookingsDisplay() {
const bookingsContainer = document.getElementById('myBookings'); const bookingsContainer = document.getElementById('myBookings');
@@ -1108,26 +1108,26 @@
`).join(''); `).join('');
} }
} }
// Обновление статистики // Обновление статистики
function updateStats() { function updateStats() {
document.getElementById('activeBookings').textContent = bookings.length; document.getElementById('activeBookings').textContent = bookings.length;
document.getElementById('pendingEvents').textContent = Math.floor(Math.random() * 5) + 1; document.getElementById('pendingEvents').textContent = Math.floor(Math.random() * 5) + 1;
document.getElementById('newUsers').textContent = Math.floor(Math.random() * 10) + 1; document.getElementById('newUsers').textContent = Math.floor(Math.random() * 10) + 1;
} }
// Инициализация // Инициализация
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
updateBookingsDisplay(); updateBookingsDisplay();
updateStats(); updateStats();
// Плавная прокрутка // Плавная прокрутка
document.querySelectorAll('a[href^="#"]').forEach(anchor => { document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) { anchor.addEventListener('click', function(e) {
e.preventDefault(); e.preventDefault();
const targetId = this.getAttribute('href'); const targetId = this.getAttribute('href');
if (targetId === '#') return; if (targetId === '#') return;
const targetElement = document.querySelector(targetId); const targetElement = document.querySelector(targetId);
if (targetElement) { if (targetElement) {
targetElement.scrollIntoView({ targetElement.scrollIntoView({
@@ -1137,7 +1137,7 @@
} }
}); });
}); });
// Анимация при прокрутке // Анимация при прокрутке
window.addEventListener('scroll', function() { window.addEventListener('scroll', function() {
const nav = document.querySelector('.navbar'); const nav = document.querySelector('.navbar');

View File

@@ -38,10 +38,6 @@
font-size: 1.8rem; font-size: 1.8rem;
font-weight: 700; font-weight: 700;
color: var(--tennis-dark); color: var(--tennis-dark);
margin-bottom: 25px;
display: flex;
align-items: center;
justify-content: space-between;
} }
.section-title i { .section-title i {
@@ -282,13 +278,6 @@
color: #666; color: #666;
} }
.stats-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.stat-card { .stat-card {
background: white; background: white;
border-radius: 10px; border-radius: 10px;
@@ -333,12 +322,6 @@
} }
/* ── Cards grid ── */ /* ── Cards grid ── */
.admin-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 20px;
}
/* ── Image uploader ── */ /* ── Image uploader ── */
.img-uploader { .img-uploader {
position: relative; position: relative;
@@ -610,6 +593,32 @@
border-radius: 3px; border-radius: 3px;
padding: 3px 8px; padding: 3px 8px;
} }
@media (max-width: 767px) {
.admin-header {
padding: 35px 0;
}
.admin-title {
font-size: 1.6rem;
margin-bottom: 10px;
}
.admin-subtitle {
font-size: 0.95rem;
}
.section-card {
padding: 18px 14px;
}
.section-title {
font-size: 1.3rem;
}
.apps-filter-bar {
flex-direction: column;
}
.apps-filter-bar .form-select {
max-width: 100%;
min-width: 0;
}
}
</style> </style>
<!-- ── Admin header ── --> <!-- ── Admin header ── -->
@@ -623,30 +632,38 @@
<div class="container"> <div class="container">
<!-- ── Stats ── --> <!-- ── Stats ── -->
<div class="stats-row mb-4"> <div class="row g-3 mb-4">
<div class="stat-card"> <div class="col-6 col-md-3">
<div class="stat-number" id="stat-clubs"></div> <div class="stat-card">
<div class="stat-label">Мои клубы</div> <div class="stat-number" id="stat-clubs"></div>
<div class="stat-label">Мои клубы</div>
</div>
</div> </div>
<div class="stat-card"> <div class="col-6 col-md-3">
<div class="stat-number" id="stat-courts"></div> <div class="stat-card">
<div class="stat-label">Всего кортов</div> <div class="stat-number" id="stat-courts"></div>
<div class="stat-label">Всего кортов</div>
</div>
</div> </div>
<div class="stat-card"> <div class="col-6 col-md-3">
<div class="stat-number" id="stat-events"></div> <div class="stat-card">
<div class="stat-label">Мероприятия</div> <div class="stat-number" id="stat-events"></div>
<div class="stat-label">Мероприятия</div>
</div>
</div> </div>
<div class="stat-card"> <div class="col-6 col-md-3">
<div class="stat-number" id="stat-active"></div> <div class="stat-card">
<div class="stat-label">На этой странице</div> <div class="stat-number" id="stat-active"></div>
<div class="stat-label">На этой странице</div>
</div>
</div> </div>
</div> </div>
<!-- ── Clubs section ── --> <!-- ── Clubs section ── -->
<div class="section-card"> <div class="section-card">
<div class="section-title"> <div class="section-title d-flex flex-column flex-sm-row justify-content-start justify-content-sm-between align-items-start align-items-sm-center gap-2 mb-3">
<span><i class="bi bi-building me-2"></i>Мои теннисные клубы</span> <span><i class="bi bi-building me-2"></i>Мои теннисные клубы</span>
<button class="btn-admin fs-5" data-bs-toggle="modal" data-bs-target="#create-club-modal"> <button class="btn-admin" data-bs-toggle="modal" data-bs-target="#create-club-modal">
<i class="bi bi-plus-circle me-1"></i>Добавить клуб <i class="bi bi-plus-circle me-1"></i>Добавить клуб
</button> </button>
</div> </div>
@@ -655,7 +672,7 @@
<!-- ── Events section ── --> <!-- ── Events section ── -->
<div class="section-card"> <div class="section-card">
<div class="section-title"> <div class="section-title d-flex flex-column flex-sm-row justify-content-start justify-content-sm-between align-items-start align-items-sm-center gap-2 mb-3">
<span><i class="bi bi-calendar-event me-2"></i>Мероприятия</span> <span><i class="bi bi-calendar-event me-2"></i>Мероприятия</span>
<button class="btn-admin" data-bs-toggle="modal" data-bs-target="#create-event-modal"> <button class="btn-admin" data-bs-toggle="modal" data-bs-target="#create-event-modal">
<i class="bi bi-plus-circle me-1"></i>Создать мероприятие <i class="bi bi-plus-circle me-1"></i>Создать мероприятие
@@ -666,7 +683,7 @@
<!-- ── Applications section ── --> <!-- ── Applications section ── -->
<div class="section-card" id="applications-section"> <div class="section-card" id="applications-section">
<div class="section-title"> <div class="section-title mb-3">
<span><i class="bi bi-people me-2"></i>Заявки на участие</span> <span><i class="bi bi-people me-2"></i>Заявки на участие</span>
</div> </div>
<div id="admin-applications-container"></div> <div id="admin-applications-container"></div>

View File

@@ -101,6 +101,16 @@
color: var(--tennis-dark); color: var(--tennis-dark);
margin-bottom: 0; margin-bottom: 0;
} }
@media (max-width: 767px) {
.admin-section {
padding: 35px 0;
}
.form-custom {
padding: 20px 14px;
border-radius: 10px;
}
}
</style> </style>
<div class="admin-section"> <div class="admin-section">

View File

@@ -145,6 +145,24 @@
background: var(--tennis-green); color: #fff; background: var(--tennis-green); color: #fff;
border-color: var(--tennis-green); border-color: var(--tennis-green);
} }
@media (max-width: 767px) {
.club-hero {
height: 220px;
}
.club-hero-title {
font-size: 1.6rem;
}
.club-section {
padding: 28px 0;
}
.section-title {
font-size: 1.15rem;
}
.booking-time-grid {
grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
}
}
</style> </style>
<!-- ── Hero ── --> <!-- ── Hero ── -->

View File

@@ -82,6 +82,16 @@
color: var(--tennis-dark); color: var(--tennis-dark);
margin-bottom: 8px; margin-bottom: 8px;
} }
@media (max-width: 767px) {
.admin-section {
padding: 35px 0;
}
.form-custom {
padding: 20px 14px;
border-radius: 10px;
}
}
</style> </style>
<div class="admin-section"> <div class="admin-section">

View File

@@ -1,28 +1,20 @@
<style> <style>
:root {
--tennis-green: #2ecc71;
--tennis-blue: #3498db;
--tennis-orange: #e67e22;
--tennis-dark: #2c3e50;
--tennis-light: #ecf0f1;
}
.tennis-bg { .tennis-bg {
background: linear-gradient(rgba(44,62,80,0.88), rgba(44,62,80,0.88)), background: linear-gradient(rgba(44,62,80,0.9), rgba(44,62,80,0.9)),
url('https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height'); url('https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height');
background-size: cover; background-size: cover;
background-position: center; background-position: center;
}
.hero-section {
padding: 130px 0 90px;
position: relative;
overflow: hidden;
color: white; color: white;
} }
.hero-section {
padding: 120px 0 90px;
position: relative;
overflow: hidden;
}
.hero-title { .hero-title {
font-size: 3.2rem; font-size: 3.5rem;
font-weight: 800; font-weight: 800;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3); text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
} }
@@ -42,9 +34,9 @@
100% { transform: translateY(-300px) rotate(360deg); } 100% { transform: translateY(-300px) rotate(360deg); }
} }
.ball-1 { top: 35%; left: 7%; background: var(--tennis-green); animation-delay: 0s; } .ball-1 { top: 35%; left: 7%; background: var(--tennis-green); animation-delay: 0s; }
.ball-2 { top: 55%; right: 10%; background: var(--tennis-orange); animation-delay: 1s; } .ball-2 { top: 55%; right: 10%; background: var(--tennis-orange); animation-delay: 1s; }
.ball-3 { bottom: 15%; left: 22%; background: var(--tennis-blue); animation-delay: 2s; } .ball-3 { bottom: 15%; left: 22%; background: #3498db; animation-delay: 2s; }
.card-hover { .card-hover {
transition: transform 0.3s, box-shadow 0.3s; transition: transform 0.3s, box-shadow 0.3s;
@@ -65,23 +57,18 @@
background: var(--tennis-green); background: var(--tennis-green);
color: #fff; color: #fff;
border: none; border: none;
border-radius: 20px; border-radius: 8px;
padding: 5px 16px; padding: 6px 16px;
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 600;
transition: background 0.2s; transition: background 0.2s;
} }
.btn-tennis-green:hover { background: #27ae60; color: #fff; } .btn-tennis-green:hover { background: #27ae60; color: #fff; }
.section-heading { @media (max-width: 768px) {
font-size: 2rem; .hero-title { font-size: 2.2rem; }
font-weight: 700; .hero-section { padding: 60px 0 50px; }
color: var(--tennis-dark); .hero-img { display: none; }
}
.cta-section {
background: linear-gradient(135deg, var(--tennis-dark) 0%, #34495e 100%);
color: white;
padding: 80px 0;
} }
</style> </style>
@@ -90,47 +77,62 @@
<div class="ball-animation ball-1"></div> <div class="ball-animation ball-1"></div>
<div class="ball-animation ball-2"></div> <div class="ball-animation ball-2"></div>
<div class="ball-animation ball-3"></div> <div class="ball-animation ball-3"></div>
<div class="container text-center position-relative"> <div class="container">
<h1 class="hero-title mb-4">Найдите свой теннисный клуб</h1> <div class="row align-items-center">
<p class="fs-5 mb-5" style="opacity:0.8">Сотни клубов, кортов и мероприятий в одном месте</p> <div class="col-lg-6">
<div class="d-flex gap-3 justify-content-center flex-wrap"> <h1 class="hero-title mb-4">Найдите свой теннисный клуб</h1>
<a href="#clubs-section" class="btn btn-lg fw-bold px-4 py-2" <p class="lead mb-4" style="opacity:0.85">
style="background:var(--tennis-green);color:#fff;border-radius:30px"> Сотни клубов, кортов и мероприятий в одном месте
<i class="bi bi-search me-2"></i>Найти клуб </p>
</a> <div class="d-flex flex-wrap gap-3">
<a href="/admin" class="btn btn-lg fw-bold px-4 py-2" <a href="#clubs-section" class="btn btn-tennis">
style="border:2px solid rgba(255,255,255,0.8);color:#fff;border-radius:30px"> <i class="bi bi-search me-2"></i>Найти клуб
<i class="bi bi-building-add me-2"></i>Для организаций </a>
</a> <a href="/admin" class="btn btn-outline-light">
<i class="bi bi-building-add me-2"></i>Для организаций
</a>
</div>
</div>
<div class="col-lg-6 hero-img mt-4 mt-lg-0">
<img src="https://avatars.mds.yandex.net/get-altay/1880524/2a0000016ef11d02f18395e01a44f0ddbdb7/XXL_height"
class="img-fluid rounded-3 shadow-lg" alt="Теннисный корт">
</div>
</div> </div>
</div> </div>
</section> </section>
<!-- ── Clubs ── --> <!-- ── Clubs ── -->
<section class="py-5" id="clubs-section"> <section id="clubs-section" class="py-5 bg-light">
<div class="container"> <div class="container">
<h2 class="section-heading text-center mb-2">Теннисные клубы</h2> <div class="row mb-4">
<p class="text-center text-muted mb-4">Найдите клуб рядом с вами</p> <div class="col-lg-8 mx-auto text-center">
<h2 class="fw-bold mb-2">Теннисные клубы</h2>
<p class="text-muted">Найдите идеальный клуб для тренировок и игр</p>
</div>
</div>
<div id="home-clubs-container"></div> <div id="home-clubs-container"></div>
</div> </div>
</section> </section>
<!-- ── Events ── --> <!-- ── Events ── -->
<section class="py-5" id="events-section" style="background:#f8f9fa"> <section id="events-section" class="py-5">
<div class="container"> <div class="container">
<h2 class="section-heading text-center mb-2">Ближайшие мероприятия</h2> <div class="row mb-4">
<p class="text-center text-muted mb-4">Турниры, тренировки и лагеря</p> <div class="col-lg-8 mx-auto text-center">
<h2 class="fw-bold mb-2">Ближайшие мероприятия</h2>
<p class="text-muted">Турниры, тренировки и лагеря</p>
</div>
</div>
<div id="home-events-container"></div> <div id="home-events-container"></div>
</div> </div>
</section> </section>
<!-- ── CTA ── --> <!-- ── CTA ── -->
<section class="cta-section"> <section class="py-5" style="background:linear-gradient(135deg,#2c3e50 0%,#34495e 100%);color:white">
<div class="container text-center"> <div class="container text-center">
<h2 class="fw-bold mb-3" style="font-size:2.2rem">Вы владелец теннисного клуба?</h2> <h2 class="fw-bold mb-3">Вы владелец теннисного клуба?</h2>
<p class="fs-5 mb-4" style="opacity:0.75">Разместите свой клуб и привлекайте новых игроков</p> <p class="lead mb-4" style="opacity:0.8">Разместите свой клуб и привлекайте новых игроков</p>
<a href="/admin" class="btn btn-lg fw-bold px-5 py-3" <a href="/admin" class="btn btn-tennis btn-lg px-5">
style="background:var(--tennis-green);color:#fff;border-radius:30px">
<i class="bi bi-plus-circle me-2"></i>Добавить клуб <i class="bi bi-plus-circle me-2"></i>Добавить клуб
</a> </a>
</div> </div>

View File

@@ -2,6 +2,7 @@
<html lang="ru"> <html lang="ru">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title th:text="${title}"></title> <title th:text="${title}"></title>
<link href="/css/style.css" rel="stylesheet"> <link href="/css/style.css" rel="stylesheet">
<link href="/js/fw/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="/js/fw/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">