Files
TestingWebApp/frontend/src/styles/cabinet-theme.css
T
Константин Лебединский 72a5863871 fix(mobile): version card height, assign list, header safe-area
- version cards: flex-grow 0 for main in column layout (no empty vertical gap)
- test detail: slightly larger gaps between accordion bricks; more bottom padding for fixed footer
- header: respect safe-area insets for top and sides (logout away from screen edge)
- assign: compact toolbar inputs on narrow screens; taller scroll area; row borders a bit stronger
- assign rows: center checkbox with text; clamp meta to 3 lines with ellipsis; checkbox size + accent-color

Made-with: Cursor
2026-04-27 20:19:51 +05:00

1144 lines
23 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.
/* Match: HR_TG_Bot/tgFlaskForm .../cabinet/tailwind_config.js + cabinet/login.html */
:root {
--surface: #ffffff;
--surface-container-low: #f3f8f9;
--surface-container: #eaf3f5;
--surface-container-high: #dfeef1;
--on-surface: #0d1b1d;
--on-surface-variant: #3d5357;
--primary: #007168;
--on-primary: #ffffff;
--primary-container: #56f1e0;
--on-primary-container: #00574f;
--secondary: #506965;
--secondary-container: #cce8e3;
--on-secondary-container: #3d5653;
--error: #af3d3b;
--outline-variant: #b9bc94;
--outline: #80835f;
--shadow-card: 0 8px 40px rgba(0, 0, 0, 0.08);
--radius-card: 2rem;
--max-content: 42rem; /* max-w-2xl */
color-scheme: light;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
color-scheme: light;
}
body {
margin: 0;
min-height: 100dvh;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background: var(--surface-container-low);
color: var(--on-surface);
-webkit-tap-highlight-color: transparent;
line-height: 1.45;
}
#root {
min-height: 100dvh;
}
.font-headline,
h1,
h2,
h3 {
font-family: 'Manrope', 'Inter', sans-serif;
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.2;
color: var(--on-surface);
}
h1 {
font-size: 1.5rem;
}
h2 {
font-size: 1.25rem;
margin: 0 0 0.75rem;
}
h3 {
font-size: 1.1rem;
margin: 1.25rem 0 0.5rem;
}
a {
color: var(--primary);
text-decoration: none;
font-weight: 500;
transition: color 0.15s ease;
}
a:hover {
color: var(--on-primary-container);
text-decoration: underline;
}
code,
.code-inline {
display: inline-block;
background: var(--secondary-container);
color: var(--on-primary-container);
padding: 1px 7px;
border-radius: 5px;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 0.8rem;
font-weight: 500;
}
.text-muted,
.text-secondary {
color: var(--secondary);
font-size: 0.875rem;
}
.material-symbols-outlined {
font-family: 'Material Symbols Outlined', sans-serif;
font-weight: normal;
font-style: normal;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
direction: ltr;
-webkit-font-feature-settings: 'liga';
font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
}
/* --- Login (cabinet/login.html) --- */
.login-page {
min-height: 100dvh;
display: flex;
align-items: center;
justify-content: center;
padding: 1.5rem;
background: #ffffff;
}
.login-shell {
width: 100%;
max-width: 24rem; /* max-w-sm */
transition: max-width 0.2s ease-out;
}
.login-logo {
text-align: center;
margin-bottom: 2rem;
}
.login-logo__frame {
width: 4rem;
height: 4rem;
border-radius: 1.5rem;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 1rem;
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
border: 1px solid color-mix(in srgb, var(--outline-variant) 25%, transparent);
overflow: hidden;
}
.login-logo__frame .material-symbols-outlined {
font-size: 2.25rem;
color: var(--primary);
}
.login-page h1 {
font-size: 1.5rem;
font-weight: 800;
color: var(--primary);
margin: 0 0 0.25rem;
}
.login-subtitle {
color: var(--secondary);
font-size: 0.875rem;
margin: 0;
}
.login-card {
background: #fff;
border-radius: var(--radius-card);
box-shadow: var(--shadow-card);
padding: 1.5rem;
}
/* Form controls */
.form-label {
display: block;
font-size: 0.9rem;
font-weight: 500;
color: var(--on-surface);
margin-bottom: 0.35rem;
}
.form-input {
width: 100%;
padding: 11px 13px;
border: 1.5px solid var(--outline-variant);
border-radius: 0.75rem;
font-size: 15px;
font-family: inherit;
outline: none;
background: var(--surface-container-low);
color: var(--on-surface);
transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
}
.form-input::placeholder {
color: var(--on-surface-variant);
opacity: 0.7;
}
.form-input:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(0, 113, 104, 0.12);
background: #fff;
}
.form-field {
margin-bottom: 0.75rem;
}
/* Buttons */
.btn {
font-family: inherit;
font-size: 0.9375rem;
font-weight: 600;
padding: 0.55rem 1.1rem;
border-radius: 0.75rem;
border: 1.5px solid transparent;
cursor: pointer;
transition: background 0.15s, color 0.15s, border-color 0.15s, box-shadow 0.15s;
}
.btn-primary {
background: var(--primary);
color: var(--on-primary);
width: 100%;
padding-top: 0.65rem;
padding-bottom: 0.65rem;
margin-top: 0.5rem;
}
.btn-primary:hover {
background: #00645b;
filter: none;
}
.btn-primary:active {
transform: scale(0.99);
}
.btn-ghost {
background: transparent;
color: var(--primary);
border-color: color-mix(in srgb, var(--outline-variant) 70%, transparent);
}
.btn-ghost:hover {
background: var(--surface-container);
border-color: var(--primary);
}
.btn-ghost:disabled,
.btn-primary:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.btn--sm {
font-size: 0.8rem;
padding: 0.5rem 0.75rem;
border-radius: 0.5rem;
min-height: 2.75rem;
min-width: 2.75rem;
box-sizing: border-box;
}
/* --- App shell (cabinet/base) --- */
.cabinet-app {
min-height: 100dvh;
display: flex;
flex-direction: column;
background: var(--surface);
}
.cabinet-page--center {
display: flex;
align-items: center;
justify-content: center;
min-height: 100dvh;
padding: 1.5rem;
}
.cabinet-header {
position: sticky;
top: 0;
z-index: 20;
background: color-mix(in srgb, var(--surface) 88%, transparent);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
}
.cabinet-header__inner {
max-width: var(--max-content);
margin: 0 auto;
padding-top: max(0.75rem, env(safe-area-inset-top, 0px));
padding-bottom: 0.75rem;
padding-left: max(1.25rem, env(safe-area-inset-left, 0px) + 0.5rem);
padding-right: max(1.25rem, env(safe-area-inset-right, 0px) + 0.5rem);
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.cabinet-brand {
display: flex;
align-items: center;
gap: 0.65rem;
color: var(--on-surface);
text-decoration: none;
min-width: 0;
}
.cabinet-brand:hover {
text-decoration: none;
color: var(--on-surface);
}
.cabinet-brand__icon {
font-size: 1.75rem;
color: var(--primary);
background: var(--surface-container-low);
border-radius: 0.75rem;
padding: 0.35rem;
border: 1px solid color-mix(in srgb, var(--outline-variant) 30%, transparent);
flex-shrink: 0;
}
.cabinet-brand__title {
font-family: 'Manrope', 'Inter', sans-serif;
font-weight: 800;
font-size: 1rem;
line-height: 1.2;
letter-spacing: -0.02em;
}
.cabinet-brand__subtitle {
font-size: 0.7rem;
color: var(--secondary);
text-transform: uppercase;
letter-spacing: 0.04em;
font-weight: 600;
}
.cabinet-header__actions {
display: flex;
align-items: center;
gap: 0.75rem;
flex-shrink: 0;
}
.cabinet-user {
font-size: 0.8rem;
color: var(--on-surface-variant);
text-align: right;
max-width: 12rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: none;
}
@media (min-width: 480px) {
.cabinet-user {
display: inline;
}
}
.cabinet-user__role {
color: var(--secondary);
font-weight: 500;
}
.cabinet-main {
flex: 1;
max-width: var(--max-content);
width: 100%;
margin: 0 auto;
padding: 1.25rem 1.25rem calc(2.5rem + env(safe-area-inset-bottom, 0px));
}
/* Cards & lists */
.surface-card {
background: var(--surface);
border: 1px solid color-mix(in srgb, var(--outline-variant) 30%, transparent);
border-radius: 1rem;
padding: 1rem 1.1rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}
.list-stack {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.list-row {
display: block;
border: 1px solid color-mix(in srgb, var(--outline-variant) 30%, transparent);
border-radius: 1rem;
padding: 0.9rem 1rem;
background: var(--surface);
transition: border-color 0.15s, box-shadow 0.15s;
}
/* Hover — только у устройств с нормальным hover (не залипает на тач после тапа) */
@media (hover: hover) and (pointer: fine) {
.list-row:hover {
border-color: color-mix(in srgb, var(--primary) 35%, var(--outline-variant));
box-shadow: 0 2px 12px rgba(0, 113, 104, 0.08);
}
.list-row a:hover {
color: var(--primary);
text-decoration: none;
}
}
.list-row a {
text-decoration: none;
color: var(--on-surface);
font-weight: 600;
}
.list-row__meta {
color: var(--secondary);
font-size: 0.8rem;
display: block;
margin-top: 0.25rem;
}
/* «· v1» и хвост мета — не рвём посередине (мобайл) */
.list-row__meta-tail {
white-space: nowrap;
}
/* Вся плитка — одна ссылка */
.list-row--action {
padding: 0;
overflow: hidden;
}
.list-row--action .list-row__link {
display: block;
padding: 0.9rem 1rem;
text-decoration: none;
color: inherit;
outline-offset: 2px;
border-radius: inherit;
transition: background 0.12s ease;
}
@media (hover: hover) and (pointer: fine) {
.list-row--action .list-row__link:hover {
background: color-mix(in srgb, var(--primary) 6%, transparent);
text-decoration: none;
}
}
.list-row--action .list-row__title {
display: block;
color: var(--on-surface);
font-weight: 600;
}
/* Список: слева ссылка на карточку, справа «Пройти» */
.list-row--split {
display: flex;
flex-direction: row;
align-items: stretch;
padding: 0;
overflow: hidden;
gap: 0;
}
/* Колонка тянется по высоте кнопки «Пройти»; ссылка на всю эту высоту — цель тача на моб. */
.list-row--split .list-row__main {
display: flex;
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
align-self: stretch;
}
.list-row--split .list-row__link {
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
justify-content: flex-start;
padding: 0.9rem 1rem;
text-decoration: none;
color: inherit;
outline-offset: 2px;
border-radius: 0.85rem 0 0 0.85rem;
transition: background 0.12s ease;
-webkit-tap-highlight-color: color-mix(in srgb, var(--primary) 18%, transparent);
}
.list-row--split .list-row__link:active {
background: color-mix(in srgb, var(--primary) 10%, transparent);
}
@media (hover: hover) and (pointer: fine) {
.list-row--split .list-row__link:hover {
background: color-mix(in srgb, var(--primary) 6%, transparent);
text-decoration: none;
}
}
.list-row--split .list-row__side {
display: flex;
align-items: center;
padding: 0.5rem 0.9rem 0.5rem 0;
flex-shrink: 0;
border-left: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
}
.list-row--split .list-row__title {
display: block;
color: var(--on-surface);
font-weight: 600;
}
/* Моб/узкий экран: заголовок на полную ширину, кнопка снизу на полную ширину — без пустой полосы */
@media (max-width: 640px) {
.list-row--split {
flex-direction: column;
flex-wrap: nowrap;
align-items: stretch;
}
.list-row--split .list-row__main {
flex: 0 0 auto;
width: 100%;
}
.list-row--split .list-row__link {
border-radius: 0.85rem 0.85rem 0 0;
}
.list-row--split .list-row__side {
box-sizing: border-box;
width: 100%;
justify-content: stretch;
border-left: none;
border-top: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
padding: 0.5rem 0.9rem 0.75rem;
}
.list-row--split .list-row__side .btn {
width: 100%;
box-sizing: border-box;
}
}
/* Карточка теста: визуальные блоки + сворачивание (удобно на узком экране) */
.test-detail-page {
max-width: var(--max-content, 42rem);
margin: 0 auto;
padding-bottom: 1.5rem;
}
.cabinet-brick {
margin-bottom: 1.1rem;
}
/* Чуть больше воздуха между аккордеонами на карточке теста */
.test-detail-page > .cabinet-brick {
margin-bottom: 1.35rem;
}
.cabinet-brick--hero {
padding: 0.1rem 0 0.2rem;
border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 45%, transparent);
margin-bottom: 1.25rem;
}
.cabinet-disclosure {
border: 1px solid color-mix(in srgb, var(--outline-variant) 30%, transparent);
border-radius: 1rem;
background: var(--surface);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}
.cabinet-disclosure__summary {
cursor: pointer;
list-style: none;
user-select: none;
padding: 0.85rem 1rem 0.75rem;
font-size: 1.05rem;
border-radius: 1rem 1rem 0 0;
min-height: 2.75rem;
display: flex;
align-items: center;
}
.cabinet-disclosure__summary::-webkit-details-marker {
display: none;
}
.cabinet-disclosure__summary::after {
content: 'expand_more';
font-family: 'Material Symbols Outlined', sans-serif;
margin-left: auto;
font-size: 1.25rem;
opacity: 0.55;
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
transition: transform 0.2s ease;
}
.cabinet-disclosure[open] .cabinet-disclosure__summary::after {
transform: rotate(180deg);
}
.cabinet-disclosure__body {
padding: 0 1rem 1.05rem;
border-top: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
}
.cabinet-disclosure[open] .cabinet-disclosure__summary {
border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 25%, transparent);
}
/* Назначение: поиск + список */
.assign-toolbar {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-bottom: 0.65rem;
}
@media (min-width: 520px) {
.assign-toolbar {
flex-direction: row;
flex-wrap: wrap;
align-items: center;
}
.assign-toolbar .form-input {
flex: 1 1 160px;
min-width: 0;
}
}
.assign-toolbar__search {
flex: 1 1 200px;
}
/* Назначение: компактнее поля на мобилке; 16px — без авто-зума iOS в поле */
@media (max-width: 640px) {
.assign-toolbar {
gap: 0.4rem;
}
.assign-toolbar .form-input {
padding: 8px 12px;
font-size: 16px;
line-height: 1.3;
}
}
.assign-list {
max-height: min(40vh, 18rem);
min-height: 0;
overflow: auto;
border: 1px solid color-mix(in srgb, var(--outline-variant) 30%, transparent);
border-radius: 0.75rem;
background: var(--surface-container-low);
-webkit-overflow-scrolling: touch;
}
/* Чуть выше область прокрутки — под панель инструмента теста и fixed-футер */
@media (max-width: 640px) {
.assign-list {
max-height: min(52dvh, 24rem);
}
}
.assign-row {
display: flex;
gap: 0.5rem;
padding: 0.65rem 0.75rem;
border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 40%, transparent);
cursor: pointer;
align-items: center;
}
.assign-row input[type='checkbox'] {
flex-shrink: 0;
width: 1.125rem;
height: 1.125rem;
margin: 0;
accent-color: var(--primary);
}
.assign-row:last-child {
border-bottom: none;
}
.assign-row--selected,
.assign-row:hover {
background: color-mix(in srgb, var(--primary) 8%, transparent);
}
.assign-row__text {
display: flex;
flex-direction: column;
gap: 0.2rem;
min-width: 0;
flex: 1;
}
.assign-row__fio {
font-weight: 600;
color: var(--on-surface);
font-size: 0.95rem;
word-break: break-word;
}
.assign-row__login {
font-size: 0.8rem;
color: var(--secondary);
font-family: ui-monospace, Menlo, monospace;
}
.assign-row__meta {
font-size: 0.8rem;
color: var(--secondary);
line-height: 1.35;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
word-break: break-word;
overflow-wrap: anywhere;
}
.create-row {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin: 1.25rem 0;
align-items: center;
}
.create-row .form-input {
flex: 1 1 12rem;
min-width: 0;
}
.create-row .btn {
width: auto;
flex: 0 0 auto;
}
.callout {
border-radius: 1rem;
padding: 0.75rem 1rem;
font-size: 0.9rem;
font-weight: 500;
margin: 0 0 1rem;
}
.callout--warning {
background: #fffbeb;
border: 1px solid #fde68a;
color: #92400e;
}
.callout--error {
background: #fff5f5;
border: 1px solid #fecaca;
color: #991b1b;
}
.callout--success {
background: #ecfdf5;
border: 1px solid #a7f3d0;
color: #047857;
}
.error-text {
color: var(--error);
font-size: 0.9rem;
margin: 0.5rem 0 0;
}
.link-back {
display: inline-flex;
align-items: center;
gap: 0.25rem;
font-size: 0.9rem;
font-weight: 500;
margin: 0 0 1rem;
}
/* Table (detail) */
.table-cabinet {
width: 100%;
border-collapse: separate;
border-spacing: 0;
font-size: 0.875rem;
}
.table-cabinet th,
.table-cabinet td {
padding: 0.5rem 0.6rem;
text-align: left;
border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 40%, transparent);
vertical-align: top;
}
.table-cabinet th {
color: var(--secondary);
font-weight: 600;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.03em;
}
.table-cabinet tr:last-child td {
border-bottom: none;
}
.table-cabinet .mono {
font-size: 0.75rem;
word-break: break-all;
color: var(--on-surface-variant);
}
/* История версий: карточки вместо таблицы (мобайл) */
.version-card-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.version-card-list__item {
margin: 0;
min-height: 0;
}
.version-card-list__row {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-between;
gap: 0.75rem;
}
.version-card-list__main {
min-width: 0;
flex: 1 1 12rem;
}
.version-card-list__title-line {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
}
.version-card-list__action {
flex: 0 0 auto;
align-self: center;
}
@media (max-width: 520px) {
.version-card-list__row {
flex-direction: column;
align-items: stretch;
}
/* В column flex `flex-grow: 1` на .main тянет блок по вертикали — лишнее пустое место */
.version-card-list__main {
flex: 0 1 auto;
}
.version-card-list__action {
width: 100%;
align-self: stretch;
}
}
.draft-block {
margin-top: 1.25rem;
padding: 1rem;
background: var(--surface-container);
border-radius: 1rem;
border: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
}
.draft-block .form-input {
margin-top: 0.25rem;
}
.muted {
color: var(--secondary);
font-size: 0.875rem;
}
.inline-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.75rem;
margin-top: 0.5rem;
}
.inline-actions .btn {
width: auto;
}
/* Нижняя панель: полноширинные primary + secondary (без перебития .inline-actions .btn) */
.actions-bar {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.5rem;
width: 100%;
box-sizing: border-box;
}
.actions-bar .btn-primary {
width: 100%;
margin-top: 0;
box-sizing: border-box;
}
.actions-bar a.btn,
.actions-bar .btn.btn-ghost {
display: block;
width: 100%;
text-align: center;
box-sizing: border-box;
}
@media (min-width: 480px) {
.actions-bar {
flex-direction: row;
flex-wrap: wrap;
align-items: center;
}
.actions-bar .btn-primary {
width: auto;
min-width: 12rem;
flex: 1 1 auto;
}
.actions-bar a.btn,
.actions-bar .btn.btn-ghost {
display: inline-block;
width: auto;
flex: 0 0 auto;
}
}
@media (max-width: 520px) {
.inline-actions--block-mobile {
flex-direction: column;
align-items: stretch;
}
.inline-actions--block-mobile .btn {
width: 100%;
box-sizing: border-box;
}
}
/* --- Спринт 2: редактор вопроса, прогоны, импорт, фикс. футер --- */
.question-editor-block__header {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.5rem;
margin-bottom: 0.5rem;
}
.question-editor-block__title {
margin-bottom: 0;
font-size: 0.95rem;
}
.question-editor-block__ai-btn {
width: 100%;
text-align: center;
box-sizing: border-box;
align-self: stretch;
}
@media (min-width: 520px) {
.question-editor-block__header {
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
}
.question-editor-block__ai-btn {
width: auto;
align-self: center;
}
}
/* Спринт 2.4: radio = один верный, checkbox = несколько (нативная метафора) */
.question-option-row__mark {
width: 1.15rem;
height: 1.15rem;
flex-shrink: 0;
margin-top: 0.1rem;
cursor: pointer;
accent-color: var(--primary);
}
/* Список прогонов: карточки */
.attempts-card-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.attempts-card-list__item {
margin: 0;
}
.attempts-card-list__row {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-between;
gap: 0.75rem;
}
.attempts-card-list__main {
flex: 1 1 12rem;
min-width: 0;
}
.attempts-card-list__action {
flex: 0 0 auto;
}
@media (max-width: 520px) {
.attempts-card-list__row {
flex-direction: column;
}
.attempts-card-list__action {
width: 100%;
text-align: center;
}
}
/* Импорт: скрытый input + кнопка-стиль */
.import-file-input {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.import-file-row {
position: relative;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
}
.import-file-label {
margin: 0;
cursor: pointer;
width: auto;
display: inline-block;
box-sizing: border-box;
}
/* Мобилка: закреплённый футер с «Сохранить» (дубль панели скрыт) */
.test-detail-fixed-actions {
display: none;
}
@media (max-width: 640px) {
.test-detail-page--with-fixed-actions {
padding-bottom: calc(7.5rem + env(safe-area-inset-bottom, 0px));
}
.test-detail-page--with-fixed-actions .editor-actions-flow {
display: none;
}
.test-detail-fixed-actions {
display: block;
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 30;
padding: 0.65rem 1.25rem calc(0.65rem + env(safe-area-inset-bottom, 0px));
background: color-mix(in srgb, var(--surface) 96%, #fff);
border-top: 1px solid color-mix(in srgb, var(--outline-variant) 45%, transparent);
box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.08);
}
.test-detail-fixed-actions__inner {
max-width: var(--max-content);
margin: 0 auto;
}
.test-detail-fixed-actions__status {
margin: 0 0 0.45rem;
font-size: 0.8rem;
line-height: 1.3;
max-height: 3.2rem;
overflow: auto;
}
}