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

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);
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";
: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 {
font-size: 0.68rem;
font-weight: 700;

View File

@@ -1,6 +1,6 @@
/*!
* Bootstrap Grid v5.3.8 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap Grid v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
.container,
@@ -73,7 +73,7 @@
}
.col {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-auto > * {
@@ -282,7 +282,7 @@
@media (min-width: 576px) {
.col-sm {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-sm-auto > * {
flex: 0 0 auto;
@@ -451,7 +451,7 @@
}
@media (min-width: 768px) {
.col-md {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-md-auto > * {
flex: 0 0 auto;
@@ -620,7 +620,7 @@
}
@media (min-width: 992px) {
.col-lg {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-lg-auto > * {
flex: 0 0 auto;
@@ -789,7 +789,7 @@
}
@media (min-width: 1200px) {
.col-xl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xl-auto > * {
flex: 0 0 auto;
@@ -958,7 +958,7 @@
}
@media (min-width: 1400px) {
.col-xxl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xxl-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/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap Grid v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
.container,
@@ -73,7 +73,7 @@
}
.col {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-auto > * {
@@ -282,7 +282,7 @@
@media (min-width: 576px) {
.col-sm {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-sm-auto > * {
flex: 0 0 auto;
@@ -451,7 +451,7 @@
}
@media (min-width: 768px) {
.col-md {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-md-auto > * {
flex: 0 0 auto;
@@ -620,7 +620,7 @@
}
@media (min-width: 992px) {
.col-lg {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-lg-auto > * {
flex: 0 0 auto;
@@ -789,7 +789,7 @@
}
@media (min-width: 1200px) {
.col-xl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xl-auto > * {
flex: 0 0 auto;
@@ -958,7 +958,7 @@
}
@media (min-width: 1400px) {
.col-xxl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xxl-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/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
@@ -516,8 +516,8 @@ legend {
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
@@ -546,10 +546,6 @@ legend + * {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
/* rtl:raw:
[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/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
@@ -516,8 +516,8 @@ legend {
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
@@ -546,10 +546,6 @@ legend + * {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
[type="tel"],
[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/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap Utilities v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
@@ -519,10 +519,6 @@
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important;
}
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after {
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/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap Utilities v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
@@ -519,10 +519,6 @@
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important;
}
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after {
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";
/*!
* Bootstrap v5.3.8 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
@@ -517,8 +517,8 @@ legend {
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
@@ -547,10 +547,6 @@ legend + * {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
/* rtl:raw:
[type="tel"],
@@ -605,9 +601,9 @@ progress {
}
.display-1 {
font-size: calc(1.625rem + 4.5vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.625rem + 4.5vw);
}
@media (min-width: 1200px) {
.display-1 {
@@ -616,9 +612,9 @@ progress {
}
.display-2 {
font-size: calc(1.575rem + 3.9vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.575rem + 3.9vw);
}
@media (min-width: 1200px) {
.display-2 {
@@ -627,9 +623,9 @@ progress {
}
.display-3 {
font-size: calc(1.525rem + 3.3vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.525rem + 3.3vw);
}
@media (min-width: 1200px) {
.display-3 {
@@ -638,9 +634,9 @@ progress {
}
.display-4 {
font-size: calc(1.475rem + 2.7vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.475rem + 2.7vw);
}
@media (min-width: 1200px) {
.display-4 {
@@ -649,9 +645,9 @@ progress {
}
.display-5 {
font-size: calc(1.425rem + 2.1vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.425rem + 2.1vw);
}
@media (min-width: 1200px) {
.display-5 {
@@ -660,9 +656,9 @@ progress {
}
.display-6 {
font-size: calc(1.375rem + 1.5vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
.display-6 {
@@ -807,7 +803,7 @@ progress {
}
.col {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-auto > * {
@@ -1016,7 +1012,7 @@ progress {
@media (min-width: 576px) {
.col-sm {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-sm-auto > * {
flex: 0 0 auto;
@@ -1185,7 +1181,7 @@ progress {
}
@media (min-width: 768px) {
.col-md {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-md-auto > * {
flex: 0 0 auto;
@@ -1354,7 +1350,7 @@ progress {
}
@media (min-width: 992px) {
.col-lg {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-lg-auto > * {
flex: 0 0 auto;
@@ -1523,7 +1519,7 @@ progress {
}
@media (min-width: 1200px) {
.col-xl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xl-auto > * {
flex: 0 0 auto;
@@ -1692,7 +1688,7 @@ progress {
}
@media (min-width: 1400px) {
.col-xxl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xxl-auto > * {
flex: 0 0 auto;
@@ -2160,6 +2156,10 @@ progress {
display: block;
padding: 0;
}
.form-control::-moz-placeholder {
color: var(--bs-secondary-color);
opacity: 1;
}
.form-control::placeholder {
color: var(--bs-secondary-color);
opacity: 1;
@@ -2607,11 +2607,9 @@ textarea.form-control-lg {
top: 0;
left: 0;
z-index: 2;
max-width: 100%;
height: 100%;
padding: 1rem 0.75rem;
overflow: hidden;
color: rgba(var(--bs-body-color-rgb), 0.65);
text-align: start;
text-overflow: ellipsis;
white-space: nowrap;
@@ -2629,10 +2627,17 @@ textarea.form-control-lg {
.form-floating > .form-control-plaintext {
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-plaintext::placeholder {
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-plaintext:focus,
.form-floating > .form-control-plaintext:not(:placeholder-shown) {
@@ -2647,19 +2652,19 @@ textarea.form-control-lg {
.form-floating > .form-select {
padding-top: 1.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:not(:placeholder-shown) ~ label,
.form-floating > .form-control-plaintext ~ 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);
}
.form-floating > .form-control:-webkit-autofill ~ label {
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
}
.form-floating > textarea:focus ~ label::after,
.form-floating > textarea:not(:placeholder-shown) ~ label::after {
.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {
position: absolute;
inset: 1rem 0.375rem;
z-index: -1;
@@ -2668,8 +2673,21 @@ textarea.form-control-lg {
background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius);
}
.form-floating > textarea:disabled ~ label::after {
background-color: var(--bs-secondary-bg);
.form-floating > .form-control:focus ~ label::after,
.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 {
border-width: var(--bs-border-width) 0;
@@ -2678,6 +2696,10 @@ textarea.form-control-lg {
.form-floating > .form-control:disabled ~ label {
color: #6c757d;
}
.form-floating > :disabled ~ label::after,
.form-floating > .form-control:disabled ~ label::after {
background-color: var(--bs-secondary-bg);
}
.input-group {
position: relative;
@@ -2760,7 +2782,7 @@ textarea.form-control-lg {
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) {
margin-left: calc(-1 * var(--bs-border-width));
margin-left: calc(var(--bs-border-width) * -1);
border-top-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 {
border-color: var(--bs-form-valid-border-color);
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-position: right calc(0.375em + 0.1875rem) center;
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);
}
.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;
background-position: right 0.75rem center, center right 2.25rem;
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 > .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.dropdown-toggle-split:first-child,
@@ -3780,15 +3802,14 @@ textarea.form-control-lg {
}
.btn-group-vertical > .btn: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-group:not(:last-child) > .btn {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:nth-child(n+3),
.btn-group-vertical > :not(.btn-check) + .btn,
.btn-group-vertical > .btn ~ .btn,
.btn-group-vertical > .btn-group:not(:first-child) > .btn {
border-top-left-radius: 0;
border-top-right-radius: 0;
@@ -3912,8 +3933,8 @@ textarea.form-control-lg {
.nav-justified > .nav-link,
.nav-justified .nav-item {
flex-grow: 1;
flex-basis: 0;
flex-grow: 1;
text-align: center;
}
@@ -4014,8 +4035,8 @@ textarea.form-control-lg {
}
.navbar-collapse {
flex-grow: 1;
flex-basis: 100%;
flex-grow: 1;
align-items: center;
}
@@ -4510,7 +4531,7 @@ textarea.form-control-lg {
flex-flow: row wrap;
}
.card-group > .card {
flex: 1 0 0;
flex: 1 0 0%;
margin-bottom: 0;
}
.card-group > .card + .card {
@@ -4521,24 +4542,24 @@ textarea.form-control-lg {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.card-group > .card:not(:last-child) > .card-img-top,
.card-group > .card:not(:last-child) > .card-header {
.card-group > .card:not(:last-child) .card-img-top,
.card-group > .card:not(:last-child) .card-header {
border-top-right-radius: 0;
}
.card-group > .card:not(:last-child) > .card-img-bottom,
.card-group > .card:not(:last-child) > .card-footer {
.card-group > .card:not(:last-child) .card-img-bottom,
.card-group > .card:not(:last-child) .card-footer {
border-bottom-right-radius: 0;
}
.card-group > .card:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.card-group > .card:not(:first-child) > .card-img-top,
.card-group > .card:not(:first-child) > .card-header {
.card-group > .card:not(:first-child) .card-img-top,
.card-group > .card:not(:first-child) .card-header {
border-top-left-radius: 0;
}
.card-group > .card:not(:first-child) > .card-img-bottom,
.card-group > .card:not(:first-child) > .card-footer {
.card-group > .card:not(:first-child) .card-img-bottom,
.card-group > .card:not(:first-child) .card-footer {
border-bottom-left-radius: 0;
}
}
@@ -4555,11 +4576,11 @@ textarea.form-control-lg {
--bs-accordion-btn-padding-y: 1rem;
--bs-accordion-btn-color: var(--bs-body-color);
--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-transform: rotate(-180deg);
--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-body-padding-x: 1.25rem;
--bs-accordion-body-padding-y: 1rem;
@@ -4669,15 +4690,16 @@ textarea.form-control-lg {
.accordion-flush > .accordion-item:last-child {
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, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {
border-radius: 0;
}
.accordion-flush > .accordion-item > .accordion-collapse {
border-radius: 0;
}
[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-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-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-.708z'/%3e%3c/svg%3e");
}
.breadcrumb {
@@ -4781,7 +4803,7 @@ textarea.form-control-lg {
}
.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 {
border-top-left-radius: var(--bs-pagination-border-radius);
@@ -4930,7 +4952,7 @@ textarea.form-control-lg {
@keyframes progress-bar-stripes {
0% {
background-position-x: var(--bs-progress-height);
background-position-x: 1rem;
}
}
.progress,
@@ -5024,6 +5046,22 @@ textarea.form-control-lg {
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 {
position: relative;
display: block;
@@ -5060,22 +5098,6 @@ textarea.form-control-lg {
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 {
flex-direction: row;
}
@@ -5335,19 +5357,19 @@ textarea.form-control-lg {
.btn-close {
--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-hover-opacity: 0.75;
--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-disabled-opacity: 0.25;
--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
box-sizing: content-box;
width: 1em;
height: 1em;
padding: 0.25em 0.25em;
color: var(--bs-btn-close-color);
background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
filter: var(--bs-btn-close-filter);
border: 0;
border-radius: 0.375rem;
opacity: var(--bs-btn-close-opacity);
@@ -5371,16 +5393,11 @@ textarea.form-control-lg {
}
.btn-close-white {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
filter: var(--bs-btn-close-white-filter);
}
:root,
[data-bs-theme=light] {
--bs-btn-close-filter: ;
}
[data-bs-theme=dark] {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
[data-bs-theme=dark] .btn-close {
filter: var(--bs-btn-close-white-filter);
}
.toast {
@@ -5457,7 +5474,7 @@ textarea.form-control-lg {
--bs-modal-width: 500px;
--bs-modal-padding: 1rem;
--bs-modal-margin: 0.5rem;
--bs-modal-color: var(--bs-body-color);
--bs-modal-color: ;
--bs-modal-bg: var(--bs-body-bg);
--bs-modal-border-color: var(--bs-border-color-translucent);
--bs-modal-border-width: var(--bs-border-width);
@@ -5493,8 +5510,8 @@ textarea.form-control-lg {
pointer-events: none;
}
.modal.fade .modal-dialog {
transform: translate(0, -50px);
transition: transform 0.3s ease-out;
transform: translate(0, -50px);
}
@media (prefers-reduced-motion: reduce) {
.modal.fade .modal-dialog {
@@ -5569,10 +5586,7 @@ textarea.form-control-lg {
}
.modal-header .btn-close {
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-right: calc(-0.5 * var(--bs-modal-header-padding-x));
margin-bottom: calc(-0.5 * var(--bs-modal-header-padding-y));
margin-left: auto;
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;
}
.modal-title {
@@ -6093,7 +6107,6 @@ textarea.form-control-lg {
color: #fff;
text-align: center;
background: none;
filter: var(--bs-carousel-control-icon-filter);
border: 0;
opacity: 0.5;
transition: opacity 0.15s ease;
@@ -6132,11 +6145,11 @@ textarea.form-control-lg {
}
.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 {
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 {
@@ -6162,7 +6175,7 @@ textarea.form-control-lg {
margin-left: 3px;
text-indent: -999px;
cursor: pointer;
background-color: var(--bs-carousel-indicator-active-bg);
background-color: #fff;
background-clip: padding-box;
border: 0;
border-top: 10px solid transparent;
@@ -6186,33 +6199,36 @@ textarea.form-control-lg {
left: 15%;
padding-top: 1.25rem;
padding-bottom: 1.25rem;
color: var(--bs-carousel-caption-color);
color: #fff;
text-align: center;
}
.carousel-dark {
--bs-carousel-indicator-active-bg: #000;
--bs-carousel-caption-color: #000;
--bs-carousel-control-icon-filter: invert(1) grayscale(100);
.carousel-dark .carousel-control-prev-icon,
.carousel-dark .carousel-control-next-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=light] {
--bs-carousel-indicator-active-bg: #fff;
--bs-carousel-caption-color: #fff;
--bs-carousel-control-icon-filter: ;
[data-bs-theme=dark] .carousel .carousel-control-prev-icon,
[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,
[data-bs-theme=dark].carousel .carousel-control-next-icon {
filter: invert(1) grayscale(100);
}
[data-bs-theme=dark] {
--bs-carousel-indicator-active-bg: #000;
--bs-carousel-caption-color: #000;
--bs-carousel-control-icon-filter: invert(1) grayscale(100);
[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {
background-color: #000;
}
[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {
color: #000;
}
.spinner-grow,
.spinner-border {
display: inline-block;
flex-shrink: 0;
width: var(--bs-spinner-width);
height: var(--bs-spinner-height);
vertical-align: var(--bs-spinner-vertical-align);
@@ -6757,10 +6773,7 @@ textarea.form-control-lg {
}
.offcanvas-header .btn-close {
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-right: calc(-0.5 * var(--bs-offcanvas-padding-x));
margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
margin-left: auto;
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;
}
.offcanvas-title {
@@ -7161,10 +7174,6 @@ textarea.form-control-lg {
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important;
}
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after {
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";
/*!
* Bootstrap v5.3.8 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
@@ -517,8 +517,8 @@ legend {
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
line-height: inherit;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
@@ -547,10 +547,6 @@ legend + * {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type=search]::-webkit-search-cancel-button {
cursor: pointer;
filter: grayscale(1);
}
[type="tel"],
[type="url"],
@@ -603,9 +599,9 @@ progress {
}
.display-1 {
font-size: calc(1.625rem + 4.5vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.625rem + 4.5vw);
}
@media (min-width: 1200px) {
.display-1 {
@@ -614,9 +610,9 @@ progress {
}
.display-2 {
font-size: calc(1.575rem + 3.9vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.575rem + 3.9vw);
}
@media (min-width: 1200px) {
.display-2 {
@@ -625,9 +621,9 @@ progress {
}
.display-3 {
font-size: calc(1.525rem + 3.3vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.525rem + 3.3vw);
}
@media (min-width: 1200px) {
.display-3 {
@@ -636,9 +632,9 @@ progress {
}
.display-4 {
font-size: calc(1.475rem + 2.7vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.475rem + 2.7vw);
}
@media (min-width: 1200px) {
.display-4 {
@@ -647,9 +643,9 @@ progress {
}
.display-5 {
font-size: calc(1.425rem + 2.1vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.425rem + 2.1vw);
}
@media (min-width: 1200px) {
.display-5 {
@@ -658,9 +654,9 @@ progress {
}
.display-6 {
font-size: calc(1.375rem + 1.5vw);
font-weight: 300;
line-height: 1.2;
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
.display-6 {
@@ -805,7 +801,7 @@ progress {
}
.col {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-auto > * {
@@ -1014,7 +1010,7 @@ progress {
@media (min-width: 576px) {
.col-sm {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-sm-auto > * {
flex: 0 0 auto;
@@ -1183,7 +1179,7 @@ progress {
}
@media (min-width: 768px) {
.col-md {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-md-auto > * {
flex: 0 0 auto;
@@ -1352,7 +1348,7 @@ progress {
}
@media (min-width: 992px) {
.col-lg {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-lg-auto > * {
flex: 0 0 auto;
@@ -1521,7 +1517,7 @@ progress {
}
@media (min-width: 1200px) {
.col-xl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xl-auto > * {
flex: 0 0 auto;
@@ -1690,7 +1686,7 @@ progress {
}
@media (min-width: 1400px) {
.col-xxl {
flex: 1 0 0;
flex: 1 0 0%;
}
.row-cols-xxl-auto > * {
flex: 0 0 auto;
@@ -2158,6 +2154,10 @@ progress {
display: block;
padding: 0;
}
.form-control::-moz-placeholder {
color: var(--bs-secondary-color);
opacity: 1;
}
.form-control::placeholder {
color: var(--bs-secondary-color);
opacity: 1;
@@ -2605,11 +2605,9 @@ textarea.form-control-lg {
top: 0;
right: 0;
z-index: 2;
max-width: 100%;
height: 100%;
padding: 1rem 0.75rem;
overflow: hidden;
color: rgba(var(--bs-body-color-rgb), 0.65);
text-align: start;
text-overflow: ellipsis;
white-space: nowrap;
@@ -2627,10 +2625,17 @@ textarea.form-control-lg {
.form-floating > .form-control-plaintext {
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-plaintext::placeholder {
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-plaintext:focus,
.form-floating > .form-control-plaintext:not(:placeholder-shown) {
@@ -2645,19 +2650,19 @@ textarea.form-control-lg {
.form-floating > .form-select {
padding-top: 1.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:not(:placeholder-shown) ~ label,
.form-floating > .form-control-plaintext ~ 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);
}
.form-floating > .form-control:-webkit-autofill ~ label {
transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
}
.form-floating > textarea:focus ~ label::after,
.form-floating > textarea:not(:placeholder-shown) ~ label::after {
.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {
position: absolute;
inset: 1rem 0.375rem;
z-index: -1;
@@ -2666,8 +2671,21 @@ textarea.form-control-lg {
background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius);
}
.form-floating > textarea:disabled ~ label::after {
background-color: var(--bs-secondary-bg);
.form-floating > .form-control:focus ~ label::after,
.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 {
border-width: var(--bs-border-width) 0;
@@ -2676,6 +2694,10 @@ textarea.form-control-lg {
.form-floating > .form-control:disabled ~ label {
color: #6c757d;
}
.form-floating > :disabled ~ label::after,
.form-floating > .form-control:disabled ~ label::after {
background-color: var(--bs-secondary-bg);
}
.input-group {
position: relative;
@@ -2758,7 +2780,7 @@ textarea.form-control-lg {
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) {
margin-right: calc(-1 * var(--bs-border-width));
margin-right: calc(var(--bs-border-width) * -1);
border-top-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 {
border-color: var(--bs-form-valid-border-color);
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-position: left calc(0.375em + 0.1875rem) center;
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);
}
.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;
background-position: left 0.75rem center, center left 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2951,7 +2973,6 @@ textarea.form-control-lg {
.btn {
--bs-btn-padding-x: 0.75rem;
--bs-btn-padding-y: 0.375rem;
--bs-btn-font-family: ;
--bs-btn-font-size: 1rem;
--bs-btn-font-weight: 400;
--bs-btn-line-height: 1.5;
@@ -3680,7 +3701,6 @@ textarea.form-control-lg {
--bs-dropdown-color: #dee2e6;
--bs-dropdown-bg: #343a40;
--bs-dropdown-border-color: var(--bs-border-color-translucent);
--bs-dropdown-box-shadow: ;
--bs-dropdown-link-color: #dee2e6;
--bs-dropdown-link-hover-color: #fff;
--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 > .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.dropdown-toggle-split:first-child,
@@ -3778,15 +3798,14 @@ textarea.form-control-lg {
}
.btn-group-vertical > .btn: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-group:not(:last-child) > .btn {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.btn-group-vertical > .btn:nth-child(n+3),
.btn-group-vertical > :not(.btn-check) + .btn,
.btn-group-vertical > .btn ~ .btn,
.btn-group-vertical > .btn-group:not(:first-child) > .btn {
border-top-right-radius: 0;
border-top-left-radius: 0;
@@ -3795,7 +3814,6 @@ textarea.form-control-lg {
.nav {
--bs-nav-link-padding-x: 1rem;
--bs-nav-link-padding-y: 0.5rem;
--bs-nav-link-font-weight: ;
--bs-nav-link-color: var(--bs-link-color);
--bs-nav-link-hover-color: var(--bs-link-hover-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-item {
flex-grow: 1;
flex-basis: 0;
flex-grow: 1;
text-align: center;
}
@@ -3983,7 +4001,6 @@ textarea.form-control-lg {
.navbar-nav {
--bs-nav-link-padding-x: 0;
--bs-nav-link-padding-y: 0.5rem;
--bs-nav-link-font-weight: ;
--bs-nav-link-color: var(--bs-navbar-color);
--bs-nav-link-hover-color: var(--bs-navbar-hover-color);
--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);
@@ -4012,8 +4029,8 @@ textarea.form-control-lg {
}
.navbar-collapse {
flex-grow: 1;
flex-basis: 100%;
flex-grow: 1;
align-items: center;
}
@@ -4358,19 +4375,13 @@ textarea.form-control-lg {
--bs-card-spacer-y: 1rem;
--bs-card-spacer-x: 1rem;
--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-color: var(--bs-border-color-translucent);
--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-cap-padding-y: 0.5rem;
--bs-card-cap-padding-x: 1rem;
--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-img-overlay-padding: 1rem;
--bs-card-group-margin: 0.75rem;
@@ -4508,7 +4519,7 @@ textarea.form-control-lg {
flex-flow: row wrap;
}
.card-group > .card {
flex: 1 0 0;
flex: 1 0 0%;
margin-bottom: 0;
}
.card-group > .card + .card {
@@ -4519,24 +4530,24 @@ textarea.form-control-lg {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.card-group > .card:not(:last-child) > .card-img-top,
.card-group > .card:not(:last-child) > .card-header {
.card-group > .card:not(:last-child) .card-img-top,
.card-group > .card:not(:last-child) .card-header {
border-top-left-radius: 0;
}
.card-group > .card:not(:last-child) > .card-img-bottom,
.card-group > .card:not(:last-child) > .card-footer {
.card-group > .card:not(:last-child) .card-img-bottom,
.card-group > .card:not(:last-child) .card-footer {
border-bottom-left-radius: 0;
}
.card-group > .card:not(:first-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.card-group > .card:not(:first-child) > .card-img-top,
.card-group > .card:not(:first-child) > .card-header {
.card-group > .card:not(:first-child) .card-img-top,
.card-group > .card:not(:first-child) .card-header {
border-top-right-radius: 0;
}
.card-group > .card:not(:first-child) > .card-img-bottom,
.card-group > .card:not(:first-child) > .card-footer {
.card-group > .card:not(:first-child) .card-img-bottom,
.card-group > .card:not(:first-child) .card-footer {
border-bottom-right-radius: 0;
}
}
@@ -4553,11 +4564,11 @@ textarea.form-control-lg {
--bs-accordion-btn-padding-y: 1rem;
--bs-accordion-btn-color: var(--bs-body-color);
--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-transform: rotate(-180deg);
--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-body-padding-x: 1.25rem;
--bs-accordion-body-padding-y: 1rem;
@@ -4667,23 +4678,22 @@ textarea.form-control-lg {
.accordion-flush > .accordion-item:last-child {
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, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {
border-radius: 0;
}
.accordion-flush > .accordion-item > .accordion-collapse {
border-radius: 0;
}
[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-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-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-.708z'/%3e%3c/svg%3e");
}
.breadcrumb {
--bs-breadcrumb-padding-x: 0;
--bs-breadcrumb-padding-y: 0;
--bs-breadcrumb-margin-bottom: 1rem;
--bs-breadcrumb-bg: ;
--bs-breadcrumb-border-radius: ;
--bs-breadcrumb-divider-color: var(--bs-secondary-color);
--bs-breadcrumb-item-padding-x: 0.5rem;
--bs-breadcrumb-item-active-color: var(--bs-secondary-color);
@@ -4779,7 +4789,7 @@ textarea.form-control-lg {
}
.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 {
border-top-right-radius: var(--bs-pagination-border-radius);
@@ -4928,7 +4938,7 @@ textarea.form-control-lg {
@keyframes progress-bar-stripes {
0% {
background-position-x: var(--bs-progress-height);
background-position-x: 1rem;
}
}
.progress,
@@ -5022,6 +5032,22 @@ textarea.form-control-lg {
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 {
position: relative;
display: block;
@@ -5058,22 +5084,6 @@ textarea.form-control-lg {
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 {
flex-direction: row;
}
@@ -5333,19 +5343,19 @@ textarea.form-control-lg {
.btn-close {
--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-hover-opacity: 0.75;
--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-disabled-opacity: 0.25;
--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
box-sizing: content-box;
width: 1em;
height: 1em;
padding: 0.25em 0.25em;
color: var(--bs-btn-close-color);
background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
filter: var(--bs-btn-close-filter);
border: 0;
border-radius: 0.375rem;
opacity: var(--bs-btn-close-opacity);
@@ -5369,16 +5379,11 @@ textarea.form-control-lg {
}
.btn-close-white {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
filter: var(--bs-btn-close-white-filter);
}
:root,
[data-bs-theme=light] {
--bs-btn-close-filter: ;
}
[data-bs-theme=dark] {
--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%);
[data-bs-theme=dark] .btn-close {
filter: var(--bs-btn-close-white-filter);
}
.toast {
@@ -5388,7 +5393,6 @@ textarea.form-control-lg {
--bs-toast-spacing: 1.5rem;
--bs-toast-max-width: 350px;
--bs-toast-font-size: 0.875rem;
--bs-toast-color: ;
--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);
--bs-toast-border-width: var(--bs-border-width);
--bs-toast-border-color: var(--bs-border-color-translucent);
@@ -5455,7 +5459,6 @@ textarea.form-control-lg {
--bs-modal-width: 500px;
--bs-modal-padding: 1rem;
--bs-modal-margin: 0.5rem;
--bs-modal-color: var(--bs-body-color);
--bs-modal-bg: var(--bs-body-bg);
--bs-modal-border-color: var(--bs-border-color-translucent);
--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-title-line-height: 1.5;
--bs-modal-footer-gap: 0.5rem;
--bs-modal-footer-bg: ;
--bs-modal-footer-border-color: var(--bs-border-color);
--bs-modal-footer-border-width: var(--bs-border-width);
position: fixed;
@@ -5491,8 +5493,8 @@ textarea.form-control-lg {
pointer-events: none;
}
.modal.fade .modal-dialog {
transform: translate(0, -50px);
transition: transform 0.3s ease-out;
transform: translate(0, -50px);
}
@media (prefers-reduced-motion: reduce) {
.modal.fade .modal-dialog {
@@ -5567,10 +5569,7 @@ textarea.form-control-lg {
}
.modal-header .btn-close {
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-left: calc(-0.5 * var(--bs-modal-header-padding-x));
margin-bottom: calc(-0.5 * var(--bs-modal-header-padding-y));
margin-right: auto;
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));
}
.modal-title {
@@ -5749,7 +5748,6 @@ textarea.form-control-lg {
--bs-tooltip-max-width: 200px;
--bs-tooltip-padding-x: 0.5rem;
--bs-tooltip-padding-y: 0.25rem;
--bs-tooltip-margin: ;
--bs-tooltip-font-size: 0.875rem;
--bs-tooltip-color: var(--bs-body-bg);
--bs-tooltip-bg: var(--bs-emphasis-color);
@@ -6075,7 +6073,6 @@ textarea.form-control-lg {
color: #fff;
text-align: center;
background: none;
filter: var(--bs-carousel-control-icon-filter);
border: 0;
opacity: 0.5;
transition: opacity 0.15s ease;
@@ -6114,11 +6111,11 @@ textarea.form-control-lg {
}
.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 {
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 {
@@ -6144,7 +6141,7 @@ textarea.form-control-lg {
margin-right: 3px;
text-indent: -999px;
cursor: pointer;
background-color: var(--bs-carousel-indicator-active-bg);
background-color: #fff;
background-clip: padding-box;
border: 0;
border-top: 10px solid transparent;
@@ -6168,33 +6165,36 @@ textarea.form-control-lg {
right: 15%;
padding-top: 1.25rem;
padding-bottom: 1.25rem;
color: var(--bs-carousel-caption-color);
color: #fff;
text-align: center;
}
.carousel-dark {
--bs-carousel-indicator-active-bg: #000;
--bs-carousel-caption-color: #000;
--bs-carousel-control-icon-filter: invert(1) grayscale(100);
.carousel-dark .carousel-control-prev-icon,
.carousel-dark .carousel-control-next-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=light] {
--bs-carousel-indicator-active-bg: #fff;
--bs-carousel-caption-color: #fff;
--bs-carousel-control-icon-filter: ;
[data-bs-theme=dark] .carousel .carousel-control-prev-icon,
[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,
[data-bs-theme=dark].carousel .carousel-control-next-icon {
filter: invert(1) grayscale(100);
}
[data-bs-theme=dark] {
--bs-carousel-indicator-active-bg: #000;
--bs-carousel-caption-color: #000;
--bs-carousel-control-icon-filter: invert(1) grayscale(100);
[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {
background-color: #000;
}
[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {
color: #000;
}
.spinner-grow,
.spinner-border {
display: inline-block;
flex-shrink: 0;
width: var(--bs-spinner-width);
height: var(--bs-spinner-height);
vertical-align: var(--bs-spinner-vertical-align);
@@ -6739,10 +6739,7 @@ textarea.form-control-lg {
}
.offcanvas-header .btn-close {
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-left: calc(-0.5 * var(--bs-offcanvas-padding-x));
margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
margin-right: auto;
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));
}
.offcanvas-title {
@@ -7143,10 +7140,6 @@ textarea.form-control-lg {
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
position: absolute !important;
}
.visually-hidden *,
.visually-hidden-focusable:not(:focus):not(:focus-within) * {
overflow: hidden !important;
}
.stretched-link::after {
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/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@@ -205,7 +205,7 @@
* @param {HTMLElement} element
* @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 => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
@@ -250,7 +250,7 @@
});
};
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) => {
if (!waitForTransition) {
@@ -572,7 +572,7 @@
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) {
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]);
}
return attributes;
@@ -647,7 +647,7 @@
* Constants
*/
const VERSION = '5.3.8';
const VERSION = '5.3.3';
/**
* Class definition
@@ -673,8 +673,6 @@
this[propertyName] = null;
}
}
// Private
_queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated);
}
@@ -1606,11 +1604,11 @@
this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true);
}
// Private
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7);
}
// Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = getElement(config.parent);
@@ -2668,6 +2666,7 @@
var popperOffsets = computeOffsets({
reference: referenceClientRect,
element: popperRect,
strategy: 'absolute',
placement: placement
});
var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
@@ -2995,6 +2994,7 @@
state.modifiersData[name] = computeOffsets({
reference: state.rects.reference,
element: state.rects.popper,
strategy: 'absolute',
placement: state.placement
});
} // eslint-disable-next-line import/no-unused-modules
@@ -3701,7 +3701,7 @@
}
_createPopper() {
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;
if (this._config.reference === 'parent') {
@@ -3780,7 +3780,7 @@
}
return {
...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
_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
*/
// eslint-disable-next-line unicorn/better-regex
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase();
@@ -4966,7 +4967,7 @@
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
}
_resolvePossibleFunction(arg) {
return execute(arg, [undefined, this]);
return execute(arg, [this]);
}
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
@@ -5065,7 +5066,7 @@
class Tooltip extends BaseComponent {
constructor(element, config) {
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);
@@ -5111,6 +5112,7 @@
if (!this._isEnabled) {
return;
}
this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) {
this._leave();
return;
@@ -5298,7 +5300,7 @@
return offset;
}
_resolvePossibleFunction(arg) {
return execute(arg, [this._element, this._element]);
return execute(arg, [this._element]);
}
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
@@ -5336,7 +5338,7 @@
};
return {
...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
_setListeners() {
@@ -5345,7 +5347,6 @@
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
@@ -6211,6 +6212,7 @@
}
// Private
_maybeScheduleHide() {
if (!this._config.autohide) {
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/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
import * as Popper from '@popperjs/core';
@@ -201,7 +201,7 @@ const noop = () => {};
* @param {HTMLElement} element
* @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 => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
@@ -246,7 +246,7 @@ const defineJQueryPlugin = plugin => {
});
};
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) => {
if (!waitForTransition) {
@@ -568,7 +568,7 @@ const Manipulator = {
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) {
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]);
}
return attributes;
@@ -643,7 +643,7 @@ class Config {
* Constants
*/
const VERSION = '5.3.8';
const VERSION = '5.3.3';
/**
* Class definition
@@ -669,8 +669,6 @@ class BaseComponent extends Config {
this[propertyName] = null;
}
}
// Private
_queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated);
}
@@ -1602,11 +1600,11 @@ class Collapse extends BaseComponent {
this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true);
}
// Private
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7);
}
// Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = getElement(config.parent);
@@ -1860,7 +1858,7 @@ class Dropdown extends BaseComponent {
}
_createPopper() {
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;
if (this._config.reference === 'parent') {
@@ -1939,7 +1937,7 @@ class Dropdown extends BaseComponent {
}
return {
...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
_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
*/
// eslint-disable-next-line unicorn/better-regex
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
const allowedAttribute = (attribute, allowedAttributeList) => {
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;
}
_resolvePossibleFunction(arg) {
return execute(arg, [undefined, this]);
return execute(arg, [this]);
}
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
@@ -3224,7 +3223,7 @@ const DefaultType$3 = {
class Tooltip extends BaseComponent {
constructor(element, config) {
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);
@@ -3270,6 +3269,7 @@ class Tooltip extends BaseComponent {
if (!this._isEnabled) {
return;
}
this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) {
this._leave();
return;
@@ -3457,7 +3457,7 @@ class Tooltip extends BaseComponent {
return offset;
}
_resolvePossibleFunction(arg) {
return execute(arg, [this._element, this._element]);
return execute(arg, [this._element]);
}
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
@@ -3495,7 +3495,7 @@ class Tooltip extends BaseComponent {
};
return {
...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
_setListeners() {
@@ -3504,7 +3504,6 @@ class Tooltip extends BaseComponent {
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
@@ -4370,6 +4369,7 @@ class Toast extends BaseComponent {
}
// Private
_maybeScheduleHide() {
if (!this._config.autohide) {
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/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@@ -224,7 +224,7 @@
* @param {HTMLElement} element
* @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 => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
@@ -269,7 +269,7 @@
});
};
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) => {
if (!waitForTransition) {
@@ -591,7 +591,7 @@
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) {
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]);
}
return attributes;
@@ -666,7 +666,7 @@
* Constants
*/
const VERSION = '5.3.8';
const VERSION = '5.3.3';
/**
* Class definition
@@ -692,8 +692,6 @@
this[propertyName] = null;
}
}
// Private
_queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated);
}
@@ -1625,11 +1623,11 @@
this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true);
}
// Private
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7);
}
// Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = getElement(config.parent);
@@ -1883,7 +1881,7 @@
}
_createPopper() {
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;
if (this._config.reference === 'parent') {
@@ -1962,7 +1960,7 @@
}
return {
...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
_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
*/
// eslint-disable-next-line unicorn/better-regex
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase();
@@ -3148,7 +3147,7 @@
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
}
_resolvePossibleFunction(arg) {
return execute(arg, [undefined, this]);
return execute(arg, [this]);
}
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
@@ -3247,7 +3246,7 @@
class Tooltip extends BaseComponent {
constructor(element, config) {
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);
@@ -3293,6 +3292,7 @@
if (!this._isEnabled) {
return;
}
this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) {
this._leave();
return;
@@ -3480,7 +3480,7 @@
return offset;
}
_resolvePossibleFunction(arg) {
return execute(arg, [this._element, this._element]);
return execute(arg, [this._element]);
}
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
@@ -3518,7 +3518,7 @@
};
return {
...defaultBsPopperConfig,
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
_setListeners() {
@@ -3527,7 +3527,6 @@
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
@@ -4393,6 +4392,7 @@
}
// Private
_maybeScheduleHide() {
if (!this._config.autohide) {
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>
</button>
<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">
<a class="nav-link" href="/#clubs-section">
<i class="bi bi-building me-1"></i>Клубы
@@ -30,7 +30,7 @@ export function initHeader($header) {
</a>
</li>
</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
? `<div class="dropdown">
<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
const $grid = $('<div class="admin-cards-grid"></div>');
const $grid = $('<div class="row g-3"></div>');
let courtTotal = 0;
let pending = clubs.length;
clubs.forEach(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
$.ajax({

View File

@@ -39,8 +39,11 @@ function loadEvents($container, onStats, page) {
return;
}
const $grid = $('<div class="admin-cards-grid"></div>');
resp.content.forEach(event => $grid.append(buildEventCard(event)));
const $grid = $('<div class="row g-3"></div>');
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 });
$container.append($grid);

View File

@@ -76,7 +76,7 @@ function renderBody(club) {
const $info = $('<div class="club-section row g-4"></div>');
// Description
const $descCol = $('<div class="col-lg-8"></div>');
const $descCol = $('<div class="col-12 col-lg-8"></div>');
if (club.description) {
$descCol.append(`
<h2 class="section-title">О клубе</h2>
@@ -100,7 +100,7 @@ function renderBody(club) {
}
// Contacts
const $ctaCol = $('<div class="col-lg-4"></div>');
const $ctaCol = $('<div class="col-12 col-lg-4"></div>');
const contactItems = buildContactItems(club);
if (contactItems.length > 0) {
$ctaCol.append(`
@@ -190,7 +190,7 @@ function buildCourtCard(court, club) {
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 $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 = $(`
<div class="court-card">
<img src="${esc(img)}" class="court-img" alt="${esc(court.name)}">
@@ -252,7 +252,7 @@ function buildEventCard(event, isUpcoming) {
</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 = $(`
<div class="ev-card h-100">
<div class="d-flex justify-content-between align-items-start mb-2">

View File

@@ -36,7 +36,7 @@ function buildClubCard(club) {
: '';
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">
<img src="${img}" class="card-img-top" style="height:200px;object-fit:cover" alt="${club.name}">
<div class="card-body">

View File

@@ -43,7 +43,7 @@ function buildEventCard(event) {
}[event.type] || 'bg-secondary';
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">
<img src="${img}" class="card-img-top" style="height:200px;object-fit:cover" alt="${event.title}">
<div class="card-body">

View File

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

View File

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

View File

@@ -38,10 +38,6 @@
font-size: 1.8rem;
font-weight: 700;
color: var(--tennis-dark);
margin-bottom: 25px;
display: flex;
align-items: center;
justify-content: space-between;
}
.section-title i {
@@ -282,13 +278,6 @@
color: #666;
}
.stats-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.stat-card {
background: white;
border-radius: 10px;
@@ -333,12 +322,6 @@
}
/* ── Cards grid ── */
.admin-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 20px;
}
/* ── Image uploader ── */
.img-uploader {
position: relative;
@@ -610,6 +593,32 @@
border-radius: 3px;
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>
<!-- ── Admin header ── -->
@@ -623,30 +632,38 @@
<div class="container">
<!-- ── Stats ── -->
<div class="stats-row mb-4">
<div class="stat-card">
<div class="stat-number" id="stat-clubs"></div>
<div class="stat-label">Мои клубы</div>
<div class="row g-3 mb-4">
<div class="col-6 col-md-3">
<div class="stat-card">
<div class="stat-number" id="stat-clubs"></div>
<div class="stat-label">Мои клубы</div>
</div>
</div>
<div class="stat-card">
<div class="stat-number" id="stat-courts"></div>
<div class="stat-label">Всего кортов</div>
<div class="col-6 col-md-3">
<div class="stat-card">
<div class="stat-number" id="stat-courts"></div>
<div class="stat-label">Всего кортов</div>
</div>
</div>
<div class="stat-card">
<div class="stat-number" id="stat-events"></div>
<div class="stat-label">Мероприятия</div>
<div class="col-6 col-md-3">
<div class="stat-card">
<div class="stat-number" id="stat-events"></div>
<div class="stat-label">Мероприятия</div>
</div>
</div>
<div class="stat-card">
<div class="stat-number" id="stat-active"></div>
<div class="stat-label">На этой странице</div>
<div class="col-6 col-md-3">
<div class="stat-card">
<div class="stat-number" id="stat-active"></div>
<div class="stat-label">На этой странице</div>
</div>
</div>
</div>
<!-- ── Clubs section ── -->
<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>
<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>Добавить клуб
</button>
</div>
@@ -655,7 +672,7 @@
<!-- ── Events section ── -->
<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>
<button class="btn-admin" data-bs-toggle="modal" data-bs-target="#create-event-modal">
<i class="bi bi-plus-circle me-1"></i>Создать мероприятие
@@ -666,7 +683,7 @@
<!-- ── 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>
</div>
<div id="admin-applications-container"></div>

View File

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

View File

@@ -145,6 +145,24 @@
background: var(--tennis-green); color: #fff;
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>
<!-- ── Hero ── -->

View File

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

View File

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

View File

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