dana-medical-site/web/src/components/LeadModal.css

425 lines
7.7 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.lead-modal__backdrop {
position: fixed;
inset: 0;
z-index: 100;
display: flex;
align-items: flex-start;
justify-content: center;
overflow-y: auto;
padding: 48px 16px;
background: rgba(31, 31, 31, 0.8);
}
/* макет: 650 × 740, радиус 28, поля 30/40/34 */
.lead-modal {
display: flex;
flex-direction: column;
gap: 18px;
width: 650px;
max-width: 100%;
margin: auto 0;
padding: 30px 40px 34px;
background: var(--surface);
border-radius: 28px;
filter: drop-shadow(0 20px 24px rgba(8, 18, 26, 0.24));
}
.lead-modal__head {
display: flex;
align-items: flex-start;
gap: 20px;
}
.lead-modal__titles {
display: flex;
flex-direction: column;
gap: 5px;
flex: 1;
min-width: 0;
line-height: 1.35;
}
.lead-modal__title {
font-weight: 700;
font-size: 28px;
line-height: 1.35;
color: var(--navy);
}
.lead-modal__subtitle {
font-size: 13px;
color: #6e7a85;
}
.lead-modal__close {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
flex-shrink: 0;
border-radius: 20px;
background: var(--chip);
}
.lead-modal__close:hover {
background: var(--chip-border);
}
.lead-modal__form {
display: flex;
flex-direction: column;
gap: 18px;
}
.lead-modal__row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
.lead-field {
display: flex;
flex-direction: column;
gap: 7px;
min-width: 0;
}
.lead-field__label {
font-weight: 600;
font-size: 14px;
line-height: 1.35;
color: var(--navy);
}
.lead-field__control {
width: 100%;
height: 48px;
padding: 0 16px;
background: #fff;
border: 1px solid var(--chip-border);
border-radius: var(--r-12);
font-size: 15px;
line-height: 1.35;
color: var(--navy);
outline: none;
appearance: none;
}
.lead-field__control::placeholder {
color: #6e7a85;
}
.lead-field__control:focus {
border-color: var(--navy);
}
.lead-field__textarea {
height: auto;
min-height: 74px;
padding: 14px 16px;
font-size: 14px;
resize: vertical;
}
.lead-field__select {
position: relative;
display: block;
}
.lead-field__select select {
padding-right: 42px;
cursor: pointer;
}
.lead-field__select select:invalid,
.lead-field__select select option[value=''] {
color: #6e7a85;
}
.lead-field__select img {
position: absolute;
right: 16px;
top: 50%;
transform: translateY(-50%);
pointer-events: none;
}
.lead-field__select--date img {
right: 14px;
}
/* нативный календарь оставляем, но его значок прячем под иконкой из макета */
.lead-field__select--date input::-webkit-calendar-picker-indicator {
position: absolute;
right: 10px;
width: 26px;
height: 26px;
opacity: 0;
cursor: pointer;
}
.lead-field__select--date input {
padding: 0 44px 0 14px;
}
.lead-rating {
display: flex;
gap: 6px;
}
.lead-rating__star {
padding: 2px;
opacity: 0.25;
transition: opacity 0.15s ease;
}
.lead-rating__star--on {
opacity: 1;
}
.lead-consent {
position: relative;
display: flex;
align-items: flex-start;
gap: 10px;
cursor: pointer;
}
.lead-consent input {
position: absolute;
opacity: 0;
width: 20px;
height: 20px;
margin: 0;
}
.lead-consent__box {
display: flex;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
flex-shrink: 0;
border: 1.5px solid var(--chip-border);
border-radius: 6px;
background: #fff;
}
.lead-consent__box img {
width: 12px;
height: 12px;
opacity: 0;
}
.lead-consent input:checked + .lead-consent__box {
background: var(--coral);
border-color: var(--coral);
}
.lead-consent input:checked + .lead-consent__box img {
opacity: 1;
}
.lead-consent input:focus-visible + .lead-consent__box {
outline: 2px solid var(--coral);
outline-offset: 2px;
}
.lead-consent__text {
font-size: 12px;
line-height: 1.35;
color: #6e7a85;
}
.lead-consent__text a {
text-decoration: underline;
}
.lead-modal__error {
margin-top: -6px;
font-weight: 600;
font-size: 13px;
color: var(--notice-text);
}
.lead-modal__submit {
width: 100%;
height: 54px;
padding: 16px 24px;
border-radius: var(--r-14);
font-weight: 700;
font-size: 16px;
}
.lead-modal__reassure {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
font-weight: 500;
font-size: 12px;
line-height: 1.35;
color: #6e7a85;
text-align: center;
}
.lead-modal__done {
display: flex;
flex-direction: column;
gap: 24px;
padding: 12px 0 4px;
}
.lead-modal__done p {
font-weight: 600;
font-size: 18px;
line-height: 1.45;
color: var(--navy);
}
@media (max-width: 767px) {
.lead-modal__backdrop {
padding: 16px 12px;
}
.lead-modal {
gap: 16px;
padding: 24px 16px;
border-radius: 20px;
}
.lead-modal__title {
font-size: 22px;
}
.lead-modal__row {
grid-template-columns: 1fr;
gap: 16px;
}
.lead-modal__form {
gap: 16px;
}
.lead-modal__reassure {
font-size: 11px;
}
}
/* слоты по часам: выбор удобного часа приёма */
.lead-slots {
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 8px;
}
.lead-slot {
height: 40px;
padding: 0 4px;
background: #fff;
border: 1px solid var(--chip-border);
border-radius: var(--r-12);
font: inherit;
font-size: 14px;
font-weight: 600;
color: var(--navy);
cursor: pointer;
transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.lead-slot:hover:not(:disabled) {
border-color: var(--coral);
}
.lead-slot--on {
background: var(--coral);
border-color: var(--coral);
color: #fff;
}
.lead-slot:disabled {
opacity: 0.35;
cursor: not-allowed;
text-decoration: line-through;
}
.lead-slots__hint {
margin: 0;
font-size: 13px;
color: var(--muted, #7a8699);
}
@media (max-width: 600px) {
.lead-slots {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
/* ---------- запись на приём: широкое окно в две колонки ----------
24 слота по 30 минут в одну колонку не помещались на экран ноутбука — окно приходилось прокручивать. */
.lead-modal--wide {
width: 920px;
}
.lead-modal__form--split {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
grid-template-areas:
'contacts date'
'doctor time'
'comment time';
align-items: start;
column-gap: 32px;
row-gap: 18px;
}
/* всё остальное (согласие, кнопка, подсказки) — на всю ширину под колонками */
.lead-modal__form--split > * {
grid-column: 1 / -1;
}
.lead-modal__form--split > .lead-modal__contacts {
grid-area: contacts;
/* в половине окна имя и телефон рядом не помещаются — друг под другом */
grid-template-columns: 1fr;
row-gap: 18px;
}
.lead-modal__form--split > .lead-field--doctor {
grid-area: doctor;
}
.lead-modal__form--split > .lead-field--comment {
grid-area: comment;
}
.lead-modal__form--split > .lead-field--date {
grid-area: date;
}
.lead-modal__form--split > .lead-field--time {
grid-area: time;
}
.lead-modal__form--split .lead-slot {
height: 36px;
}
/* узкий экран: снова одна колонка */
@media (max-width: 960px) {
.lead-modal--wide {
width: 650px;
}
.lead-modal__form--split {
display: flex;
flex-direction: column;
}
}
/* телефон: слоты по 6 в ряд — 4 ряда вместо 6 */
@media (max-width: 600px) {
.lead-modal__form--split .lead-slots {
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 6px;
}
.lead-modal__form--split .lead-slot {
height: 36px;
font-size: 13px;
}
}