/* ОБНУЛЕНИЕ ВСЕГО НА СВЕТЕ */
*,
*::before,
*::after {
    padding: 0;
    margin: 0;
    border: 0;
    box-sizing: border-box;
}

a {
    text-decoration: none;
}

li,
ol,
ul {
    list-style: none;
}

img {
    vertical-align: top;
}

h1, h2, h3, h4, h5, h6 {
    font-weight: inherit;
    font-size: inherit;
}

body {
    height: 100%;
    line-height: 1;
    font-size: 16px;
    /* color: #314940; */
    color: #FFFFFF;
    /* background: #F4EDEA80; */
    background: #67AA6C;
    font-weight: 300;
    font-family: Fira Sans;
    min-height: 100vh;
    /* Баг-репорт: потянул вниз на странице Настроек (или любой другой,
       прокрученной до самого верха) - браузер/WebAPK перехватывал жест как
       свой pull-to-refresh и перезагружал всё окно целиком, теряя всё
       состояние SPA. overscroll-behavior-y:contain не даёт жесту "провалиться"
       из внутреннего скролл-контейнера дальше, к обработчику браузера -
       обычная прокрутка внутри страниц при этом не затрагивается (в отличие
       от touch-action:none ниже, который поэтому и закомментирован). */
    overscroll-behavior-y: contain;
}

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
textarea:focus {
    outline: none;
    border: none; /* Remove default border */
  }
div {
    outline: none; /* Removes the square outline */
    -webkit-tap-highlight-color: transparent; /* No highlight on tap */
}
  

/* Исключение горизонтальной прокрутки */
.wrapper {
    min-height: 100%;
    /*margin: 6px;*/
}

/* Ограничивающий контейнер */
._container {
    max-width: 11046px;
    /* margin: 0px auto; */
    /*margin: 0 8px 0 8px;*/
}

/* по умолчанию запрещаем выделение текста */
body {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  /* touch-action: none;  */
}

/* разрешаем выделение текста для интерактивных элементов */
input, textarea, [contenteditable="true"] {
  user-select: text;
  -webkit-user-select: text;
  -moz-user-select: text;
  -ms-user-select: text;
}

html {
    font-size: 62.5%; /* 1rem = 10px */
}

/* ОБНУЛЕНИЕ ВСЕГО НА СВЕТЕ */

/* УНИВЕРСАЛЬНЫЕ */

/* Прячем + убираем так, чтобы не занимал место. */
.absent{
    display: none;
}

.btn {
    display: inline-flex;
    height: 42px;
    border-radius: 6px;
    align-items: center;
    background: #314940;
    box-sizing: border-box;
    color: #FFFFFF;
    font-family: Roboto;
    font-weight: 400;
    cursor: pointer;
}

.btn__text,
.btn__text_rare {
    margin: 6px 20px 6px 20px;
}

.btn:hover {
    background: #547e6e;
    opacity: 0.7;
}

.chapter-title {
    background-image: url('img/auth-page-background-top.png');
    background-size: 100% 180%;
    background-repeat: no-repeat;
    /* border: #1240AB solid; */
}

.chapter-title img {
    width: 50%;
    height: auto;
    max-height: 30svh;
    /* position: relative;
    top: 0px; */
}
/* @media (min-width: 1200px) {
    .chapter-title img {
        max-height: 50svh;
    }
}
@media (min-width: 800px) {
    .chapter-title img {
        max-height: 40svh;
    }
} */

.chapter-title__text,
.chapter-title__subtext {
    /* color: #314940; */
    font-weight: 400;
    font-size: 28px;
    margin-left: 50px;
    padding-top: 15px;
}
.chapter-title__subtext {
    font-weight: 300;
    font-size: 18px;
}
/* Только для смартфона/планшета (pointer: coarse - тачскрин как основной
указатель) - на компьютере с мышью нет нужды напоминать про беззвучный
режим устройства. Та же pointer-фича, что и ниже для 2-колоночных
настроек (только в обратную сторону), чтобы не заводить второй способ
отличать "телефон" от "компьютер" в одном файле. */
.guest-page-silent-mode-tip {
    display: none;
}
@media (pointer: coarse) {
    .guest-page-silent-mode-tip {
        display: flex;
        align-items: center;
        gap: 8px;
        color: #FFFFFFCC;
        font-size: 13px;
        font-weight: 300;
        line-height: 1.3;
        background-color: #00000022;
        border-radius: 8px;
        padding: 8px 12px;
        margin-bottom: 14px;
    }
    .guest-page-silent-mode-tip span:first-child {
        font-size: 18px;
        flex-shrink: 0;
    }
}

input::placeholder {
    color: #F1FCE6;
    font-size: 18px;
    width: 300;
    opacity: 0.7;
    padding-left: 15px;
}

.page-title__text {
    color: white;
    font-size: 18px;
    font-weight: 300;
    margin-left: 10px;
}

.button-img {
    cursor: pointer;
}
/* Иконка шестерёнки настроек (её собственный viewBox 20x20) выглядела
мельче соседних кнопок этого ряда (mute.svg 24x23 и т.п.) - у .button-img
нет своего размера вообще, каждая иконка рендерится в родном размере
своего SVG. Явно приравниваем к высоте соседей и делаем квадратной
(баг-репорт со скриншотом: "должна быть такой же по высоте, ширина = высоте"). */
#learnig-page-settings-ref {
    height: 24px;
    width: 24px;
}
/* (hover: hover) - только устройства с реальным наведением (мышь). На
   touch-экранах тап по кнопке нередко не снимает :hover до следующего тапа
   в другое место (частая особенность мобильных браузеров) - кнопка
   оставалась притушенной (opacity: 0.7) неопределённо долго после нажатия,
   раз навсегда "залипнув" в :hover. Больше всего заметно на центральной
   Play/Stop кнопке обучения - по ней тапают чаще всего (баг-репорт: "кнопка
   тусклая после остановки" - никак не связано с mainState/анимацией
   мигания, чисто CSS). */
@media (hover: hover) {
    .button-img:hover {
        opacity: 0.7;
    }
}
/* Кнопки перемотки истории (назад/вперёд), когда идти в эту сторону
   некуда: притухшая и не кликабельная - pointer-events убирает клик
   ещё на уровне браузера, до срабатывания data-action и звука ошибки. */
.button-img1 {
    opacity: 0.35;
    cursor: default;
    pointer-events: none;
}
#modal-menu-list-selection {
    display: none; 
    flex-direction: column; 
    position: relative; 
    width: 315px; 
    height: 195 px; 
    background-color: #559C63;
    position: absolute; 
    top: 50%; 
    left: 50%; 
    transform: translate(-50%, -50%);
    z-index: 2223; 
    border-radius: 6px;
}
#modal-menu-list-selection-title {
    display: flex; 
    font-weight: 400; 
    justify-content: center; 
    padding-top: 15px; 
    padding-bottom: 14px;
}
#modal-menu-list-selection-close-img {
    width: 20px; 
    position: fixed; 
    right: 8px; 
    top: 12px;
    cursor: pointer;
}
#modal-menu-list-selection-close-img:hover {
    opacity: 0.7;
}
.modal-menu-list-selection-option {
    display: flex; 
    font-weight: 300; 
    border-top: #447D4F solid 1px;
    padding-top: 10px; 
    padding-bottom: 10px; 
    position: relative; 
    padding-left: 42px;
    cursor: pointer;
}
.modal-menu-list-selection-option:hover {
    opacity: 0.7;
}
.modal-menu-list-selection-noted-img {
    width: 17; 
    position: absolute; 
    right:26px; 
    top: 12px
}
#modal-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.7);
    z-index: 2222;
}
.inactive {
    cursor: auto;
}
.inactive:hover {
    opacity: 1;
}
.active {
    cursor: pointer;
}
.active:hover {
    opacity: 0.7;
}
.search-field {
    width: 100%;
    height: 15px; 
    font-size: 14px; 
    font-weight: 400;
    color: #314940; 
    display: none; 
    align-items: center;
    margin-left: 15px;
}
.icon-img-frame {
    width: 30px;
    display: flex;
    justify-content: flex-end;
    align-items: center;
    /* border: solid 1px red; */
    cursor: pointer;
    /* Расширяем область попадания тычком/кликом, не меняя видимую разметку -
    компенсируем padding отрицательным margin того же размера. */
    padding: 14px 6px 14px 20px;
    margin: -14px -6px -14px -20px;
}
.icon-img-frame:hover {
    opacity: 0.7;
}
/* УНИВЕРСАЛЬНЫЕ */

/* НАСТРОЙКА ЭДЛЕМЕНТОВ ФОРМЫ */
select {
    -webkit-appearance: none; /* For WebKit browsers */
    -moz-appearance: none;    /* For Firefox */
    appearance: none;
    background-image: url('img/list-narrow.svg'); /* Path to your custom icon */
    background-repeat: no-repeat;
    background-position: right 10px center; /* Adjust position */
    padding-right: 20px; /* Space for the custom icon */
    padding-left: 15px;
    font-size: 20px;
}
option {
    font-size: 20px;
}
input {
    font-size: 20px;
    padding-left: 15px;
    border: #314940 2px solid;
}
.btn-action,
.btn-action-study-set,
.btn-action-study-words {
    height: 20px; 
    border-radius: 6px; 
    background-color: #EEF5EF;
    color: #559C63; 
    font-size: 14px; 
    padding: 10px;
    display: flex; 
    justify-content: center; 
    align-items: center; 
    box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.25);
}

.btn-action-study-set,
.btn-action-study-words {
    position: absolute; 
    bottom: 40px; 
    right: 8px; 
    height: 47px;
    transition: transform 0.3s ease
}
.btn-action-study-words {
    background-color: #2A5649;
    color: #F1FCE6;
}
/* НАСТРОЙКА ЭДЛЕМЕНТОВ ФОРМЫ */



/* ОКНА */
.service-info {
    color: #ffffff;
    border: 1px solid #ffffff33;
    border-radius: 12px;
    padding: 5px;
    font-weight: bold; 

    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: #2d4d3b;
    padding: 2rem 4rem 2rem 2rem;
    z-index: 10000;
    text-align: unset;
}

.service-info-close {
    position: absolute;
    top: 1px;
    right: 6px;
    background: none;
    border: none;
    color: rgba(255, 255, 255, 0.6); /* Полупрозрачный белый */
    font-size: 24px;
    cursor: pointer;
    transition: color 0.2s;
    line-height: 1;
}

.service-info-close:hover {
    color: #ffffff; /* Яркий белый при наведении */
}
/* ОКНА */


/* АВТОРИЗАЦИЯ */
.reg-src__active {
    border-bottom: white solid 1px;
    flex-basis: 50%;
    padding-bottom: 5px;
    font-size: 20px;
    font-weight: 400;
    margin-bottom: 10px;
    padding-bottom: 10px;
}
.reg-src__disactive {
    cursor: pointer;
    margin-bottom: 10px;
}
.reg-src__disactive:hover {
    color: #547e6e;
}

.reg-src__forgot_pass {
    font-size: 18px; 
    font-weight: 300;
    text-align: right;
    margin-top: 10px;
    cursor: pointer;
}
.reg-src__forgot_pass:hover {
    color: #547e6e;
}

.input-row {
    display: flex;
    align-items: flex-start;
    flex-direction: column;
}

.input-row__label {
    margin: 18px 8px 8px 0px;
    color: #00000099;
    white-space: nowrap;
    /* flex-basis: 100px; */
}

.input-row__field,
.input-row__textarea {
    /* width: 200px; */
    /* margin: 8px 0 8px 8px; */
    height: 48px;
    background-color: #3E6E54;
    color: white;
    border-color:white;
    border-width: 1px;
    border-style: solid;
    border-radius: 6px;

    font-weight: 300;
    font-size: 18px;

    width: 100%;

    /* flex-grow: 1;
    box-sizing: border-box;
    outline: none; */
}
.input-row__field:focus,
.input-row__textarea:focus,
.input-row__field:valid,
.input-row__textarea:valid,
.input-row__field:invalid,
.input-row__textarea:invalid
 {
    background-color: #3E6E54;
    color: white;
    border-color:white;
    border-width: 1px;
    outline: none;
}
input:-webkit-autofill {
    font-weight: 300 !important;
    font-size: 18px !important;
    background-color: #3E6E54 !important; /* Force dark green background */
    color: white !important; /* Force white text */
    border: 1px solid white !important; /* Force red border */
    box-shadow: 0 0 0px 1000px #3E6E54 inset !important; /* Override autofill styling */
    -webkit-text-fill-color: white !important; /* Ensure white text in autofill */
  }

.input-row__textarea {
    /* width: 300px; */
    height: 100px;
}

.btn-row-auth-ref {
    margin-top: 8px;
    display:flex;
    justify-content: space-between;
    align-items: center;
}

.social-auth-row img{
    cursor: pointer;
}
.social-auth-row img:hover{
    opacity: 0.7;
}
.eye {
    margin: 2px;
    border-radius: 20px; 
    width: 20px; 
    height: 40px;
    font-size: 24px; 
    display: flex;
    align-items: center;
    cursor: pointer;
    position: absolute;
    right: 15px;
    bottom: 2px;
    /* color: #314940;
    opacity: 0.5; */
}
.enter-registration-row {
    display: flex;
    justify-content: space-between;
    font-size: 20px;
    font-weight: 400;
    margin-bottom: 12px;
    /* color: #314940; */
}
/* АВТОРИЗАЦИЯ*/


/* РЕГИСТРАЦИЯ */
/* РЕГИСТРАЦИЯ */

/* ДОСКА */
.dashboard-header-fixed {
    background-color: #67AA6C;
    position: fixed;
    top: 0;
    z-index: 5;
    width: 100%;
}
.dashboard-header,
.learning-page-header {
    display: flex; 
    justify-content: space-between; 
    align-items: center;
    margin: 10px 22px 10px 22px;
    font-size: 24px;
    /* height: 45px; */
}
.dashboard-header-top-button,
.dashboard-header-top-button-search {
    width: 45px; 
    height: 24px; 
    border-radius: 10px;
    background-color: #F4EDEA; 
    display: flex; 
    justify-content: center; 
    align-items: center;
    margin-left: 0px;
    padding-left: 0px;
}
.dashboard-header-top-button:hover,
.dashboard-header-top-button-search:hover {
    opacity:0.7
}
.dashboard-header-top-button-search {
    width: 100%;
    margin-left: 13px;
    margin-right: 8px;
    justify-content: start;
    padding-left: 17px;
    height: 29px;
}
.burger-menu {
    width: 20px;
    height: 14px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    cursor: pointer;
    margin: 15px;
}
.burger-menu span {
    display: block;
    height: 2px;
    background-color: white;
    border-radius: 3px;
}
.search-img,
.search-img-passive {
    height: 24px; 
    width: auto; 
    /* margin: 15px; 
    margin-right: 15px; */
    cursor: pointer;
}
.search-img-passive {
    cursor:auto;
}
/* (hover: hover) - только для устройств с настоящим наведением (мышь).
На тачскрине браузер эмулирует :hover после тапа и держит его "залипшим"
до следующего тапа в другое место - иконка, чей цвет как раз должен
однозначно показывать состояние (см. learning-page-sentence-mark-icon),
из-за этого выглядит тусклой сразу после тычка, хотя src уже сменился на
верный (баг-репорт: "тыкаешь - проворачивается, но остаётся тусклой", а
в истории та же запись отображается уже нормально - там пальцем/мышью
по самой иконке не водили). */
@media (hover: hover) {
    .burger-menu:hover,
    .search-img:hover {
        opacity: 0.7;
    }
}


/* КАРТОЧКА */
.table-restriction-height {
    overflow-y: auto;
    scrollbar-width: none; 
    height: calc(100vh - 56px);
    margin-left: 8px; 
    margin-right: 4px;
    /* z-index: -100; */
}
.dashboard-cards-table {
    display: grid;
    /* grid-template-columns: repeat(auto-fit, 170px); */
    grid-template-columns: repeat(auto-fit, 114px);
    row-gap: 24px;
    column-gap: 10px;
    justify-content: space-between;
    padding: 12px 7px 12px 2px;
    margin-top: 12px;
    width: 100%;
    overflow: hidden;
    position: relative;
    top: 44px;
    /* border: #1240AB solid 2px; */
}
.dashboard-card,
.dashboard-card-folder {
    display: flex; 
    flex-direction: column; 
    border-radius: 2px;
    background: #2A5649;
    /* width: 168px; 
    height: 284px; */
    width: 116px; 
    height: 200px;
    overflow: hidden; 
    justify-content: space-between;
    /* box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3); */
    cursor: pointer;
    /* border: #1240AB solid 2px; */
}
.dashboard-card-folder {
    box-shadow: 
        1px 0px 0px #67AA6C,
        4px 0px 0px #2A5649;
}
.dashboard-card-up {
    /* background: #314940; */
    /* flex: 1;  */
    display: flex;  
    overflow: hidden;
    height: 113px;
    /* border: #1240AB solid; */
    margin: 7px 7px 0px 7px;
}
.dashboard-card-up img {
    width: 100%; 
    height: auto; 
    object-fit: cover; 
}
.dashboard-card-separator {
    background-color: lightseagreen; 
    height: 4px; 
    opacity: 0;
}
.dashboard-card-bottom {
    /* background-color: #DCCECE;  */
    flex: 1; 
    display: flex; 
    overflow: hidden;
    flex-direction: column; 
    width: 100%;
    justify-content: start;
    position: relative;
    /* margin-bottom: 10px; */
}
.dashboard-card-bottom-top {
    display: flex;
    justify-content: flex-end;
    align-items: flex-start;
    margin-right: 7px; 
    font-weight: 900;
    margin-top: 3px;
    /* border: #1240AB solid; */
}
.dashboard-card-bottom-top-points3 {
    /* font-size: 24px;  */
    /* font-size: 18px; */
    width: 4px;
    height: 4px;
    background-color: white;
    border-radius: 50%;
    margin-left: 2px;
}
.dashboard-card-bottom-name {
    display: flex;
    justify-content: center;
    align-items: center;
    font-weight: 400;
    /* font-size: 18px; */
    font-size: 16px;
    margin: 5px;
    text-align: center;
    height: 60px;
    /* border: solid red; */
    overflow-y: auto;
    scrollbar-width: none;
    z-index: 1;
}
.dashboard-card-bottom-letter-back {
    color: #315C50;
    font-size: 100px;
    position: absolute;
    bottom: 50%;
    left: 50%;
    transform: translate(0%, 30%);
    /* z-index: -1; */
}
.dashboard-card-bottom-translate {
    display: flex;
    justify-content: center;
    font-weight: 900;
    /* font-size: 10px; */
    font-size: 7px;
    color: black;
}

.dashboard-progressor-container {
    display: flex;
    height: 4px;
    margin: 4px;
    margin-top: 0px;
    border-radius: 10px;
    z-index: 1;
    /* border: blue solid; */
}

.progressor-container__passed {
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #5AAF60;
    border-radius: 0 5px 5px 0;
    width: 40%;
    z-index: 55;
    margin-right: -3px;
}

.progressor-container__rest {
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #CCE6E9;
    /* border-radius: 0 5px 5px 0; */
    width: 60%;
    margin-left: 2px;
}
.dashboard-card-bottom-menue {
    height: 56px;
    width: 100%;
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    background-color: #2A5649;
    padding: 0 70px 0 70px;
    position: fixed;
    bottom: 0;
    z-index: 55;
}
.dashboard-card-bottom-menue img{
    cursor: pointer;
}
.dashboard-card-bottom-menue img:hover {
    opacity: 0.7;
}
.dashboard-progressor-values {
    font-size: 10px;
    font-weight: 400;
    font-style: italic;
    margin-left: 20px;
    margin-bottom: 4px;
    z-index: 2;
}
@font-face {
    font-family: 'hebrew';
    src: url('./fonts/hebrew-capital-letters-font.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
  }
/* КАРТОЧКА */

.dashboard-add-set {
    background-color:#314940; 
    width: 66px; 
    height: 66px;
    border-radius: 50%; 
    color: white; 
    display: flex;
    font-size: 92px; 
    font-weight: 100;
    justify-content: center; 
    align-items: center;
    position: absolute; 
    right: 20px; 
    bottom: 20px;
    cursor: pointer;
    box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.25);
}
.dashboard-add-set:hover {
    opacity: 0.7;
}

/* ДОСКА */

/* НАСТРОЙКИ */
.settings__label {
    font-size: 18px;
    font-weight: 400;
    color: #314940;
}
.settings__language-list select {
    width: 100%;
    height: 35px;
    border: #314940 1px solid;
    border-radius: 5px;
    margin-top: 5px;
}
/* НАСТРОЙКИ */

/* ОБУЧЕНИЕ */
#learning-page {
    position: relative;
    background-color: #2B574A;
    /* border: #ED6161 solid; */
    height: 100dvh;
    width: 100%;
    padding-left: 17px;
    padding-right: 17px;
}
/* :not(.absent) - НЕ голый #learning-page - иначе это ID-правило (выше
специфичности класса) выигрывает specificity-бой у .absent{display:none} и
страница обучения никогда не прячется, независимо от порядка правил в
файле (было воспроизведено как реальная регрессия: аналогичный
!important на .absent чинил именно #learning-page, но заодно ломал ЛЮБОЙ
элемент, который показывается через инлайновый style.display, а не через
elVisible()/classList - например toggleModalBottomMenu() (ui.js),
которым открывается страница настроек что с дашборда, что со страницы
обучения - !important на .absent тогда стабильно выигрывал у их
inline style="display:flex", и настройки переставали открываться
ВООБЩЕ, без единой JS-ошибки в логе, потому что это чисто CSS-конфликт,
не исключение).
:not(.absent) же просто не матчит элемент, пока класс есть - тогда
единственное применимое правило для display - это сама .absent, и
конфликта specificity вообще не возникает. Верх (шапка) и низ
(статистика/прогрессор/кнопки) - фиксированной, "по контенту" высоты
(flex: 0 0 auto каждый, см. ниже); вся "гуляющая" высота (когда меняется
размер прогресс-бара обратного отсчёта и т.п.) достаётся только
.learning-page-middle (flex: 1 1 auto) - раньше её высота считалась
вручную (height: calc(100dvh - Npx)) и требовала точно подгонянного
магического числа при любом изменении верха/низа (баг-репорт: рост
прогресс-бара паузы наехал на нижний ряд). */
#learning-page:not(.absent) {
    display: flex;
    flex-direction: column;
}
.learning-page-header {
    padding-top: 15px;
    padding-bottom: 10px;
    margin: 0px;
    flex: 0 0 auto;
    /* background-color: #2B574A; */
}
.learning-page-header-right {
    display: flex;
    align-items: center;
    gap: 14px;
}
/* .learning-page-header использует justify-content: space-between с
   learning-page-header-right как последним элементом - его правый край
   всегда прижат к краю страницы, поэтому когда любая иконка внутри него
   появляется/пропадает (ладошка SR то показана, то на время скрыта, пока
   грузятся данные истории; она же скрыта для предложений и т.п.), общая
   ширина блока меняется, и ВСЁ, что левее исчезнувшей иконки (в первую
   очередь звезда "интенсив"), визуально сдвигается влево-вправо (баг-репорт:
   "звезда избранного скачет туда-сюда" при перемотке истории). display:none
   (через общий .absent) убирает элемент из раскладки целиком - меняем на
   invisibility, чтобы место под иконку оставалось зарезервировано, и её
   появление/исчезновение никогда не двигало соседей. Специфичность
   двух классов выше одного .absent{display:none} - !important не нужен. */
.learning-page-header-right .absent {
    display: inline-block;
    visibility: hidden;
}
#learning-page-sr-mark-icon {
    width: 22px;
    height: 22px;
}
.learning-page-sr-mark-group {
    position: relative;
    display: flex;
    align-items: center;
}
.learning-page-sr-manual-dot {
    position: absolute;
    top: -3px;
    left: -5px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    /* Была тёмная (#15313B) - на самой ладошке (тоже тёмные цвета/тени)
       почти не видна (баг-репорт: "чёрная точка вообще не разглядишь").
       Белая с тонкой тёмной обводкой - видна на любом из 3 цветов ладошки. */
    background-color: #F1FCE6;
    border: 1px solid #15313B;
    box-sizing: border-box;
    pointer-events: none;
}
.learning-page-sr-show-count {
    position: absolute;
    bottom: -6px;
    right: -8px;
    background-color: #15313B;
    color: #F1FCE6;
    font-size: 10px;
    font-weight: 400;
    line-height: 1;
    padding: 2px 4px;
    border-radius: 8px;
    min-width: 12px;
    text-align: center;
    pointer-events: none;
}
@keyframes sr-badge-first-pulse {
    0% { transform: scale(1); background-color: #15313B; }
    50% { transform: scale(1.6); background-color: #E8B94B; }
    100% { transform: scale(1); background-color: #15313B; }
}
.learning-page-sr-show-count-first {
    animation: sr-badge-first-pulse 0.7s ease;
}
@keyframes sr-mark-pulse {
    0% { transform: scale(1); }
    50% { transform: scale(1.35); }
    100% { transform: scale(1); }
}
@keyframes sr-mark-flip {
    0% { transform: scaleX(1); }
    50% { transform: scaleX(0); }
    100% { transform: scaleX(1); }
}
.sr-mark-pulse {
    animation: sr-mark-pulse 0.35s ease;
}
.sr-mark-flip {
    animation: sr-mark-flip 0.4s ease;
}
.learning-page-word-top {
    font-size: 30px;
    font-weight: 300;
    display: flex;
    justify-content: center;
    width: 100%;
    align-items: start;
    /* min-height = max-height нарочно: высота этого блока больше не должна
       зависеть от того, 1 строка сейчас (вопрос) или 2 (эталон с
       транскрипцией) - картинка под ним (learning-page-word-picture-wrap,
       flex: 1) растянута на всё, что осталось от колонки, и раньше при
       каждой смене числа строк резко "прыгала" по высоте (баг-репорт:
       большая во время прослушивания -> резко меньше на эталоне -> резко
       больше на новом вопросе, ещё со СТАРОЙ картинкой, пока не подставится
       новая). Общая высота word-top+картинка не меняется - значит и
       картинке физически неоткуда взять/отдать место. */
    min-height: 103px;
    max-height: 103px;
    padding: 10px;
    color: #15313B;
    /* border: #000000 solid; */
    scrollbar-width: none;
    /* scrollbar-width: none выше предполагает прокрутку, но без overflow
       контент, превышающий max-height (длинное слово/предложение + перевод
       + транскрипция), просто вылезал за границы блока визуально - и
       "просвечивал" сквозь картинку под ним при перемотке пальцем
       (баг-репорт со скриншотом). Теперь содержимое реально обрезается и
       прокручивается внутри своих границ. */
    overflow-y: auto;
    overflow-x: hidden;
    touch-action: pan-y;
    -webkit-overflow-scrolling: touch;
}
/* Нет картинки у слова - место под неё (learning-page-word-picture-wrap)
   схлопывается, и это поле растягивается вверх на освободившееся место
   (см. updateWordTopExpansion() в learning.ui.js) - иначе длинные фразы/
   предложения обрезаются фиксированной max-height, пока место под картинку
   просто пустует. */
.learning-page-word-top.learning-page-word-top-expanded {
    max-height: none;
    flex: 1;
    align-items: center;
}
/* Длинная онбординг-подсказка (handleDasboardChoosing() в learning.api.js)
переиспользует "expanded", но center по вертикали для текста длиннее
экрана означает, что видимая по умолчанию прокрутка открывается
где-то в середине текста, а не с начала - выглядит как будто верх
обрезан (баг-репорт со скриншотом с телефона). Для этого конкретного
случая - выравнивание по верху, чтобы читать сразу с начала. */
.learning-page-word-top.learning-page-word-top-expanded.learning-page-word-top-hint {
    align-items: flex-start;
    /* Базовые 30px (см. .learning-page-word-top выше) рассчитаны на короткое
    слово/предложение - длинный онбординг-текст с ними не помещается целиком
    даже с прокруткой (баг-репорт: важное предложение про микрофон уходит
    вниз, никто не мотает). Уменьшаем шрифт только для этого текста - на
    сами тренировочные слова (без класса -hint) размер не влияет. */
    font-size: 18px;
    /* body{line-height:1} из глобального сброса ужимает строки этого
    многострочного абзаца почти впритык - здесь это неуместно (в отличие
    от однострочного тренировочного слова). */
    line-height: 1.35;
}
@media (pointer: coarse) {
    .learning-page-word-top.learning-page-word-top-expanded.learning-page-word-top-hint {
        font-size: 20px;
    }
}

.learnig-page-countdown-back {
    background-color: #576E6E;
    width: 242px;
    height: 20px;
    border-radius: 10px;
    /* position: absolute;
    bottom: 0px;  */
    /* top: calc(38% - 27px);
    left: calc(50% - 27px);  */
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
    margin-bottom: 13px;
}
/* Специально не ярче/контрастнее "крокодильей" палитры (тёмно-зелёные
тона на всей странице обучения) - только крупнее и без почти-невидимого
тёмного (#15313B) начала градиента, которое раньше держалось большую
часть отсчёта: пользователь без очков не мог разглядеть бар, хотя иногда
он всё же нужен, а слишком яркий/контрастный вариант нарочно избегался -
не давить на психику изучающему новые слова. */
#learnig-page-countdown {
    background: linear-gradient(90deg, #3B8972 0%, #5AAF60 100%);
    height: 14px;
    width: 0px;
    position: absolute;
    left: 5px;
    top: 3px;
    border-radius: 8px;
}
.learnig-page-user-answer-field-group {
    position: relative;
    height: 96px;
    min-height: 36px; 
    border: 1px solid #2B574A66;
    border-radius: 6px;
    width: 90%; 
    color: #5AAF60;
    font-size: 28px;
    padding: 3px 10px 3px 10px;
    margin-bottom: 21px;
}

#learnig-page-user-answer-field {
    display: flex;
    align-items: center;
    width: 100%;
}

/* Без этого длинный распознанный ответ не переносился по словам, а
   раздвигал flex-контейнер вширь (у flex-элемента по умолчанию
   min-width: auto = ширина по контенту без переноса) - текст вылезал
   за рамку поля и вертикальный scroll обёртки (index.html, стиль
   inline на родителе) не успевал сработать, так как контент не
   становился выше, а просто вылезал вбок. */
#learnig-page-user-answer-field > * {
    min-width: 0;
    max-width: 100%;
}

.learning-page-bottom {
    display: flex;
    flex-direction: column;
    align-items: center;
    /* border: #C5D8D1 solid;  */
    flex: 0 0 auto;
    /* Раньше position: fixed + собственные bottom/width (calc(100vw - 36px),
    т.к. fixed игнорирует ширину/паддинги #learning-page) - теперь обычный
    flex-элемент в колонке #learning-page, ширину/положение даёт flex
    (align-items: stretch по умолчанию), сам не задаёт. Раньше ещё и
    height: 200px + justify-content: space-between - фиксированная высота
    заполнялась автораспределённым остатком между рядами неравномерно
    (баг-репорт со скриншотом: ряд "Слова" визуально ближе к низу своего
    промежутка, а не по центру). Явный gap - высота теперь по контенту, а
    отступ между КАЖДОЙ парой рядов гарантированно одинаковый и не зависит
    от того, сколько в сумме "лишнего" места осталось.
    .learning-page-middle (flex: 1 1 auto) сама подстроится под то, сколько
    места .learning-page-bottom реально теперь занимает. */
    gap: 12px;
    padding-left: 14px;
    padding-right: 14px;
    /* Отступ сверху - тот же, что и gap между рядами (см. выше) - ряд
    "Слова" тем самым оказывается по центру между низом белой панели и
    следующим рядом (прогресс-бар), а не ближе к одному из краёв.
    Отступ снизу - как отступ сверху у неподвижной шапки (15px, см.
    .learning-page-header) - не трогаем, к этому промежутку не относится. */
    padding-top: 12px;
    padding-bottom: 15px;
}

.learning-page-progressor-legend {
    display: flex; 
    justify-content: flex-end;
    align-self: flex-start; 
    font-size: 12px;
}

.learning-page-progressor-legend-cell {
    display: flex; 
    justify-content: left;
    align-items: center; 
    margin-top: 2px;
}

.learning-page-progressor-legend-color {
    width: 8px; 
    height: 8px; 
    background-color: #5AAF60; 
    margin-right: 8px;
}

.learning-page-progressor {
    display: flex; 
    width: 100%; 
    margin-top: 2px;
}

#learning-page-progressor-cell-1,
#learning-page-progressor-cell-2,
#learning-page-progressor-cell-3 {
    display: flex; 
    flex-direction: column; 
    align-items: start;
    width: 33%; 
    font-weight: 400; 
    margin-right: 4px; 
    border-radius: 2px;
}

.learning-page-progressor-bar-part {
    background-color: #5AAF60; 
    width: 100%; 
    height: 8px;
}

.learning-page-statistics {
    position: relative;
    display: flex;
    justify-content: flex-end;
    align-items: center;
    width: 100%;
    min-height: 22px;
    margin-top: 2px;
    font-size: 12px;
    font-weight: 100;
}
.learning-page-statistics-toggle {
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    display: flex;
    align-items: center;
    cursor: pointer;
}
.learning-page-statistics-toggle-icon {
    width: 16px;
    opacity: 0.75;
}
/* Статистика отключена пользователем на время сессии - см.
   toggleStatisticsDisabled() в learning.logics.js. */
.learning-page-statistics-toggle-off .learning-page-statistics-toggle-icon {
    opacity: 0.3;
    filter: grayscale(1);
}
.learning-page-sentence-mode-group {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
}
.learning-page-sentence-mode-icon {
    width: 14px;
    opacity: 0.75;
}
.learning-page-sentence-mode-btn {
    background-color: #F1FCE6;
    color: #15313B;
    font-size: 11px;
    line-height: 1;
    border-radius: 6px;
    padding: 4px 0;
    width: 84px;
    text-align: center;
    cursor: pointer;
    user-select: none;
}
.learning-page-control-buttons {
    display: flex; 
    height: 50px; 
    justify-content: space-between;
    align-items: center;
    width: 188px; 
    padding-top: 5px;
}

.learning-page-control-buttons-main {
    display: flex; 
    width: 100%; 
    justify-content: center;
    font-weight: 300; 
    font-size: 20px; 
    align-items: center; 
    padding-top: 5px;
}

.learning-page-control-buttons-main-labels {
    display: flex; 
    justify-content: space-between;
    width: 260px;
}

.learning-page-control-buttons-main-label {
    flex: 1; 
    display: flex; 
    justify-content: center;
}

.state-speaking {
    animation: speaking 3s infinite;
}

@keyframes speaking {
    0% {
        opacity: 1;
        transform: scale(1);
    }
    50% {
        opacity: 0.5;
        transform: scale(1);
    }
    100% {
        opacity: 1;
        transform: scale(1);
    }
}

.icon-ai-loading {
    animation: icon-ai-spin 0.9s linear infinite;
}
@keyframes icon-ai-spin {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

.state-processing {
    animation: processing 0.8s infinite;
}
@keyframes processing {
    0% {
        opacity: 1;
        transform: scale(1);
    }
    50% {
        opacity: 0.35;
        transform: scale(0.92);
    }
    100% {
        opacity: 1;
        transform: scale(1);
    }
}

.state-listening {
    animation: listening 3s infinite;
}
@keyframes listening {
    0% {
        opacity: 1;
        transform: scale(1);
    }
    50% {
        opacity: 0.7;
        transform: scale(1);
    }
    100% {
        opacity: 1;
        transform: scale(1);
    }
}
.learning-page-study-direction {
    display: flex; 
    flex-direction: column; 
    width: 28px; 
    height: 28px;
    font-size: 8px; 
    font-weight: 600; 
    justify-content: space-between;
    position: relative;
    cursor: pointer;
    border: 2px solid #F1FCE6;
    border-radius: 2px;
    padding: 2px;
}
.learning-page-study-direction:hover {
    opacity: 0.7;
}
.learning-page-study-direction-line-45 {
    position: absolute; 
    width: 1px; 
    height: 20px; 
    bottom: 2px; 
    left: 11px;
    transform: rotate(30deg);
    background-color: #F1FCE6;
}
/* ОБУЧЕНИЕ */

/* НАБОРЫ */
.set-editing {
    border: #00000080 1px solid;
    position: absolute; 
    bottom: 0; 
    height: 70%; 
    width: 100%;
    border-top-left-radius: 10px; 
    border-top-right-radius: 10px;
    background-color: #F7F7F7; 
    display: flex;
    flex-direction: column;
    z-index: 500;
    padding-left: 43px;
    padding-right: 43px;
}

.set-editing-field {
    display: flex; 
    flex-direction: column; 
    margin-top: 25px;
}

.set-editing-label {
    color: #00000099;
    font-size: 16px;
}

.set-editing-input {
    border: #00000080 solid 1px; 
    height: 43px; 
    margin-top: 6px;
                
}
/* НАБОРЫ */

/* КАРТОЧКА СЛОВА */
#card-page {
    /* Задаём заранее, а не только в JS на pointerdown/move - иначе браузер
       на мобильном может сам решить, что это вертикальный скролл/сайд-жест
       навигации, и забрать touch-события себе раньше, чем наш JS распознает
       горизонтальный свайп (см. card.js: onCardPageSwipeMove). pan-y - явно
       разрешаем нативный вертикальный скролл, а горизонтальные жесты
       оставляем полностью на JS. */
    touch-action: pan-y;
}
.card-page-header {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 5;
    width: 100%;
    display: flex; 
    justify-content: space-between; 
    align-items: center;
    padding: 28px;
    padding-top: 20px;
    padding-bottom: 0px;
}
.card-page-header img {
    height: 18px;
    /* cursor: pointer; */
}
/* .card-page-header img:hover {
    opacity: 0.7;
} */
.card-page-content {
    display: flex;
    flex-direction: column;
    background-color: #F1FCE6;
    height: calc(100vh - 106px); 
    width: calc(100vw - 34px);
    margin-top: 50px; 
    margin-left: 17px; 
    margin-right: 17px;
    /* align-items: center; */
    /* margin-bottom: 74px; */
    /* border: #1240AB solid; */
    position: fixed;
    /* overflow-y: auto;
    scrollbar-width: none; */
}
/* Шапка карточки слова (набор + прогресс + ладошка). Раньше это были два
   независимых flex-блока с justify-content: space-between - при длинном
   имени набора текст переносился на 2 строки, а правый блок (%/ладошка),
   не привязанный к высоте левого, оставался по центру ВСЕЙ (уже более
   высокой) строки - визуально "уезжал" от заголовка (баг-репорт:
   "неотцентровано, уголок смены набора уезжает отдельно от названия").
   Теперь имя набора не переносится, а обрезается многоточием - и вся
   шапка гарантированно остаётся в одну строку неизменной высоты. */
.card-page-set-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 14px 14px 16px 19px;
}
.card-page-set-header img {
    cursor: pointer;
}
.card-page-set-header img:hover {
    opacity: 0.7;
}
.card-page-set-name-group {
    display: flex;
    align-items: center;
    gap: 6px;
    /* min-width: 0 - без этого flex-элемент не сжимается меньше ширины
       своего содержимого, и text-overflow: ellipsis на дочернем тексте
       не может сработать (стандартная ловушка flex+ellipsis). */
    min-width: 0;
    flex: 1 1 auto;
    cursor: pointer;
}
.card-page-set-name-group:hover {
    opacity: 0.7;
}
#card-page-set-name {
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-size: 16px;
}
.card-page-unsaved-dot {
    color: #C25B4A;
    font-weight: 700;
    flex-shrink: 0;
}
.card-page-set-arrow {
    flex-shrink: 0;
}
.card-page-set-stats-group {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}
.card-page-set-label,
.card-page-set-label-bold {
    color: #314940;
    font-weight: 300;
    font-size: 14px;
}
.card-page-accuracy-stat {
    color: #8EA998;
    font-weight: 400;
    font-size: 12px;
    white-space: nowrap;
}
.card-page-set-label-bold {
    font-weight: 600;
    cursor: pointer;
}
.card-page-set-label-bold:hover {
    opacity: 0.7;
}
.card-page-item,
.card-page-item-noneditable {
    position: relative;
    margin: 12px;
    margin-top: 0px;
    border: solid 1px #2B574ACC;
    border-radius: 6px;
    /* Было 88px - поля слова/транскрипции над картинкой (см.
       card-page-native-word-group/foreign-word-group/transcription-group в
       index.html) в сумме занимали столько высоты, что картинка карточки
       оказывалась ниже видимой области экрана телефона и её приходилось
       перематывать, чтобы разглядеть целиком (баг-репорт). 68px всё ещё
       достаточно для однострочного текста при текущем font-size: 20px, а
       более длинный текст просто прокручивается внутри своего поля
       (overflow-y: auto ниже) без поломки разметки. */
    height: 68px;
    background-color: white;
    width: calc(100% - 22px);
}
.card-page-item-noneditable {
    border: solid 0.5px #A2BAA8; 
    background-color: #F1FCE6;
}
.card-page-item textarea,
.card-page-item div,
.card-page-item-noneditable textarea,
.card-page-item-noneditable div {
    position: absolute;
    top: 0;
    left: 30px;
    width: calc(100% - 30px);
    height: 100%;
    border-radius: 6px;
    font-size: 20px; 
    font-weight: 300px; 
    font-family: Fira Sans;
    color: black;
    background-color: white;
    border: none;
    overflow-y: auto;
    scrollbar-width: none;
    padding-top: 5px;
    padding-bottom: 5px; 
    resize: none;
}
.card-page-item-noneditable textarea,
.card-page-item-noneditable div {
    background-color: #F1FCE6;
    /* Свайп между словами карточки (card.js: onCardPageSwipeStart и
       далее) на этих полях работал только влево, вправо - нет
       (баг-репорт, подтверждено DIAG-логом: ни одной записи с
       положительным dx на этих полях, хотя isCardSwipeBlockedTarget их не
       блокирует). Причина - нативное выделение текста браузером: жест
       "по направлению чтения" (слева направо) браузер сам распознаёт как
       начало выделения и перехватывает его до наших pointermove/pointerup.
       На однострочных полях слова/перевода/транскрипции выделение
       перетаскиванием не нужно - редактирование идёт через
       клавиатуру/микрофон, поэтому просто выключаем его. */
    user-select: none;
    -webkit-user-select: none;
    -webkit-touch-callout: none;
}
.card-page-item textarea::placeholder,
.card-page-item-noneditable textarea::placeholder,
#card-page-transcription-placeholder {
    color: #00000066;
    font-size: 12px;
    font-weight: 300;
}
#card-page-transcription-placeholder {
    left: 6px;
    width: calc(100% - 24px);
}
.card-page-img-mic {
    position: absolute;
    right: 5px;
    bottom: 7px;
    width: 20px; 
    height: auto;
    cursor: pointer; 
}
.card-page-img-play, 
.card-page-img-flag,
.card-page-img-attach {
    position:absolute;
    width: 20px;
    height: auto;
    left: 6px; 
    top: 9px;
    cursor: pointer;
    border-radius: 3px;
}
.card-page-img-flag,
.card-page-img-attach {
    top:auto;
    bottom: 7px;
}
.card-page-img-flag{
    cursor: pointer;}
.card-page-img-mic:hover,
.card-page-img-play:hover,
.card-page-img-attach:hover {
    opacity: 0.7;
}
#card-page-del-picture {
    position: absolute; 
    top: 8px; 
    right: 8px; 
    width: 39px;
    cursor: pointer;
}
#card-page-del-picture:hover {
    opacity: 0.7;
}
.user-mark {
    border-radius: 50%;
    border: #2A5649 solid 2px;
}
/* КАРТОЧКА СЛОВА */

/* НАСТРОЙКИ */
.bottom-submenu,
.center-submenu {
    /* border: #314940 solid 1px; */
    position: absolute; 
    background-color: #559C63; 
    width: 100%; 
    /* height: 100%; */
    display: flex;
    flex-direction: column; 
    font-weight: 300; 
    font-size: 14px; 
    color: #F1FCE6;
    max-width: 400px; 
    padding: 19px;
    padding-bottom: 26px;
    border-radius: 10px;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    z-index: 2222;
}
.bottom-submenu {
    padding-top: 8px;
}
/* Настройки - самое длинное меню в приложении, растёт от низа (bottom: 0)
без ограничения высоты - на телефоне с небольшим экраном верхние строки
уезжали выше видимой области недостижимо (баг-репорт со скриншотом: у
нового пользователя не всё влезает). max-height + overflow-y - сама
"простыня" никогда не выше экрана, а лишнее скроллится внутри нёё, а не
уезжает за пределы. Общее правило (не только под 2-колоночным медиа-запросом
ниже) - страховка и для 2 колонок тоже, если вдруг тоже не поместятся. */
#settings-page-sub-menu {
    max-height: 92dvh;
    overflow-y: auto;
    /* Прячем полосу прокрутки (сама прокрутка колёсиком/свайпом остаётся) -
    scrollbar-width: none хватает для Firefox, но не для Chrome/Safari/Edge -
    там нужен именно псевдоэлемент ниже. */
    scrollbar-width: none;
}
#settings-page-sub-menu::-webkit-scrollbar {
    display: none;
    width: 0;
}
/* Настройки - самое длинное меню в приложении (десятки строк), на
компьютере не помещается по вертикали - .bottom-submenu позиционируется
от низа (bottom: 0) без ограничения высоты и скролла, и верхние строки
просто уезжают выше видимой области. column-count вместо второй колонки
руками - существующие строки (.bottom-submenu-field-group-settings и
т.п.) остаются обычными block-элементами, браузер сам раскладывает их по
2 колонкам и балансирует высоту. pointer: fine (мышь, не тачскрин) - та
же pointer-фича, что и у подсказки про беззвучный режим выше, только в
обратную сторону - плюс min-width, чтобы не сжимать 2 колонки на узком
окне браузера. Только #settings-page-sub-menu - остальные bottom-submenu
(выбор языка/голоса и т.п.) короткие, 2 колонки им не нужны и даже вредны
(перенос по колонкам на 2-3 строках выглядит криво). */
@media (min-width: 700px) and (pointer: fine) {
    #settings-page-sub-menu {
        display: block;
        max-width: 700px;
        column-count: 2;
        column-gap: 40px;
        column-rule: 1px solid #31494066;
    }
    #settings-page-sub-menu > .bottom-submenu-top-close {
        column-span: all;
    }
}
.center-submenu {
    bottom: 50%;
    transform: translateY(50%) translateX(-50%);
    /* Общее правило выше (.bottom-submenu, .center-submenu { width: 100% })
    рассчитано на нижние шторки (settings и т.п.), которым край в край с
    экраном - то, что нужно. У центральных модалок (это же правило, но
    вместе с .bottom-submenu его трогать нельзя) от края до края выглядит
    прижатым к краю телефона (баг-репорт со скриншотом) - оставляем
    небольшие поля по бокам. */
    width: calc(100% - 32px);
}
.bottom-submenu-top-close {
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    height: 43px;
    /* Задаём заранее (а не только в JS на pointerdown), чтобы браузер не
       перехватывал самый первый свайп по этой ручке как жест обновления страницы. */
    touch-action: none;
    /* border: red solid; */
}
.bottom-submenu-top-close:hover {
    opacity: 0.7;
}
.bottom-submenu-top-close-line {
    height: 4px; 
    width: 39px; 
    background-color: #314940;
    margin-bottom: 13px;
    border-radius: 2px;
}
.bottom-submenu-field-group,
.bottom-submenu-field-group-settings,
.center-submenu-top-group {
    /* border: red solid 1px; */
    /* Не даёт браузеру разрезать строку пополам между 2 колонками в
    #settings-page-sub-menu (см. main.css выше) - без вреда для обычного
    однострочного bottom-submenu, где колонок нет вообще. */
    break-inside: avoid;
    display: flex;
    justify-content: space-between; 
    align-items: center; 
    height: 23px;
    width: 100%;
    margin-top: 13px;
}
.center-submenu-top-group {
    margin-top: 13px;
    height: auto;
}
/* Пожелание пользователя (онбординг): реже трогаемые настройки свёрнуты
по умолчанию под "Ещё настройки" - иначе новый пользователь тонет в 20
переключателях, из которых 90% меняют раз в жизни. Языки/голоса, оценка
ответа, переход к следующему слову и (отдельно, всегда внизу) связь с
разработчиком/выход остаются на виду - см. settings.ui.js:
toggleAdvancedSettingsGroup(). */
.settings-advanced-toggle {
    justify-content: center;
    cursor: pointer;
    opacity: 0.85;
}
.settings-advanced-toggle:hover {
    opacity: 1;
}
.settings-advanced-group {
    display: none;
}
.settings-advanced-group.expanded {
    display: block;
}
.center-submenu-top-group span {
    font-size: 18px;
    font-weight: 400;
    margin-left: 32px;
}
/* Пожелание пользователя: "Переход к следующему слову" ищется чаще
остальных настроек и теряется в списке однотипных строк - выделяем
светлым "чипом" (#F1FCE6/#15313B - та же пара цветов, что уже
используется в проекте как акцентный контраст, например у бейджа
счётчика показов SR-ладошки, просто в обратную сторону - светлый фон
вместо светлого текста), а не просто жирным шрифтом, чтобы строка была
заметна даже при беглом скролле, а не только при внимательном чтении. */
#settings-page-next-word-transition-mode-group {
    background-color: #F1FCE6;
    color: #15313B;
    padding: 8px 10px;
    border-radius: 8px;
    height: auto;
}
#settings-page-next-word-transition-mode-group span {
    font-weight: 500;
}
.bottom-submenu-field-group {
    justify-content: start;
    cursor: pointer;
    margin-top: 25px;
}
.center-submenu-buttons {
    display: flex;
    margin-top: 34px; 
    justify-content: flex-end;
}
.center-submenu-btn-by-defalult,
.center-submenu-btn-not-default {
    font-size: 16px; 
    width: 98px; 
    height: 35px; 
    border-radius: 6px;
    display: flex; 
    justify-content: center; 
    align-items: center;
    cursor: pointer;
}
.center-submenu-btn-by-defalult:hover,
.center-submenu-btn-not-default:hover{
    opacity: 0.7;
}

.center-submenu-btn-by-defalult {
    background-color: #EEF5EF; 
    color: #559C63;
}
.bottom-submenu-field-group:hover {
    opacity: 0.7;
}
.bottom-submenu-field-group img {
    margin-right: 25px; 
    margin-left: 27px;
    width: 21px;
}
.bottom-submenu-field-group-2-strings{
    display: flex;
    flex-direction: column;
}
.bottom-submenu-field-group-2-strings-bold{
    font-size: 18px; 
    font-weight: 400;
}
.bottom-submenu-field-group-2-strings-rare{
    font-size: 12px; 
    font-weight: 300; 
    margin-top: 3px;
}
.bottom-submenu-select-group {
    display: flex;
    justify-content: end;
    cursor: pointer;
}
.bottom-submenu-select-group:hover {
    opacity: 0.7;
}
.bottom-submenu-select-group img{
    margin-left: 14px;
}
.bottom-submenu-select-group-disabled {
    cursor: default;
    opacity: 0.5;
    pointer-events: none;
}
.buttom-submenu-select-value {
    /* display: flex; */
    font-size: 14px; 
    font-weight: 400; 
    color: #314940;
    /* width: 150px; */
}
.guest-register-cta {
    justify-content: center;
    background: #F0F7F0;
    border-radius: 6px;
    margin-top: 25px;
    height: 48px;
    cursor: pointer;
    transition: opacity 0.15s ease, transform 0.15s ease;
}
.guest-register-cta:hover {
    opacity: 0.8;
    transform: scale(1.03);
}
.guest-register-cta span {
    color: #67AA6C;
    font-weight: 700;
    font-size: 20px;
    letter-spacing: 0.5px;
}
.settings-page-option {
    font-size: 12px;
    font-weight: 300;
    color: #000000CC;
}
.bottom-submenu-chekbox-group {
    display: flex; 
    width: 80px; 
    justify-content: space-between; 
    align-items: center;
}
.bottom-submenu-checkbox-yes,
.bottom-submenu-checkbox-no {
    width: 50px; 
    height: 22px; 
    border-radius: 11px; 
    background-color: #314940;
    display: flex; 
    justify-content: flex-end; 
    align-items: center;
    cursor: pointer;
}
.bottom-submenu-checkbox-no {
    justify-content: flex-start;
    background-color: #C5D8D1; 
}
.bottom-submenu-checkbox-yes:hover,
.bottom-submenu-checkbox-no:hover {
    opacity: 0.7;
}

.bottom-submenu-checkbox-pointer {
    width: 18px; 
    height: 18px; 
    border-radius: 50%; 
    background-color: #E1E5E0;
    margin-right: 2px;
}
.bottom-submenu-checkbox-value-label {
    color: #314940; 
    font-size: 14px; 
    font-weight: 400;
}
/* НАСТРОЙКИ */

/* СПИСОК НАБОРОВ */
#set-list {
    padding-left: 0px;
    padding-top: 69px;
    /* border: #1240AB solid 1px; */
}
.set-list-pattern,
.set-list-pattern-in-folder {
    position: relative;
    width: calc(100% - 10px);
    height: 90px;
    cursor: pointer;
    /* border: #1240AB solid 1px; */
    display: flex;
    justify-content: flex-end;
    /* border: green solid; */
}
.set-list-pattern-in-folder {
    justify-content: flex-end;
}
.set-list-shadow {
    position: absolute; 
    top: 0px; 
    left: 22px;
    width: calc(100% - 19px); 
    height: 90px;
    border: #F1FCE6 solid 0.3px;
    border-radius: 6px;
}
.set-list-content,
.set-list-content-checked,
.set-list-content-in-folder,
.set-list-content-checked-in-folder {
    display: flex; 
    flex-direction: column; 
    justify-content: space-between;
    border: #F1FCE6 solid 0.3px; 
    border-radius: 6px;
    background-color: #559F63; 
    width: calc(100% - 23px); 
    height: 90px;
    position: relative;
}
.set-list-content-checked,
.set-list-content-checked-in-folder {
    background-color: #478052E5;
}
.set-list-content-in-folder,
.set-list-content-checked-in-folder {
    width: 360px;
}
.set-list-content img:hover,
.set-list-content-checked img:hover,
.set-list-content-in-folder img:hover,
.set-list-content-checked-in-folder img:hover {
    opacity: 0.7;
}

.set-list-content-top {
    display: flex; 
    align-items: center;
    width: calc(100% - 50px); 
    /* justify-content: space-between;  */
    margin-left: 39px;
    margin-right: 11px; 
    height: 25px; 
    margin-top: 9px;
    gap: 10px;
    /* border: red solid; */
}
.set-list-content-top-name-amount {
    /* display: flex; */
    align-items: center;
    /* width: calc(100% - 80px); */
    max-height: 40px;
    overflow: hidden;
    /* border: #1240AB solid; */
}
.set-list-content-top-name-amount span {
    font-size: 16px; 
    font-weight: 400; 
    margin-right: 9px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;  /* показываем максимум 2 строки */
    line-clamp: 2;  /* показываем максимум 2 строки */
    overflow: hidden;
    text-overflow: ellipsis;
}
.set-list-content-top-amount {
    display: flex; 
    justify-content: center;
    background-color: #F1FCE6; 
    height: 13px;
    border-radius: 8px; 
    color: #478052;
    padding-left: 10px; 
    padding-right: 10px; 
    padding-top: 5px;
    padding-bottom: 5px; 
    padding-top: 1px; 
    font-size: 12px;
}
.set-list-content-top img {
    /* position: absolute;  */
    top:16px; 
    right: 11px;
    margin-left: auto;
}
.set-list-content-statistics {
    display: flex; 
    align-items: center; 
    margin-left: 39px
}
.set-list-content-statistics-point-green,
.set-list-content-statistics-point-red {
    width: 4px; 
    height: 4px; 
    border-radius: 2px; 
    margin-right: 3px;
}
.set-list-content-statistics-point-green {
    border: white solid 1px;
    background-color: #5AAF60;
}
.set-list-content-statistics-point-red {
    background-color: #ED6161; 
    margin-left: 11px;
}
.set-list-content-statistics span {
    font-size: 12px; 
    font-weight: 100;
    opacity: 0.9;
}
.set-list-content-bottom {
    display: flex; 
    justify-content: space-between;
    padding-left: 13px; 
    padding-right: 11px; 
    margin-bottom: 11px;
}
.set-list-content-bottom-amount-of-children {
    display: flex;
    font-size: 12px;
    font-weight: 300;
    justify-content: center;
    align-items: center;
    margin-left: 8px;
}
.set-list-content-bottom-right {
    display: flex; 
    /* justify-content: space-between; */
    justify-content: end;
    margin-left: auto; 
    width: 41px;
    /* border: #1240AB solid;  */
}
/* СПИСОК НАБОРОВ */

/* ТАБЛИЦА СЛОВ */
.words-page-header-set-name-statistics {
    display: flex;
    flex-direction: column;
    font-size: 24px;
    font-weight: 300;
    /* flex:1 + min-width:0 - иначе flex-item по умолчанию не может сжаться
       уже своего контента (min-width: auto), и text-overflow: ellipsis на
       дочернем span не срабатывает - длинное имя набора просто переносится
       на 2-ю строку и наезжает на statistics-строку под шапкой. */
    flex: 1;
    min-width: 0;
    margin-left: 12px;
}
#words-page-header-set-name {
    display: block;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.words-page-header-statistics {
    display: flex; 
    align-items: center;
    justify-content: center;
    font-size: 12px; 
    font-weight: 100;
    opacity: 0.9;
}
.words-page-header-statistics-total {
    margin-right: 9px;
}
.words-page-header-icons-right {
    display: flex; 
    justify-content: space-between; 
    align-items: center;
    width: 68px;
}
.words-page-pattern,
.words-page-pattern-checked {
    display: flex; 
    align-items: center; 
    justify-content: space-between;
    border: #314940 solid 1px;
    width: 100%; 
    height: 75px; 
    background-color: #F1FCE6;
    color: #314940; 
    font-size: 16px; 
    font-weight: 300;
    padding-left: 18px; 
    padding-right: 13px;
}
.words-page-pattern-checked {
    background-color: #DEFFBE;
}
.words-page-pattern-fault-point {
    background-color: #ED6161; 
    width: 4px; 
    height: 4px; 
    border-radius: 2px;
    margin-left: 13px; 
    margin-right: 11px; 
    margin-top: 5px;
}
.words-page-pattern-success-point {
    background-color: #5AAF60; 
    width: 4px; 
    height: 4px; 
    border-radius: 2px;
    margin-left: 13px; 
    margin-right: 11px; 
    margin-top: 5px;
}
.words-page-native-succes{
    display: flex;
    align-items: center;
    /* border: red solid; */
    width: 45%;
}
.words-page-pattern-foreign-transcription {
    display: flex; 
    flex-direction: column; 
    /* margin-left: 5px;
    margin-right: 5px;  */
    align-items: end;
    width: 45%;
    /* border: #1240AB solid; */
}
.words-page-pattern-chck-int {
    display: flex;
    margin-right: 4px;
    margin-left: 5px;
    justify-content: space-between;
    width: 51px;
    /* border: greenyellow solid; */
}
/* ТАБЛИЦА СЛОВ */