/* Урок Просто — «Мои документы» в стиле v2 «Строка запроса» (up-docs.css), круг 7. Корень .up-docs рядом с .up (up-kit.css);
   превью документов — up-sheets.css (up-sh-*). Свои компоненты: поиск-композер (up-docs-search), «Недавние» (up-docs-recent,
   up-docs-rc), папки плитками (up-docs-folders, up-docs-ftile, поле имени up-docs-fform), хлебные крошки открытой папки (up-docs-crumbs,
   up-docs-fhead), панель «В папку» up-docs-menu.is-folders, подтверждение up-docs-fconfirm, уведомление up-docs-toast; одна строка
   управления (up-docs-bar: вкладки up-docs-grp с числами, «Фильтры» up-docs-fbtn с меню up-docs-menu.is-filters, сортировка, вид;
   на телефоне — «Вид» up-docs-vbtn с меню up-docs-menu.is-view), выбранные фильтры чипами (up-docs-active, up-docs-achip);
   уроки (up-docs-ls, up-docs-stack, чипы форматов up-docs-fchips, «…» урока up-docs-ls-more, раскрытие up-docs-ls-body), группы по датам
   (up-docs-group), строки (up-docs-row), меню действий (up-docs-menu), выбор нескольких (up-docs-cb, в том числе частичный
   aria-checked="mixed", up-docs-selbar), «Показать ещё» (up-docs-more), пустые состояния (up-docs-empty). Кандидаты в общий набор — см. отчёт.
   Круг 7: плитка папки — значок как в Google Drive (up-docs-ftiles[data-ftile="icon"], значок up-docs-fg) или стопка превью
   (data-ftile="stack"); выбранные фильтры — чип на каждый вариант, чипы раздела группой (up-docs-agrp).
   04.11: «Недавние» сворачиваются — заголовок-кнопка up-docs-rech / up-docs-rectg («Свернуть / Развернуть», шеврон up-docs-rectg-chev),
   у свёрнутых — «· 5» (up-docs-rec-n) и процент документа в работе (up-docs-rec-busy); список — up-docs-rec / up-docs-rec-in.
   Круг 9 (04.11): карточка урока читаемее — «умные чипы»: тема 16/22, подпись 14/20 (up-docs-ls-m, up-docs-meta) с папкой в конце
   (up-docs-floc вместо меток-чипов up-docs-ftag), форматы — подписанные нейтральные чипы 28 px (up-docs-fchips / up-docs-fchip вместо
   значков up-docs-badge): сколько видно — решает container query по ширине строки чипов; время 14 px.
   Шаг 0 (04.11 вечер, ответы владельца на круг 9): чипы форматов — ссылки на документ (a.up-docs-fchip): наведение — рамка --ws-accent,
   текст --ws-accent-ink, значок --ws-accent, подъём 1 px; нажатие .96; фокус — кольцо 2 px с отступом 2 (шаг 0г —
   рамка по контуру, правило набора); рамка в покое — была на выбор владельцу (шаг 0в: с рамкой --line-strong; шаг 0г: без рамки); на телефоне область нажатия 44 px — невидимым ::before; «Недавние» по умолчанию
   свёрнуты (в build_up_docs.py); подписи карточек «Недавних» (up-docs-rc-m, up-docs-rc-w) и плиток папок (up-docs-ftile-n) — 14/20.
   Шаг 0, ответы владельца по странице шага 0: «+N» на превью-стопке плитки урока (up-docs-stack-n) — вернули, как до круга 9; телефон —
   «…» урока (up-docs-ls-more) внизу, в 8 px слева от шеврона, справа вверху — только время.
   Шаг 0б (04.11, ответы владельца на 9 вопросов): «+N» в строке чипов — кнопка меню со скрытыми форматами (обёртка up-docs-fplus, меню —
   up-docs-menu.is-plus с пунктами up-docs-mi; место считает placePlus в build_up_docs.py); мелкие цели на телефоне — невидимым расширением
   («Посмотреть пример», «Показать ещё», галочки в режиме выбора, «+N»); варианты на утверждение (чипы отдельной строкой
   на телефоне, перенос строки документа в работе в «Недавних», пункты меню на телефоне 44 px) — убраны в шаге 0в.
   Шаг 0в (05.11, ответы владельца на страницу шага 0б: «4 — оставить как сейчас; 6 — с рамкой; 7 — А; 8 — Собираем слайды…; 15 — чинить»):
   варианты убраны, осталось выбранное — чипы-ссылки и «+N» с рамкой --line-strong в покое; на телефоне чипы в строке с «…» и шевроном;
   строка документа в работе — «Собираем слайды…» (текст — в build_up_docs.py), в одну строку; пункты меню — 38 px. Галочка урока
   на телефоне без наведения (max-width: 767px и hover: none) вне режима выбора не нажимается (pointer-events: none): касание угла превью
   попадает в заголовок урока.
   Шаг 0г (05.11, ответы владельца на страницу шага 0в: «2 — есть замечание (оставляем как было, без рамок); 4 — раскрытие лучше явно
   оставить по кнопке, а для выбора папки сделать удержание, после чего документы можно будет выбрать просто нажатием; 16 — принять везде;
   20 — везде»): чипы-ссылки и «+N» в покое снова без рамки; шеврон урока (up-docs-ls-chev) — кнопка с целью 44 × 44, на телефоне
   и планшете с касанием урок раскрывается только им (build_up_docs.py); галочки документов и урока на устройствах без наведения
   (hover: none) нажимаются только в режиме выбора; фокус — рамкой самой кнопки по правилу набора (up-kit.css), здесь — только то,
   что набор не знает (строка документа, залитые кнопки экрана). */
.up-docs { --up-docs-slot: 96px; --up-docs-k: .2; }  /* слот превью в строке и масштаб листа: 96 px ≥ 1024, 72 px на 768, 64 px на телефоне */
/* длительность сворачивания «Недавних» — как раскрытие урока (.38 с, --ease-out); в наборе переменных длительности нет — своя */
.up-docs { --up-docs-fold: .38s; }
.up-docs .up-hero { max-width: 1040px; gap: 18px; }
.up-docs .up-title { padding: 2px 0 0; }
.up-docs-example { margin-left: 0; font-weight: 500; color: var(--text-2); }
.up-docs-example:hover { color: var(--ws-accent-ink); }
.up-docs-gh { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 0 10px; }
.up-docs-gh .up-caps { font-variant-numeric: tabular-nums; }

/* ---------- поиск: композер в одну строку — пилюля с кольцом при фокусе и кнопкой «Создать документ» ---------- */
.up-docs-search { display: flex; align-items: center; gap: 10px; padding: 8px 8px 8px 20px; border-radius: 999px; width: 100%; max-width: 880px; justify-self: center; }
.up-docs-search .up-ring { border-radius: 999px; }
.up-docs-search .up-glow { height: 70%; bottom: -24px; }
.up-docs-sic { display: inline-grid; flex: 0 0 auto; color: var(--text-2); transition: color .18s var(--ease-out); }
.up-docs-search:focus-within .up-docs-sic { color: var(--ws-accent); }
.up-docs-q { flex: 1 1 auto; min-width: 0; height: 48px; margin: 0; padding: 0; border: 0; background: transparent; outline: none; color: var(--ink);
  font-family: inherit; font-size: 18px; line-height: 26px; font-weight: 500; appearance: none; -webkit-appearance: none; }
.up-docs-q:focus-visible { outline: none; }  /* фокус показывает кольцо композера */
.up-docs-q::placeholder { color: var(--text-2); opacity: .72; font-weight: 400; }
.up-docs-q::-webkit-search-cancel-button, .up-docs-q::-webkit-search-decoration { -webkit-appearance: none; appearance: none; }
.up-docs-clear { display: grid; place-items: center; flex: 0 0 auto; width: 32px; height: 32px; border: 0; border-radius: 999px; background: var(--surface-2); color: var(--text-2); cursor: pointer;
  transition: background-color .15s, color .15s, transform .15s var(--ease-out); }
@starting-style { .up-docs .up-docs-clear { opacity: 0; transform: scale(.6); } }
.up-docs-clear:hover { background: var(--ws-accent-soft); color: var(--ws-accent-ink); }
.up-docs-clear:active { transform: scale(.9); }
.up-docs-create { flex: 0 0 auto; text-decoration: none; }
.up-docs-create .up-go-ic svg { transform: none; }
.up-docs-create:hover .up-go-ic svg { transform: rotate(90deg); }

/* ---------- «Недавние»: ряд карточек с крупными превью, в ряд 5 (4 на узком ноутбуке), на телефоне — лента ---------- */
/* 04.11: сворачиваются. Заголовок — кнопка во всю строку (слева «НЕДАВНИЕ», справа «Свернуть / Развернуть» и шеврон); кнопка 32 px
   (на телефоне 44 px) уходит отрицательными полями в зазоры над и под строкой — вёрстка развёрнутого блока та же, что была.
   Отступ заголовка от карточек — в padding списка, чтобы сворачивался вместе с ним */
.up-docs-recent { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; }
.up-docs-rech { margin: 0; padding: 0; font: inherit; }
.up-docs-rectg { box-sizing: border-box; display: flex; align-items: center; gap: 6px; flex: 1 1 auto; min-width: 0; height: 32px; margin: -8px 0; padding: 0 10px; border: 0; border-radius: 12px;
  background: transparent; color: var(--text-2); font-family: inherit; text-align: left; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.up-docs-rectg .up-caps { flex: 0 0 auto; transition: color .15s; }
/* «· 5» и процент документа в работе — только у свёрнутого: проявляются, когда список ушёл; у развёрнутого скрыты и для чтения с экрана */
.up-docs-rec-n { font-variant-numeric: tabular-nums; }
.up-docs-rec-n .is-4, .up-docs-rec-n .is-3 { display: none; }
.up-docs-rec-n, .up-docs-rec-busy { opacity: 0; visibility: hidden; transform: translateX(-4px); transition: opacity .15s var(--ease-out), transform .2s var(--ease-out), visibility 0s .2s; }
.up-docs-recent[data-open="false"] .up-docs-rec-n, .up-docs-recent[data-open="false"] .up-docs-rec-busy { opacity: 1; visibility: visible; transform: none;
  transition: opacity .25s var(--ease-out) calc(var(--up-docs-fold) * .5), transform .3s var(--ease-out) calc(var(--up-docs-fold) * .5), visibility 0s; }
.up-docs-rec-busy { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 5px; height: 22px; margin-left: 4px; padding: 0 8px 0 6px; border-radius: 999px; background: var(--surface); box-shadow: inset 0 0 0 1px var(--ws-accent-edge); color: var(--ws-accent-ink);
  font-size: 11.5px; line-height: 22px; font-weight: 600; font-variant-numeric: tabular-nums; }
.up-docs-rec-busy .ws-spin { display: inline-grid; }
.up-docs-rec-what { min-width: 0; max-width: 300px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; margin-right: 2px; }
.up-docs-rec-what b { font-weight: 600; }
.up-docs-rec-busy { min-width: 0; flex-shrink: 1; padding-left: 10px; }
.up-docs-rec-topic { font-weight: 500; color: var(--text-2); }
@media (max-width: 639px) { .up-docs-rec-topic { display: none; } }
@media (max-width: 399px) { .up-docs-recent[data-open="false"] .up-docs-rectg-t { display: none; } }  /* узкий телефон: у свёрнутого блока — только стрелка, вся строка остаётся кнопкой */  /* на телефоне — только формат: «Презентация ⟳ 62%» */
.up-docs-rectg-r { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 4px; margin-left: auto; font-size: 13.5px; line-height: 18px; font-weight: 500; color: var(--text-2); transition: color .15s; }
.up-docs-rectg-chev { display: inline-grid; color: var(--ws-icon); transform: rotate(180deg); transition: transform .3s var(--spring-soft), color .15s; }
.up-docs-recent[data-open="false"] .up-docs-rectg-chev { transform: none; }
@media (hover: hover) {
  .up-docs-rectg:hover .up-caps, .up-docs-rectg:hover .up-docs-rectg-r, .up-docs-rectg:hover .up-docs-rectg-chev { color: var(--ws-accent-ink); }
}
.up-docs-rectg:active .up-docs-rectg-chev { transition-duration: .12s; }
/* сворачивание: сетка 1fr → 0fr (высота) + прозрачность и сдвиг списка вверх на 8 px. Пока идёт движение и у свёрнутого — обрезка по
   краю (clip-path: inset(0)); у развёрнутого после конца движения — с запасом под тень и подъём карточек при наведении */
.up-docs-rec { display: grid; grid-template-rows: 1fr; transition: grid-template-rows var(--up-docs-fold) var(--ease-out); }
.up-docs-recent[data-open="false"] .up-docs-rec { grid-template-rows: 0fr; }
.up-docs-rec-in { min-width: 0; min-height: 0; clip-path: inset(-24px -40px -64px);
  transition: opacity calc(var(--up-docs-fold) * .8) var(--ease-out) calc(var(--up-docs-fold) * .1), clip-path 0s linear var(--up-docs-fold), visibility 0s; }
.up-docs-recent[data-open="false"] .up-docs-rec-in { opacity: 0; visibility: hidden; clip-path: inset(0);
  transition: opacity var(--up-docs-fold) var(--ease-out), clip-path 0s, visibility 0s linear var(--up-docs-fold); }
.up-docs-rec-in > .up-docs-rcs { transition: transform var(--up-docs-fold) var(--ease-out); }
.up-docs-recent[data-open="false"] .up-docs-rcs { transform: translateY(-8px); }
.up-docs-rcs { --cols: 5; --gap: 12px; margin: 0; padding: 10px 0 0; list-style: none; display: grid; grid-auto-flow: column; grid-auto-columns: calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols)); gap: var(--gap); }
.up-docs-rc { min-width: 0; animation: up-row-in-a .42s var(--ease-out) both; animation-delay: calc(var(--n, 0) * 55ms); }
/* «Недавние» въезжают один раз — при смене папки, фильтров и вида не перерисовываются заново */
.up-docs-rc-a { display: grid; gap: 6px; padding: 8px 8px 10px; border-radius: 20px; background: var(--up-glass); border: 1px solid var(--up-card-line); text-decoration: none; color: var(--ink);
  box-shadow: 0 1px 2px rgba(31, 27, 58, .04), inset 0 1px 0 rgba(255, 255, 255, .5); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  transition: transform .25s var(--ease-out), box-shadow .25s var(--ease-out), border-color .2s, background-color .2s; }
.up[data-theme="dark"].up-docs .up-docs-rc-a { box-shadow: 0 1px 2px rgba(0, 0, 0, .3); }
.up-docs-rc-pv { position: relative; display: block; }
.up-docs-rc-pv .up-sh.is-tile { border-radius: 13px; aspect-ratio: 16 / 10; padding-top: 6%; }
.up-docs-rc-pv .up-sh.is-tile[data-fmt="presentation"] { padding-top: 0; }
.up-docs-rc-t { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; padding: 0 4px; font-size: 14.5px; line-height: 20px; font-weight: 600; color: var(--ink); min-height: 40px; transition: color .15s; }
/* подписи 14/20 (шаг 0, владелец: «4 - да»; были 12,5/16 и 12/16) — как подпись карточки урока */
.up-docs-rc-m { padding: 0 4px; font-size: 14px; line-height: 20px; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.up-docs-rc-w { padding: 0 4px; font-size: 14px; line-height: 20px; color: var(--text-2); font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.up-docs-rc-busy { position: absolute; right: 8px; top: 8px; display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px 0 6px; border-radius: 999px; background: var(--ws-accent); color: #fff; font-size: 11.5px; line-height: 22px; font-weight: 600; font-variant-numeric: tabular-nums; }
.up-docs-rc-busy .ws-spin { display: inline-grid; }
.up-docs-rc[data-job="true"] .up-docs-rc-a { border-style: dashed; }
@media (hover: hover) {
  .up-docs-rc-a:hover { transform: translateY(-3px); background: var(--surface); border-color: var(--ws-accent-border); box-shadow: 0 1px 2px rgba(31, 27, 58, .06), 0 20px 40px -18px rgba(60, 40, 120, .5); }
  .up-docs-rc-a:hover .up-docs-rc-t { color: var(--ws-accent-ink); }
  .up-docs-rc-a:hover .up-sh-box { transform: translateY(-4px) rotate(-1deg); }
  .up[data-theme="dark"].up-docs .up-docs-rc-a:hover { background: var(--surface-2); box-shadow: 0 20px 40px -18px rgba(0, 0, 0, .8); }
}
.up-docs-rc-a:active { transform: scale(.985); }

/* ---------- одна строка управления: вкладки «По урокам / Все файлы» слева; «Фильтры», сортировка и вид справа ---------- */
.up-docs-lib { display: grid; align-content: start; gap: 10px; overflow-anchor: none; }  /* список перестраивается под открытым меню «Фильтры» — без подстройки прокрутки браузером, меню не съезжает */
/* в одну строку без переноса: при нехватке места сжимается подпись сортировки (многоточие), а не прыгает строка, когда у «Фильтров» появляется число */
.up-docs-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px 12px; flex-wrap: nowrap; }
.up-docs-bar > .up-docs-grp { flex: 0 0 auto; }
.up-docs-bar-r { display: flex; align-items: center; gap: 8px; min-width: 0; margin-left: auto; }
.up-docs-grp, .up-docs-view { flex-wrap: nowrap; padding: 3px; gap: 2px; background: var(--up-glass); border: 1px solid var(--up-card-line); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.up-docs-grp button, .up-docs-view button { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 7px 0 11px; font-size: 13.5px; }
.up-docs-view button { padding: 0 9px; }
.up-docs-grp button svg, .up-docs-view button svg { color: var(--ws-icon); transition: color .15s; }
.up-docs-grp button[aria-checked="true"] svg, .up-docs-view button[aria-checked="true"] svg { color: var(--ws-accent); }
/* число во вкладке — сколько видно сейчас; у выбранной — в акценте */
.up-docs-grp-n { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; background: var(--surface-2); color: var(--text-2); font-size: 11.5px; line-height: 20px; font-weight: 600;
  font-variant-numeric: tabular-nums; text-align: center; transition: background-color .15s, color .15s; }
.up-docs-grp button[aria-checked="true"] .up-docs-grp-n { background: var(--ws-accent-soft); color: var(--ws-accent-ink); }
.up[data-theme="dark"].up-docs .up-docs-grp-n { background: rgba(255, 255, 255, .08); }
.up[data-theme="dark"].up-docs .up-docs-grp button[aria-checked="true"] .up-docs-grp-n { background: var(--ws-accent-soft); }
.up-docs-pill { height: 38px; background: var(--up-glass); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.up-docs-sort { flex: 0 1 auto; min-width: 0; }
.up-docs-sort .up-pill-txt { min-width: 0; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.up-docs-bar-r > .up-docs-view { flex: 0 0 auto; }
/* «Фильтры» и «Вид» (телефон): кнопка-пилюля, под ней меню; число выбранных фильтров — кружком */
.up-docs-pop { position: relative; display: inline-flex; flex: 0 0 auto; }
.up-docs-pop.is-v { display: none; }
.up-docs-fbtn, .up-docs-vbtn { height: 38px; padding: 0 12px 0 10px; font-family: inherit; font-size: 13.5px; font-weight: 500; background: var(--up-glass); color: var(--ink); cursor: pointer; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.up-docs-fbtn[aria-pressed="true"] { font-weight: 600; }
.up-docs-fbtn[aria-pressed="true"] .up-pill-ic { color: var(--ws-accent); }
.up-docs-vbtn .up-pill-chev { transition: transform .2s var(--ease-out); }
.up-docs-vbtn[aria-expanded="true"] .up-pill-chev { transform: rotate(180deg); }
.up-docs-fbtn-n { display: inline-grid; place-items: center; min-width: 20px; height: 20px; margin-left: 2px; padding: 0 6px; border-radius: 999px; background: var(--ws-accent); color: #fff;
  font-size: 11.5px; line-height: 20px; font-weight: 700; font-variant-numeric: tabular-nums; transition: transform .35s var(--spring), opacity .2s var(--ease-out); }
@starting-style { .up-docs .up-docs-fbtn-n { opacity: 0; transform: scale(.4); } }
.up[data-theme="dark"].up-docs .up-docs-fbtn-n { color: #1f1b3a; }
/* меню «Фильтры»: разделы с вариантами-чипами, список за ним перестраивается сразу; внизу «Сбросить» и «Готово» */
.up-docs-menu.is-filters { width: 400px; max-width: calc(100vw - 32px); padding: 14px 14px 12px; gap: 14px; transform-origin: 85% 0; scroll-margin: 16px; }
/* меню — role="dialog" (внутри кнопки-варианты): общее правило окон .up [role="dialog"] (скругление 24 px и въезд снизу) сюда не относится */
.up-docs .up-docs-menu.is-filters { border-radius: 16px !important; animation: none !important; }
.up-docs-fsec { display: grid; gap: 8px; }
.up-docs-fsec .up-caps { padding: 0 2px; }
.up-docs-fopts { display: flex; flex-wrap: wrap; gap: 6px; }
.up-docs-fopt { height: 32px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--line-strong); background: var(--surface); color: var(--ink); font-family: inherit; font-size: 13.5px; line-height: 18px; font-weight: 500;
  white-space: nowrap; cursor: pointer; transition: border-color .15s, background-color .15s, color .15s, transform .12s var(--ease-out); }
.up-docs-fopt:hover { border-color: var(--ws-accent); color: var(--ws-accent-ink); }
.up-docs-fopt:active { transform: scale(.96); }
.up-docs-fopt[aria-pressed="true"] { border-color: var(--ws-accent); background: var(--ws-accent-soft); color: var(--ws-accent-ink); font-weight: 600; }
.up[data-theme="dark"].up-docs .up-docs-fopt:not([aria-pressed="true"]) { background: var(--surface-2); }
.up[data-theme="dark"].up-docs .up-docs-fopt[aria-pressed="true"] { background: color-mix(in srgb, var(--ws-accent) 26%, transparent); color: #fff; }
.up-docs-ffoot { display: flex; align-items: center; justify-content: flex-end; gap: 8px; padding-top: 12px; border-top: 1px solid var(--line); }
.up-docs-ffoot .up-docs-reset { margin-right: auto; height: 36px; }
.up-docs-ffoot .up-docs-act { height: 36px; padding: 0 18px; }
.up-docs-menu.is-view { min-width: 224px; }
/* выбранные фильтры: чип с «×» на каждый вариант строкой под панелью, «Сбросить» и «Найдено: …»; ничего не выбрано — строки нет.
   Чипы одного раздела («5А», «5Б») — группой с зазором 6 px, между разделами — 14 px */
.up-docs-active { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; min-height: 32px; }
.up-docs-agrp { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px; min-width: 0; max-width: 100%; }
.up-docs-achip { display: inline-flex; align-items: center; gap: 6px; height: 32px; max-width: 100%; padding: 0 9px 0 12px; border-radius: 999px; border: 1px solid var(--ws-accent); background: var(--ws-accent-soft); color: var(--ws-accent-ink);
  font-family: inherit; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; cursor: pointer; transition: background-color .15s, color .15s, transform .35s var(--spring-soft), opacity .2s var(--ease-out); }
@starting-style { .up-docs .up-docs-achip { opacity: 0; transform: scale(.7); } }
.up-docs-achip span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.up-docs-achip svg { flex: 0 0 auto; transition: transform .2s var(--ease-out); }
.up-docs-achip:hover { background: var(--ws-accent); color: #fff; }
.up-docs-achip:hover svg { transform: rotate(90deg); }
.up-docs-achip:active { transform: scale(.96); }
.up[data-theme="dark"].up-docs .up-docs-achip:hover { color: #1f1b3a; }
.up-docs-active .up-docs-reset { height: 32px; padding: 0 10px; }
.up-docs-found { margin-left: auto; font-size: 13.5px; line-height: 18px; font-weight: 500; color: var(--text-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.up-docs-reset { display: inline-flex; align-items: center; gap: 5px; height: 38px; padding: 0 12px 0 10px; border: 0; border-radius: 999px; background: transparent; color: var(--text-2);
  font-family: inherit; font-size: 13.5px; line-height: 18px; font-weight: 500; cursor: pointer; transition: color .15s, background-color .15s, opacity .2s var(--ease-out), transform .25s var(--ease-out); }
@starting-style { .up-docs .up-docs-reset { opacity: 0; transform: translateX(-6px); } }
.up-docs-reset:hover { color: var(--error); background: var(--error-tint); }

/* ---------- общие кусочки строк: превью, галочка, время, действия, меню ---------- */
.up-docs-rows { margin: 0; padding: 5px; list-style: none; display: grid; grid-template-columns: minmax(0, 1fr); gap: 2px;
  border-radius: 22px; background: var(--up-glass); border: 1px solid var(--up-card-line); box-shadow: 0 1px 2px rgba(31, 27, 58, .04), inset 0 1px 0 rgba(255, 255, 255, .5);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
.up[data-theme="dark"].up-docs .up-docs-rows { box-shadow: 0 1px 2px rgba(0, 0, 0, .3); }
.up-docs-row { position: relative; display: grid; grid-template-columns: var(--up-docs-slot) minmax(0, 1fr) auto; grid-template-areas: "thumb main side"; align-items: center; gap: 2px 14px; min-height: calc(var(--up-docs-slot) + 12px); padding: 6px 10px 6px 6px; border-radius: 17px;
  background: transparent; transition: background-color .18s var(--ease-out), box-shadow .22s var(--ease-out), transform .22s var(--ease-out);
  animation: up-row-in-a .36s var(--ease-out) both; animation-delay: calc(var(--n, 0) * 40ms); }
.up-docs-list[data-gen="1"] .up-docs-row, .up-docs-lessons[data-gen="1"] .up-docs-row { animation-name: up-row-in-b; }
@keyframes up-row-in-a { from { opacity: 0; transform: translateY(8px); filter: blur(4px); } to { opacity: 1; transform: none; filter: blur(0); } }
@keyframes up-row-in-b { from { opacity: 0; transform: translateY(8px); filter: blur(4px); } to { opacity: 1; transform: none; filter: blur(0); } }
.up-docs-row[data-leaving="true"], .up-docs-ls[data-leaving="true"] { animation: up-row-out .18s var(--ease-out) forwards; animation-delay: calc(var(--n, 0) * 12ms); pointer-events: none; }
@keyframes up-row-out { to { opacity: 0; transform: translateY(-4px) scale(.985); filter: blur(3px); } }
@media (hover: hover) {
  .up-docs-row:hover { background: var(--surface); box-shadow: 0 1px 2px rgba(31, 27, 58, .06), 0 12px 28px -14px rgba(60, 40, 120, .45); transform: translateY(-1px); z-index: 2; }
}
.up-docs-row:focus-within, .up-docs-row:has([aria-expanded="true"]) { background: var(--surface); box-shadow: 0 1px 2px rgba(31, 27, 58, .06), 0 12px 28px -14px rgba(60, 40, 120, .45); z-index: 3; }
.up-docs-row[data-selected="true"] { background: var(--ws-accent-soft); }
.up[data-theme="dark"].up-docs .up-docs-row:hover, .up[data-theme="dark"].up-docs .up-docs-row:focus-within { background: var(--surface-2); box-shadow: 0 12px 28px -14px rgba(0, 0, 0, .7); }
.up-docs-thumb { grid-area: thumb; position: relative; display: grid; place-items: center; width: var(--up-docs-slot); height: var(--up-docs-slot); }
.up-docs-thumb .up-sh.is-row, .up-docs-stack .up-sh.is-row { --up-sh-k: var(--up-docs-k); width: var(--up-docs-slot); height: var(--up-docs-slot); }
.up-docs-row:hover .up-sh-box { transform: translateY(-2px) rotate(-2deg); box-shadow: 0 2px 4px rgba(31, 27, 58, .14), 0 8px 16px -6px rgba(31, 27, 58, .4), 0 0 0 1px rgba(31, 27, 58, .09); }
.up-docs-main { grid-area: main; display: grid; gap: 1px; min-width: 0; }
.up-docs-topic { font-size: 16px; line-height: 22px; font-weight: 600; color: var(--ink); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: color .15s; }
/* вся строка — ссылка на документ: растянутая псевдо-область ссылки под действиями */
.up-docs-topic::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
/* фокус ссылки-строки (шаг 0г, п. 16 «принять везде»): рамка у всей строки по её краю внутрь (outline-offset −2), у самой ссылки — нет
   (растянутая область ссылки — вся строка, рамка по тексту ссылки легла бы на буквы); .up — чтобы перебить общее правило набора */
.up .up-docs-topic:focus-visible { outline: none; }
.up-docs-row:has(.up-docs-topic:focus-visible) { outline: 2px solid var(--ws-accent); outline-offset: -2px; }
.up-docs-row:hover .up-docs-topic { color: var(--ws-accent-ink); }
.up-docs-meta { display: flex; align-items: center; min-width: 0; font-size: 14px; line-height: 20px; color: var(--text-2); white-space: nowrap; }
.up-docs-meta-t { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.up-docs-when { grid-area: side; justify-self: end; font-size: 14px; line-height: 20px; color: var(--text-2); white-space: nowrap; font-variant-numeric: tabular-nums; transition: opacity .18s var(--ease-out), transform .18s var(--ease-out); }
.up-docs-acts { grid-area: side; position: relative; z-index: 2; display: flex; align-items: center; justify-content: flex-end; gap: 6px; opacity: 0; transform: translateX(6px); pointer-events: none;
  transition: opacity .18s var(--ease-out), transform .22s var(--ease-out); }
.up-docs-row:hover .up-docs-acts, .up-docs-row:focus-within .up-docs-acts, .up-docs-row:has([aria-expanded="true"]) .up-docs-acts { opacity: 1; transform: none; pointer-events: auto; }
.up-docs-row:hover .up-docs-when, .up-docs-row:focus-within .up-docs-when, .up-docs-row:has([aria-expanded="true"]) .up-docs-when { opacity: 0; transform: translateX(-6px); pointer-events: none; }
.up-docs-act { display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 11px 0 10px; border-radius: 999px; border: 1px solid var(--line-strong); background: var(--surface); color: var(--ink);
  font-family: inherit; font-size: 13.5px; line-height: 18px; font-weight: 500; white-space: nowrap; text-decoration: none; cursor: pointer; transition: border-color .15s, color .15s, background-color .15s, transform .12s var(--ease-out); }
.up-docs-act svg { color: var(--ws-icon); transition: color .15s; }
.up-docs-act:hover, .up-docs-act[aria-expanded="true"] { border-color: var(--ws-accent); color: var(--ws-accent-ink); }
.up-docs-act:hover svg, .up-docs-act[aria-expanded="true"] svg { color: var(--ws-accent); }
.up-docs-act[aria-expanded="true"] { background: var(--ws-accent-soft); }
.up-docs-act:active { transform: scale(.96); }
.up-docs-act.is-more { width: 34px; padding: 0; justify-content: center; }
.up-docs-act.is-danger { color: var(--error); }
.up-docs-act.is-danger svg { color: var(--error); }
.up-docs-act.is-danger:hover { border-color: var(--error); background: var(--error-tint); }
/* галочка выбора: поверх превью, видна при наведении и в режиме «Выбрать» */
.up-docs-cb { position: absolute; left: 2px; top: 2px; z-index: 3; display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 999px; background: transparent; cursor: pointer;
  opacity: 0; transform: scale(.8); transition: opacity .18s var(--ease-out), transform .25s var(--spring-soft); }
.up-docs-cb .up-box { width: 20px; height: 20px; border-radius: 7px; background: var(--surface); box-shadow: 0 1px 3px rgba(31, 27, 58, .2); }
.up-docs-cb[aria-checked="true"], .up-docs-lib[data-selmode="true"] .up-docs-cb, .up-docs-cb:focus-visible { opacity: 1; transform: none; }
@media (hover: hover) { .up-docs-row:hover .up-docs-cb { opacity: 1; transform: none; } }
.up-docs-cb[aria-checked="true"] .up-box { background: var(--ws-accent); border-color: var(--ws-accent); }
.up-docs-cb[aria-checked="true"] .up-box svg { opacity: 1; }
.up-docs-cb[aria-checked="true"] .up-box svg path { stroke-dasharray: 24; animation: up-draw .2s var(--ease-out) both; }
.up-docs-cb:hover .up-box { border-color: var(--ws-accent); }
/* урок выбран частично (aria-checked="mixed"): фиолетовая рамка и короткая черта на светлом поле — отличается от залитой «все выбраны» */
.up-docs-cb[aria-checked="mixed"] { opacity: 1; transform: none; }
.up-docs-cb .up-box > svg, .up-docs-cb .up-box::after { grid-area: 1 / 1; }
.up-docs-cb .up-box::after { content: ''; width: 10px; height: 2px; border-radius: 2px; background: var(--ws-accent); transform: scaleX(0); opacity: 0; transition: transform .2s var(--ease-out), opacity .12s; }
.up-docs-cb[aria-checked="mixed"] .up-box { border-color: var(--ws-accent); background: var(--surface); }
.up-docs-cb[aria-checked="mixed"] .up-box::after { transform: none; opacity: 1; }
.up-docs-cb.is-ls { left: 8px; top: 10px; z-index: 4; }
@media (hover: hover) { .up-docs-ls:hover .up-docs-cb.is-ls { opacity: 1; transform: none; } }
/* меню действий: всплывает из-под кнопок */
.up-docs-menu { position: absolute; right: 0; top: calc(100% + 6px); z-index: 10; min-width: 176px; padding: 6px; border-radius: 16px; background: var(--surface); border: 1px solid var(--up-card-line);
  box-shadow: 0 1px 2px rgba(31, 27, 58, .08), 0 20px 44px -16px rgba(31, 27, 58, .45); display: grid; gap: 2px; transition: opacity .18s var(--ease-out), transform .22s var(--spring-soft); transform-origin: 90% 0; }
@starting-style { .up-docs .up-docs-menu { opacity: 0; transform: translateY(-6px) scale(.96); } }
.up[data-theme="dark"].up-docs .up-docs-menu { box-shadow: 0 20px 44px -16px rgba(0, 0, 0, .8); }
.up-docs-mi { display: flex; align-items: center; gap: 10px; width: 100%; height: 38px; padding: 0 12px 0 10px; border: 0; border-radius: 11px; background: transparent; color: var(--ink);
  font-family: inherit; font-size: 14px; line-height: 20px; font-weight: 500; text-align: left; text-decoration: none; white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
.up-docs-mi svg { flex: 0 0 auto; color: var(--ws-icon); }
.up-docs-mi:hover { background: var(--ws-accent-soft); color: var(--ws-accent-ink); }
.up-docs-mi:hover svg { color: var(--ws-accent); }
.up-docs-mi.is-danger { color: var(--error); }
.up-docs-mi.is-danger svg { color: var(--error); }
.up-docs-mi.is-danger:hover { background: var(--error-tint); color: var(--error); }
.up-docs-msep { display: block; height: 1px; margin: 4px 6px; background: var(--line); }
.up-docs-scrim { position: fixed; inset: 0; z-index: 9; border: 0; padding: 0; background: transparent; cursor: default; }
/* подложка во всё окно — кнопка «Закрыть меню» для клика мимо; вне Tab (tabindex="-1", шаг 0д, владелец 05.11: шаг 0г п. 14 — «убрать»),
   с клавиатуры меню закрывает Esc — рамка фокуса ей не нужна (правило шага 0г «.up .up-docs-scrim:focus-visible» убрано) */
/* карточка с открытым меню — над заслонкой: другое меню той же карточки открывается одним кликом */
.up-docs-rows:has([aria-expanded="true"]), .up-docs-ls:has(.up-docs-row [aria-expanded="true"]), .up-docs-ls:has(.up-docs-ls-more [aria-expanded="true"]),
.up-docs-ls:has(.up-docs-fplus [aria-expanded="true"]) { position: relative; z-index: 12; }

/* ---------- папки (новая функция): плитки под «Недавними», последняя — «Новая папка»; поле имени; крошки открытой папки; метки; «В папку» ---------- */
.up-docs-folders { display: grid; gap: 10px; }
.up-docs-ftiles { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px; }
.up-docs-ft { display: grid; min-width: 0; animation: up-chip-in .36s var(--ease-out) both; animation-delay: calc(var(--n, 0) * 40ms); }
/* плитка: мини-стопка превью (как у урока, слот 48 px), имя с значком папки, число документов */
.up-docs-ftile { --up-docs-slot: 48px; --up-docs-k: .1; display: grid; grid-template-columns: 52px minmax(0, 1fr); grid-template-areas: "pv t" "pv n"; align-items: center; gap: 0 12px; width: 100%; min-height: 68px;
  padding: 7px 12px 7px 7px; border-radius: 18px; border: 1px solid var(--up-card-line); background: var(--up-glass); color: var(--ink); font-family: inherit; text-align: left; cursor: pointer;
  box-shadow: 0 1px 2px rgba(31, 27, 58, .04), inset 0 1px 0 rgba(255, 255, 255, .5); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  transition: transform .25s var(--ease-out), box-shadow .25s var(--ease-out), border-color .2s, background-color .2s, color .15s; }
.up[data-theme="dark"].up-docs .up-docs-ftile { box-shadow: 0 1px 2px rgba(0, 0, 0, .3); }
.up-docs-ftile-pv { grid-area: pv; display: grid; place-items: center; width: 52px; height: 52px; border-radius: 13px; background: rgba(31, 27, 58, .05); }
.up[data-theme="dark"].up-docs .up-docs-ftile-pv { background: rgba(255, 255, 255, .06); }
.up-docs-ftile .up-docs-stack { grid-area: auto; }
.up-docs-ftile-ic { display: grid; place-items: center; color: var(--ws-icon); transition: color .15s, transform .25s var(--spring-soft); }
.up-docs-ftile-t { grid-area: t; align-self: end; min-width: 0; font-size: 14.5px; line-height: 19px; font-weight: 600; transition: color .15s; }
.up-docs-ftile-t span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
/* значок папки в углу мини-стопки: плитка читается как папка, а не как урок */
.up-docs-ftile-pv { position: relative; }
.up-docs-ftile-badge { position: absolute; right: -4px; bottom: -4px; z-index: 4; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 999px; background: var(--surface); color: var(--ws-accent);
  box-shadow: 0 1px 3px rgba(31, 27, 58, .2), 0 0 0 1px var(--up-card-line); transition: transform .3s var(--spring-soft); }
.up[data-theme="dark"].up-docs .up-docs-ftile-badge { background: var(--surface-2); }
.up-docs-ftile-n { grid-area: n; align-self: start; font-size: 14px; line-height: 20px; color: var(--text-2); font-variant-numeric: tabular-nums; }  /* 14/20 — шаг 0 (было 12,5/18) */
@media (hover: hover) {
  .up-docs-ftile:hover { transform: translateY(-2px); background: var(--surface); border-color: var(--ws-accent-border); box-shadow: 0 1px 2px rgba(31, 27, 58, .06), 0 16px 32px -16px rgba(60, 40, 120, .5); }
  .up[data-theme="dark"].up-docs .up-docs-ftile:hover { background: var(--surface-2); box-shadow: 0 16px 32px -16px rgba(0, 0, 0, .8); }
  .up-docs-ftile:hover .up-docs-ftile-t { color: var(--ws-accent-ink); }
  .up-docs-ftile:hover .up-docs-ftile-badge { transform: scale(1.1); }
  .up-docs-ftile:hover .up-docs-stk[data-i="1"] { --sx: 22%; --sy: -12%; --rot: 14deg; }
  .up-docs-ftile:hover .up-docs-stk[data-i="2"] { --sx: -22%; --sy: -7%; --rot: -15deg; }
  .up-docs-ftile:hover .up-docs-stk[data-i="0"] { --sy: -2%; }
}
.up-docs-ftile:active { transform: scale(.98); }
/* вариант «значок» (по умолчанию, круг 7): значок папки, как в Google Drive, — задняя стенка с ушком, лист, передняя стенка; плитка
   ниже (60 px). Цвет — мягкий лавандовый от акцента (смешан с фоном карточки — в тёмной теме сам темнеет); при наведении папка
   наливается акцентом и приоткрывается: передняя стенка наклоняется к себе, лист выглядывает */
.up-docs { --up-fg-back: color-mix(in srgb, var(--ws-accent) 60%, var(--surface)); --up-fg-front: color-mix(in srgb, var(--ws-accent) 36%, var(--surface));
  --up-fg-back-h: color-mix(in srgb, var(--ws-accent) 84%, var(--surface)); --up-fg-front-h: color-mix(in srgb, var(--ws-accent) 58%, var(--surface)); --up-fg-paper: #fff; }
.up[data-theme="dark"].up-docs { --up-fg-back: color-mix(in srgb, var(--ws-accent) 34%, var(--surface)); --up-fg-front: color-mix(in srgb, var(--ws-accent) 52%, var(--surface));
  --up-fg-back-h: color-mix(in srgb, var(--ws-accent) 48%, var(--surface)); --up-fg-front-h: color-mix(in srgb, var(--ws-accent) 86%, var(--surface)); --up-fg-paper: #ece9fa; }
.up-docs-ftiles[data-ftile="icon"] .up-docs-ftile { grid-template-columns: 40px minmax(0, 1fr); min-height: 60px; padding: 7px 14px 7px 12px; }
.up-docs .up-docs-ftiles[data-ftile="icon"] .up-docs-ftile-pv { width: 40px; height: 40px; border-radius: 999px; background: none; }
.up-docs .up-docs-ftiles[data-ftile="icon"] .up-docs-ftile.is-new .up-docs-ftile-pv { background: var(--surface-2); }
.up-docs-fg { display: block; overflow: visible; }
.up-docs-fg-back { fill: var(--up-fg-back); transition: fill .2s var(--ease-out); }
.up-docs-fg-front { fill: var(--up-fg-front); stroke: rgba(255, 255, 255, .55); stroke-width: 1; transform-box: fill-box; transform-origin: 50% 100%;
  transition: fill .2s var(--ease-out), transform .38s var(--spring-soft); }
.up[data-theme="dark"].up-docs .up-docs-fg-front { stroke: rgba(255, 255, 255, .14); }
.up-docs-fg-paper { transform-box: fill-box; transform-origin: 50% 100%; transition: transform .38s var(--spring-soft); }
.up-docs-fg-paper rect { fill: var(--up-fg-paper); stroke: rgba(31, 27, 58, .12); stroke-width: 1; }
.up-docs-fg-paper path { fill: none; stroke: rgba(31, 27, 58, .2); stroke-width: 1.4; stroke-linecap: round; }
.up-docs-ftile[data-has="false"] .up-docs-fg-paper { display: none; }
@media (hover: hover) {
  .up-docs-ftile:hover .up-docs-fg-back { fill: var(--up-fg-back-h); }
  .up-docs-ftile:hover .up-docs-fg-front { fill: var(--up-fg-front-h); transform: scaleY(.86) skewX(-6deg); }
  .up-docs-ftile:hover .up-docs-fg-paper { transform: translateY(-3px) rotate(-4deg); }
}
.up-docs-ftile:focus-visible .up-docs-fg-back { fill: var(--up-fg-back-h); }
.up-docs-ftile:focus-visible .up-docs-fg-front { fill: var(--up-fg-front-h); }
/* «Новая папка»: пунктирная плитка; открыто поле имени — плюс поворачивается в «×» */
.up-docs-ftile.is-new { grid-template-areas: "pv t"; border: 1px dashed var(--line-strong); background: transparent; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; color: var(--text-2); }
.up-docs-ftile.is-new .up-docs-ftile-t { align-self: center; font-weight: 500; }
.up-docs-ftile.is-new .up-docs-ftile-pv { background: var(--surface-2); }
.up-docs-ftile.is-new:hover { border-style: solid; border-color: var(--ws-accent); background: var(--surface); color: var(--ws-accent-ink); transform: translateY(-2px); box-shadow: none; }
.up-docs-ftile.is-new:hover .up-docs-ftile-ic { color: var(--ws-accent); transform: rotate(90deg); }
.up-docs-ftile.is-new[aria-expanded="true"] { border-style: solid; border-color: var(--ws-accent); background: var(--ws-accent-soft); color: var(--ws-accent-ink); }
.up-docs-ftile.is-new[aria-expanded="true"] .up-docs-ftile-ic { color: var(--ws-accent); transform: rotate(45deg); }
/* крошки открытой папки: «← Мои документы › [папка] Имя …» — вместо плиток */
.up-docs-crumbs { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 6px; min-width: 0; min-height: 40px; }
.up-docs-crumb { display: inline-flex; align-items: center; gap: 6px; height: 34px; margin-left: -6px; padding: 0 10px 0 6px; border: 0; border-radius: 999px; background: transparent; color: var(--text-2);
  font-family: inherit; font-size: 15px; line-height: 20px; font-weight: 500; white-space: nowrap; cursor: pointer; transition: color .15s, background-color .15s; }
.up-docs-crumb svg { color: var(--ws-icon); transition: transform .2s var(--ease-out), color .15s; }
.up-docs-crumb:hover { background: var(--surface-2); color: var(--ink); }
.up-docs-crumb:hover svg { color: var(--ink); transform: translateX(-2px); }
.up-docs-crumb-sep { display: inline-grid; flex: 0 0 auto; color: var(--text-2); opacity: .7; }
.up-docs-crumbs .up-docs-fhead { transition: opacity .25s var(--ease-out), transform .3s var(--ease-out); }
@starting-style { .up-docs .up-docs-crumbs .up-docs-fhead { opacity: 0; transform: translateX(-8px); } }
.up-docs-crumbs .up-docs-fform.is-rename { flex: 1 1 360px; }
/* поле имени папки: под рядом (создание) или вместо имени (переименование) */
.up-docs-fform { display: flex; align-items: center; gap: 8px; max-width: 540px; padding: 0 10px; transition: opacity .25s var(--ease-out), transform .3s var(--ease-out); }
@starting-style { .up-docs .up-docs-fform { opacity: 0; transform: translateY(-6px); } }
.up-docs-fform-ic { display: inline-grid; flex: 0 0 auto; color: var(--ws-accent); }
.up-docs-finput { flex: 1 1 auto; min-width: 0; height: 38px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--line-strong); background: var(--surface); color: var(--ink);
  font-family: inherit; font-size: 14px; line-height: 20px; outline: none; transition: border-color .15s, box-shadow .15s; }
.up-docs-finput::placeholder { color: var(--text-2); opacity: .8; }
.up-docs-finput:hover { border-color: var(--ink); }
/* фокус — обычной рамкой: меняется только цвет, без внешнего кольца и подсветки (владелец 04.11); outline из .v2-root :focus-visible снят */
.up-docs .up-docs-finput:focus, .up-docs .up-docs-finput:focus-visible { border-color: var(--ws-accent); box-shadow: none; outline: none; }
.up-docs-fform .up-docs-act { height: 38px; flex: 0 0 auto; }
.up-docs-act.is-primary { border-color: var(--ws-accent); background: var(--ws-accent); color: #fff; }
.up-docs-act.is-primary svg { color: #fff; }
.up-docs-act.is-primary:hover:not(:disabled) { border-color: var(--primary-hover); background: var(--primary-hover); color: #fff; }
.up-docs-act.is-primary:disabled { opacity: .5; cursor: not-allowed; }
.up[data-theme="dark"].up-docs .up-docs-act.is-primary { border-color: var(--primary); background: var(--primary); }
.up-docs-act.is-danger.is-fill { border-color: var(--error); background: var(--error); color: #fff; }
.up-docs-act.is-danger.is-fill svg { color: #fff; }
.up-docs-act.is-danger.is-fill:hover { background: var(--error); color: #fff; filter: brightness(.92); }
/* шапка открытой папки: имя, «…» (переименовать, удалить), счётчик */
.up-docs-fhead { position: relative; display: flex; align-items: center; gap: 8px; max-width: 100%; min-width: 0; }
.up-docs-fhead-ic { display: inline-grid; flex: 0 0 auto; color: var(--ws-accent); }
.up-docs-ftitle { margin: 0; min-width: 0; font-family: var(--font-display); font-size: 22px; line-height: 28px; letter-spacing: -.01em; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.up-docs-fmore { flex: 0 0 auto; width: 32px; height: 32px; border-color: transparent; background: transparent; }
.up-docs-fmore:hover, .up-docs-fmore[aria-expanded="true"] { border-color: var(--ws-accent); background: var(--surface); }
.up-docs-fhead .up-docs-menu { right: auto; left: 28px; top: calc(100% + 4px); transform-origin: 10% 0; }
.up-docs-fform.is-rename { padding: 0; max-width: 560px; }
/* подтверждение удаления папки */
.up-docs-fconfirm { display: flex; align-items: center; justify-content: space-between; gap: 10px 16px; flex-wrap: wrap; margin: 0 10px; padding: 12px 12px 12px 16px; border-radius: 16px;
  background: var(--error-tint); border: 1px solid rgba(220, 38, 38, .22); transition: opacity .25s var(--ease-out), transform .3s var(--ease-out); }
@starting-style { .up-docs .up-docs-fconfirm { opacity: 0; transform: translateY(-6px); } }
.up-docs-fconfirm p { margin: 0; font-size: 14px; line-height: 20px; color: var(--ink); }
.up-docs-fconfirm-btns { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.up-docs-fconfirm .up-docs-act { height: 38px; background: var(--surface); }
/* папка — в строке подписи (круг 9): «… · [значок] Открытый урок 12.11 +1»; внутри открытой папки не показывается.
   Не хватает места — сжимается первой (имя многоточием, остаются точка, значок и начало имени), подпись урока остаётся целой */
.up-docs-floc { flex: 0 1000 auto; display: inline-flex; align-items: center; min-width: 4.5em; overflow: hidden; }
.up-docs-floc-sep { flex: 0 0 auto; margin: 0 4px; }
.up-docs-floc svg { flex: 0 0 auto; margin-right: 5px; color: var(--ws-icon); }
.up-docs-floc-n { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.up-docs-floc-more { flex: 0 0 auto; margin-left: 5px; font-weight: 600; font-variant-numeric: tabular-nums; }
/* «…» урока: в заголовке карточки, виден при наведении и в фокусе; на телефоне — всегда */
.up-docs-ls-more { position: relative; display: inline-grid; width: 34px; height: 34px; flex: 0 0 auto; }
.up-docs-ls-more .up-docs-act.is-more { opacity: 0; transform: translateX(4px); transition: opacity .18s var(--ease-out), transform .22s var(--ease-out), border-color .15s, color .15s, background-color .15s; }
.up-docs-ls-h:hover .up-docs-ls-more .up-docs-act, .up-docs-ls:focus-within .up-docs-ls-more .up-docs-act, .up-docs-ls-more .up-docs-act[aria-expanded="true"] { opacity: 1; transform: none; }
.up-docs-ls-more .up-docs-menu { right: 0; top: calc(100% + 6px); }
/* панель «В папку»: шапка со стрелкой назад, папки с галочкой, «Новая папка…» с полем прямо в меню */
.up-docs-menu.is-folders { min-width: 240px; max-width: min(320px, calc(100vw - 32px)); }
.up-docs-mh { display: flex; align-items: center; gap: 6px; height: 32px; padding: 0 8px 0 6px; border: 0; border-radius: 10px; background: transparent; color: var(--text-2); font-family: inherit; text-align: left; cursor: pointer; transition: background-color .12s, color .12s; }
.up-docs-mh svg { color: var(--ws-icon); }
.up-docs-mh:hover { background: var(--surface-2); color: var(--ink); }
.up-docs-mh.is-static { padding-left: 10px; cursor: default; }
.up-docs-mh.is-static:hover { background: transparent; color: var(--text-2); }
.up-docs-mi-t { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.up-docs-mi-n { flex: 0 0 auto; font-size: 12px; color: var(--text-2); font-variant-numeric: tabular-nums; }
.up-docs-mi-ck { display: inline-grid; flex: 0 0 auto; color: var(--ws-accent); }
.up-docs-mi[aria-checked="true"] { color: var(--ws-accent-ink); font-weight: 600; }
.up-docs-mi[aria-checked="true"] svg:first-child { color: var(--ws-accent); }
.up-docs-mi-empty { display: block; padding: 8px 10px; font-size: 13px; line-height: 18px; color: var(--text-2); }
.up-docs-mform { display: flex; align-items: center; gap: 6px; padding: 4px 2px 2px; }
.up-docs-mform .up-docs-finput { height: 36px; padding: 0 12px; font-size: 13.5px; }
.up-docs-mform .up-docs-act { height: 36px; flex: 0 0 auto; }
/* панель «В папку» над полосой выбранных */
.up-docs-selbar-acts { position: relative; }
.up-docs-selbar .up-docs-menu { top: auto; bottom: calc(100% + 10px); right: auto; left: 0; transform-origin: 10% 100%; }
@starting-style { .up-docs .up-docs-selbar .up-docs-menu { opacity: 0; transform: translateY(6px) scale(.96); } }
/* уведомление после действия с папкой: всплывает снизу, как полоса выбранных; при открытой полосе — над ней */
.up-docs-toast { position: fixed; left: 50%; bottom: 20px; z-index: 31; display: flex; align-items: center; gap: 10px; max-width: calc(100% - 32px); padding: 7px 7px 7px 10px; border-radius: 999px;
  background: var(--surface); color: var(--ink); border: 1px solid var(--up-card-line); box-shadow: 0 1px 2px rgba(31, 27, 58, .08), 0 24px 56px -18px rgba(31, 27, 58, .5);
  transform: translateX(-50%); transition: transform .46s var(--spring), opacity .2s var(--ease-out), bottom .3s var(--ease-out); }
@starting-style { .up-docs .up-docs-toast { opacity: 0; transform: translateX(-50%) translateY(24px) scale(.94); } }
.up-docs-toast[data-up="true"] { bottom: 84px; }
.up[data-theme="dark"].up-docs .up-docs-toast { box-shadow: 0 24px 56px -18px rgba(0, 0, 0, .8); }
.up-docs-toast-ic { display: inline-grid; place-items: center; flex: 0 0 auto; width: 28px; height: 28px; border-radius: 999px; background: var(--success-tint); color: var(--success); }
.up-docs-toast-t { min-width: 0; font-size: 14px; line-height: 20px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.up-docs-toast-a { flex: 0 0 auto; height: 34px; padding: 0 12px; border: 0; border-radius: 999px; background: var(--ws-accent-soft); color: var(--ws-accent-ink); font-family: inherit; font-size: 13.5px; line-height: 18px; font-weight: 600; white-space: nowrap; cursor: pointer; transition: background-color .15s, color .15s; }
.up-docs-toast-a:hover { background: var(--ws-accent); color: #fff; }
.up[data-theme="dark"].up-docs .up-docs-toast-a:hover { color: #1f1b3a; }
.up-docs-toast-x { display: grid; place-items: center; flex: 0 0 auto; width: 34px; height: 34px; border: 0; border-radius: 999px; background: transparent; color: var(--text-2); cursor: pointer; transition: background-color .15s, color .15s; }
.up-docs-toast-x:hover { background: var(--surface-2); color: var(--ink); }
/* пустая папка: главная кнопка — акцент */
.up-docs-ghost.is-primary { border-color: var(--ws-accent); background: var(--ws-accent); color: #fff; }
.up-docs-ghost.is-primary svg { color: #fff; }
.up-docs-ghost.is-primary:hover { border-color: var(--primary-hover); background: var(--primary-hover); color: #fff; }
.up-docs-ghost.is-primary:hover svg { color: #fff; transform: none; }
.up[data-theme="dark"].up-docs .up-docs-ghost.is-primary { border-color: var(--primary); background: var(--primary); }
/* фокус залитых кнопок экрана («Создать» и «Сохранить» у имени папки, «Готово» в «Фильтрах», «Выбрать документы», «Удалить папку»):
   акцентная рамка на заливке не видна — рамка 2 px внутрь цветом --surface, как у залитых кнопок набора (владелец 05.11, ответ 17 —
   вариант А); эти классы есть только на этом экране, набор их не знает */
.up-docs :is(.up-docs-act.is-primary, .up-docs-act.is-fill, .up-docs-ghost.is-primary):focus-visible { outline-color: var(--surface); }

/* ---------- вид «По урокам»: карточка урока со стопкой превью и бейджами, раскрывается списком файлов ---------- */
.up-docs-lessons { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
.up-docs-ls { position: relative; display: grid; border-radius: 22px; background: var(--up-glass); border: 1px solid var(--up-card-line); box-shadow: 0 1px 2px rgba(31, 27, 58, .04), inset 0 1px 0 rgba(255, 255, 255, .5);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); animation: up-row-in-a .36s var(--ease-out) both; animation-delay: calc(var(--n, 0) * 40ms);
  transition: background-color .22s var(--ease-out), box-shadow .25s var(--ease-out), border-color .2s; }
.up-docs-lessons[data-gen="1"] .up-docs-ls { animation-name: up-row-in-b; }
.up[data-theme="dark"].up-docs .up-docs-ls { box-shadow: 0 1px 2px rgba(0, 0, 0, .3); }
.up-docs-ls[data-selected="true"] { background: var(--ws-accent-soft); }
.up-docs-ls[data-open="true"] { background: var(--surface); border-color: var(--ws-accent-border); box-shadow: 0 1px 2px rgba(31, 27, 58, .06), 0 24px 48px -22px rgba(60, 40, 120, .45); }
.up[data-theme="dark"].up-docs .up-docs-ls[data-open="true"] { background: var(--surface-2); box-shadow: 0 24px 48px -22px rgba(0, 0, 0, .8); }
.up-docs-ls-h { box-sizing: border-box; display: grid; grid-template-columns: var(--up-docs-slot) minmax(0, 1fr) auto; grid-template-areas: "thumb main side" "thumb chips side"; align-items: center; gap: 8px 16px; width: 100%; min-height: calc(var(--up-docs-slot) + 16px); padding: 8px 14px 8px 10px; border: 0; border-radius: 21px;
  background: transparent; color: var(--ink); font-family: inherit; text-align: left; cursor: pointer; transition: background-color .18s var(--ease-out); }
@media (hover: hover) {
  .up-docs-ls-h:hover { background: var(--surface); }
  .up[data-theme="dark"].up-docs .up-docs-ls-h:hover { background: var(--surface-2); }
  .up-docs-ls-h:hover .up-docs-ls-t { color: var(--ws-accent-ink); }
  .up-docs-ls-h:hover .up-docs-ls-chev { border-color: var(--ws-accent); color: var(--ws-accent); }
}
.up-docs-ls[data-open="true"] .up-docs-ls-h { border-radius: 21px 21px 0 0; }
/* строки «тема + подпись» и «чипы» прижаты друг к другу (8 px) и вместе — по центру превью: превью на две строки сетки, лишняя высота
   делится между ними поровну */
.up-docs-ls-main { grid-area: main; align-self: end; display: grid; gap: 2px; min-width: 0; }
.up-docs-ls-t { font-size: 16px; line-height: 22px; font-weight: 600; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: color .15s; }
.up-docs-ls-m { display: flex; align-items: center; min-width: 0; font-size: 14px; line-height: 20px; color: var(--text-2); white-space: nowrap; }
.up-docs-ls-m-t { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.up-docs-ls-side { grid-area: side; display: flex; align-items: center; gap: 12px; }
.up-docs-ls-chev { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 999px; border: 1px solid var(--line-strong); color: var(--ws-icon); transition: transform .28s var(--spring-soft), border-color .15s, color .15s, background-color .15s; }
/* шаг 0г (владелец: «раскрытие лучше явно оставить по кнопке»): шеврон — кнопка <button>, вид прежний (сброс вида кнопки); цель не меньше
   44 × 44 — невидимым ::before от края рамки (32 → 44: по 6 px, на телефоне 36 → 44: по 4 px); на телефоне и планшете с касанием урок
   раскрывается только им. Фокус — рамкой по контуру (правило набора): рамка 1 px перекрашивается и становится 2 px */
.up-docs-ls-chev { position: relative; flex: 0 0 auto; margin: 0; padding: 0; background: transparent; font: inherit; cursor: pointer; -webkit-appearance: none; appearance: none; -webkit-tap-highlight-color: transparent; }
.up-docs-ls-chev::before { content: ""; position: absolute; inset: -7px; border-radius: 999px; }
.up-docs-ls[data-open="true"] .up-docs-ls-chev { transform: rotate(180deg); border-color: var(--ws-accent); background: var(--ws-accent-soft); color: var(--ws-accent); }
/* стопка: главный документ сверху, за ним — края других листов урока */
.up-docs-stack { grid-area: thumb; position: relative; display: block; width: var(--up-docs-slot); height: var(--up-docs-slot); }
.up-docs-stk { position: absolute; left: 0; top: 0; z-index: 1; display: grid; place-items: center; width: 100%; height: 100%; transform-origin: 50% 62%;
  transform: translate(var(--sx, 0), var(--sy, 0)) rotate(var(--rot, 0deg)) scale(var(--sc, 1)); transition: transform .4s var(--spring-soft); }
.up-docs-stk[data-i="0"] { z-index: 3; }
/* в строке веер держится в слоте: листы позади мельче и сдвинуты на 14 % — не наезжают на текст */
.up-docs-stk[data-i="1"] { z-index: 2; --sx: 14%; --sy: -9%; --rot: 9deg; --sc: .78; }
.up-docs-stk[data-i="2"] { z-index: 1; --sx: -14%; --sy: -5%; --rot: -10deg; --sc: .78; }
.up-docs-stack[data-n="2"] .up-docs-stk[data-i="0"], .up-docs-stack[data-n="3"] .up-docs-stk[data-i="0"] { --sx: 0; --sy: 5%; --rot: -1deg; --sc: .9; }
.up-docs-stk[data-i="1"] .up-sh-box, .up-docs-stk[data-i="2"] .up-sh-box { box-shadow: 0 1px 2px rgba(31, 27, 58, .1), 0 0 0 1px rgba(31, 27, 58, .09); }
@media (hover: hover) {
  .up-docs-ls-h:hover .up-docs-stk[data-i="1"] { --sx: 20%; --sy: -12%; --rot: 13deg; }
  .up-docs-ls-h:hover .up-docs-stk[data-i="2"] { --sx: -20%; --sy: -7%; --rot: -14deg; }
  .up-docs-ls-h:hover .up-docs-stk[data-i="0"] { --sy: -2%; }
  .up-docs-ls-h:hover .up-docs-stk[data-i="0"] .up-sh-box { transform: translateY(-2px); }
}
.up-docs-stack.is-tile { display: none; }
/* «+N» на превью-стопке плитки урока (сколько ещё документов за верхним) — вернули, как до круга 9 (владелец, шаг 0) */
.up-docs-stack-n { position: absolute; right: 8px; bottom: 8px; z-index: 5; height: 22px; padding: 0 8px; border-radius: 999px; background: var(--surface); color: var(--ink); box-shadow: 0 1px 3px rgba(31, 27, 58, .18); font-size: 12px; line-height: 22px; font-weight: 600; }
/* форматы урока — подписанные чипы (круг 9): 28 px, значок 16 + слово 13 px (500), нейтральная подложка без рамки и без акцента —
   это подписи, не кнопки (кнопки-чипы «Дополнить урок» — с рамкой). Сколько видно — по ширине строки чипов (container query):
   от 385 px (три самых длинных подписи — 384) — до трёх, четыре и больше — два и «+N»; 250–384 — два и «+N» (ровно три — два и «+1»); уже 250 (плитки) — два, если
   форматов ровно два, иначе один и «+N»; уже 200 (плитки на телефоне) — один и «+N».
   Самые длинные подписи на пределе ширины сжимаются многоточием, «+N» — никогда; строка не переносится */
.up-docs-fchips { grid-area: chips; align-self: start; container: up-fchips / inline-size; display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; min-width: 0; }
.up-docs-fchip { flex: 0 1 auto; min-width: 0; display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px 0 8px; border-radius: 8px; background: var(--surface-2); color: var(--ink);
  font-size: 13px; line-height: 16px; font-weight: 500; white-space: nowrap; transition: background-color .18s var(--ease-out); }
.up-docs-fchip svg { flex: 0 0 auto; color: var(--ws-icon); }
/* шаг 0: чип — ссылка на документ. Рамка — внутренней тенью 1 px (inset), а не border: ширина чипа одна и та же с рамкой и без, пороги
   container query не сдвигаются. В покое — без рамки (владелец 05.11, шаг 0в п. 2: «оставляем как было, без рамок»; в шаге 0в была
   рамка --line-strong), у чипов-ссылок и у «+N»; наведение — рамка --ws-accent, нажатие .96, фокус — правило набора */
/* шаг 0б: «+N» — кнопка меню (button.up-docs-fchip.is-n в обёртке up-docs-fplus); состояния — как у чипов-ссылок */
a.up-docs-fchip, button.up-docs-fchip { position: relative; color: var(--ink); text-decoration: none; cursor: pointer; box-shadow: inset 0 0 0 1px transparent;
  transition: background-color .18s var(--ease-out), box-shadow .15s, color .15s, transform .15s var(--ease-out); }
button.up-docs-fchip { margin: 0; border: 0; font-family: inherit; -webkit-appearance: none; appearance: none; -webkit-tap-highlight-color: transparent; }
a.up-docs-fchip svg { transition: color .15s; }
@media (hover: hover) {
  a.up-docs-fchip:hover, button.up-docs-fchip:hover { box-shadow: inset 0 0 0 1px var(--ws-accent); color: var(--ws-accent-ink); transform: translateY(-1px); }
  a.up-docs-fchip:hover svg { color: var(--ws-accent); }
}
a.up-docs-fchip:active, button.up-docs-fchip:active { transform: scale(.96); }
/* меню открыто: рамка и текст — акцент, подложка — светлый акцент (как у «…» с открытым меню) */
.up-docs button.up-docs-fchip[aria-expanded="true"], .up[data-theme="dark"].up-docs button.up-docs-fchip[aria-expanded="true"] { box-shadow: inset 0 0 0 1px var(--ws-accent); background: var(--ws-accent-soft); color: var(--ws-accent-ink); }
.up-docs-fchip-t { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.up-docs-fchip.is-n { flex: 0 0 auto; justify-content: center; min-width: 30px; padding: 0 8px; font-weight: 600; font-variant-numeric: tabular-nums; }
/* обёртка «+N» с его меню: какой «+N» виден (is-n2 — за двумя чипами, is-n1 — за одним) — решает container query, как раньше у самого «+N» */
.up-docs-fplus { position: relative; flex: 0 0 auto; display: inline-flex; }
.up-docs-fplus.is-n1, .up-docs-fplus.is-n2[data-only3="true"] { display: none; }
@container up-fchips (max-width: 384px) {
  .up-docs-fchip[data-i="2"] { display: none; }
  .up-docs-fplus.is-n2[data-only3="true"] { display: inline-flex; }
}
@container up-fchips (max-width: 249px) {
  .up-docs-fchips:not([data-n="2"]) .up-docs-fchip[data-i="1"], .up-docs-fplus.is-n2, .up-docs-fplus.is-n2[data-only3="true"] { display: none; }
  .up-docs-fchips:not([data-n="2"]) .up-docs-fplus.is-n1 { display: inline-flex; }
}
@container up-fchips (max-width: 199px) {
  .up-docs-fchips[data-n="2"] .up-docs-fchip[data-i="1"] { display: none; }
  .up-docs-fplus.is-n1 { display: inline-flex; }
}
/* меню «+N» — то же меню, что «…» (up-docs-menu, пункты up-docs-mi): под кнопкой, левым краем по ней; по ширине и по низу окна
   подстраивает build_up_docs.py (placePlus: сдвиг влево, data-up — над кнопкой). Пока открыто, строка чипов — поверх строк раскрытого урока
   и «…» (контейнер чипов — отдельный слой из-за container query) */
.up-docs-fplus .up-docs-menu { left: 0; right: auto; top: calc(100% + 6px); transform-origin: 16px 0; max-width: calc(100vw - 24px); scroll-margin: 12px; }
.up-docs-fplus .up-docs-menu[data-up="true"] { top: auto; bottom: calc(100% + 6px); }
.up-docs-fchips:has(.up-docs-fplus [aria-expanded="true"]) { position: relative; z-index: 11; }
/* у выбранного урока фон — светлый акцент: чипы белые, чтобы не слиться */
.up-docs-ls[data-selected="true"] .up-docs-fchip { background: var(--surface); }
.up[data-theme="dark"].up-docs .up-docs-fchip { background: rgba(255, 255, 255, .08); }
/* раскрытие: сетка 0fr → 1fr, внутри строки появляются лесенкой. Свёрнутый урок — visibility: hidden (шаг 0д, владелец 05.11: шаг 0г п. 14 —
   «убрать»): его строки, «Скачать», «…» и «Дополнить урок» вне Tab и вне дерева читалки, как свёрнутые «Недавние»; при сворачивании
   скрывается после движения (задержка .38 с), при раскрытии виден сразу — анимация та же */
.up-docs-ls-body { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .38s var(--ease-out); }
.up-docs-ls[data-open="true"] .up-docs-ls-body { grid-template-rows: 1fr; }
.up-docs-ls-in { min-height: 0; overflow: hidden; display: grid; gap: 8px; padding: 0 6px; opacity: 0; visibility: hidden;
  transition: opacity .2s var(--ease-out), padding .38s var(--ease-out), visibility 0s linear .38s; }
.up-docs-ls[data-open="true"] .up-docs-ls-in { opacity: 1; visibility: visible; padding: 2px 6px 8px; transition: opacity .25s var(--ease-out) .08s, padding .38s var(--ease-out), visibility 0s; }
.up-docs-rows.is-in { padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
.up-docs-rows.is-in .up-docs-row { min-height: 60px; transform: translateY(-6px); opacity: 0; animation: none; transition: transform .32s var(--ease-out), opacity .22s var(--ease-out), background-color .18s var(--ease-out), box-shadow .22s var(--ease-out); transition-delay: 0s; }
.up-docs-ls[data-open="true"] .up-docs-rows.is-in .up-docs-row { transform: none; opacity: 1; transition-delay: calc(60ms + var(--n, 0) * 35ms), calc(60ms + var(--n, 0) * 35ms), 0s, 0s; }
.up-docs-rows.is-in .up-docs-row:hover { transform: translateY(-1px); }
.up-docs-ls-add { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 2px 10px 4px; }
.up-docs-ls-add-t { font-size: 13px; line-height: 18px; color: var(--text-2); margin-right: 2px; }
.up-docs-addchip { height: 34px; padding: 0 12px 0 10px; font-size: 13.5px; text-decoration: none; animation: none; }
.up-docs-ls[data-open="true"] .up-docs-addchip { animation: up-chip-in .36s var(--ease-out) both; animation-delay: calc(160ms + var(--n, 0) * 50ms); }

/* плитки уроков: карточка со сценой-превью, бейджами, раскрытие внутри карточки */
.up-docs-lessons[data-view="tiles"] { grid-template-columns: repeat(auto-fill, minmax(236px, 1fr)); gap: 10px; align-items: start; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-h { grid-template-columns: minmax(0, 1fr); grid-template-areas: "thumb" "main" "chips" "side"; align-content: start; gap: 10px; padding: 8px 8px 10px; }
.up-docs-lessons[data-view="tiles"] .up-docs-stack:not(.is-tile) { display: none; }
.up-docs-lessons[data-view="tiles"] .up-docs-stack.is-tile { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 12px; background: rgba(31, 27, 58, .05); container-type: inline-size; }
.up[data-theme="dark"].up-docs .up-docs-lessons[data-view="tiles"] .up-docs-stack.is-tile { background: rgba(255, 255, 255, .06); }
.up-docs-stack.is-tile .up-docs-stk { display: grid; place-items: start center; padding-top: 7%; transform-origin: 50% 45%; }
.up-docs-stack.is-tile .up-docs-stk .up-sh[data-fmt="presentation"] { align-self: center; margin-top: 10%; }
.up-docs-stack.is-tile .up-docs-stk .up-sh.is-large .up-sh-box { border-radius: 4px; box-shadow: 0 1px 2px rgba(31, 27, 58, .12), 0 10px 24px -12px rgba(31, 27, 58, .45), 0 0 0 1px rgba(31, 27, 58, .08); }
.up-docs-stack.is-tile .up-docs-stk[data-i="1"] { --sx: 24%; --sy: 2%; --rot: 9deg; --sc: .86; }
.up-docs-stack.is-tile .up-docs-stk[data-i="2"] { --sx: -24%; --sy: 4%; --rot: -10deg; --sc: .86; }
.up-docs-stack.is-tile[data-n="2"] .up-docs-stk[data-i="0"], .up-docs-stack.is-tile[data-n="3"] .up-docs-stk[data-i="0"] { --sx: 0; --sy: 2%; --rot: 0deg; --sc: .94; }
@media (hover: hover) {
  .up-docs-ls-h:hover .up-docs-stack.is-tile .up-docs-stk[data-i="1"] { --sx: 32%; --rot: 12deg; }
  .up-docs-ls-h:hover .up-docs-stack.is-tile .up-docs-stk[data-i="2"] { --sx: -32%; --rot: -13deg; }
}
.up-docs-lessons[data-view="tiles"] .up-docs-ls-main, .up-docs-lessons[data-view="tiles"] .up-docs-fchips { padding: 0 4px; }
.up-docs-lessons[data-view="tiles"] .up-docs-fchips { margin-top: -2px; }
/* в плитке подпись и папка в одну строку не помещаются: папка — своей строкой под подписью; место под неё — у всех плиток (ряд ровный) */
.up-docs-lessons[data-view="tiles"] .up-docs-ls-m, .up-docs-list[data-view="tiles"] .up-docs-meta { display: grid; justify-items: start; align-content: start; min-height: 40px; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-m-t, .up-docs-list[data-view="tiles"] .up-docs-meta-t,
.up-docs-lessons[data-view="tiles"] .up-docs-floc, .up-docs-list[data-view="tiles"] .up-docs-floc { max-width: 100%; min-width: 0; }
.up-docs-lessons[data-view="tiles"] .up-docs-floc-sep, .up-docs-list[data-view="tiles"] .up-docs-floc-sep { display: none; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-t { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; min-height: 44px; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-side { justify-content: space-between; padding: 0 4px; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-h:hover .up-sh-box { transform: translateY(-4px) rotate(-1deg); }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-row { grid-template-columns: 48px minmax(0, 1fr) auto; min-height: 54px; padding: 4px 6px 4px 4px; gap: 0 8px; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-thumb { width: 48px; height: 48px; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-sh.is-row { --up-sh-k: .1; width: 48px; height: 48px; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-topic { font-size: 15px; line-height: 20px; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-meta { font-size: 13.5px; line-height: 18px; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-when, .up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-act:not(.is-more) { display: none; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-acts { opacity: 1; transform: none; pointer-events: auto; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-act.is-more { width: 36px; height: 36px; border-color: transparent; background: transparent; }
.up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-act.is-more:hover { border-color: var(--ws-accent); background: var(--surface); }
.up-docs-lessons[data-view="tiles"] .up-docs-cb { left: -2px; top: -2px; }
.up-docs-lessons[data-view="tiles"] .up-docs-cb.is-ls { left: 14px; top: 14px; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-add { padding: 0 6px 2px; }
.up-docs-lessons[data-view="tiles"] .up-docs-ls-add .up-new { display: none; }
.up-docs-lessons[data-view="tiles"] .up-docs-addchip { height: 32px; font-size: 13px; }

/* ---------- вид «Все файлы»: группы по датам; плитки — карточки с крупным превью ---------- */
.up-docs-list { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; }
.up-docs-group { display: grid; gap: 8px; }
.up-docs-list[data-view="tiles"] .up-docs-rows { grid-template-columns: repeat(auto-fill, minmax(212px, 1fr)); gap: 6px; padding: 6px; }
.up-docs-list[data-view="tiles"] .up-docs-row { grid-template-columns: minmax(0, 1fr); grid-template-areas: "thumb" "main" "side"; align-content: start; gap: 10px; padding: 6px 6px 10px; }
.up-docs-list[data-view="tiles"] .up-docs-thumb { width: 100%; height: auto; display: block; }
.up-docs-list[data-view="tiles"] .up-sh.is-row { display: grid; --up-sh-k: .56; width: 100%; height: auto; aspect-ratio: 4 / 3; align-items: start; justify-items: center; padding-top: 7%; overflow: hidden; border-radius: 12px; background: rgba(31, 27, 58, .05); container-type: inline-size; }
.up[data-theme="dark"].up-docs .up-docs-list[data-view="tiles"] .up-sh.is-row { background: rgba(255, 255, 255, .06); }
.up-docs-list[data-view="tiles"] .up-sh.is-row[data-fmt="presentation"] { align-items: center; padding-top: 0; }
.up-docs-list[data-view="tiles"] .up-sh.is-row[data-fmt="techmap"] { padding-top: 8%; }
.up-docs-list[data-view="tiles"] .up-sh.is-row .up-sh-box { border-radius: 4px 4px 0 0; box-shadow: 0 1px 2px rgba(31, 27, 58, .12), 0 10px 24px -12px rgba(31, 27, 58, .45), 0 0 0 1px rgba(31, 27, 58, .08); }
.up-docs-list[data-view="tiles"] .up-docs-row:hover .up-sh-box { transform: translateY(-4px) rotate(-1deg); }
.up-docs-list[data-view="tiles"] .up-docs-cb { left: 8px; top: 8px; }
.up-docs-list[data-view="tiles"] .up-docs-main { padding: 0 4px; }
.up-docs-list[data-view="tiles"] .up-docs-topic { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.up-docs-list[data-view="tiles"] .up-docs-when { justify-self: start; padding: 0 4px; }
.up-docs-list[data-view="tiles"] .up-docs-acts { grid-area: auto; position: absolute; right: 12px; top: 12px; justify-content: flex-end; }  /* grid-area: auto — иначе контейнер абсолюта = область сетки, а не плитка */
.up-docs-list[data-view="tiles"] .up-docs-acts .up-docs-act:not(.is-more) { display: none; }
.up-docs-list[data-view="tiles"] .up-docs-row:hover .up-docs-when { opacity: 1; transform: none; }

/* ---------- «Показать ещё», подпись о времени ---------- */
.up-docs-more { display: grid; justify-items: center; gap: 8px; padding: 6px 0 0; }
.up-docs-morebtn { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 18px 0 14px; border-radius: 999px; border: 1px solid var(--line-strong); background: var(--up-glass); color: var(--ink);
  font-family: inherit; font-size: 14px; line-height: 20px; font-weight: 600; cursor: pointer; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); transition: border-color .15s, color .15s, background-color .15s, transform .15s var(--ease-out), box-shadow .15s; }
.up-docs-morebtn svg { color: var(--ws-icon); transition: transform .2s var(--ease-out), color .15s; }
.up-docs-morebtn:hover { border-color: var(--ws-accent); color: var(--ws-accent-ink); background: var(--surface); transform: translateY(-1px); box-shadow: 0 6px 14px -8px rgba(60, 40, 120, .4); }
.up-docs-morebtn:hover svg { color: var(--ws-accent); transform: translateY(2px); }
.up-docs-morebtn:active { transform: scale(.97); }
.up-docs-more-sub { font-size: 13px; line-height: 18px; color: var(--text-2); font-variant-numeric: tabular-nums; }
.up-docs-tz { margin-top: -6px; }
/* полоса готовности документа в работе */
.up-docs-prog { display: block; width: min(100%, 300px); height: 5px; border-radius: 3px; background: var(--ws-bar); overflow: hidden; }
.up-docs-prog-in { position: relative; display: block; height: 100%; border-radius: 3px; background: linear-gradient(90deg, #4b40b8, #7c68ee, #ff9f7a); transition: width .4s var(--ease-out); overflow: hidden; }
.up-docs-prog-in::after { content: ""; position: absolute; inset: 0; width: 50%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .5), transparent); animation: up-sheen 1.4s ease-in-out infinite; }

/* ---------- панель выбранных: всплывает снизу пружиной ---------- */
.up-docs-selbar { position: fixed; left: 50%; bottom: 20px; z-index: 30; display: flex; align-items: center; gap: 10px 18px; max-width: calc(100% - 32px); padding: 8px 8px 8px 18px; border-radius: 999px; background: var(--surface); border: 1px solid var(--up-card-line);
  box-shadow: 0 1px 2px rgba(31, 27, 58, .08), 0 24px 56px -18px rgba(31, 27, 58, .5); transform: translateX(-50%); transition: transform .46s var(--spring), opacity .2s var(--ease-out); }
@starting-style { .up-docs .up-docs-selbar { opacity: 0; transform: translateX(-50%) translateY(28px) scale(.94); } }
.up[data-theme="dark"].up-docs .up-docs-selbar { box-shadow: 0 24px 56px -18px rgba(0, 0, 0, .8); }
.up-docs-selbar-n { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; line-height: 20px; color: var(--ink); white-space: nowrap; font-variant-numeric: tabular-nums; }
.up-docs-selbar-acts { display: flex; align-items: center; gap: 6px; }
.up-docs-selbar .up-docs-act { height: 38px; }
.up-docs-selbar .up-docs-act.is-more { width: 38px; }

/* ---------- пустые состояния: веер из настоящих превью ---------- */
.up-docs-empty { display: grid; justify-items: center; gap: 10px; padding: 18px 16px 8px; text-align: center; animation: up-row-in-a .4s var(--ease-out) both; }
.up-docs-fan { position: relative; width: 260px; height: 150px; margin-bottom: 6px; }
.up-docs-fsheet { position: absolute; left: 50%; bottom: 0; transform-origin: 50% 120%; transition: transform .55s var(--spring-soft); }
.up-docs-fsheet .up-sh.is-large { --up-sh-k: .3; }
.up-docs-fsheet .up-sh-box { border-radius: 4px; box-shadow: 0 1px 2px rgba(31, 27, 58, .12), 0 14px 30px -14px rgba(31, 27, 58, .5), 0 0 0 1px rgba(31, 27, 58, .07); }
.up-docs-fsheet:nth-child(1) { margin-left: -51px; transform: translateX(-46px) rotate(-10deg); z-index: 1; animation: up-docs-float 6s ease-in-out infinite; }
.up-docs-fsheet:nth-child(2) { margin-left: -69px; transform: translateY(-12px); z-index: 2; animation: up-docs-float 6s ease-in-out -2s infinite; }
.up-docs-fsheet:nth-child(3) { margin-left: -69px; transform: translateX(52px) translateY(-6px) rotate(10deg); z-index: 1; animation: up-docs-float 6s ease-in-out -4s infinite; }
@keyframes up-docs-float { 0%, 100% { translate: 0 0; } 50% { translate: 0 -4px; } }
.up-docs-eic { display: grid; place-items: center; width: 56px; height: 56px; margin-bottom: 4px; border-radius: 999px; background: var(--up-glass); border: 1px solid var(--up-card-line); color: var(--text-2); }
.up-docs-eh { margin: 0; font-family: var(--font-display); font-size: 24px; line-height: 30px; letter-spacing: -.01em; color: var(--ink); }
.up-docs-ep { margin: 0; max-width: 520px; font-size: 15px; line-height: 22px; color: var(--text-2); }
.up-docs-ebtns { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 10px 14px; margin-top: 8px; }
.up-docs-ebtns .up-go { text-decoration: none; }
.up-docs-ebtns .up-go .up-go-ic svg { transform: none; }
.up-docs-ghost { display: inline-flex; align-items: center; gap: 6px; height: 44px; padding: 0 16px; border-radius: 999px; border: 1px solid var(--line-strong); background: var(--surface); color: var(--ink);
  font-family: inherit; font-size: 15px; line-height: 20px; font-weight: 600; text-decoration: none; cursor: pointer; transition: border-color .15s, color .15s, background-color .15s, transform .12s var(--ease-out); }
.up-docs-ghost svg { color: var(--ws-icon); transition: color .15s, transform .15s var(--ease-out); }
.up-docs-ghost:hover { border-color: var(--ws-accent); color: var(--ws-accent-ink); }
.up-docs-ghost:hover svg { color: var(--ws-accent); transform: translateX(2px); }
.up-docs-ghost:active { transform: scale(.97); }

/* ---------- липкая полоса на телефоне ---------- */
.up-docs-dock .up-go { text-decoration: none; }
.up-docs-dock .up-go .up-go-ic svg { transform: none; }

/* ---------- ширины ---------- */
@media (max-width: 1279px) {
  .up-docs-rcs { --cols: 4; }
  .up-docs-rc:nth-child(n+5) { display: none; }
}
@media (min-width: 768px) and (max-width: 1279px) {
  .up-docs-rec-n .is-5 { display: none; }
  .up-docs-rec-n .is-4 { display: inline; }
}
@media (min-width: 640px) and (max-width: 767px) {
  .up-docs-rec-n .is-5 { display: none; }
  .up-docs-rec-n .is-3 { display: inline; }
}
@media (max-width: 1023px) {
  .up-docs { --up-docs-slot: 72px; --up-docs-k: .15; }
  .up-docs-search { padding-left: 16px; }
  .up-docs-rcs { --cols: 4; }
}
@media (min-width: 640px) and (max-width: 767px) {
  /* планшет: вкладки строкой выше, «Фильтры», сортировка и вид — под ними слева */
  .up-docs-bar { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: start; gap: 8px; }
  .up-docs-bar-r { margin-left: 0; max-width: 100%; }
  .up-docs-pop.is-f .up-docs-menu { right: auto; left: 0; transform-origin: 15% 0; }
}
/* шаг 0: телефон и узкий планшет — область нажатия чипа-ссылки 44 px по высоте без изменения вида: невидимый ::before на 8 px выше и
   ниже чипа (28 + 16). По ширине чипы-ссылки и так шире 44 px — вбок не расширяем, области соседних чипов не перекрываются (зазор 5–6 px);
   сверху — тема и подпись того же заголовка урока, снизу — край карточки или зазор 10 px до строки «…» в плитке; на «…», шеврон и «+N» не
   заходит (проверка — tools/step0_docs.py targets, 320–767 шагом 8) */
@media (max-width: 767px) {
  a.up-docs-fchip::before { content: ""; position: absolute; top: -8px; right: 0; bottom: -8px; left: 0; }
  /* шаг 0б: «+N» (кнопка меню, 30–31 px в ширину) — та же область по высоте и до 44 по ширине: 3 px влево (половина зазора 6 px до чипа
     слева — области не перекрываются) и 11 px вправо (справа — пустое место строки чипов, а при полной строке — зазор до «…») */
  button.up-docs-fchip::before { content: ""; position: absolute; top: -8px; right: -11px; bottom: -8px; left: -3px; }
  /* шаг 0б: остальные мелкие цели «Моих документов» на телефоне (tools/step0b_targets_docs.py) — тоже невидимо, вид тот же:
     «Посмотреть пример» (20 px) — полоса 44 px по центру (сверху — зазор под верхней панелью, снизу — заголовок, не цель);
     «Показать ещё» (40) — по 2 px сверху и снизу (от рамки); галочки выбора (32 × 32) — только в режиме выбора, на 12 px вправо и вниз, внутрь
     превью того же урока или документа (касание превью в режиме выбора и так ставит ту же галочку) */
  .up-docs-example, .up-docs-morebtn { position: relative; }
  .up-docs-example::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 44px; margin-top: -22px; }
  .up-docs-morebtn::before { content: ""; position: absolute; left: 0; right: 0; top: -3px; bottom: -3px; }  /* от внутреннего края рамки 1 px */
  .up-docs-lib[data-selmode="true"] .up-docs-cb::before { content: ""; position: absolute; left: 0; top: 0; right: -12px; bottom: -12px; }
  /* пункты меню действий «…» и «+N», панелей «В папку» и меню папки — 38 px через 2 px (шаг 0в, владелец: «4 — оставить как сейчас»);
     меню «Вид» на телефоне — 44 */
}
/* шаг 0в (владелец: «15 — чинить») и шаг 0г (владелец: «20 — везде»): без наведения — телефон и планшет с касанием — галочки урока
   и документов в покое невидимы; вне режима выбора они не нажимаются, касание угла превью достаётся тому, что под ним: у документа —
   ссылке-строке (открывает документ, как касание остальной строки), у урока — карточке (короткое касание ничего не делает — урок
   раскрывает шеврон, долгое выбирает). В режиме выбора галочки видны и нажимаются, как раньше. С мышью (hover: hover) галочка видна
   при наведении и нажимается на всех ширинах, как раньше, в том числе на раскладке телефона (рамки телефона на холсте смотрят мышью) */
@media (hover: none) {
  .up-docs-lib:not([data-selmode="true"]) .up-docs-cb { pointer-events: none; }
}
@media (max-width: 767px) {
  .up-docs-rcs { --cols: 3; }
  .up-docs-rc:nth-child(n+4) { display: none; }
  .up-docs { --up-docs-slot: 64px; --up-docs-k: .135; }
  .up-docs-row { gap: 0 10px; padding: 6px 8px 6px 4px; }
  .up-docs-ls-h { gap: 8px 10px; padding: 8px 10px 8px 6px; }
  .up-docs-ls-h { cursor: default; }  /* шаг 0г: на раскладке телефона клик по карточке урок не раскрывает — раскрывает шеврон */
}
@media (max-width: 639px) {
  .up-docs .up-hero { gap: 14px; }
  .up-docs-search { padding: 6px 6px 6px 14px; gap: 8px; }
  .up-docs-q { height: 44px; font-size: 16px; line-height: 24px; }
  .up-docs-create { display: none; }
  /* «Недавние» — лента с прокруткой вбок и привязкой, видно 1,6 карточки */
  .up-docs-recent { margin: 0 -16px; }
  .up-docs-recent .up-docs-gh { padding: 0 16px; }
  /* заголовок-кнопка 44 px: кнопка — в зазоре 14 px над строкой и в 14 px над карточками; текст в 22 px от края, как «Папки»
     (свёрнутые «Недавние» стоят прямо над «Папками» — заголовки на одной вертикали) */
  .up-docs-recent .up-docs-rech { padding: 0 12px; }
  .up-docs-rectg { height: 44px; margin: -14px 0; }
  .up-docs-rcs { --cols: 1.6; --gap: 10px; padding: 14px 16px 10px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-left: 16px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .up-docs-rcs::-webkit-scrollbar { display: none; }
  .up-docs-rc, .up-docs-rc:nth-child(n+4) { display: block; scroll-snap-align: start; }
  .up-docs-rcs::after { content: ""; display: block; width: 6px; }
  /* строка управления: вкладки во всю ширину; ниже «Фильтры» слева и «Вид» (сортировка, список/плитки, «Выбрать несколько») справа */
  .up-docs-lib { gap: 10px; }
  .up-docs-bar { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .up-docs-grp { width: 100%; box-sizing: border-box; }
  .up-docs-grp button { flex: 1 1 0; justify-content: center; height: 44px; padding: 0 8px; }
  .up-docs-bar-r { margin-left: 0; justify-content: space-between; }
  .up-docs-sort, .up-docs-view { display: none; }
  .up-docs-pop.is-v { display: inline-flex; }
  .up-docs-fbtn, .up-docs-vbtn { height: 44px; padding: 0 14px 0 12px; }
  .up-docs-pop.is-f .up-docs-menu { right: auto; left: 0; transform-origin: 15% 0; }
  .up-docs-menu.is-filters { width: calc(100vw - 32px); padding: 12px 12px 10px; gap: 12px; }
  .up-docs-fopt { height: 40px; padding: 0 14px; }
  .up-docs-ffoot .up-docs-reset, .up-docs-ffoot .up-docs-act { height: 44px; }
  .up-docs-menu.is-view .up-docs-mi { height: 44px; }
  /* выбранные фильтры — лентой вбок; «Найдено» — в числах вкладок */
  .up-docs-active { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin: 0 -16px; padding: 2px 16px;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 16px, #000 calc(100% - 30px), transparent); mask-image: linear-gradient(90deg, transparent, #000 16px, #000 calc(100% - 30px), transparent); }
  .up-docs-active::-webkit-scrollbar { display: none; }
  .up-docs-active { gap: 6px 12px; }
  .up-docs-agrp { flex: 0 0 auto; flex-wrap: nowrap; max-width: none; }
  .up-docs-achip, .up-docs-active .up-docs-reset { flex: 0 0 auto; height: 40px; }
  .up-docs-found { display: none; }
  /* долгое нажатие выбирает: без системного меню и выделения текста */
  .up-docs-row, .up-docs-ls-h { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; }
  .up-docs-lessons { gap: 8px; }
  .up-docs-ls { border-radius: 18px; }
  .up-docs-ls-h { border-radius: 17px; min-height: 68px; }
  .up-docs-ls[data-open="true"] .up-docs-ls-h { border-radius: 17px 17px 0 0; }
  .up-docs-ls-t { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-size: 16px; line-height: 21px; }
  /* подпись — до двух строк; папка — своей строкой под ней: в узкой колонке текста в одной строке с подписью имя папки уходило в многоточие */
  .up-docs-ls-m, .up-docs-meta { display: grid; justify-items: start; white-space: normal; font-size: 13.5px; line-height: 18px; }
  .up-docs-ls-m-t, .up-docs-meta-t { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .up-docs-floc { max-width: 100%; min-width: 0; white-space: nowrap; }
  .up-docs-floc-sep { display: none; }
  /* список: справа сверху — время; чипы форматов — строкой под превью и текстом, в конце этой строки — «…» 44 px и шеврон.
     Шаг 0 (владелец: «троеточие надо поместить слева от стрелки внизу. Чтобы освободить чуть места посередине»): «…» ушло из середины
     карточки вниз — тема и подпись идут до колонки времени (колонка «…» под ними — 44 px), справа вверху остаётся только время;
     строка чипов короче на «…» и зазор */
  .up-docs-lessons[data-view="list"] .up-docs-ls-h { grid-template-columns: var(--up-docs-slot) minmax(0, 1fr) 44px auto; grid-template-areas: "thumb main main when" "chips chips more chev"; row-gap: 0; }
  .up-docs-lessons[data-view="list"] .up-docs-ls-side { display: contents; }
  .up-docs-lessons[data-view="list"] .up-docs-ls-side .up-docs-when { align-self: start; justify-self: end; }
  /* «…» 44 px — в 8 px слева от шеврона в любой карточке: ширина колонки времени у каждой карточки своя («14:41» уже «вт, 11:40»),
     поэтому «…» прижато к правому краю заголовка, а не к колонке сетки (10 отступ + 36 шеврон + 8 = 54); по высоте — центр на одной линии
     с шевроном и чипами (26 px от низа: 8 отступ + 18). Ячейка «more» в нижней строке остаётся пустой — держит место, чипы до «…» не доходят */
  .up-docs-lessons[data-view="list"] .up-docs-ls-h { position: relative; }
  .up-docs-lessons[data-view="list"] .up-docs-ls-more { grid-area: auto; position: absolute; right: 54px; bottom: 4px; }  /* grid-area: auto — иначе контейнер абсолюта = ячейка сетки, а не заголовок */
  .up-docs-lessons[data-view="list"] .up-docs-ls-chev { align-self: center; justify-self: end; margin-top: 8px; }
  .up-docs-lessons[data-view="list"] .up-docs-ls-main { align-self: center; }
  .up-docs-lessons[data-view="list"] .up-docs-fchips { align-self: center; margin-top: 8px; }
  .up-docs-fchip { gap: 5px; padding: 0 8px 0 6px; }
  .up-docs-fchip.is-n { padding: 0 8px; }
  /* справа у урока: время сверху, под ним «…» 44 px и шеврон */
  .up-docs-ls-side { display: grid; grid-template-columns: auto auto; grid-template-areas: "when when" "more chev"; justify-items: end; align-items: center; gap: 2px 4px; }
  .up-docs-ls-side .up-docs-when { grid-area: when; font-size: 13px; line-height: 18px; }
  .up-docs-ls-more { grid-area: more; width: 44px; height: 44px; }
  .up-docs-ls-more .up-docs-act.is-more { width: 44px; height: 44px; opacity: 1; transform: none; border-color: transparent; background: transparent; }
  .up-docs-ls-more .up-docs-act.is-more[aria-expanded="true"] { border-color: var(--ws-accent); background: var(--ws-accent-soft); }
  .up-docs-ls-chev { grid-area: chev; width: 36px; height: 36px; }
  .up-docs-ls-chev::before { inset: -5px; }  /* шаг 0г: цель 44 × 44 (36 + по 4 px от края рамки) */
  .up-docs-ls-h { min-height: 72px; }
  /* папки: лента плиток вбок с привязкой (видно 1,6 плитки), поле имени в две строки; крошки — цели 44 px */
  .up-docs-folders { gap: 8px; }
  .up-docs-folders .up-docs-gh { padding: 0 6px; }
  .up-docs-ftiles { display: flex; overflow-x: auto; margin: 0 -16px; padding: 2px 16px 6px; gap: 8px; scroll-snap-type: x mandatory; scroll-padding-left: 16px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .up-docs-ftiles::-webkit-scrollbar { display: none; }
  .up-docs-ftiles::after { content: ""; flex: 0 0 6px; }
  .up-docs-ft { flex: 0 0 min(216px, 60vw); scroll-snap-align: start; }
  .up-docs-ft:last-child { flex-basis: 168px; }
  .up-docs-ftile { min-height: 66px; }
  .up-docs-crumbs { gap: 0 4px; }
  .up-docs-crumb { height: 44px; margin-left: -4px; padding: 0 8px 0 4px; }
  .up-docs-crumb-sep { display: none; }  /* на телефоне — две строки: «← Мои документы», под ней имя папки */
  .up-docs-crumbs .up-docs-fhead { flex: 1 1 100%; }
  /* меню «Вид» и «Фильтры» прокручиваются в окно целиком — выше липкой полосы «Создать документ» */
  .up-docs-menu.is-view, .up-docs-menu.is-filters { scroll-margin-bottom: 132px; }
  .up-docs-fform { flex-wrap: wrap; padding: 0 4px; max-width: none; }
  .up-docs-fform .up-docs-finput { flex: 1 1 calc(100% - 26px); height: 44px; }
  .up-docs-fform .up-docs-act { height: 44px; flex: 1 1 0; justify-content: center; }
  .up-docs-fform.is-rename { padding: 0; }
  .up-docs-ftitle { font-size: 20px; line-height: 26px; }
  .up-docs-fmore { width: 36px; height: 36px; }
  .up-docs-fconfirm { margin: 0; padding: 12px; }
  .up-docs-fconfirm-btns { width: 100%; }
  .up-docs-fconfirm .up-docs-act { flex: 1 1 0; justify-content: center; height: 44px; }
  .up-docs-menu.is-folders { max-width: calc(100vw - 24px); }
  .up-docs-mform .up-docs-finput, .up-docs-mform .up-docs-act { height: 40px; }
  .up-docs-toast { left: 12px; right: 12px; bottom: 118px; max-width: none; transform: none; padding-left: 8px; }  /* над липкой полосой «Создать документ» */
  .up-docs-toast[data-up="true"] { bottom: 84px; }  /* над полосой выбранных */
  .up-docs-toast-t { white-space: normal; font-size: 13.5px; line-height: 18px; }
  @starting-style { .up-docs .up-docs-toast { transform: translateY(24px) scale(.96); } }
  .up-docs-ls-in { padding: 0 4px; }
  .up-docs-ls[data-open="true"] .up-docs-ls-in { padding: 0 4px 8px; }
  .up-docs-ls-add { padding: 0 6px 2px; }
  .up-docs-addchip { height: 40px; }
  .up-docs-list { gap: 14px; }
  .up-docs-rows { padding: 4px; border-radius: 18px; }
  .up-docs-row { border-radius: 14px; }
  .up-docs-gh { padding: 0 6px; }
  /* тема в две строки, время справа всегда видно, «⋯» 44 px всегда под рукой; «Скачать» — в меню */
  .up-docs-topic { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-size: 16px; line-height: 21px; }
  .up-docs-when { align-self: start; margin-top: 2px; font-size: 13px; line-height: 18px; }
  .up-docs-acts { align-self: end; opacity: 1; transform: none; pointer-events: auto; }
  .up-docs-row:hover .up-docs-when, .up-docs-row:focus-within .up-docs-when, .up-docs-row:has([aria-expanded="true"]) .up-docs-when { opacity: 1; transform: none; pointer-events: auto; }
  .up-docs-row .up-docs-act:not(.is-more) { display: none; }  /* только действия строки; кнопки форм, подтверждения и полосы выбранных остаются */
  .up-docs-act.is-more { width: 44px; height: 44px; border-color: transparent; background: transparent; }
  .up-docs-act.is-more[aria-expanded="true"] { border-color: var(--ws-accent); background: var(--ws-accent-soft); }
  .up-docs-cb { width: 32px; height: 32px; left: -4px; top: -4px; }
  .up-docs-cb .up-box { width: 22px; height: 22px; }
  .up-docs-lessons[data-view="tiles"] { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .up-docs-lessons[data-view="tiles"] .up-docs-ls-h { padding: 6px 6px 8px; }
  .up-docs-lessons[data-view="tiles"] .up-docs-ls-side { flex-direction: row; align-items: center; }
  .up-docs-lessons[data-view="tiles"] .up-docs-rows.is-in .up-docs-act.is-more { width: 44px; height: 44px; }
  .up-docs-list[data-view="tiles"] .up-docs-rows { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .up-docs-list[data-view="tiles"] .up-docs-acts { right: 4px; top: 4px; }
  .up-docs-list[data-view="tiles"] .up-docs-act.is-more { background: var(--surface); border-color: var(--line-strong); width: 40px; height: 40px; }
  .up-docs-selbar { left: 12px; right: 12px; bottom: 12px; max-width: none; transform: none; padding: 8px 8px 8px 14px; gap: 8px; justify-content: space-between; }
  .up-docs-selbar .up-new { display: none; }
  .up-docs-selbar .up-docs-act span, .up-docs-selbar .up-docs-act.is-folder svg:last-child { display: none; }
  .up-docs-selbar .up-docs-act { width: 44px; height: 44px; padding: 0; justify-content: center; }
  .up-docs-selbar .up-docs-act.is-more { width: 44px; }
  .up-docs-selbar-acts { gap: 4px; }
  .up-docs-selbar .up-docs-menu { left: auto; right: 0; }
  @starting-style { .up-docs .up-docs-selbar { transform: translateY(28px) scale(.94); } }
  .up-docs-empty { padding: 10px 4px 6px; }
  .up-docs-empty.is-nf .up-go { display: none; }  /* «Создать документ» уже в липкой полосе */
  .up-docs-fan { width: 220px; height: 130px; }
  .up-docs-fsheet .up-sh.is-large { --up-sh-k: .25; }
  .up-docs-fsheet:nth-child(1) { margin-left: -43px; transform: translateX(-40px) rotate(-10deg); }
  .up-docs-fsheet:nth-child(2) { margin-left: -58px; }
  .up-docs-fsheet:nth-child(3) { margin-left: -58px; transform: translateX(44px) translateY(-6px) rotate(10deg); }
  .up-docs-eh { font-size: 22px; line-height: 28px; }
  .up-docs-ebtns { width: 100%; }
  .up-docs-ebtns > * { flex: 1 1 100%; justify-content: center; }
  .up-docs-ebtns .up-go { width: 100%; grid-template-columns: 1fr auto; padding: 0 2px 0 20px; }
  .up-docs-ebtns .up-go .up-go-label > span { opacity: 1; transform: none; }
  .up-docs-dock { display: grid; }
}
@media (max-width: 379px) {
  .up-docs-lessons[data-view="tiles"], .up-docs-list[data-view="tiles"] .up-docs-rows { grid-template-columns: minmax(0, 1fr); }
  .up-docs-rcs { --cols: 1.25; }
  .up-docs-grp button span:not(.up-docs-grp-n) { font-size: 13px; }
  .up-docs-grp button svg { display: none; }
  .up-docs-grp button { padding: 0 8px; }
}
/* круг 9: на телефонах уже 375 шеврон стоял под «…» в правой колонке, строка чипов — во всю ширину; шаг 0 — «…» и шеврон внизу на всех
   ширинах телефона, отдельного правила для узких нет */
@media (max-width: 359px) {
  .up-docs-search { padding-left: 12px; }
  .up-docs-selbar { padding-left: 10px; }
}

/* ---------- reduced motion: общий выключатель в up-kit.css (.up *), сюда — своё ---------- */
@media (prefers-reduced-motion: reduce) {
  .up-docs-fsheet { animation: none !important; }
  .up-docs-row, .up-docs-ls, .up-docs-rc, .up-docs-empty, .up-docs-addchip, .up-docs-ft { animation: none !important; opacity: 1; }
  .up-docs-rows.is-in .up-docs-row { transform: none; opacity: 1; }
  .up-docs-ls-in { transition: none; }
}
