uchill/front_material/styles/globals.css

2144 lines
55 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.

/**
* Глобальные стили с оптимизацией производительности
* Используем CSS Variables для быстрого рендеринга
*/
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200');
/* CSS Variables для темизации (быстрее чем JS темы) */
:root {
/* Основные цвета из landing_site */
--theme: #7444FD;
--theme2: #F9F3EF;
--theme3: #FAF8FF;
--title: #282C32;
--text: #858585;
--text2: #cbcbcb;
--border: #E6E6E6;
--border-2: #F1F1F1;
--bg-1: #161921;
--bg-2: #F6F7FF;
--white: #fff;
--black: #000;
--orange: #e78c45;
/* Material Design 3 цвета */
--md-sys-color-primary: #7444FD;
--md-sys-color-on-primary: #FFFFFF;
--md-sys-color-primary-container: #FAF8FF;
--md-sys-color-on-primary-container: #282C32;
--md-sys-color-secondary: #7444FD;
--md-sys-color-on-secondary: #FFFFFF;
--md-sys-color-secondary-container: #F9F3EF;
--md-sys-color-on-secondary-container: #282C32;
--md-sys-color-surface: #FFFFFF;
--md-sys-color-on-surface: #282C32;
--md-sys-color-surface-variant: #F6F7FF;
--md-sys-color-on-surface-variant: #858585;
--md-sys-color-background: #F6F7FF;
--md-sys-color-on-background: #282C32;
--md-sys-color-error: #BA1A1A;
--md-sys-color-on-error: #FFFFFF;
--md-sys-color-tertiary: #4361EE;
--md-sys-color-on-tertiary: #FFFFFF;
--md-sys-color-outline: #E6E6E6;
--md-sys-color-outline-variant: #F1F1F1;
/* iOS 24+ стиль */
--ios-blur: blur(20px);
--ios-radius: 20px;
--ios-radius-sm: 16px;
--ios-radius-lg: 24px;
--ios-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
--ios-blur-bg: rgba(255, 255, 255, 0.8);
--ios-glass-bg: rgba(255, 255, 255, 0.74);
--ios-glass-border: rgba(255, 255, 255, 0.6);
--ios-glass-highlight: rgba(255, 255, 255, 0.55);
--ios-shadow-deep: 0 18px 50px rgba(116, 68, 253, 0.12), 0 6px 16px rgba(0, 0, 0, 0.08);
--ios-shadow-soft: 0 10px 30px rgba(116, 68, 253, 0.08), 0 2px 10px rgba(0, 0, 0, 0.05);
/* iOS 26+ стиль: более скруглённые углы, увеличенные отступы */
--ios26-radius-xs: 12px;
--ios26-radius-sm: 16px;
--ios26-radius: 20px;
--ios26-radius-md: 24px;
--ios26-radius-lg: 28px;
--ios26-radius-xl: 32px;
--ios26-spacing-xs: 8px;
--ios26-spacing-sm: 12px;
--ios26-spacing: 16px;
--ios26-spacing-md: 20px;
--ios26-spacing-lg: 24px;
--ios26-spacing-xl: 32px;
--ios26-glass: rgba(255, 255, 255, 0.72);
--ios26-glass-border: rgba(255, 255, 255, 0.5);
--ios26-blur: blur(24px) saturate(1.2);
--ios26-shadow: 0 2px 12px rgba(0, 0, 0, 0.06), 0 8px 24px rgba(0, 0, 0, 0.04);
--ios26-shadow-hover: 0 4px 16px rgba(0, 0, 0, 0.08), 0 12px 32px rgba(0, 0, 0, 0.06);
--ios26-segment-bg: rgba(0, 0, 0, 0.06);
--ios26-segment-active: #fff;
--ios26-segment-active-fg: var(--md-sys-color-on-surface);
--ios26-list-divider: rgba(0, 0, 0, 0.08);
}
/* Темная тема */
[data-theme="dark"] {
--md-sys-color-primary: #9D6AFF;
--md-sys-color-on-primary: #000000;
--md-sys-color-primary-container: #4A148C;
--md-sys-color-on-primary-container: #E1BEE7;
--md-sys-color-surface: #161921;
--md-sys-color-on-surface: #FFFFFF;
--md-sys-color-surface-variant: #282C32;
--md-sys-color-on-surface-variant: #cbcbcb;
--md-sys-color-background: #161921;
--md-sys-color-on-background: #FFFFFF;
--md-sys-color-tertiary: #7B8EF6;
--md-sys-color-on-tertiary: #FFFFFF;
--md-sys-color-outline: #565656;
--md-sys-color-outline-variant: #282C32;
--ios-blur-bg: rgba(0, 0, 0, 0.6);
--ios-glass-bg: rgba(22, 25, 33, 0.7);
--ios-glass-border: rgba(255, 255, 255, 0.08);
--ios-glass-highlight: rgba(255, 255, 255, 0.08);
--ios26-glass: rgba(28, 28, 30, 0.72);
--ios26-glass-border: rgba(255, 255, 255, 0.1);
--ios26-segment-bg: rgba(255, 255, 255, 0.12);
--ios26-segment-active: rgba(255, 255, 255, 0.9);
--ios26-segment-active-fg: var(--md-sys-color-on-background);
--ios26-list-divider: rgba(255, 255, 255, 0.12);
}
[data-theme="dark"] .ios-glass-panel {
background: rgba(22, 25, 33, 0.7);
border-color: rgba(255, 255, 255, 0.08);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
}
/* Базовые стили с оптимизацией */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
/* Оптимизация скролла */
scroll-behavior: smooth;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
color: var(--md-sys-color-on-surface);
/* Базовый цвет на случай, если градиент не применится */
background-color: var(--md-sys-color-background);
/* Основной iOSстиль фона с переливающимся градиентом */
background-image:
radial-gradient(60% 60% at 10% 10%, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0) 65%),
radial-gradient(70% 70% at 85% 20%, rgba(208, 189, 255, 0.9), rgba(255, 255, 255, 0) 70%),
radial-gradient(70% 70% at 50% 90%, rgba(189, 222, 255, 0.8), rgba(255, 255, 255, 0) 70%),
linear-gradient(120deg, rgba(210, 190, 255, 0.7), rgba(255, 255, 255, 0.6), rgba(190, 165, 255, 0.7));
background-size: 220% 220%;
background-repeat: no-repeat;
background-attachment: fixed;
line-height: 1.6;
/* Оптимизация рендеринга */
text-rendering: optimizeLegibility;
font-feature-settings: 'kern' 1;
position: relative;
isolation: isolate;
/* Высота на весь экран + отступ под нижний бар (только когда есть навигация) */
min-height: 100vh;
padding-bottom: calc(60px + 56px); /* 60px базовый отступ + 56px высота бара */
}
/* Страницы без навигационного меню (логин, регистрация и т.д.) — без отступа снизу */
body:has([data-no-nav]) {
padding-bottom: 0;
}
/* Protected layout: body/html не скроллятся, скролл только внутри .protected-main */
html:has(.protected-layout-root),
body:has(.protected-layout-root) {
padding-bottom: 0;
height: 100vh;
overflow: hidden;
}
body > * {
position: relative;
z-index: 1;
}
body::after {
content: '';
position: fixed;
inset: 0;
pointer-events: none;
z-index: 0;
opacity: 0.04;
mix-blend-mode: soft-light;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160' viewBox='0 0 160 160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.7'/%3E%3C/svg%3E");
}
/* Select: выпадающее меню — светлый фон и тёмный текст (иначе белый на белом) */
md-filled-select::part(menu),
md-outlined-select::part(menu) {
background-color: #fff !important;
--md-menu-container-color: #fff !important;
--md-sys-color-surface: #fff !important;
--md-sys-color-on-surface: #1a1a1a !important;
--md-sys-color-on-surface-variant: #444 !important;
color: #1a1a1a !important;
}
md-filled-select::part(menu) md-select-option,
md-filled-select::part(menu) md-menu-item,
md-outlined-select::part(menu) md-select-option,
md-outlined-select::part(menu) md-menu-item {
color: #1a1a1a !important;
}
/* Меню select может рендериться в overlay — светлая тема для списка опций */
md-menu:has(md-select-option) {
--md-menu-container-color: #fff !important;
--md-sys-color-surface: #fff !important;
--md-sys-color-on-surface: #1a1a1a !important;
background-color: #fff !important;
color: #1a1a1a !important;
}
md-menu:has(md-select-option) md-select-option,
md-menu:has(md-select-option) md-menu-item {
color: #1a1a1a !important;
}
/* Временные стили для нижней навигации (Material Web) — больше не используются, оставлены на случай отката */
/* md-navigation-bar.bottom-nav-ios26 { ... } */
/* Оптимизация изображений */
img {
max-width: 100%;
height: auto;
/* Lazy loading по умолчанию */
loading: lazy;
/* Оптимизация декодирования */
decoding: async;
}
/* iOS 24+ эффекты */
.ios-blur {
backdrop-filter: var(--ios-blur);
-webkit-backdrop-filter: var(--ios-blur);
}
.ios-card {
border-radius: var(--ios-radius);
background: var(--ios-blur-bg);
backdrop-filter: var(--ios-blur);
-webkit-backdrop-filter: var(--ios-blur);
box-shadow: var(--ios-shadow);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.ios-card:hover {
transform: translateY(-2px);
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.15);
}
/* iOS 24+ стеклянные панели */
.ios-glass-panel {
position: relative;
background: #ffffff;
border: 1px solid transparent;
backdrop-filter: blur(26px) saturate(1.25);
-webkit-backdrop-filter: blur(26px) saturate(1.25);
box-shadow: none;
overflow: hidden;
}
.ios-glass-panel::after {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
pointer-events: none;
opacity: 0;
mix-blend-mode: soft-light;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E");
}
/* Кастомный нижний бар iOS 26 — первый ряд всегда, остальное по раскрытию. Ноутбук и выше: fixed, bottom 20px */
.ios26-bottom-nav-container {
position: fixed;
bottom: 20px;
left: 16px;
right: 16px;
z-index: 1000;
max-width: min(900px, 100%);
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
gap: 0;
transition:
bottom 0.45s cubic-bezier(0.22, 1, 0.36, 1),
padding-bottom 0.45s cubic-bezier(0.22, 1, 0.36, 1);
padding-bottom: 0;
}
.ios26-bottom-nav-container--expanded {
bottom: 0;
padding-bottom: env(safe-area-inset-bottom, 0);
}
/* Protected layout: контент скроллится сверху, снизу меню. Скролл только в .protected-main */
.protected-layout-root {
display: flex;
flex-direction: column;
height: 100vh;
height: 100dvh; /* dynamic viewport height — учитывает адресную строку мобильного браузера */
overflow: hidden;
}
.protected-layout-root .protected-main {
flex: 1;
min-height: 0;
overflow-y: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
}
/* Ноутбук и выше (768px+): нижний бар fixed, bottom 20px, контенту отступ снизу */
@media (min-width: 768px) {
.protected-layout-root .ios26-bottom-nav-container {
position: fixed;
bottom: 20px;
left: 16px;
right: 16px;
margin: 0 auto;
max-width: min(900px, 100%);
}
.protected-layout-root .protected-main {
padding-bottom: 88px;
}
}
/* Мобильный: меню в потоке, flex-shrink: 0 — навигация НИКОГДА не исчезает и не перекрывает контент */
@media (max-width: 767px) {
.protected-layout-root .ios26-bottom-nav-container {
position: relative;
bottom: auto;
left: 0;
right: 0;
margin: 0;
max-width: 100%;
flex-shrink: 0;
border-radius: 0;
}
.protected-layout-root .ios26-bottom-nav {
border-radius: 0;
border-left: none;
border-right: none;
padding-bottom: calc(8px + env(safe-area-inset-bottom, 0));
}
/* Все строки навигации по 4 элемента на мобильном */
.protected-layout-root .ios26-bottom-nav-first-row {
grid-template-columns: repeat(4, 1fr);
}
.protected-layout-root .ios26-bottom-nav-first-row-buttons {
grid-template-columns: repeat(4, 1fr);
}
.protected-layout-root .ios26-bottom-nav-rest {
grid-template-columns: repeat(4, 1fr);
}
/* На мобильном отступ снизу в main не нужен — навигация в потоке */
.protected-layout-root .protected-main {
padding-bottom: 0 !important;
}
}
/* Swipe handle — visual indicator for swipe gesture (mobile only) */
.ios26-bottom-nav-swipe-handle {
display: none;
align-items: center;
justify-content: center;
padding: 6px 0 2px;
cursor: pointer;
-webkit-tap-highlight-color: transparent;
}
.ios26-bottom-nav-swipe-handle-bar {
width: 36px;
height: 4px;
border-radius: 2px;
background: var(--md-sys-color-outline-variant, rgba(0,0,0,0.18));
transition: width 0.2s ease, background 0.2s ease;
}
.ios26-bottom-nav-container--expanded .ios26-bottom-nav-swipe-handle-bar {
width: 28px;
background: var(--md-sys-color-primary, #7444FD);
}
@media (max-width: 767px) {
/* Hide both swipe handle and arrow on mobile — "More" button replaces them */
.ios26-bottom-nav-swipe-handle,
.ios26-bottom-nav-expand-trigger {
display: none !important;
}
}
.ios26-bottom-nav-expand-trigger {
all: unset;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
width: 80px;
height: 15px;
margin-bottom: 0;
color: var(--md-sys-color-surface);
background: #7444fdc7;
border: 1px solid #bfa9ff52;
border-bottom: none;
border-radius: 12px 12px 0 0;
backdrop-filter: var(--ios26-blur);
-webkit-backdrop-filter: var(--ios26-blur);
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.04);
transition: color 0.2s ease, background 0.2s ease;
}
.ios26-bottom-nav-expand-trigger:hover {
color: var(--md-sys-color-surface);
background: rgba(191, 169, 255, 0.2);
}
.ios26-bottom-nav-expand-trigger .material-symbols-outlined {
font-size: 20px;
}
.ios26-bottom-nav-arrow {
transition: transform 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}
.ios26-bottom-nav {
display: flex;
flex-direction: column;
gap: 0;
padding: 8px 12px;
background: #7444fdc7;
border-radius: 20px;
border: 1px solid var(--ios26-glass-border);
backdrop-filter: var(--ios26-blur);
-webkit-backdrop-filter: var(--ios26-blur);
box-shadow: var(--ios26-shadow-soft);
}
.ios26-bottom-nav-first-row {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 4px 8px;
}
.ios26-bottom-nav-first-row--with-selector {
display: flex;
align-items: stretch;
gap: 6px;
grid-template-columns: unset;
}
/* Первый ряд: 4 колонки, когда есть слот уведомлений (мобильное меню) */
.ios26-bottom-nav-first-row--with-notifications {
grid-template-columns: repeat(4, 1fr);
}
.ios26-bottom-nav-first-row-buttons--with-notifications {
grid-template-columns: repeat(4, 1fr);
}
.ios26-bottom-nav-first-row-buttons {
flex: 1;
min-width: 0;
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 4px 8px;
}
/* Notifications slot inside expanded section on mobile */
.ios26-bottom-nav-notifications-in-rest {
grid-column: 1 / -1;
display: flex;
align-items: center;
justify-content: center;
padding: 4px 0;
}
.ios26-bottom-nav-rest {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 4px 8px;
margin-top: 0;
max-height: 0;
overflow: hidden;
opacity: 0;
transition:
max-height 0.45s cubic-bezier(0.22, 1, 0.36, 1),
margin-top 0.45s cubic-bezier(0.22, 1, 0.36, 1),
opacity 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}
.ios26-bottom-nav-rest--expanded {
margin-top: 4px;
max-height: 220px;
opacity: 1;
}
/* Плавное появление дополнительных кнопок при раскрытии */
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button {
animation: ios26-nav-item-reveal 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
}
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button:nth-child(1) { animation-delay: 0.04s; }
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button:nth-child(2) { animation-delay: 0.08s; }
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button:nth-child(3) { animation-delay: 0.12s; }
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button:nth-child(4) { animation-delay: 0.16s; }
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button:nth-child(5) { animation-delay: 0.2s; }
.ios26-bottom-nav-rest--expanded .ios26-bottom-nav-button:nth-child(6) { animation-delay: 0.24s; }
@keyframes ios26-nav-item-reveal {
from {
opacity: 0;
transform: translateY(-8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.ios26-bottom-nav-button {
all: unset;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 2px;
padding: 6px 4px;
border-radius: 12px;
min-width: 0;
color: var(--md-sys-color-surface);
background: transparent;
box-shadow: none;
}
.ios26-bottom-nav-button--active,
.ios26-bottom-nav-button:hover {
color: #ebe4ff;
background: #bfa9ff52;
box-shadow: 0 4px 12px rgb(0 0 0 / 7%);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
}
.ios26-bottom-nav-icon {
font-size: 20px;
line-height: 1;
flex-shrink: 0;
}
.ios26-bottom-nav-label {
font-size: 10px;
font-weight: 500;
letter-spacing: 0.02em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
text-align: center;
}
/* Выдвижная навигация slideout — слева, появление слева направо */
.ios26-bottom-nav-slideout {
position: fixed !important;
left: 0 !important;
right: auto !important;
top: 0 !important;
bottom: 0 !important;
width: 100px !important;
z-index: 10004 !important;
overflow: hidden;
animation: ios26-slideout-left-to-right 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}
@keyframes ios26-slideout-left-to-right {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
/* Слева углы прямые, справа закруглённые — 1 колонка, 100px ширина */
.ios26-bottom-nav-slideout .ios26-bottom-nav-slideout-inner {
display: grid !important;
grid-template-columns: 1fr !important;
gap: 4px !important;
padding: 12px 8px !important;
height: 100%;
overflow-y: auto;
align-content: start;
border-radius: 0 20px 20px 0 !important;
border-left: none !important;
box-shadow: 4px 0 24px rgba(0, 0, 0, 0.15) !important;
}
.ios26-bottom-nav-slideout .ios26-bottom-nav-button {
flex-direction: column;
padding: 8px 4px;
min-height: 48px;
}
.ios26-bottom-nav-slideout .ios26-bottom-nav-label {
font-size: 9px;
max-width: 68px;
}
/* Тарифные планы — карточки в ряд с описанием и преимуществами */
.ios26-payment-tab {
display: flex;
flex-direction: column;
gap: var(--ios26-spacing-lg);
}
.ios26-payment-tab__label {
font-size: 11px;
font-weight: 600;
letter-spacing: 0.05em;
color: var(--md-sys-color-on-surface-variant);
}
/* Карточки всегда в ряд: 1 на узких, 2 на планшете, 3 на десктопе */
.ios26-plan-card-grid {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
}
@media (min-width: 600px) {
.ios26-plan-card-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 900px) {
.ios26-plan-card-grid {
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
}
/* Ограничение 45 карточек — можно показать 4 в ряд на очень широких экранах */
@media (min-width: 1400px) {
.ios26-plan-card-grid {
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
}
.ios26-plan-card {
display: flex;
flex-direction: column;
gap: 12px;
padding: 24px;
border-radius: 16px;
border: 1px solid transparent;
box-sizing: border-box;
min-height: 0;
}
.ios26-plan-card--elevated {
background: #fff;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04);
border-color: rgba(0, 0, 0, 0.06);
}
.ios26-plan-card--elevated:hover {
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);
}
.ios26-plan-card--current {
background: var(--md-sys-color-primary-container, #e8def8);
border-color: var(--md-sys-color-primary, #6750a4);
}
.ios26-plan-card__overline {
font-size: 12px;
font-weight: 500;
color: var(--md-sys-color-on-surface-variant);
letter-spacing: 0.04em;
}
.ios26-plan-card__headline {
font-size: 20px;
font-weight: 600;
line-height: 1.3;
color: var(--md-sys-color-on-surface);
margin: 0;
}
/* Бейдж названия тарифа */
.ios26-plan-card__badge {
display: inline-flex;
align-items: center;
height: 28px;
padding: 0 12px;
border-radius: 8px;
font-size: 13px;
font-weight: 600;
color: var(--md-sys-color-primary, #6750a4);
background: rgba(103, 80, 164, 0.12);
width: fit-content;
}
/* Блок цены: число + период */
.ios26-plan-card__price-block {
display: flex;
align-items: baseline;
gap: 6px;
margin: 4px 0 0 0;
}
.ios26-plan-card__price-value {
font-size: 32px;
font-weight: 700;
line-height: 1;
color: var(--md-sys-color-on-surface, #1c1b1f);
}
.ios26-plan-card__price-period {
font-size: 14px;
font-weight: 500;
color: var(--md-sys-color-on-surface-variant);
}
.ios26-plan-card__supporting {
font-size: 14px;
line-height: 1.5;
color: var(--md-sys-color-on-surface-variant);
margin: 0;
}
.ios26-plan-card__benefits {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 8px;
}
.ios26-plan-card__benefit {
display: flex;
align-items: flex-start;
gap: 8px;
font-size: 13px;
color: var(--md-sys-color-on-surface);
line-height: 1.4;
}
.ios26-plan-card__benefit-icon {
flex-shrink: 0;
width: 18px;
height: 18px;
margin-top: 1px;
color: var(--md-sys-color-primary, #6750a4);
}
.ios26-plan-card__price {
font-size: 20px;
font-weight: 600;
color: var(--md-sys-color-primary);
margin-top: auto;
}
.ios26-plan-card__actions {
margin-top: auto;
padding-top: 8px;
}
.ios26-plan-card__action {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding: 12px 20px;
border-radius: 12px;
border: none;
background: var(--md-sys-color-primary, #6750a4);
color: var(--md-sys-color-on-primary, #fff);
font-size: 14px;
font-weight: 600;
text-decoration: none;
cursor: pointer;
transition: opacity 0.2s ease, background-color 0.2s ease;
}
.ios26-plan-card__action:hover {
opacity: 0.92;
}
.ios26-plan-card__action:active {
opacity: 0.88;
}
/* Профиль: оверлей при наведении на аватар */
.profile-avatar-container:hover .profile-avatar-overlay {
opacity: 1;
pointer-events: auto;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* Flip-card: панели заполняют всю высоту */
.flip-card-front .ios26-panel {
min-height: 100%;
display: flex;
flex-direction: column;
}
.flip-card-back .ios26-panel {
height: 100%;
display: flex;
flex-direction: column;
}
/* Кнопка "Назад" в шапке секций деталей */
.ios26-back-button {
all: unset;
cursor: pointer;
padding: 8px 16px;
border-radius: 999px;
font-size: 13px;
font-weight: 500;
color: var(--md-sys-color-primary);
background: #bfa9ff52;
box-shadow: 0 4px 12px rgb(0 0 0 / 7%);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
}
.ios26-back-button:hover {
background: #bfa9ff80;
}
/* Превью ближайших занятий в виде карточек */
.ios26-lesson-preview {
all: unset;
cursor: pointer;
display: flex;
align-items: center;
gap: var(--ios26-spacing-sm);
padding: var(--ios26-spacing-sm);
border-radius: var(--ios26-radius-sm);
border: 1px solid var(--ios26-list-divider);
background: var(--ios26-glass);
box-shadow: var(--ios26-shadow-soft);
transition: background 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
.ios26-lesson-preview:hover {
background: #bfa9ff52;
box-shadow: 0 4px 12px rgb(0 0 0 / 7%);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
}
.ios26-lesson-avatar {
width: 44px;
height: 44px;
border-radius: 50%;
overflow: hidden;
background: linear-gradient(135deg, #bfa9ff, #8c7eff);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-weight: 600;
font-size: 18px;
flex-shrink: 0;
}
.ios26-lesson-avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.ios26-lesson-text {
display: flex;
flex-direction: column;
gap: 2px;
}
.ios26-lesson-subject {
font-size: 15px;
font-weight: 600;
color: var(--md-sys-color-on-surface);
margin: 0;
}
.ios26-lesson-student {
font-size: 13px;
color: var(--md-sys-color-on-surface-variant);
margin: 0;
}
.ios26-lesson-datetime {
font-size: 12px;
color: var(--md-sys-color-on-surface-variant);
margin: 0;
}
.ios-glass-panel::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
pointer-events: none;
background: radial-gradient(80% 60% at 15% 10%, var(--ios-glass-highlight), rgba(255, 255, 255, 0));
opacity: 0;
}
.ios-glass-interactive {
transition: transform 0.2s ease, box-shadow 0.2s ease;
cursor: pointer;
}
.ios-glass-interactive:hover {
transform: translateY(-2px);
box-shadow: var(--ios-shadow-deep);
}
.ios-dashboard {
position: relative;
padding-bottom: 32px;
}
.ios-dashboard .ios-glass-panel {
box-shadow: var(--ios-shadow-soft);
}
/* iOS 26+ Dashboard: контейнер и панели */
.ios26-dashboard {
--dashboard-font: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;
font-family: var(--dashboard-font);
width: 100%;
max-width: 100%;
padding: var(--ios26-spacing);
}
.ios26-dashboard.ios26-dashboard-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-auto-rows: min-content;
gap: var(--ios26-spacing);
align-items: stretch;
}
@media (max-width: 700px) {
.ios26-dashboard.ios26-dashboard-grid {
grid-template-columns: 1fr;
}
}
/* Страница обратной связи — Kanban две колонки */
.ios26-feedback-page {
padding: var(--ios26-spacing);
}
.ios26-feedback-kanban {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--ios26-spacing-lg);
align-items: start;
}
@media (max-width: 700px) {
.ios26-feedback-kanban {
grid-template-columns: 1fr;
}
}
.ios26-feedback-column {
display: flex;
flex-direction: column;
gap: var(--ios26-spacing-sm);
min-height: 200px;
}
.ios26-feedback-column__title {
font-size: 14px;
font-weight: 600;
color: var(--md-sys-color-on-surface-variant);
letter-spacing: 0.03em;
margin: 0 0 var(--ios26-spacing-sm) 0;
padding: 0;
}
.ios26-feedback-column__cards {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--ios26-spacing-sm);
}
@media (max-width: 600px) {
.ios26-feedback-column__cards {
grid-template-columns: 1fr;
}
}
/* Домашние задания — 4 колонки Kanban */
.ios26-homework-kanban {
grid-template-columns: repeat(4, 1fr);
}
@media (max-width: 1100px) {
.ios26-homework-kanban {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.ios26-homework-kanban {
grid-template-columns: 1fr;
}
}
.ios26-panel {
background: var(--ios26-glass);
backdrop-filter: var(--ios26-blur);
-webkit-backdrop-filter: var(--ios26-blur);
border-radius: var(--ios26-radius-md);
border: 1px solid var(--ios26-glass-border);
box-shadow: var(--ios26-shadow);
overflow: hidden;
transition: box-shadow 0.25s ease, transform 0.2s ease;
}
.ios26-panel-interactive:hover {
box-shadow: var(--ios26-shadow-hover);
}
/* Страница аналитики: слайдер на всю высоту экрана */
.ios26-dashboard-analytics {
overflow: hidden;
}
.ios26-analytics-swiper-wrap {
position: relative;
height: 100vh;
width: 100%;
}
.ios26-analytics-swiper-wrap .ios26-analytics-swiper {
height: 100%;
}
.ios26-analytics-swiper-wrap .ios26-analytics-swiper .swiper-slide {
height: 100%;
overflow: auto;
}
/* Кнопки навигации слайдера — в стиле дашборда (стекло, primary) */
.ios26-analytics-swiper-wrap .swiper-button-next,
.ios26-analytics-swiper-wrap .swiper-button-prev {
width: 48px;
height: 48px;
margin-top: 0;
top: 50%;
transform: translateY(-50%);
background: var(--ios26-glass);
backdrop-filter: var(--ios26-blur);
-webkit-backdrop-filter: var(--ios26-blur);
border: 1px solid var(--ios26-list-divider);
border-radius: 50%;
box-shadow: var(--ios26-shadow-soft);
color: var(--md-sys-color-primary);
transition: box-shadow 0.2s ease, background 0.2s ease;
}
.ios26-analytics-swiper-wrap .swiper-button-next:hover,
.ios26-analytics-swiper-wrap .swiper-button-prev:hover {
background: var(--md-sys-color-primary);
color: var(--md-sys-color-on-primary);
box-shadow: var(--ios26-shadow);
}
.ios26-analytics-swiper-wrap .swiper-button-next {
right: var(--ios26-spacing);
}
.ios26-analytics-swiper-wrap .swiper-button-prev {
left: var(--ios26-spacing);
}
.ios26-analytics-swiper-wrap .swiper-button-next::after,
.ios26-analytics-swiper-wrap .swiper-button-prev::after {
font-size: 20px;
font-weight: 700;
}
.ios26-analytics-swiper-wrap .swiper-pagination {
bottom: var(--ios26-spacing);
}
.ios26-analytics-swiper-wrap .swiper-pagination-bullet {
width: 8px;
height: 8px;
background: var(--md-sys-color-outline-variant);
opacity: 0.8;
transition: opacity 0.2s ease, transform 0.2s ease;
}
.ios26-analytics-swiper-wrap .swiper-pagination-bullet:hover {
opacity: 1;
}
.ios26-analytics-swiper-wrap .swiper-pagination-bullet-active {
background: var(--md-sys-color-primary);
opacity: 1;
transform: scale(1.2);
}
/* Кастомные кнопки навигации слайдера — в стиле кнопки «Сохранить» (профиль) */
.ios26-analytics-nav {
position: absolute;
inset: 0;
z-index: 10;
pointer-events: none;
}
.ios26-analytics-nav .ios26-analytics-nav-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
pointer-events: auto;
}
.ios26-analytics-nav .ios26-analytics-nav-btn:first-child {
left: var(--ios26-spacing);
}
.ios26-analytics-nav .ios26-analytics-nav-btn:last-child {
right: var(--ios26-spacing);
}
.ios26-analytics-nav .ios26-analytics-nav-btn:hover {
opacity: 0.92;
}
.ios26-analytics-nav .ios26-analytics-nav-btn:active {
opacity: 0.85;
}
/* Страница аналитики: панели на всю высоту слайда, без скруглений, нижняя граница темнее */
.ios26-dashboard-analytics .ios26-panel {
min-height: 100%;
height: 100%;
border-radius: 0;
border: none;
border-bottom: 2px solid rgba(0, 0, 0, 0.14);
display: flex;
flex-direction: column;
box-sizing: border-box;
}
@media (prefers-color-scheme: dark) {
.ios26-dashboard-analytics .ios26-panel {
border-bottom-color: rgba(255, 255, 255, 0.16);
}
}
/* Графики на странице аналитики — единый размер по высоте экрана (80%) */
.ios26-dashboard-analytics .ios26-analytics-chart,
.ios26-dashboard-analytics .ios26-analytics-chart-placeholder {
min-height: 80vh;
}
/* Ряд: график слева, статистика справа */
.ios26-analytics-chart-row {
display: flex;
flex-direction: row;
gap: var(--ios26-spacing-lg);
align-items: flex-start;
}
.ios26-analytics-chart-col {
flex: 1;
min-width: 0;
}
/* Топ занятий + Топ ученики — одна панель в 2 колонки */
.ios26-analytics-two-cols {
display: flex;
flex-direction: row;
gap: var(--ios26-spacing-lg);
align-items: flex-start;
width: 100%;
}
.ios26-analytics-two-cols .ios26-analytics-col {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: var(--ios26-spacing-sm);
}
.ios26-dashboard-analytics .ios26-stat-grid--aside {
display: flex;
flex-direction: column;
gap: var(--ios26-spacing-sm);
flex-shrink: 0;
width: 200px;
}
.ios26-dashboard-analytics .ios26-stat-grid--aside .ios26-stat-tile {
width: 100%;
}
.ios26-list-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--ios26-spacing-sm) 0;
border-bottom: 1px solid var(--ios26-list-divider);
font-size: 17px;
line-height: 1.35;
}
.ios26-list-row:last-child {
border-bottom: none;
}
.ios26-list-row-label {
color: var(--md-sys-color-on-surface-variant);
}
.ios26-list-row-value {
font-weight: 500;
color: var(--md-sys-color-on-surface);
}
/* Статистика: грид 3×3 с иконкой, названием и значением */
.ios26-stat-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--ios26-spacing-sm);
}
.ios26-stat-tile {
padding: 14px 16px;
border-radius: var(--ios26-radius-sm);
background: var(--ios26-glass);
border: 1px solid var(--ios26-list-divider);
box-shadow: var(--ios26-shadow-soft);
display: flex;
flex-direction: column;
gap: 8px;
align-items: center;
text-align: center;
}
.ios26-stat-icon {
color: var(--md-sys-color-primary);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 4px;
}
.ios26-stat-icon svg {
width: 30px;
height: 30px;
}
.ios26-stat-label {
font-size: 18px;
color: var(--md-sys-color-on-surface-variant);
}
.ios26-stat-value {
font-size: 18px;
font-weight: 600;
color: var(--md-sys-color-on-surface);
}
.ios26-stat-value--primary {
color: var(--md-sys-color-primary);
}
.ios26-stat-value--tertiary {
color: var(--md-sys-color-tertiary);
}
.ios26-stat-value--error {
color: var(--md-sys-color-error);
}
.ios26-section-title {
font-size: 20px;
font-weight: 600;
color: var(--md-sys-color-on-surface);
margin: 0 0 var(--ios26-spacing-md) 0;
text-align: left;
letter-spacing: -0.02em;
}
@keyframes ios-aurora {
0% {
background-position: 0% 20%;
}
50% {
background-position: 100% 80%;
}
100% {
background-position: 0% 20%;
}
}
/* Оптимизация анимаций */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* Утилиты для производительности */
.gpu-accelerated {
transform: translateZ(0);
will-change: transform;
}
/* Анимация загрузки */
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Прогресс поиска */
@keyframes searchProgress {
0% { transform: translateX(-100%); }
50% { transform: translateX(200%); }
100% { transform: translateX(-100%); }
}
/* Скрытие элементов без перерисовки */
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
/* Календарь: чтобы не обрезались рамки ячеек */
.rbc-day-bg {
overflow: hidden;
}
/* Календарь: выбранный день / выбранная ячейка */
.rbc-day-bg.rbc-selected-day,
.rbc-day-bg.rbc-selected-cell {
border: 2px solid #9286b2 !important;
background: #cec1f4 !important;
opacity: 1;
cursor: pointer;
}
.rbc-day-bg.rbc-selected-day:hover,
.rbc-day-bg.rbc-selected-cell:hover {
border: 2px solid #9286b2 !important;
background: #cec1f4 !important;
opacity: 1;
cursor: pointer;
}
/* Календарь: события не выходят за пределы ячейки */
.rbc-row-segment {
overflow: hidden;
}
.rbc-event {
max-width: 100%;
box-sizing: border-box;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
/* Календарь: события прижаты к верху ячейки, а не по центру */
.rbc-month-row .rbc-row-content {
align-items: flex-start;
}
/* Градиентная теневая заливка под линией графика доходов ментора */
#apexchartsmentor-income-chart .apexcharts-area-series path {
filter: drop-shadow(0 4px 12px rgba(103, 80, 164, 0.25))
drop-shadow(0 2px 6px rgba(103, 80, 164, 0.2))
drop-shadow(0 1px 3px rgba(0, 0, 0, 0.15));
}
/* Улучшенная градиентная заливка области под линией */
#apexchartsmentor-income-chart .apexcharts-area-series .apexcharts-area {
filter: drop-shadow(0 8px 20px rgba(103, 80, 164, 0.2))
drop-shadow(0 4px 10px rgba(103, 80, 164, 0.15));
}
/* Градиентная тень для foreignobject */
#apexchartsmentor-income-chart foreignObject {
filter: drop-shadow(0 4px 12px rgba(103, 80, 164, 0.15))
drop-shadow(0 2px 6px rgba(103, 80, 164, 0.1));
}
/* Увеличение размера шрифта для всех текстовых элементов графика */
#apexchartsmentor-income-chart text,
#apexchartsmentor-income-chart tspan {
font-size: 15px !important;
}
/* ========== Адаптив: планшет и телефон (dashboard, chat, materials, homework, my-progress, request-mentor, profile, livekit, students, feedback, analytics, payment, referrals) ========== */
/* Планшет: 768px — 1024px */
@media (max-width: 1024px) {
.protected-main {
padding-left: 12px !important;
padding-right: 12px !important;
padding-top: 12px !important;
padding-bottom: 12px !important;
}
.protected-main[data-full-width] {
padding: 12px !important;
}
.ios26-dashboard {
padding: 12px;
}
.ios26-dashboard.ios26-dashboard-grid {
gap: 12px;
}
.ios26-stat-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.ios26-analytics-chart-row {
flex-direction: column;
}
.ios26-analytics-two-cols {
flex-direction: column;
}
.ios26-dashboard-analytics .ios26-stat-grid--aside {
width: 100%;
flex-direction: row;
flex-wrap: wrap;
gap: 8px;
}
.ios26-dashboard-analytics .ios26-stat-grid--aside .ios26-stat-tile {
flex: 1;
min-width: 140px;
}
.ios26-bottom-nav-container {
left: 8px;
right: 8px;
}
.ios26-panel {
padding: 12px;
}
}
/* Телефон: до 767px */
@media (max-width: 767px) {
body {
padding-bottom: calc(50px + 52px);
}
.protected-main {
padding-left: 10px !important;
padding-right: 10px !important;
padding-top: 10px !important;
padding-bottom: 10px !important;
}
.protected-main[data-full-width] {
padding: 10px !important;
}
.ios26-dashboard {
padding: 10px;
}
.ios26-dashboard.ios26-dashboard-grid {
grid-template-columns: 1fr;
gap: 10px;
}
.ios26-stat-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
.ios26-stat-tile {
padding: 10px 12px;
}
.ios26-stat-label,
.ios26-stat-value {
font-size: 15px;
}
.ios26-section-title {
font-size: 18px;
margin-bottom: 12px;
}
.ios26-bottom-nav-container {
left: 6px;
right: 6px;
bottom: 20px;
}
.ios26-bottom-nav {
padding: 6px 8px;
}
.ios26-bottom-nav-first-row {
gap: 2px 4px;
}
.ios26-bottom-nav-rest--expanded {
max-height: 200px;
}
.ios26-panel {
padding: 10px;
border-radius: var(--ios26-radius-sm);
}
.ios26-dashboard-analytics .ios26-analytics-chart,
.ios26-dashboard-analytics .ios26-analytics-chart-placeholder {
min-height: 60vh;
}
.ios26-analytics-nav .ios26-analytics-nav-btn:first-child {
left: 8px;
}
.ios26-analytics-nav .ios26-analytics-nav-btn:last-child {
right: 8px;
}
.ios26-feedback-page {
padding: 10px;
}
.ios26-feedback-kanban {
gap: 12px;
}
.ios26-list-row {
font-size: 15px;
padding: 10px 0;
}
/* Страница Студенты: сетка карточек и боковая панель */
.page-students {
padding: 16px !important;
}
.students-cards-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
align-items: start;
}
.students-side-panel {
width: 100% !important;
max-width: 100vw;
right: 0 !important;
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
/* Страница Профиль: одна колонка, поля в 1 колонку */
.page-profile {
padding: 16px !important;
}
.page-profile-grid {
grid-template-columns: 1fr !important;
}
.page-profile-fields {
grid-template-columns: 1fr !important;
}
/* Аналитика: уже есть .ios26-analytics-chart-row column, .ios26-analytics-two-cols column */
}
/* Маленький телефон: до 480px */
@media (max-width: 480px) {
.protected-main {
padding-left: 8px !important;
padding-right: 8px !important;
padding-top: 8px !important;
padding-bottom: 8px !important;
}
.protected-main[data-full-width] {
padding: 8px !important;
}
.page-students {
padding: 12px !important;
}
.students-cards-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
.page-profile {
padding: 12px !important;
}
.ios26-dashboard {
padding: 8px;
}
.ios26-dashboard.ios26-dashboard-grid {
gap: 8px;
}
.ios26-stat-grid {
grid-template-columns: 1fr;
}
.ios26-stat-tile {
padding: 12px;
}
.ios26-bottom-nav-container {
left: 4px;
right: 4px;
bottom: 16px;
}
.ios26-bottom-nav-first-row {
grid-template-columns: repeat(5, 1fr);
}
.ios26-bottom-nav-button {
min-width: 0;
}
.ios26-bottom-nav-label {
font-size: 10px;
}
.ios26-panel {
padding: 8px;
}
.ios26-section-title {
font-size: 17px;
}
}
/* Страница Студенты: сетка карточек (десктоп) */
.students-cards-grid {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 16px;
align-items: start;
}
/* Страница календаря (расписание): планшет — правая часть сверху, календарь снизу; телефон — только правая часть */
@media (max-width: 1024px) {
.ios26-schedule-layout {
grid-template-columns: 1fr !important;
grid-template-rows: auto 1fr;
}
.ios26-schedule-calendar-wrap {
order: 2;
}
.ios26-schedule-right-wrap {
order: 1;
}
}
@media (max-width: 767px) {
.ios26-schedule-calendar-wrap {
display: none !important;
}
.ios26-schedule-layout {
grid-template-rows: 1fr !important;
min-height: auto !important;
height: 100% !important;
flex: 1 !important;
}
.ios26-schedule-right-wrap {
display: flex !important;
flex-direction: column !important;
flex: 1 !important;
min-height: 0 !important;
height: 100% !important;
}
.checklesson-root {
min-height: auto !important;
flex: 1 !important;
height: 100% !important;
}
/* Обе стороны «куба» — полная высота */
.checklesson-root > div {
height: 100% !important;
}
.checklesson-root .ios-glass-panel {
height: 100% !important;
padding: 12px !important;
border-radius: 12px !important;
}
.ios26-schedule-page {
display: flex !important;
flex-direction: column !important;
height: 100% !important;
flex: 1 !important;
min-height: 0 !important;
}
}
/* Chat: на мобильном — только список или только окно чата (управляется из JS) */
@media (max-width: 767px) {
.ios26-chat-page {
padding: 4px !important;
height: 100%;
display: flex;
flex-direction: column;
}
.ios26-chat-layout {
flex: 1;
min-height: 0;
height: auto !important;
max-height: none !important;
}
/* Скрыть навигацию когда открыт чат */
html.mobile-chat-open .ios26-bottom-nav-container {
display: none !important;
}
/* Контент занимает всю высоту без навигации */
html.mobile-chat-open .protected-main {
padding-bottom: 0 !important;
}
}
/* Materials / Homework / Students / Request-mentor / Profile: карточки и контент */
@media (max-width: 767px) {
.ios26-payment-tab,
.ios26-plan-card-grid {
gap: 10px;
}
.ios26-plan-card {
padding: 12px;
}
.protected-main md-elevated-card {
padding: 20px !important;
border-radius: 16px !important;
}
}
@media (max-width: 480px) {
.protected-main md-elevated-card {
padding: 14px !important;
border-radius: 14px !important;
}
}
/* LiveKit: полноэкранный контейнер на мобильных */
@media (max-width: 767px) {
[data-lk-theme] {
font-size: 14px;
}
.protected-main[data-no-nav] {
padding: 0 !important;
}
}
/* ========== Адаптив: авторизация (login, register, invite) ========== */
/* Планшет: auth layout — уменьшаем колонку формы */
@media (max-width: 900px) {
.auth-layout {
grid-template-columns: 1fr minmax(0, 420px) !important;
}
.auth-layout-form {
padding: 20px 24px !important;
}
}
/* Телефон: auth layout — одна колонка, скрываем лого слева */
@media (max-width: 767px) {
.auth-layout {
grid-template-columns: 1fr !important;
}
.auth-layout-logo {
display: none !important;
}
.auth-layout-form {
min-height: 100vh;
padding: 20px 16px !important;
}
/* Имя + Фамилия в колонку на узких экранах */
.auth-name-grid {
grid-template-columns: 1fr !important;
}
/* Invite page: уменьшаем заголовок */
.invite-title {
font-size: 24px !important;
}
.invite-form-card {
padding: 20px !important;
}
}
/* Маленький телефон */
@media (max-width: 480px) {
.auth-layout-form {
padding: 16px 12px !important;
}
.auth-name-grid {
grid-template-columns: 1fr !important;
gap: 12px !important;
}
.invite-title {
font-size: 22px !important;
}
.invite-form-card {
padding: 16px !important;
}
}
/* ========== Адаптив: материалы, мой прогресс, диалоги ========== */
/* Материалы: grid minmax слишком большой для маленьких экранов */
@media (max-width: 480px) {
.materials-cards-grid {
grid-template-columns: 1fr !important;
}
}
/* Мой прогресс: 2 колонки → 1 на телефоне */
@media (max-width: 767px) {
.my-progress-grid {
grid-template-columns: 1fr !important;
}
}
/* CheckLesson форма (создание/редактирование занятия): одна колонка на мобильном */
@media (max-width: 600px) {
.checklesson-form {
grid-template-columns: 1fr !important;
gap: 8px !important;
}
.checklesson-form > div {
grid-column: 1 / -1 !important;
}
.checklesson-form > div > label {
font-size: 11px !important;
margin-bottom: 2px !important;
}
.checklesson-form h3 {
font-size: 17px !important;
}
.checklesson-form textarea {
rows: 1;
font-size: 14px !important;
padding: 8px 12px !important;
}
.checklesson-form select,
.checklesson-form input[type="number"] {
font-size: 14px !important;
padding: 8px 12px !important;
}
.checklesson-form button[type="button"],
.checklesson-form button[type="submit"] {
padding: 8px 16px !important;
font-size: 13px !important;
}
/* DatePicker / TimePicker trigger buttons */
.checklesson-form button[aria-required] {
padding: 8px 12px !important;
font-size: 14px !important;
}
/* Header row: reduce margin */
.checklesson-form > div:first-child {
margin-bottom: 0 !important;
}
/* Switch row: reduce padding */
.checklesson-form > div:has(> [class*="switch"]),
.checklesson-form > div:has(> div > input[type="checkbox"]) {
padding: 4px 0 !important;
}
/* Actions row: reduce margin */
.checklesson-form > div:last-child {
margin-top: 4px !important;
}
}
/* Диалог создания/редактирования урока: полноэкранный на мобильном */
@media (max-width: 600px) {
.create-lesson-dialog {
min-width: unset !important;
width: auto !important;
max-width: none !important;
gap: 6px !important;
}
/* Скрываем отдельные лейблы — у md-outlined-field есть свой label */
.create-lesson-dialog > div > label {
display: none !important;
}
/* Внутренний gap у предмета (select + custom input) */
.create-lesson-dialog > div > div {
gap: 6px !important;
}
/* Время + длительность в одну колонку */
.create-lesson-time-row {
grid-template-columns: 1fr !important;
gap: 6px !important;
}
/* Лейблы внутри time-row тоже скрываем */
.create-lesson-time-row label {
display: none !important;
}
/* Переключатель "постоянное занятие" компактнее */
.create-lesson-dialog > div:last-child {
gap: 8px !important;
}
.create-lesson-dialog > div:last-child label {
display: inline !important;
font-size: 13px !important;
}
md-dialog {
--md-dialog-container-shape: 0px !important;
--md-dialog-container-max-width: 100vw !important;
--md-dialog-container-min-width: 100vw !important;
max-width: 100vw !important;
width: 100vw !important;
margin: 0 !important;
}
md-dialog::part(container) {
width: 100vw !important;
max-width: 100vw !important;
min-width: 100vw !important;
height: 100dvh !important;
max-height: 100dvh !important;
border-radius: 0 !important;
margin: 0 !important;
top: 0 !important;
left: 0 !important;
transform: none !important;
display: flex !important;
flex-direction: column !important;
}
md-dialog [slot="headline"] {
padding: 10px 12px !important;
font-size: 16px !important;
flex-shrink: 0 !important;
}
md-dialog form {
padding: 8px 12px !important;
overflow-y: auto !important;
flex: 1 !important;
min-height: 0 !important;
-webkit-overflow-scrolling: touch;
}
md-dialog [slot="actions"] {
padding: 6px 12px calc(6px + env(safe-area-inset-bottom, 0)) !important;
flex-shrink: 0 !important;
}
md-dialog input,
md-dialog select,
md-dialog textarea {
font-size: 14px !important;
padding: 8px 0 !important;
}
md-dialog textarea {
min-height: 32px !important;
max-height: 48px !important;
}
}
/* ========== Адаптив: дашборд компоненты ========== */
/* StatsGrid: 4 колонки → 2 на планшете → 1 на маленьком телефоне */
@media (max-width: 1024px) {
.dashboard-stats-grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
}
@media (max-width: 480px) {
.dashboard-stats-grid {
grid-template-columns: 1fr !important;
}
}
/* IncomeSection: 3 колонки → 1 на телефоне */
@media (max-width: 767px) {
.income-stats-grid {
grid-template-columns: 1fr !important;
}
}
/* UpcomingLessons / RecentSubmissions: 2 колонки → 1 на телефоне */
@media (max-width: 600px) {
.upcoming-lessons-grid,
.recent-submissions-grid {
grid-template-columns: 1fr !important;
}
}
/* ParentDashboard: уменьшаем заголовок на мобильном */
@media (max-width: 767px) {
.parent-dashboard-title {
font-size: 22px !important;
}
}
/* ========== Адаптив: студенты — табы и высота карточек ========== */
/* Табы студентов: горизонтальный скролл на мобильных */
.students-tabs {
scrollbar-width: none;
-ms-overflow-style: none;
}
.students-tabs::-webkit-scrollbar {
display: none;
}
.students-tabs button {
white-space: nowrap;
flex-shrink: 0;
}
/* Студенты: карточки — уменьшаем сетку и высоту фото на мобильных */
@media (max-width: 1024px) {
.students-cards-grid {
grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
}
@media (max-width: 767px) {
.students-tabs button {
padding: 10px 14px !important;
font-size: 14px !important;
}
.students-cards-grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: 8px !important;
}
.students-cards-grid md-elevated-card {
border-radius: 16px !important;
}
.students-cards-grid md-elevated-card > div:first-child {
height: 100px !important;
}
.students-cards-grid md-elevated-card > div:last-child {
padding: 8px 10px 10px !important;
}
.students-cards-grid md-elevated-card > div:last-child > div:first-child {
font-size: 14px !important;
margin-bottom: 2px !important;
}
.students-cards-grid md-elevated-card > div:last-child > div:nth-child(2) {
font-size: 12px !important;
}
}
@media (max-width: 480px) {
.students-cards-grid md-elevated-card > div:first-child {
height: 80px !important;
}
}
/* ========== Адаптив: рефералы ========== */
@media (max-width: 767px) {
.page-referrals {
padding: 12px !important;
}
.page-referrals-card {
padding: 16px !important;
border-radius: 16px !important;
}
.referral-link-row {
flex-direction: column !important;
}
.referral-link-row input {
width: 100% !important;
}
.referral-link-row button {
width: 100% !important;
}
.referral-stats-grid {
grid-template-columns: repeat(2, 1fr) !important;
}
.referral-list {
padding-left: 16px !important;
}
.referral-list li {
font-size: 13px !important;
}
}
@media (max-width: 480px) {
.page-referrals {
padding: 8px !important;
}
.page-referrals-card {
padding: 12px !important;
border-radius: 14px !important;
}
.referral-stats-grid {
grid-template-columns: 1fr !important;
}
}
/* ========== Адаптив: уведомления — панель fixed на мобильном (embedded) ========== */
@media (max-width: 767px) {
.notification-panel {
left: 8px !important;
right: 8px !important;
bottom: 8px !important;
top: auto !important;
width: auto !important;
max-width: none !important;
max-height: 70vh !important;
transform: none !important;
}
}
/* Flip-карточка эффект */
.flip-card {
position: relative;
width: 100%;
height: 100%;
min-height: 340px;
display: flex;
flex-direction: column;
}
.flip-card-inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.6s;
transform-style: preserve-3d;
}
.flip-card-front,
.flip-card-back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
display: flex;
flex-direction: column;
}
.flip-card-back {
transform: rotateY(180deg);
}