/* ===== Modal (общие стили) ===== */ .modal-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; /* bottom: 0; */ background: rgba(0, 0, 0, 0.6); backdrop-filter: blur(4px); z-index: 1000; align-items: center; justify-content: center; opacity: 0; transition: opacity var(--transition); } .modal-overlay.open { display: flex; opacity: 1; } .modal-content { background: var(--bg-primary); border: 1px solid var(--bg-card-border); border-radius: var(--radius-md); padding: 2rem; width: 100%; top: 0; max-width: 100%; margin: 0 auto; position: relative; transform: scale(0.95); transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5); } .modal-overlay.open .modal-content { transform: scale(1); } .modal-close { position: absolute; top: 1rem; right: 1rem; background: none; border: none; font-size: 1.5rem; color: var(--text-secondary); cursor: pointer; transition: color var(--transition); } .modal-close:hover { color: var(--error); } /* ===== Кнопки ===== */ .btn-add-lesson { padding: 0.35rem 0.7rem; background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); border-radius: var(--radius-sm); color: var(--success); font-family: inherit; font-size: 0.8rem; cursor: pointer; transition: background var(--transition), transform var(--transition); position: relative; overflow: hidden; } .btn-add-lesson:hover { background: rgba(16, 185, 129, 0.2); transform: scale(1.05); } .btn-view-lessons { padding: 0.35rem 0.7rem; background: rgba(99, 102, 241, 0.1); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: var(--radius-sm); color: var(--accent); font-family: inherit; font-size: 0.8rem; cursor: pointer; transition: all var(--transition); white-space: nowrap; } .btn-view-lessons:hover { background: rgba(99, 102, 241, 0.2); transform: translateY(-1px); } /* ===== Кнопки-переключатели (неделя) ===== */ .btn-checkbox { display: inline-block; cursor: pointer; } .btn-checkbox input { position: absolute; opacity: 0; width: 0; height: 0; } .checkbox-btn { display: inline-block; padding: 0.5rem 1rem; background: var(--bg-secondary); border: 1px solid var(--bg-card-border); border-radius: var(--radius-sm); color: var(--text-primary); transition: all var(--transition); user-select: none; } .btn-checkbox input:checked + .checkbox-btn { background: var(--success, #10b981); border-color: var(--success, #10b981); color: #fff; } /* =========================================================== ===== 2-е модальное окно (View Lessons) — ОСНОВНЫЕ ПРАВКИ ===== Требования: - слева - ~30% ширины - сверху начинается СРАЗУ под 1-й модалкой - высота = весь остаток до низа экрана - визуально "ниже" 1-й модалки (и по z-index тоже ниже) =========================================================== */ #modal-view-lessons.modal-overlay { background: transparent !important; backdrop-filter: none !important; pointer-events: none; z-index: 999; /* ниже чем 1-е (1000) */ } /* В открытом состоянии: прижать влево и опустить вниз на высоту "шапки" */ #modal-view-lessons.modal-overlay.open { justify-content: flex-start; align-items: flex-start; padding-left: 1rem; padding-right: 1rem; /* ключевое: высота 1-й модалки приходит из JS через --add-lesson-height */ padding-top: var(--add-lesson-height, 0px); } /* Панель 2-й модалки */ #modal-view-lessons .view-lessons-modal { width: 30vw !important; max-width: 30vw !important; min-width: 320px; pointer-events: auto; background: var(--bg-primary); border: 1px solid var(--bg-card-border); border-radius: var(--radius-md); padding: 2rem; position: relative; box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5); margin: 0; /* отключаем "пружинку" от .modal-content */ transform: none; /* ключевое: занимает остаток по высоте */ height: calc(100vh - var(--add-lesson-height, 0px)); max-height: calc(100vh - var(--add-lesson-height, 0px)); /* чтобы скролл был внутри, а не у всей модалки */ display: flex; flex-direction: column; overflow: hidden; } /* Header во 2-й модалке */ #modal-veiw-lessons .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding-right: 2rem; flex: 0 0 auto; } #modal-view-lessons .modal-header h2 { margin: 0; font-size: 1.3rem; color: var(--text-primary); } /* Контейнер занятий: растягивается и скроллится */ #modal-view-lessons .lessons-container { flex: 1 1 auto; overflow-y: auto; /* перебиваем старое ограничение */ max-height: none; padding-right: 0.5rem; } /* ===== Карточки занятий ===== */ .lesson-card { background: var(--bg-card); border: 1px solid var(--bg-card-border); border-radius: var(--radius-sm); padding: 1.2rem; margin-bottom: 1rem; transition: all 0.2s ease; } .lesson-card:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); border-color: var(--accent); } .lesson-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.8rem; padding-bottom: 0.5rem; border-bottom: 1px dashed var(--bg-card-border); } .lesson-group { font-weight: 700; color: var(--accent); font-size: 1rem; background: rgba(99, 102, 241, 0.1); padding: 0.3rem 0.8rem; border-radius: 20px; } .lesson-time { color: var(--text-secondary); font-size: 0.9rem; display: flex; align-items: center; gap: 0.3rem; } .lesson-time::before { content: "🕒"; font-size: 0.9rem; opacity: 0.7; } .lesson-card-body { display: flex; flex-direction: column; gap: 0.5rem; } .lesson-subject { font-weight: 600; color: var(--text-primary); font-size: 1.1rem; display: flex; align-items: center; gap: 0.5rem; } .lesson-subject::before { content: "📚"; font-size: 1rem; opacity: 0.7; } .lesson-details { display: flex; flex-wrap: wrap; gap: 0.8rem; margin-top: 0.5rem; } .lesson-detail-item { background: var(--bg-input); padding: 0.3rem 0.8rem; border-radius: 15px; font-size: 0.85rem; color: var(--text-secondary); border: 1px solid var(--bg-card-border); } /* День недели как разделитель */ .lesson-day-divider { margin: 1.5rem 0 1rem 0; font-weight: 700; color: var(--accent); font-size: 1.1rem; text-transform: uppercase; letter-spacing: 0.05em; border-bottom: 2px solid var(--accent-glow); padding-bottom: 0.3rem; } .lesson-day-divider:first-of-type { margin-top: 0; } /* Загрузка/пусто */ .loading-lessons, .no-lessons { text-align: center; color: var(--text-secondary); padding: 3rem; font-size: 1rem; background: var(--bg-card); border-radius: var(--radius-sm); } /* Светлая тема */ [data-theme="light"] .lesson-card { background: #fff; border-color: rgba(0, 0, 0, 0.1); } [data-theme="light"] .lesson-group { background: rgba(99, 102, 241, 0.05); } /* ===== Адаптивность ===== */ @media (max-width: 1200px) { #modal-view-lessons .view-lessons-modal { width: 40vw !important; max-width: 40vw !important; } } @media (max-width: 768px) { /* На мобилке делаем поведение более "обычным" */ #modal-view-lessons.modal-overlay.open { padding-top: 1rem; justify-content: center; align-items: flex-start; } #modal-view-lessons .view-lessons-modal { width: 90vw !important; max-width: 90vw !important; min-width: 0; /* чтобы занимало почти весь экран */ height: calc(100vh - 2rem); max-height: calc(100vh - 2rem); } .lesson-card-header { flex-direction: column; align-items: flex-start; gap: 0.5rem; } } /* ===== Скролл во 2-й модалке ===== */ #modal-view-lessons .lessons-container { scrollbar-width: thin; /* Firefox */ scrollbar-color: rgba(99, 102, 241, 0.55) rgba(255, 255, 255, 0.06); /* thumb track */ } /* WebKit (Chrome/Edge/Safari) */ #modal-view-lessons .lessons-container::-webkit-scrollbar { width: 10px; } #modal-view-lessons .lessons-container::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.06); border-radius: 10px; } #modal-view-lessons .lessons-container::-webkit-scrollbar-thumb { background: rgba(99, 102, 241, 0.55); /* под accent */ border-radius: 10px; border: 2px solid rgba(0, 0, 0, 0); /* чтобы выглядел “тоньше” */ background-clip: padding-box; } #modal-view-lessons .lessons-container::-webkit-scrollbar-thumb:hover { background: rgba(99, 102, 241, 0.75); } /* Общий блюр/затемнение за модалками */ #modal-backdrop{ position: fixed; inset: 0; background: rgba(0,0,0,0.55); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); opacity: 0; pointer-events: none; transition: opacity var(--transition); z-index: 998; /* ниже модалок: 999 и 1000 */ } #modal-backdrop.open{ opacity: 1; pointer-events: auto; }