:root{
  color-scheme:dark;
  --bg:#0e0e0e; --surface:#141414; --surface-2:#1b1b1b; --surface-3:#262626;
  --line:#222; --line-2:#2e2e2e;
  --text:#ecdfcf; --muted:#a39a8e; --faint:#7f776c;
  --accent:#ffde59; --accent-1:#ffde59; --accent-2:#ffde59; --on-accent:#141414;
  --warn:#ffde59; --warn-bg:rgba(255,222,89,.12); --danger:#ff8b7b; --ok:#5ad17a; --todo:#ff8a3d; --own:#b6a6ff;
  --topbar:#0e0e0e; --mark:rgba(255,222,89,.3); --shadow:0 18px 50px rgba(0,0,0,.6);
  --c-scripture:#ffde59; --c-thesis:#ffde59; --c-quote:#ffde59; --c-splash:#ecdfcf;
  --c-image:#cfc4b5; --c-video:#cfc4b5; --c-free:#cfc4b5; --c-note:#ffde59;
  --r:16px;
  /* Движение (этап 7.6, js/motion.js): длительности отклика и кривая; при «Уменьшить движение» обнуляются ниже */
  --motion-fast:120ms; --motion:200ms; --motion-slow:250ms; --ease-out:cubic-bezier(.22,.61,.36,1);
  /* Поля слайда в пикселях кадра 1920×1080: панель отступает от края на 44, поля считаются от края панели (по умолчанию 60) */
  --sl-x:104px; --sl-t:104px; --sl-b:104px;
}
/* «Текст» — светлый, как документ; главная и «Слайды» — тёмные */
body.light{
  color-scheme:light;
  --bg:#f7f6f3; --surface:#fff; --surface-2:#f1efe9; --surface-3:#e8e5dd;
  --line:#e6e3dc; --line-2:#d6d2c7;
  --text:#1d1c1a; --muted:#6b675f; --faint:#8f8a80;
  --accent:#8a6500; --warn:#8a6500; --warn-bg:rgba(230,170,20,.16); --danger:#c2412f; --ok:#1f8a47; --todo:#c2560f; --own:#6b56d8;
  --topbar:#f7f6f3; --mark:rgba(255,222,89,.6); --shadow:0 18px 50px rgba(60,40,20,.15);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;overflow-x:clip}   /* въезд экрана сбоку не даёт горизонтальной прокрутки (этап 7.8) */
body{
  margin:0; min-height:100vh; min-height:100dvh; background:var(--bg); color:var(--text);
  font-family:'Inter','Segoe UI',Arial,sans-serif; font-weight:400; font-size:14px;
  line-height:1.5; -webkit-font-smoothing:antialiased;
}
button,input,textarea,select{font:inherit;color:inherit;letter-spacing:inherit}
button{cursor:pointer}
.ic{display:inline-flex;width:18px;height:18px;flex:none}
.ic svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.grow{flex:1 1 auto}
.cap{font:600 11px/1.2 'Inter',sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.cap.strong{color:var(--text)}

/* ---------- Поля и мелкие элементы форм ---------- */
.field{display:block;min-width:0}
.lbl{display:block;font-size:9.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 7px 2px}
.lbl-row{display:flex;justify-content:space-between;align-items:center}
.lbl-row .lbl{margin-bottom:7px}
.input,.rich{
  display:block;width:100%;font-size:14px;font-weight:300;color:var(--text);background:var(--surface-2);
  border:1px solid var(--line);border-radius:13px;padding:11px 13px;outline:none;line-height:1.55;
  transition:border-color .15s, box-shadow .15s;
}
.input::placeholder{color:var(--faint)}
.input:focus,.rich:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(231,174,137,.12)}
input[type=date].input{min-height:46px}
textarea.input{resize:none;overflow:hidden;min-height:46px}
.rich{min-height:46px;white-space:pre-wrap;word-break:break-word}
.rich:empty::before{content:attr(data-ph);color:var(--faint);pointer-events:none}
.rich b,.vs-body b{font-weight:600}
.rich i,.vs-body i{font-style:italic}
.rich u,.vs-body u{text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--accent)}
mark{background:var(--mark);color:inherit;border-radius:5px;padding:0 3px;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.up{text-transform:uppercase}   /* «Все прописные» для выделенного текста */
.namebox{display:flex;align-items:stretch;min-width:0}
.name-pre{display:grid;place-items:center;padding:0 12px;border:1px solid var(--line);border-right:0;border-radius:13px 0 0 13px;
  background:color-mix(in srgb, var(--tc) 14%, var(--surface-2));color:var(--tc);font-weight:600;white-space:nowrap}
.namebox .input{border-radius:0 13px 13px 0;min-width:0}
.namebox.missing .input{border-color:var(--danger)}
.name-err{font-size:10.5px;color:var(--danger);margin:6px 0 0 2px}
.grid-2{display:grid;grid-template-columns:1.3fr 1fr;gap:10px}
.verses{display:grid;gap:8px}
.verse{display:grid;grid-template-columns:56px 1fr 30px;gap:8px;align-items:start}
.vnum{text-align:center;padding:11px 4px;font-weight:600;color:var(--accent)}
.vdel{width:30px;height:46px;border-radius:10px}
.vdel .ic{width:15px;height:15px}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{
  display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line-2);background:transparent;border-radius:99px;
  padding:7px 13px 7px 10px;font-size:11px;font-weight:500;color:var(--muted);transition:.15s;
}
.chip .ic{width:15px;height:15px}
.chip:hover{color:var(--text);background:var(--surface-2)}
.chip.accent{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 45%, transparent)}
.link{border:0;background:transparent;color:var(--faint);font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:0 2px 7px}
.link:hover{color:var(--danger)}
.hint{margin:0;font-size:11px;line-height:1.6;color:var(--faint)}
.hint b{color:var(--muted);font-weight:500}
.half{display:grid;gap:12px}
.half-tag{display:flex;align-items:center;gap:10px;font-size:9.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--tc)}
.half-tag::after{content:"";flex:1;height:1px;background:var(--line-2)}
.divider{display:flex;align-items:center;gap:10px;color:var(--faint);font-size:10px;letter-spacing:.06em}
/* Части сложного слайда Писания — отдельные карточки */
.item.k-line{padding-top:8px;padding-bottom:10px}
.line-demo{height:2px;margin:6px 4px 2px;border-radius:2px;background:currentColor;opacity:.45;color:var(--text)}
/* Греческий и иврит — шрифтом Inter (иврит — Noto Sans Hebrew), чтобы не терялись буквы и знаки */
.xl{font-family:'Inter','Noto Sans Hebrew',sans-serif;font-weight:700;letter-spacing:0;text-transform:none}   /* греческий не переводим в заглавные: пропали бы ударения */
.sl .xl{font-family:var(--f-greek,'Inter'),var(--f-hebrew,'Noto Sans Hebrew'),sans-serif;font-weight:700;letter-spacing:0;text-transform:none}   /* то же в слайде и JPEG */
.divider::before,.divider::after{content:"";flex:1;border-top:1px dashed var(--line-2)}
.toggle{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:99px;padding:3px;width:max-content;max-width:100%}
.toggle button{border:0;background:transparent;border-radius:99px;padding:8px 15px;font-size:11.5px;font-weight:500;color:var(--muted);transition:.15s}
.toggle button.on{background:var(--tc, var(--accent));color:var(--on-accent)}
.callout{
  display:flex;gap:12px;align-items:flex-start;padding:13px 15px;border-radius:14px;font-size:12px;line-height:1.6;
  background:color-mix(in srgb, var(--tc) 9%, transparent);border:1px solid color-mix(in srgb, var(--tc) 25%, transparent);
}
.callout .ic{color:var(--tc);margin-top:1px}
.callout b{font-weight:600}
.switch{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--muted);cursor:pointer;width:max-content;max-width:100%}
.switch input{position:absolute;opacity:0;pointer-events:none}
.sw{position:relative;width:40px;height:24px;border-radius:99px;background:var(--surface-2);border:1px solid var(--line-2);flex:none;transition:.2s}
.sw::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:var(--faint);transition:.2s}
.switch input:checked + .sw{background:linear-gradient(135deg,var(--accent-1),var(--accent-2));border-color:transparent}
.switch input:checked + .sw::after{left:19px;background:var(--on-accent)}
.switch input:focus-visible + .sw{box-shadow:0 0 0 3px rgba(231,174,137,.25)}
.opt-row{display:flex;align-items:center;gap:10px 18px;flex-wrap:wrap}
.count{font-size:10.5px;color:var(--faint);letter-spacing:.02em}
.step{display:inline-flex;align-items:center;gap:2px;margin:0 0 5px;border:1px solid var(--line-2);border-radius:99px;padding:2px}
.step button{display:grid;place-items:center;width:26px;height:24px;border:0;border-radius:99px;background:transparent;color:var(--muted);font-size:14px;font-weight:500;padding:0}
.step button:hover:not(:disabled){background:var(--surface-2);color:var(--text)}
.step button:disabled{opacity:.3;cursor:default}
.step span{min-width:48px;text-align:center;font-size:11px;font-weight:500;color:var(--text)}
.count.warn{color:var(--warn);font-weight:400}
.empty-title{font-size:15px;font-weight:600;margin-bottom:6px}
.empty ol{margin:0 0 12px;padding-left:20px;color:var(--muted);font-size:13px;line-height:1.8}

/* ---------- Кнопки, меню, переключатели ---------- */
.btn{
  display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 14px;border-radius:999px;border:1px solid var(--line-2);
  background:var(--surface-2);color:var(--text);font:500 13px/1 'Inter',sans-serif;white-space:nowrap;text-decoration:none;transition:.15s;
}
.btn .ic{width:16px;height:16px}
.btn:hover{background:var(--surface-3)}
.btn:disabled{opacity:.4;cursor:default;pointer-events:none}
.btn.primary{background:#ffde59;border-color:#ffde59;color:#141414;font-weight:600}
.btn.primary:hover{background:#ffe678}
.btn.ghost{background:transparent;border-color:transparent;color:var(--muted)}
.btn.ghost:hover{background:var(--surface-2);color:var(--text)}
.btn.small{height:30px;padding:0 12px;font-size:12px}
.btn.big{height:42px;padding:0 18px}
.btn.wide{width:100%;justify-content:center;height:42px}
.btn.danger{color:var(--danger)}
.btn.todo.on{border-color:var(--todo);color:var(--todo);background:color-mix(in srgb, var(--todo) 14%, transparent)}
.icon-btn{
  display:inline-grid;place-items:center;width:34px;height:34px;border-radius:10px;border:1px solid transparent;
  background:transparent;color:var(--muted);transition:.15s;padding:0;
}
.icon-btn:hover{background:var(--surface-2);color:var(--text);border-color:var(--line)}
.icon-btn:disabled{opacity:.3;cursor:default;pointer-events:none}
.icon-btn.danger:hover{color:var(--danger)}
.actions{display:flex;justify-content:flex-end;align-items:center;gap:8px;position:relative}
.menu{
  position:absolute;right:0;top:calc(100% + 8px);min-width:240px;background:var(--surface);border:1px solid var(--line-2);
  border-radius:14px;padding:6px;box-shadow:var(--shadow);display:none;z-index:40;
}
.menu.open{display:block}
.menu button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:transparent;padding:10px 12px;border-radius:10px;font-size:13px}
.menu button:hover{background:var(--surface-2)}
.menu button:disabled{opacity:.45;cursor:not-allowed;background:transparent}   /* «Копировать в пространство…», когда пространство одно (этап 9.7) */
.menu-sep{height:1px;background:var(--line);margin:4px 6px}
.seg{display:flex;gap:2px;background:var(--surface);border:1px solid var(--line-2);border-radius:999px;padding:3px;width:220px}
.seg button{flex:1;height:30px;border:0;background:transparent;padding:0 12px;border-radius:999px;font-size:13px;font-weight:500;color:var(--muted);transition:.15s}
.seg button.on{background:var(--surface-3);color:var(--text)}
.stchip{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;font:600 12px/1 'Inter',sans-serif;white-space:nowrap}
/* Переключатель статуса конспекта (editor.js, statusSwitch): три положения — «Черновик», «Готов к вёрстке», «У редактора».
   Цвета статусов одни и те же в шапке, на карточках и в таблице главной */
.stswitch{position:relative;display:inline-flex;gap:2px;padding:3px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface)}
.stswitch .sw-opt{position:relative;z-index:1;padding:5px 10px;border:0;border-radius:999px;background:transparent;font:600 12px/1 'Inter',sans-serif;white-space:nowrap;color:var(--faint);cursor:pointer}
.stswitch .sw-opt:disabled{cursor:not-allowed;opacity:.55}
.stswitch .sw-opt:hover:not(:disabled):not(.on){color:var(--text)}
.stswitch.view .sw-opt:not(.on){opacity:.7}
.stswitch .sw-opt.on.st-draft,.stchip.st-draft,.stdrop.st-draft{background:#3a2c08;color:#ffde59}
.stswitch .sw-opt.on.st-submitted,.stchip.st-submitted,.stdrop.st-submitted{background:#13301d;color:#5ad17a}
.stswitch .sw-opt.on.st-work,.stchip.st-work,.stdrop.st-work{background:#13263d;color:#8cbcff}
.stswitch .sw-opt.on.st-ready,.stchip.st-ready,.stdrop.st-ready{background:#2a1d42;color:#c6a6ff}   /* «Презентация готова» (этап 9.7) */
body.light .stswitch .sw-opt.on.st-draft,body.light .stchip.st-draft,body.light .stdrop.st-draft{background:#fbeeb8;color:#6b4e00}
body.light .stswitch .sw-opt.on.st-submitted,body.light .stchip.st-submitted,body.light .stdrop.st-submitted{background:#d9f0e0;color:#17693a}
body.light .stswitch .sw-opt.on.st-work,body.light .stchip.st-work,body.light .stdrop.st-work{background:#dce9fb;color:#1d4f8f}
body.light .stswitch .sw-opt.on.st-ready,body.light .stchip.st-ready,body.light .stdrop.st-ready{background:#ebe0fb;color:#5a3596}
/* Просмотр (этап 10.1.3): статус в шапке без цвета — выбранное положение на светлой нейтральной подложке, остальные приглушены.
   В правке и на главной цвета прежние */
.stswitch.view .sw-opt.on,.stdrop.view,.topbar:not(.is-home) .stchip{background:var(--surface-3)!important;color:var(--text)!important}
.stswitch.view .sw-opt:not(.on){opacity:.45}
.stwrap{display:contents}
/* Свёрнутый переключатель статуса (этап 10.1): кнопка с текущим статусом и стрелкой, список — dropdown() */
.stdrop{display:none;align-items:center;gap:6px;padding:7px 9px 7px 12px;border:1px solid var(--line-2);border-radius:999px;font:600 12px/1 'Inter',sans-serif;white-space:nowrap;cursor:pointer;transition:background-color .2s,color .2s}
.stdrop .ic{width:14px;height:14px;opacity:.8}
.stdrop:hover{border-color:currentColor}
.stdrop.view{opacity:.85}
.hist{display:inline-flex;gap:2px}

/* ---------- Шапка ---------- */
.topbar{
  position:sticky;top:0;z-index:30;display:flex;align-items:center;flex-wrap:wrap;gap:12px;min-height:57px;
  padding:10px max(16px, env(safe-area-inset-right)) 10px max(16px, env(safe-area-inset-left));
  background:var(--topbar);border-bottom:1px solid var(--line);
}
.topbar.is-home{padding:14px max(32px, env(safe-area-inset-right)) 14px max(32px, env(safe-area-inset-left));gap:14px}
.logo{display:inline-flex;align-items:center;gap:9px;font:700 17px/1 'Unbounded',sans-serif;text-transform:uppercase;color:#ffde59;text-decoration:none;letter-spacing:-.01em}
body.light .logo{color:var(--text)}
.logo .logo-mark{height:24px}
.logo.logo-only .logo-mark{height:26px}
/* Знак (logo.js, этап 7.4): цвета — переменными; `data-lg` ≥ 1 — анимация сохранения: погасли, потом по очереди зелёные */
.logo-mark{display:inline-flex;flex:none;--lg-cream:#ecdfcf;--lg-yellow:#ffde59;--lg-off:#2e2e2e;--lg-on:#5ad17a}
body.light .logo-mark{--lg-cream:#1d1c1a;--lg-yellow:#e0a800;--lg-off:#d6d2c7;--lg-on:#2fae5b}
.logo-mark svg{height:100%;width:auto;display:block}
.logo-mark path{transition:fill .3s}
.logo-mark .lg-a,.logo-mark .lg-b{fill:var(--lg-cream)}
.logo-mark .lg-c{fill:var(--lg-yellow)}
.logo-mark:not([data-lg="0"]) path{fill:var(--lg-off)}
.logo-mark[data-lg="2"] .lg-a,.logo-mark[data-lg="3"] .lg-a,.logo-mark[data-lg="4"] .lg-a,
.logo-mark[data-lg="3"] .lg-b,.logo-mark[data-lg="4"] .lg-b,.logo-mark[data-lg="4"] .lg-c{fill:var(--lg-on)}
.org{color:var(--muted);font-size:13px}
/* переключатель пространств (этап 8): у кого их несколько */
.org-sel{position:relative;display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:10px;background:var(--surface);color:var(--text)}
.org-sel:hover{border-color:#4a4230}
.org-sel:focus-within{border-color:var(--accent)}
.org-pick{appearance:none;-webkit-appearance:none;border:0;background:transparent;color:inherit;font:inherit;font-size:13px;padding:6px 30px 6px 11px;max-width:260px;text-overflow:ellipsis;cursor:pointer;outline:none}
.org-pick option{background:var(--surface-2);color:var(--text)}
button.org-pick{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}   /* с этапа 10.1.2 — кнопка со списком (spaceMenu) */
.org-sel .ic{position:absolute;right:8px;width:15px;height:15px;color:var(--muted);pointer-events:none}
.vsep{width:1px;height:26px;background:var(--line-2)}
.hd-title{display:flex;flex-direction:column;gap:4px;align-items:flex-start;min-width:0;border:0;background:transparent;padding:3px 8px;margin:-3px -8px;border-radius:8px;text-align:left;color:inherit}
.hd-title:hover{background:var(--surface-2)}
.hd-name{font-weight:600;font-size:15px;line-height:1.15;max-width:min(36ch, 100%);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hd-name.empty{color:var(--muted);font-weight:400}
.hd-sub{font-size:12px;color:var(--muted);line-height:1.15;max-width:min(44ch, 100%);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hd-save{font-size:12px;line-height:1.3;color:var(--muted);max-width:250px;text-align:right;text-wrap:balance}   /* длинное сообщение — в две строки, а не перенос всей шапки */
.hd-save.warn{color:var(--warn)}
.search{display:flex;align-items:center;gap:8px;height:38px;padding:0 14px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line-2);min-width:260px;color:var(--muted)}
.search input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--text);font:400 13px 'Inter',sans-serif}
.app-main{min-height:calc(100vh - 57px);min-height:calc(100dvh - 57px)}

/* ---------- Главная ---------- */
.home{max-width:1240px;margin:0 auto;padding:32px max(32px, env(safe-area-inset-right)) 64px;display:flex;flex-direction:column;gap:28px}
.home-top{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px}
.home-top h1{margin:0;font:600 30px/1.1 'Unbounded',sans-serif;letter-spacing:-.02em}
.home-sec{display:flex;flex-direction:column;gap:14px}
.card-wrap{position:relative}

/* Облако: вход, пометки у карточек */
.gate{min-height:calc(100vh - 80px);min-height:calc(100dvh - 80px);display:flex;align-items:center;justify-content:center;padding:24px 16px}
.gate-card{width:100%;max-width:460px;padding:32px 28px;border-radius:24px;border:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;gap:14px}
.gate-logo{display:flex;align-items:center;gap:9px;font:700 15px/1 'Unbounded',sans-serif;text-transform:uppercase;color:var(--accent);letter-spacing:-.01em}
.gate-logo .logo-mark{height:22px}
.gate-card h1{margin:0;font:600 26px/1.15 'Unbounded',sans-serif;letter-spacing:-.02em}
.gate-text{margin:0;font-size:14px;line-height:1.6;color:var(--muted)}
.gate-mail{color:var(--text);text-decoration:underline;text-underline-offset:2px;white-space:nowrap}
.gate-warn{margin:0;font-size:12px;line-height:1.6;color:var(--warn);background:var(--warn-bg);border-radius:12px;padding:10px 12px}
.who{font-size:12px;color:var(--muted);white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis}
.menu-who{padding:6px 12px 2px;font-size:11px;color:var(--faint);overflow:hidden;text-overflow:ellipsis}
.cloud-mark{display:inline-block;align-self:flex-start;margin:4px 0 0 0;padding:2px 8px;border-radius:999px;font-size:11px;color:var(--warn);background:var(--warn-bg)}
.pt .cloud-mark{margin-left:8px}
.lock-mark{display:inline-block;align-self:flex-start;margin:4px 0 0 0;padding:2px 8px;border-radius:999px;font-size:11px;color:#9fc3ff;background:#14243d}
.pt .lock-mark{margin-left:8px}
/* Облачная проповедь в режиме просмотра (lock.js): настройки и текст не правятся */
body.ro .side .bbody,body.ro .speech .rich,body.ro .tv .prose{opacity:.8;cursor:default}
.hd-save.pick{cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.home-warn{color:var(--warn)}
.sheet-foot.wrap{justify-content:flex-end}
.film-todo{color:var(--todo);font-weight:600}
button.film-todo{background:none;border:0;padding:0;font:inherit;font-weight:600;cursor:pointer;text-decoration:underline dotted;text-underline-offset:3px}
button.film-todo.on{text-decoration:none;border-bottom:1px solid var(--todo)}
.cap-row{display:flex;align-items:center;gap:12px}
.cap-row span{flex:1;height:1px;background:var(--line)}
/* ---------- Список проповедей (этап 7.7): одна таблица, сортировка и фильтры ---------- */
#home-list{display:flex;flex-direction:column;gap:14px}
.home-filters{display:flex;flex-direction:column;gap:10px}
.hf-toggle{display:none;align-self:flex-start}
.hf-toggle.on{border-color:var(--accent)}
.hf-body{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.hf-sel{position:relative;display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--text)}
.hf-sel:hover{border-color:#4a4230}
.hf-sel.on{border-color:var(--accent)}
.hf-sel:focus-within{border-color:var(--accent)}
.hf-sel select{appearance:none;-webkit-appearance:none;border:0;background:transparent;color:inherit;font:500 13px 'Inter',sans-serif;padding:9px 34px 9px 14px;max-width:260px;text-overflow:ellipsis;cursor:pointer;outline:none}
.hf-sel select option{background:var(--surface-2);color:var(--text)}
.hf-sel .ic{position:absolute;right:11px;width:15px;height:15px;color:var(--muted);pointer-events:none}
.hf-range{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted)}
.hf-range .input{height:36px;padding:0 10px;width:auto;color-scheme:dark;border-radius:999px}
.hf-status{display:inline-flex;flex-wrap:wrap;gap:3px;padding:3px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface)}
.hf-chip{border:0;background:transparent;color:var(--muted);font:600 12px/1 'Inter',sans-serif;padding:8px 11px;border-radius:999px;cursor:pointer;white-space:nowrap}
.hf-chip:hover{color:var(--text)}
.hf-chip.on.st-draft{background:#3a2c08;color:#ffde59}
.hf-chip.on.st-submitted{background:#13301d;color:#5ad17a}
.hf-chip.on.st-work{background:#13263d;color:#8cbcff}
.hf-chip.on.st-ready{background:#2a1d42;color:#c6a6ff}
.hf-reset .ic{width:14px;height:14px}
.ptable{border-radius:14px;border:1px solid var(--line);overflow:hidden}
.srow{display:grid;grid-template-columns:160px minmax(0,1fr) 200px 76px 140px 40px;gap:16px;align-items:center;padding:13px 16px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--text);font-size:14px;background:rgba(20,20,20,.9)}
.ptable .card-wrap:last-child .srow{border-bottom:0}
.ptable.has-series .srow{grid-template-columns:150px minmax(0,1fr) 170px 180px 76px 140px 40px}   /* колонка «Серия» (этап 10) */
.srow.shead{color:var(--muted);font-size:12px;padding:10px 16px;background:rgba(14,14,14,.92)}
a.srow:hover{background:#1b1b1b}
.srow.past{opacity:.55}
a.srow.past:hover,a.srow.past:focus-visible{opacity:1}
.srow .pt{font-weight:600;min-width:0}
.srow .scard-title.empty{color:var(--muted);font-weight:500}
.srow .muted{color:#b9ae9f}
.srow .muted2{color:#d8cdbd}
.srow .c-lbl{display:none}
.card-del{position:absolute;top:50%;right:8px;transform:translateY(-50%);opacity:0;transition:.15s}
.card-wrap:hover .card-del,.card-del:focus-visible{opacity:1}
@media (hover:none){.card-del{opacity:.85}}
.home-none{display:flex;flex-direction:column;gap:4px}
.home-none .hint{margin:0}
.sk-table{border-color:var(--line)}
.sk-card.sk-row{flex-direction:row;align-items:center;gap:24px;padding:18px 16px;border-radius:0;border:0;border-bottom:1px solid var(--line)}
.sk-row .sk-line{margin:0;height:12px}
.sk-row .sk-line.w1{width:110px;flex:none}.sk-row .sk-line.w2{flex:1;max-width:420px;height:14px}.sk-row .sk-line.w3{width:140px;flex:none}
.home-note{align-self:flex-start;padding:10px 14px;max-width:70ch;border-radius:12px;background:rgba(14,14,14,.88)}   /* над ярким фоном главной — на своей подложке (этап 7.7) */
.empty{padding:22px 22px 22px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface)}
.empty .chips{margin-top:14px}

/* ---------- Вид «Слайды» ---------- */
.sv{display:grid;grid-template-columns:214px minmax(0,1fr) 400px;height:calc(100vh - 57px);height:calc(100dvh - 57px);min-height:560px}
/* Своя раскладка (layout.js): ширина и порядок из настроек человека, границы тянутся за .sv-resize */
.sv{position:relative}
.sv.lay .film{border-right:0}
.sv.lay .side{border-left:0}
.sv-resize{position:absolute;top:0;bottom:0;width:11px;margin-left:-5px;cursor:col-resize;z-index:5;touch-action:none}
.sv-resize::after{content:"";position:absolute;left:5px;top:0;bottom:0;width:1px;background:var(--line)}
.sv-resize:hover::after,.sv.resizing .sv-resize::after{width:3px;left:4px;background:var(--accent);opacity:.7}
.sv.resizing{cursor:col-resize;user-select:none}
.sv.lay .film-head,.sv.lay .stage-bar,.sv.lay .side-head{cursor:grab}
.sv.swapping{cursor:grabbing;user-select:none}
.sv .panel-drag{opacity:.55}
.sv .panel-drop{box-shadow:inset 0 0 0 2px var(--accent);border-radius:6px}
.film{position:relative;overflow-y:auto;padding:14px 12px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:8px;min-width:0}
.film-head{display:flex;flex-wrap:wrap;gap:4px 10px;padding:2px 6px 6px;font:600 11px/1.3 'Inter',sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.film-head .film-time{width:100%;font-weight:500;letter-spacing:.02em;text-transform:none}
.st{display:flex;flex-direction:column;gap:6px;width:100%;padding:6px;border-radius:10px;border:0;background:transparent;color:var(--text);text-align:left;position:relative;flex:none}
.st:hover{background:var(--surface)}
.st.on{background:#1f1a0a;box-shadow:0 0 0 2px var(--accent)}
.st-box{position:relative;flex:none;width:100%}
.st-thumb{position:relative;border-radius:7px;overflow:hidden}
/* «Дублировать» и «Удалить» на миниатюре (этап 7.4): внизу справа, в строке с названием, чтобы не закрывать номер и «доработать» */
.st-acts{position:absolute;right:8px;bottom:5px;display:flex;gap:4px;z-index:3;opacity:0;pointer-events:none;transition:opacity .12s}
.st-box:hover .st-acts,.st-box:focus-within .st-acts{opacity:1;pointer-events:auto}
@media (hover:none){ .st.on + .st-acts{opacity:1;pointer-events:auto} }   /* телефон и планшет: наведения нет, у выбранной миниатюры значки видны всегда */
.st-acts .icon-btn{width:24px;height:24px;border-radius:7px;background:var(--surface-2);border:1px solid var(--line-2)}
.st-acts .icon-btn .ic{width:14px;height:14px}
.film.dragging .st-acts{display:none}
.st-cap{display:flex;gap:6px;align-items:center;font:500 12px/1.2 'Inter',sans-serif;min-width:0}
.st-n{font-weight:700;color:var(--muted);flex:0 0 16px;display:inline-flex}
.st-n .ic{width:14px;height:14px}
.st.on .st-n{color:var(--accent)}
body.ro .st.on{background:var(--surface-2);box-shadow:0 0 0 2px #8f8a80}   /* просмотр (этап 10.1.3): рамка серая; жёлтая — «можно править» */
body.ro .st.on .st-n{color:var(--text)}
.st-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st.done .st.over .st-cap::after{content:"!";color:var(--warn);font-weight:700}
.st.missing .st-thumb{outline:2px solid var(--danger);outline-offset:-2px}
/* Проблемный слайд (этап 9.6): жёлтый треугольник слева вверху; оранжевый «доработать» — справа вверху, значки «Дублировать» и «Удалить» — справа внизу */
.pb{position:absolute;top:6px;left:6px;z-index:2;width:22px;height:19px;background:var(--warn);color:#141414;clip-path:polygon(50% 0,100% 100%,0 100%);
  font:800 11px/1 'Inter',sans-serif;text-align:center;padding-top:8px;box-sizing:border-box;cursor:help}
.st.flash{animation:flash 1.1s ease}
@keyframes flash{0%{box-shadow:0 0 0 0 rgba(255,222,89,0)}25%{box-shadow:0 0 0 4px rgba(255,222,89,.4)}100%{box-shadow:0 0 0 0 rgba(255,222,89,0)}}
.fl{display:none;position:absolute;top:6px;right:6px;z-index:2;font:700 9px/1 'Inter',sans-serif;text-transform:uppercase;letter-spacing:.04em;background:var(--todo);color:#141414;padding:4px 6px;border-radius:5px}
.st.todo .fl{display:block}
/* Своя заставка (этап 9.6): на сцене и миниатюрах — чёрный экран с крупной жирной надписью (текст и размер ставит layoutSplash) */
.sl.sl-custom .sl-frame,.sl.sl-custom .sl-panel{display:none}
.sl.sl-custom .sl-stage{background:#141414;box-shadow:none;border:calc(1px / var(--s)) dashed #3a3a3a}   /* этап 10.1.3: серая заглушка, как у картинки и видео */
.sl.sl-custom .sl-sp-box{top:0;bottom:0;left:var(--sl-x);right:var(--sl-x)}
.sl.sl-custom .sl-sp-title{font-family:'Inter',sans-serif;font-weight:600;color:#a39a8e;letter-spacing:0;text-transform:none}
.film .sl.sl-custom .sl-sp-title{font-size:calc(20px / var(--s))!important;line-height:1.25}   /* в ленте — как текст у заглушки картинки (20 px на экране) */
.own-splash{display:grid;gap:6px}
.hint[hidden]{display:none}
.half-w{display:grid;gap:6px}
.half-w input[type=range]{width:100%;margin:0;accent-color:var(--accent)}
.half-w-val{font-size:12px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
.ph-thumb{aspect-ratio:16/9;border:1px dashed #3a3a3a;border-radius:7px;background:#141414;display:flex;align-items:center;justify-content:center;padding:6px;text-align:center;color:var(--muted);font:500 20px/1.25 'Inter',sans-serif;overflow:hidden}   /* текст заглушки вдвое крупнее (этап 10.1.3) */
.ph-thumb span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.st.t-note{padding-top:2px;padding-bottom:2px}
.mini-note{padding:7px 9px;border-radius:7px;background:#ffde59;color:#141414;font:800 10px/1.3 'Inter',sans-serif;text-transform:uppercase;max-height:58px;overflow:hidden}
/* Лента: «+» между слайдами и перетаскивание (slides.js) */
.film.arrange{gap:0}
.film.arrange > .film-head{margin-bottom:4px}
.film.arrange .st{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}
.film-gap{position:relative;height:12px;flex:none}
.film-ins{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:22px;height:22px;border-radius:50%;padding:0;display:grid;place-items:center;
  border:1px solid var(--line-2);background:var(--surface);color:var(--muted);opacity:0;transition:opacity .12s;z-index:2}
.film-ins .ic{width:13px;height:13px}
/* «+» перед первым и после последнего слайда видны всегда (этап 7.8) */
.film-gap.first .film-ins,.film-end .film-ins{opacity:1}
.film-gap.first{height:30px}
.film-end{position:relative;height:52px;flex:none}
.film-end .film-ins{width:30px;height:30px;border-style:dashed;color:var(--text)}
.film-end .film-ins:hover{border-style:solid}
.film-end .film-ins .ic{width:16px;height:16px}
.film-gap:hover .film-ins,.film-ins:focus-visible{opacity:1}
.film-ins:hover{color:var(--accent);border-color:var(--accent)}
@media (hover:none){ .film-ins{opacity:.75} }
.film.dragging .film-ins{opacity:0;pointer-events:none}
.film-gap.drop::before{content:"";position:absolute;left:4px;right:4px;top:50%;height:3px;margin-top:-1.5px;border-radius:2px;background:var(--accent)}
/* Перетаскивание (этап 7.7): слайд приподнят и идёт за указателем, соседи плавно раздвигаются */
.st-box.lifted{z-index:5;transition:none;will-change:transform}
.st-box.lifted > .st{background:var(--surface-2);box-shadow:0 0 0 2px var(--accent),0 14px 34px rgba(0,0,0,.55)}
.st-box.shifting{transition:transform var(--motion-slow) var(--ease-out)}
.film.dragging{cursor:grabbing}

.stage{display:flex;flex-direction:column;gap:12px;padding:14px 28px 20px;min-width:0;overflow-y:auto}
.stage-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.stepper{display:flex;align-items:center;gap:2px;margin-left:6px;font-size:12px;color:var(--muted)}
.stage-view{display:flex;flex-direction:column;gap:8px;align-items:center;flex:none}
.stage-slide{width:min(100%, calc((100vh - 330px) * 16 / 9));min-width:240px;border-radius:16px;overflow:hidden;box-shadow:0 30px 60px rgba(0,0,0,.5)}
.sv.speech-open .stage-slide{width:min(100%, 360px)}
.stage-info{font-size:12px;color:var(--muted);min-height:18px;text-align:center}
.stage-info.over{color:var(--warn)}
.note-plate,.ph-big{width:min(100%, calc((100vh - 330px) * 16 / 9));border-radius:16px}
.note-plate{padding:28px 32px;background:#ffde59;color:#141414}
.note-tag{display:flex;align-items:center;gap:8px;margin-bottom:10px;font:700 11px/1 'Inter',sans-serif;letter-spacing:.14em;text-transform:uppercase}
.note-text{font:800 clamp(18px,2.6vw,30px)/1.35 'Inter',sans-serif;text-transform:uppercase;white-space:pre-wrap;overflow-wrap:anywhere}
.note-text.empty{opacity:.45}
.ph-big{aspect-ratio:16/9;display:flex;gap:28px;align-items:center;justify-content:center;padding:28px;border:1px dashed #3a3a3a;background:var(--surface);text-align:left;color:var(--muted)}
.ph-big > .ic{width:80px;height:80px;color:var(--text);flex:none}   /* этап 10.1.3: значок и текст заглушки вдвое крупнее */
.ph-name{font-size:40px;font-weight:700;color:var(--text);line-height:1.2}
.ph-name.empty{font-weight:400;color:var(--muted)}
.ph-title{margin-top:10px;font-size:28px;color:var(--text)}
.ph-line{margin-top:6px;font-size:26px;white-space:pre-wrap;overflow-wrap:anywhere}
.speech{background:var(--surface);border:1px solid var(--line);border-radius:14px;display:flex;flex-direction:column;flex:1 0 auto;min-height:170px}
.speech-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:6px 8px 6px 16px;border-bottom:1px solid var(--line);min-height:44px}
.speech .count{font-size:12px;color:var(--muted)}
.rich.speech-text{flex:1;border:0;border-radius:0 0 14px 14px;background:transparent;padding:12px 16px;font-size:14px;line-height:1.65;color:#d9cfc1;min-height:110px;box-shadow:none}
.rich.speech-text:focus{box-shadow:none}

.side{border-left:1px solid var(--line);padding:18px 18px 28px;overflow-y:auto;display:flex;flex-direction:column;gap:16px;min-width:0}
.side .bbody{display:grid;gap:14px}
.side .bbody > .item{padding:12px 14px 14px;border:1px solid var(--line-2);border-radius:14px;background:var(--surface)}
.side .bbody > .divider{margin:-6px 0}
.side .grid-3{grid-template-columns:1fr 1fr}
.side .grid-3 > :nth-child(2){grid-column:1 / -1;grid-row:1}
.side .grid-2{grid-template-columns:1fr}
.side .trp-panel{width:100%}
.info-row{display:grid;gap:6px}
.info-row .lbl{margin:0}
.info-val{padding:2px 0 0;border:0;background:none;color:var(--muted);font-size:13px;line-height:1.45;cursor:default;overflow-wrap:anywhere}   /* только для показа: не похоже на поле ввода (этап 7.4) */
.info-val.empty{color:var(--faint);font-style:italic}
.editor-box{padding:14px;border-radius:14px;background:#1a130d;border:1px solid #3a2414;display:grid;gap:10px}
.eb-head{display:flex;flex-direction:column;gap:2px;font-size:13px}
.eb-head span{font-size:11px;color:var(--muted)}

/* ---------- Вид «Текст» (светлый) ---------- */
.tv{display:flex;flex-wrap:wrap;gap:40px;max-width:1360px;margin:0 auto;padding:28px max(40px, env(safe-area-inset-right)) 64px}
.tv-doc{--vs:1;flex:999 1 600px;min-width:0;max-width:860px;display:flex;flex-direction:column}
.tv-head{display:flex;flex-direction:column;gap:6px;padding:0 0 22px 140px}
.tv-head h1{margin:0;font:600 32px/1.15 'Unbounded',sans-serif;letter-spacing:-.02em;cursor:pointer;overflow-wrap:anywhere}
.tv-head h1.empty{color:var(--muted);font-weight:400}
.tv-stats{font-size:14px;color:var(--muted)}
.blk{display:grid;grid-template-columns:120px minmax(0,1fr);gap:20px;padding:18px 0;border-top:1px solid var(--line)}
.tv-head + .blk{border-top:0}
.gut{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.gut .num{font:700 24px/1 'Unbounded',sans-serif}
.tv-thumb{width:112px;border:0;padding:0;background:transparent;border-radius:6px;overflow:hidden;box-shadow:0 0 0 1px var(--line-2)}
.tv-thumb.none{display:none}
.tv-todo{color:var(--todo);font-size:12px;font-weight:700}
.cont{display:flex;flex-direction:column;gap:10px;min-width:0}
.tv-card{display:grid;gap:10px;padding:14px 18px;border-radius:14px;background:var(--surface);border:1px solid var(--line);font-size:calc(16px * var(--vs));line-height:1.6}
.rich.prose{border:0;background:transparent;padding:2px 0;min-height:1.75em;font-size:calc(16px * var(--vs));line-height:1.75;color:var(--text);border-radius:6px;box-shadow:none}
.rich.prose:focus{box-shadow:0 0 0 2px var(--line-2)}
.rich.prose.lead{font-size:calc(17px * var(--vs))}
.vs-ref{font-weight:700;font-size:calc(17px * var(--vs));display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}
.vs-tr{font-size:calc(13px * var(--vs));font-weight:500;color:var(--muted)}
.vs-verses sup{font-size:.7em;font-weight:700;margin-right:3px;vertical-align:.4em}
.vs-note{padding:10px 13px;border-radius:10px;background:var(--surface-2);font-size:calc(14px * var(--vs));color:var(--muted)}
.vs-thesis{font-size:calc(19px * var(--vs));font-weight:700;line-height:1.4;white-space:pre-wrap}
.vs-quote{margin:0;font-size:calc(17px * var(--vs));line-height:1.55}
.vs-author{font-size:calc(13px * var(--vs));color:var(--muted)}
.vs-name{font-size:calc(16px * var(--vs));font-weight:700;line-height:1.35}
.vs-media{display:flex;gap:12px;align-items:flex-start}
.vs-media > .ic{width:22px;height:22px;margin-top:2px;color:var(--muted)}
.vs-mtitle{font-weight:600;font-size:calc(14px * var(--vs))}
.vs-mdesc{color:var(--muted);font-size:calc(14px * var(--vs));white-space:pre-wrap;margin-top:4px;overflow-wrap:anywhere}
.vs-hr{border-top:1px dashed var(--line-2)}
.vs-hr.solid{border-top-style:solid}
.empty-v{color:var(--faint)}
.vnote{padding:12px 16px 14px;border-radius:10px;background:#ffde59;color:#141414}
.vnote-tag{display:flex;align-items:center;gap:7px;margin-bottom:6px;font:700 11px/1 'Inter',sans-serif;letter-spacing:.14em;text-transform:uppercase}
.vnote-tag .ic{width:15px;height:15px}
.vnote-body{white-space:pre-wrap;text-transform:uppercase;font:800 calc(14px * var(--vs))/1.45 'Inter',sans-serif}
.tv-side{flex:1 1 300px;max-width:340px;display:flex;flex-direction:column;gap:16px;position:sticky;top:76px;align-self:flex-start}
.tv-card2{display:grid;gap:12px;padding:18px;border-radius:16px;background:var(--surface);border:1px solid var(--line)}
.tv-h{font:600 15px/1.2 'Unbounded',sans-serif}
.tv-card2 .toggle{width:100%}
.tv-card2 .toggle button{flex:1}
.size{display:flex;gap:6px}
.size button{width:44px;height:34px;border-radius:10px;border:1px solid var(--line-2);background:var(--surface-2);font-size:12px;font-weight:600}
.chk{display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.45;color:var(--muted)}
.chk .ok{color:var(--ok)}
.chk .warn{color:var(--warn);font-weight:700}

/* ---------- Подгонка старых полей под новый вид ---------- */
.input,.rich{font-weight:400;border-radius:10px;background:var(--surface-2)}
.input:focus,.rich:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent)}
.namebox .input{border-radius:0 10px 10px 0}
.name-pre{border-radius:10px 0 0 10px}
.switch input:checked + .sw{background:var(--accent);border-color:transparent}
.sw{background:var(--surface-3)}
.vchip.on{background:var(--accent);color:#141414;border-color:transparent}
.toggle button.on{color:#141414}
.chip.accent{color:var(--accent-text, var(--accent))}
.todo-tag{color:var(--todo)}
.hint{font-size:12px;color:var(--muted)}
.count{font-size:12px;color:var(--muted)}
.fbtn.on{color:var(--text)}

/* Шапка конспекта (этап 10.1): от 1024 px — одна строка при любой длине названия (оно обрезается многоточием), а статус до 1400 px — одной кнопкой */
@media (min-width:1024px){
  .topbar:not(.is-home){flex-wrap:nowrap}
  .topbar:not(.is-home) > *{flex-shrink:0}
  .topbar:not(.is-home) > .hd-title{flex-shrink:1;min-width:80px}
  .topbar:not(.is-home) > .grow{flex-shrink:1;min-width:0}
}
@media (min-width:1024px) and (max-width:1200px){   /* самое тесное место: промежутки и переключатель вида уже, сообщение — до двух строк (полностью — во всплывающей подписи) */
  .topbar:not(.is-home){gap:8px}
  .topbar:not(.is-home) .seg{width:168px}
  .topbar:not(.is-home) .hd-save{max-width:170px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
}
@media (max-width:1400px){
  .stswitch{display:none}
  .stdrop{display:inline-flex}
}

/* ---------- Узкие экраны ---------- */
@media (max-width:1100px){
  .sv{grid-template-columns:200px minmax(0,1fr);height:auto;min-height:0}
  .film{grid-row:1 / span 2;max-height:calc(100vh - 57px);max-height:calc(100dvh - 57px);position:sticky;top:57px;align-self:start}
  .stage{overflow:visible}
  .side{grid-column:2;border-left:0;border-top:1px solid var(--line);overflow:visible}
  .stage-slide,.note-plate,.ph-big{width:100%}
}
@media (max-width:760px){
  .topbar{gap:8px;padding-left:max(10px, env(safe-area-inset-left));padding-right:max(10px, env(safe-area-inset-right))}
  .hd-save,.hd-sub,.stchip,.hide-sm{display:none}
  .stswitch .sw-opt{padding:5px 7px;font-size:11px}
  .hd-title{max-width:46vw}
  .seg{width:auto}
  .home{padding:20px 16px 48px}
  .home-top h1{font-size:24px}
  .search{min-width:0;flex:1}
  .org{display:none}
  .org.org-sel{display:inline-flex}
  .org-pick{max-width:34vw}
  /* список: строки — компактные карточки, фильтры — под кнопкой «Фильтры» */
  .hf-toggle{display:inline-flex}
  .home-filters:not(.open) .hf-body{display:none}
  .srow.shead{display:none}
  .srow{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"date status" "title title" "author slides";gap:6px 12px;padding:13px 48px 13px 14px}
  .srow .c-date{grid-area:date;font-size:12px}
  .srow .c-title{grid-area:title}
  .srow .c-author{grid-area:author;font-size:13px}
  .srow .c-slides{grid-area:slides;font-size:12px;color:var(--muted);justify-self:end}
  .srow .c-status{grid-area:status;justify-self:end}
  .ptable.has-series .srow{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"date status" "title title" "series series" "author slides"}
  .srow .c-series{grid-area:series;font-size:12px}
  .srow .stchip{display:inline-flex;padding:4px 8px;font-size:11px}
  .srow .c-lbl{display:inline}
  .card-del{top:14px;transform:none}
  .ptable{border-radius:12px}
  .sv{grid-template-columns:1fr}
  .film{grid-row:auto;flex-direction:row;overflow-x:auto;overflow-y:hidden;max-height:none;position:relative;top:auto;border-right:0;border-bottom:1px solid var(--line);padding:10px}
  .film-head{display:none}
  .st-box{width:150px}
  .film-end{width:52px;height:auto;align-self:stretch}
  .film-gap.first{width:30px;height:auto}
  .film-gap{height:auto;width:16px}
  .film-gap.drop::before{left:50%;right:auto;top:8px;bottom:8px;width:3px;height:auto;margin:0 0 0 -1.5px}
  .stage{padding:12px 14px 16px}
  .side{grid-column:1;padding:16px 14px 28px}
  .input,.rich{font-size:16px}
  .grid-3{grid-template-columns:1fr 1fr}
  .tv{padding:16px 14px 48px;gap:24px}
  .tv-head{padding-left:0}
  .tv-head h1{font-size:24px}
  .blk{grid-template-columns:84px minmax(0,1fr);gap:12px}
  .tv-thumb{width:84px}
  .tv-side{position:static;max-width:none}
  .set-row{grid-template-columns:1fr 90px}
}
@media print{.topbar,.fmtbar{display:none!important}}

/* ---------- Слайд (тема Ember). Размеры заданы в пикселях кадра 1920×1080 ---------- */
.sl{position:relative;width:100%;aspect-ratio:16/9;background:#000;overflow:hidden;border-radius:6px;--s:.23}
.sl-stage{position:absolute;left:0;top:0;width:1920px;height:1080px;transform-origin:0 0;transform:scale(var(--s));
  --u:1;font-family:var(--f-main,'Unbounded'),'Inter',sans-serif;color:#ecdfcf;letter-spacing:-0.035em;-webkit-font-smoothing:antialiased;text-rendering:geometricPrecision;
  box-shadow:0 10px 30px rgba(0,0,0,.25);contain:layout paint}
.sl-frame{position:absolute;inset:calc(var(--u) * 14px);border-radius:calc(var(--u) * 34px);background:#ecdfcf;overflow:hidden}
.sl-frame::after{content:"";position:absolute;inset:0;background-image:var(--noise);background-size:128px 128px;mix-blend-mode:multiply;opacity:.22}
.sl-panel{position:absolute;inset:calc(var(--u) * 44px);border-radius:calc(var(--u) * 8px);overflow:hidden;background:#151612;isolation:isolate}
.sl-glow{position:absolute;inset:-12%;display:var(--sl-glow,block);filter:blur(calc(var(--u) * 60px));background:
  radial-gradient(circle at 100% 6%, #c9702a 0, transparent 34%),
  radial-gradient(circle at 102% 40%, #8a8a38 0, transparent 20%),
  radial-gradient(circle at -2% 96%, #ff4a12 0, transparent 30%),
  radial-gradient(circle at 4% 48%, #5a2a16 0, transparent 26%)}
/* Фон (этап 7.3): без настройки — прежний «Ember» (.sl-glow, зерно .6, затемнение краёв .35); с генератором — картинка .sl-bg
   поверх (.sl-glow скрыт), своё зерно и затемнение. Переменные ставит slideVars → bgVars (background.js) */
.sl-bg{position:absolute;inset:0;background-image:var(--sl-bg,none);background-size:100% 100%;background-repeat:no-repeat}
.sl-grain{position:absolute;inset:0;background-image:var(--sl-grain,var(--noise));background-size:var(--sl-gsz,128px) var(--sl-gsz,128px);mix-blend-mode:overlay;opacity:var(--sl-go,.6)}
.sl-vig{position:absolute;inset:0;background:radial-gradient(ellipse 75% 70% at 45% 45%, transparent 40%, rgba(0,0,0,var(--sl-va,.35)) 100%)}
.sl-content{position:absolute;left:var(--sl-x);right:var(--sl-x);top:var(--sl-t);text-align:center;display:flex;flex-direction:column;gap:var(--sc-gap,.85em);--track:var(--sc-track,-0.04em);--lead:var(--sc-lead,1.05)}
.sl-ref{font-weight:700;font-size:1.2083em;line-height:1.1;text-transform:uppercase;letter-spacing:-0.035em;margin:0}
.sl-ref.ph{opacity:.3}
.sl-verse{margin:0;font-weight:325;letter-spacing:var(--track);line-height:var(--lead);text-wrap:wrap;overflow-wrap:normal}
.sl-verse sup{font-weight:700;font-size:.6em;vertical-align:.95em;line-height:0;letter-spacing:0;margin-right:.18em}
.sl b{font-weight:700}
.sl u{text-decoration-thickness:.07em;text-underline-offset:.16em;text-decoration-color:currentColor}
.sl mark{background:none;color:#ffde59;padding:0;border-radius:0}
.sl .up{text-transform:uppercase}
.sl-text{margin:0;font-weight:325;letter-spacing:var(--track);line-height:var(--lead)}
.sl-text.caps{text-transform:uppercase}
/* Шрифт как в Canva — для всех слайдов: толщина 325; расстояния между символами (--track) и строками (--lead) —
   из настроек слайдов, отдельно для Писания (--sc-*), тезиса (--th-*) и цитаты (--qt-*), см. slideVars() в model.js */
.sl-hr{height:3px;border-radius:2px;background:#ecdfcf;opacity:.6;margin:.1em 0}   /* линия во всю ширину текста между полями */
.sl-tp{margin:0}
.sl-empty{opacity:.3}
.sl-tr{position:absolute;left:var(--sl-x);right:var(--sl-x);bottom:var(--sl-b);display:none;text-align:center;font-size:43.2px;font-weight:400;line-height:1.1}   /* 90% от размера стихов; точный размер ставится из настроек слайдов */
.sl-tr.on{display:block}
/* Тезис и цитата: текст в своей области, область задана отступами в кадре */
.sl-box{position:absolute;left:var(--sl-x);right:var(--sl-x);top:var(--sl-t);bottom:var(--sl-b);display:flex;flex-direction:column;justify-content:center}
.sl-box-quote{top:calc(var(--sl-t) + 150px);bottom:calc(var(--sl-b) + 150px)}   /* место под автора резервируется и снизу, и сверху (этап 9.3): текст стоит ровно по центру слайда, подпись не двигается */
.sl-box-quote[data-half=left]{right:calc(100% - var(--hw,50%) + var(--qt-gap,48px))}   /* «Текст на части слайда»: область --hw от края (по умолчанию половина, этап 9.5), остальное пустое (под фото автора), зазор от границы */
.sl-box-quote[data-half=right]{left:calc(100% - var(--hw,50%) + var(--qt-gap,48px))}
.sl-box-thesis{--track:var(--th-track,-0.04em);--lead:var(--th-lead,1.05)}
.sl-box-quote{--track:var(--qt-track,-0.04em);--lead:var(--qt-lead,1.05)}
.sl-inner{font-weight:325;letter-spacing:var(--track);line-height:var(--lead);text-align:center;overflow-wrap:normal}
.sl-inner .sl-tp{letter-spacing:var(--track)}   /* em — от размера своей части тезиса */
.sl-inner.caps{text-transform:uppercase}
/* Списки в тезисе: маркер или номер слева, перенос строки встаёт под текст пункта */
.sl-list{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:.38em;width:fit-content;max-width:100%;margin-left:auto;margin-right:auto;padding-left:.9em;text-align:left}   /* отступ пунктов от края текста */
.sl-list:not(:first-child){margin-top:.5em}   /* расстояние от обычной строки до списка */
.sl-list:not(:last-child){margin-bottom:.5em}  /* и от списка до обычной строки */
.sl-part[data-align=left] .sl-list{margin-left:0}
.sl-part[data-align=right] .sl-list{margin-left:auto;margin-right:0}
/* Тезис из нескольких частей: текстовые блоки (у каждого своё выравнивание и размер) и линии */
.sl-inner.parts{display:flex;flex-direction:column;gap:.5em}
.sl-part.caps{text-transform:uppercase}
.sl-li{display:contents}
.sl-mk{display:flex;align-items:center;justify-content:flex-end;min-width:.62em;height:calc(var(--lead,1.05) * 1em)}   /* высота строки: маркер по центру первой строки */
.sl-mk.num{align-items:baseline;height:auto}
.sl-dot{display:block;width:.22em;height:.22em;border-radius:50%;background:currentColor;transform:translateY(.03em);margin-right:.2em}
.sl i{font-style:italic}
.sl-guide{position:absolute;left:var(--sl-x);right:var(--sl-x);top:var(--sl-t);bottom:var(--sl-b);border:5px dashed #ffde59;border-radius:6px;
  background:repeating-linear-gradient(135deg, rgba(255,222,89,.13) 0 14px, transparent 14px 30px);display:grid;place-items:center;
  color:#ffde59;font-size:46px;font-weight:500;letter-spacing:-.02em}
.sl-author{position:absolute;right:var(--sl-x);bottom:var(--sl-b);max-width:1500px;text-align:right;font-size:52px;line-height:1.05;font-weight:325;text-transform:uppercase;letter-spacing:-0.03em}
.sl-author[data-half=left],.sl-author[data-half=right]{max-width:calc(var(--hw,50%) - var(--sl-x) - var(--qt-gap,48px))}   /* подпись не шире области текста */
.sl-author[data-half=left]{right:auto;left:var(--sl-x);text-align:left}   /* текст слева — подпись зеркально внизу слева */
.sl-author b{font-weight:700}
.sl-author .src{display:block;margin-top:.45em;font-size:.62em;text-transform:none;opacity:.75}
/* Писание: заглавными (по умолчанию), «каждый стих с новой строки» — номера колонкой слева */
.sl-content.caps .sl-verse{text-transform:uppercase}
.sl-vlist{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:.45em;row-gap:var(--sc-vgap,.3em);align-items:first baseline;width:fit-content;max-width:100%;margin:0 auto;text-align:left}
.sl-content.al-left .sl-vlist{margin-left:0}
.sl-vstack{display:flex;flex-direction:column;gap:var(--sc-vgap,.3em)}   /* с новой строки по центру или справа: номер перед стихом */
.sl-vn{font-weight:700;font-size:.6em;line-height:1;text-align:right;letter-spacing:0;min-width:1.1em;position:relative;top:-.95em}   /* надстрочный, как sup в строке (этап 10.1.3) */
/* Рамка пунктиром: вокруг стихов (в строку) и вокруг части тезиса. Толщину проверить на проекторе (ориентир 3 px на 1080) */
.sl-verse.framed,.sl-part.framed,.sl-vlist.framed,.sl-vstack.framed,.sl-inner.framed{border:3px dashed rgba(236,223,207,.85);border-radius:12px;padding:.45em .7em}   /* с новой строки — одна рамка на все стихи */
/* Заставка: название посередине, внизу линия, «Имя ФАМИЛИЯ» слева и дата справа */
.sl-sp-box{position:absolute;left:var(--sl-x);right:var(--sl-x);top:var(--sl-t);bottom:300px;display:flex;flex-direction:column;justify-content:center}
.sl-sp-title{font-weight:900;text-transform:uppercase;text-align:center;line-height:var(--sp-lead,1.1);letter-spacing:var(--sp-track,0em);overflow-wrap:normal;word-break:keep-all;hyphens:manual;text-wrap:balance}
.sl-sp-foot{position:absolute;left:var(--sl-x);right:var(--sl-x);bottom:var(--sl-b);font-size:var(--sp-foot,44px);line-height:var(--sp-flead,1.1);font-weight:325;letter-spacing:var(--sp-ftrack,-0.03em)}
.sl-sp-foot .sl-hr{margin:0 0 .6em}
.sl-sp-row{display:flex;justify-content:space-between;align-items:baseline;gap:1em;min-height:1.1em}
.sl-sp-name b{font-weight:700;text-transform:uppercase}


/* ---------- Выбор места Писания ---------- */
select.input{appearance:none;-webkit-appearance:none;cursor:pointer;padding-right:36px;min-height:46px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;background-size:16px}
select.input:disabled{opacity:.5;cursor:default}
.grid-3{display:grid;grid-template-columns:1.3fr 1.5fr .7fr;gap:10px}
.grid-bc{display:grid;grid-template-columns:minmax(0,1fr) 92px;gap:10px}   /* Писание: книга и глава под переводом */
.item{display:grid;gap:12px}
.item-head{display:flex;justify-content:space-between;align-items:center;gap:8px;min-height:28px}
.item-head .half-tag{flex:1}
.itools{display:flex;gap:2px;flex:none}
.itools .icon-btn{width:28px;height:28px;border-radius:9px}
.itools .icon-btn .ic{width:15px;height:15px}
.itools .icon-btn.on{color:var(--accent);background:var(--surface-2);border-color:var(--line)}
.vpick{display:grid;gap:8px}
.vgrid{display:flex;flex-wrap:wrap;gap:6px}
.vchip{min-width:38px;height:34px;padding:0 6px;border-radius:10px;border:1px solid var(--line-2);background:var(--surface-2);font-size:12px;font-weight:500;color:var(--muted);transition:.12s}
.vchip:hover{color:var(--text);border-color:var(--accent)}
.vchip.on{background:linear-gradient(135deg,var(--accent-1),var(--accent-2));color:var(--on-accent);border-color:transparent}
.vrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.vrow .input{flex:1;min-width:140px}
.vlabel{display:grid;place-items:center;height:46px;font-weight:600;color:var(--accent);border-radius:13px;background:color-mix(in srgb, var(--accent) 10%, transparent)}
.loadnote{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--muted);padding:10px 13px;border-radius:12px;background:var(--surface-2)}
.loadnote.err{color:var(--danger)}
.trp{position:relative}
.trp-btn{display:flex;align-items:center;gap:8px;text-align:left;min-height:46px;cursor:pointer;padding-right:36px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;background-size:16px}
.trp-cur{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trp-note{font-size:10px;color:var(--faint);white-space:nowrap}
.trp-panel{position:absolute;left:0;top:calc(100% + 6px);z-index:45;width:min(400px,calc(100vw - 40px));display:grid;gap:6px;padding:8px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:16px;box-shadow:var(--shadow)}
.trp-list{max-height:340px;overflow:auto;display:grid;gap:2px}
.trp-lang{display:grid;grid-template-columns:auto 1fr 16px;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:transparent;padding:10px;border-radius:10px;font-size:12.5px;font-weight:500}
.trp-lang:hover{background:var(--surface-2)}
.trp-lang .trp-note{text-align:right;overflow:hidden;text-overflow:ellipsis}
.trp-lang.cur .trp-lname{color:var(--accent)}
.trp-chev{display:grid;place-items:center;color:var(--faint)}
.trp-chev svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .15s}
.trp-lang.open .trp-chev svg{transform:rotate(90deg)}
.trp-it.sub{padding-left:24px}
.trp-sep{height:1px;background:var(--line);margin:4px 6px}
.trp-it{display:flex;justify-content:space-between;align-items:baseline;gap:10px;text-align:left;border:0;background:transparent;padding:9px 10px;border-radius:10px;font-size:12px}
.trp-it:hover{background:var(--surface-2)}
.trp-it.on{background:var(--surface-2);color:var(--accent);font-weight:500}
.trp-abbr{display:inline-block;margin-right:7px;padding:1px 6px;border-radius:6px;font-size:9.5px;font-weight:600;letter-spacing:.04em;color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);white-space:nowrap}
.trp-name{min-width:0}
.trp-lang-code{flex:none;font-size:9.5px;font-weight:600;letter-spacing:.06em;color:var(--faint)}
.cfg-status{display:grid;gap:4px;padding:11px 13px;border-radius:12px;background:var(--surface-2);font-size:11.5px;color:var(--muted)}
.cfg-status .err{color:var(--danger)}
.trp-empty{padding:10px;font-size:11px;line-height:1.5;color:var(--faint)}
.tr-name{font-size:10px;color:var(--faint);letter-spacing:.02em;margin:-4px 0 0 2px}

/* ---------- Выбор типа блока ---------- */
.overlay{position:fixed;inset:0;z-index:60;background:rgba(5,7,12,.55);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;padding:16px;height:100vh;height:100dvh}
.overlay.open{display:flex}
.sheet{width:100%;max-width:620px;max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow:auto;background:var(--surface);border:1px solid var(--line-2);border-radius:24px;padding:20px;box-shadow:var(--shadow)}
.sheet-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.sheet-title{font-size:16px;font-weight:600;letter-spacing:-0.02em}
.types{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.types-top{grid-template-columns:1.8fr 1fr;margin-bottom:10px}
.type{
  display:grid;grid-template-columns:40px 1fr;gap:12px;align-items:center;text-align:left;padding:13px;border-radius:16px;
  border:1px solid var(--line);background:var(--surface-2);transition:.15s;
}
.type:hover{border-color:var(--tc);transform:translateY(-1px)}
.type-ic{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:color-mix(in srgb, var(--tc) 15%, transparent);color:var(--tc)}
.type-name{font-size:12.5px;font-weight:500;line-height:1.3}
.type-desc{font-size:10.5px;color:var(--faint);line-height:1.45;margin-top:3px}
.type.t-text{border-style:dashed;background:transparent}
.type.t-note{border-color:color-mix(in srgb, var(--c-note) 50%, transparent);background:color-mix(in srgb, var(--c-note) 10%, var(--surface-2))}
.type.t-note .type-name{font-weight:600}
.set-grid{display:grid;gap:12px;margin:6px 0 16px}
.set-row{display:grid;grid-template-columns:1fr 110px;gap:12px;align-items:center;font-size:12px}
.sheet-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}

/* ---------- Панель оформления текста ---------- */
/* Стоит над полем, где идёт набор (render.js, dockFmt); в «Тексте к слайду» — в строке заголовка */
.fmtbar{
  display:none;gap:2px;padding:3px;width:max-content;max-width:100%;flex-wrap:wrap;justify-self:start;align-self:flex-start;margin:0 0 6px;
  background:var(--surface-2);border:1px solid var(--line-2);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,.25);
}
.fmtbar.show{display:flex}
.fmtbar.in-head{margin:0;box-shadow:none;background:transparent;border-color:transparent}
body.light .fmtbar{box-shadow:0 4px 14px rgba(0,0,0,.08)}
.fbtn{display:grid;place-items:center;min-width:32px;height:30px;padding:0 8px;border-radius:9px;border:0;background:transparent;font-size:13.5px;color:var(--text)}
.fbtn:hover,.fbtn:active{background:var(--surface-2)}
.fbtn.b{font-weight:700}
.fbtn.i{font-style:italic}
.fbtn.on{background:color-mix(in srgb, var(--accent) 22%, transparent);color:var(--accent)}
.fbtn.u{text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--accent);text-decoration-thickness:2px}
.fbtn .ic{width:16px;height:16px}
.fsep{width:1px;background:var(--line-2);margin:5px 2px}
.fbtn.lst,.fsep.lst{display:none}
.fmtbar.lists .fbtn.lst{display:grid}
.fmtbar.lists .fsep.lst{display:block}
.fbtn.lst{font-size:13px;font-weight:600}
.fbtn.up-btn{font-size:11px;font-weight:600;letter-spacing:.02em}
/* Окно «Настройки слайдов» (settings.js): слева пример слайда, справа настройки */
.sheet.wide{max-width:1260px}
.scfg .lbl{text-transform:none;letter-spacing:0;font-size:11.5px;margin-bottom:6px}
.scfg-body{display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.45fr);gap:22px;align-items:start;margin-bottom:16px}
.scfg-preview{position:sticky;top:0;display:grid;gap:10px;padding-bottom:6px;background:var(--surface)}
.scfg-tabs{width:100%}
.scfg-tabs button{flex:1;padding:8px 6px}
.scfg-info{font-size:11px;color:var(--faint);text-align:center;min-height:16px}
.scfg-form{display:grid;gap:16px;min-width:0}
.scfg-sec{display:grid;gap:12px;padding:14px;border:1px solid var(--line);border-radius:16px;min-width:0}
.scfg-cap{font-size:10.5px;color:var(--faint);margin:-2px 0 0 2px}
.scfg-panels{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.scfg-panel{display:flex;align-items:center;justify-content:space-between;gap:2px;padding:8px 4px;border:1px solid var(--line-2);border-radius:12px;background:var(--surface);cursor:grab;touch-action:pan-y;user-select:none;-webkit-user-select:none;min-width:0}
.scfg-panel:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.scfg-pname{flex:1;min-width:0;text-align:center;font:600 13px/1.2 'Inter',sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scfg-panel.drag{opacity:.45}
.scfg-panel.drop{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.scfg-panels.dragging{cursor:grabbing}
.scfg-g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.scfg-g4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.scfg-kinds{display:grid;grid-template-columns:minmax(96px,1fr) repeat(6,minmax(70px,1fr));gap:6px;align-items:center;overflow-x:auto}
.scfg-done,.scfg-fmtdone{font-size:12px;color:var(--ok,#5ad17a);white-space:nowrap}
.scfg-verses{display:grid;gap:12px}
.unit .input:disabled{opacity:.4}
.scfg-kinds .kh{font-size:10.5px;color:var(--muted);line-height:1.25;cursor:help;align-self:end;padding:0 2px 2px}
.scfg-kinds .kl{font-size:12px;line-height:1.3}
.scfg-kinds .input{padding:8px 24px 8px 4px;font-size:12.5px;min-height:38px;border-radius:9px}
.scfg-kinds .unit span{right:6px;font-size:10px}
.scfg-na{color:var(--faint);text-align:center;font-size:13px;cursor:help}
.unit{position:relative;min-width:0}
.unit .input{padding-right:46px;text-align:right}
.unit.nounit .input{padding-right:10px}
.unit span{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:11px;color:var(--faint);pointer-events:none}
.unit input::-webkit-inner-spin-button,.unit input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.unit input[type=number]{-moz-appearance:textfield}
.scfg .err{color:var(--danger);font-size:12px;align-self:center}
/* Блок «Фон» (этап 7.3): ползунки с числом справа, выбор цвета, «Другой вариант» */
.scfg-bg{display:grid;gap:12px}
.scfg-rng{min-width:0}
.scfg-rrow{display:flex;align-items:center;gap:8px;min-height:38px}
.scfg-rrow input[type=range]{flex:1;min-width:0;accent-color:#ffde59;margin:0}
.scfg-rv{min-width:22px;text-align:right;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.scfg-color{padding:3px;height:38px;cursor:pointer}
.scfg-bg .toggle{width:100%}
.scfg-bg .toggle button{flex:1;padding:8px 4px}
.scfg-bgbtns{display:flex;flex-wrap:wrap;gap:6px;align-items:end;align-self:end}
.scfg-bgbtns .btn{flex:1;justify-content:center;white-space:nowrap}
.scfg-kinds .off{opacity:.4}
/* Форматы фона (этап 7.5): выбор формата, кнопки, название и «Сохранить»; у System Template ползунки серые */
.scfg-fmt{display:grid;gap:10px}
.scfg-fmt-btns{display:flex;flex-wrap:wrap;gap:6px}
.scfg-fmt-btns .btn{flex:1 1 auto;justify-content:center;white-space:nowrap}
.scfg-fmt-name{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end}
.scfg-fmt-save{display:flex;gap:8px;align-items:center;min-height:38px}
.scfg-fmt .input:disabled{opacity:.55}
.scfg-bg.locked{opacity:.4;cursor:not-allowed}
.scfg-bg.locked *{cursor:not-allowed}
.scfg-ask{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:rgba(0,0,0,.45);padding:16px}
.scfg-ask[hidden]{display:none}
.scfg-ask-box{max-width:420px;background:var(--surface);border:1px solid var(--line-2);border-radius:18px;padding:18px;box-shadow:var(--shadow);display:grid;gap:14px}
.scfg-ask-box p{margin:0;font-size:14px;line-height:1.5}
.scfg-ask-btns{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
@media (max-width:900px){ .scfg-body{grid-template-columns:1fr} .scfg-preview{position:static} }
@media (max-width:620px){ .scfg-g3,.scfg-g4{grid-template-columns:1fr} .scfg-kinds{grid-template-columns:100px repeat(6,88px)} }
.mock{display:grid;gap:12px;margin:6px 0 14px}
.mock-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.mock-grid .field .input{text-align:center}
.cfg-note{padding:11px 13px;border-radius:12px;background:var(--surface-2);font-size:11px;line-height:1.6;color:var(--muted)}
.cfg-note.local{background:var(--warn-bg);color:var(--text)}
.tmp-set{border:1px dashed var(--line-2);border-radius:14px;padding:0 14px}
.tmp-set summary{cursor:pointer;padding:12px 0;font-size:12px;color:var(--muted);list-style:none}
.tmp-set summary::-webkit-details-marker{display:none}
.tmp-set summary::before{content:'▸ ';color:var(--faint)}
.tmp-set[open] summary::before{content:'▾ '}
.tmp-set .radios{display:grid;gap:8px;padding:0 0 14px}
.tmp-set label{display:flex;align-items:center;gap:10px;font-size:12px;cursor:pointer}
.tmp-set input{accent-color:var(--accent)}

.toasts{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:70;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none;max-width:calc(100vw - 32px)}
.toast{position:relative;overflow:hidden;display:flex;align-items:center;gap:14px;pointer-events:auto;
  padding:11px 12px 13px 18px;border-radius:99px;background:#ecdfcf;color:#141414;font-size:12px;font-weight:400;box-shadow:var(--shadow);max-width:100%}
/* Полоска внизу: сколько осталось до скрытия (наведение мышью ставит отсчёт на паузу) */
.toast-bar{position:absolute;left:18px;right:18px;bottom:4px;height:2px;border-radius:2px;background:currentColor;opacity:.3;transform-origin:left center}
.exp-prog{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:72;display:flex;align-items:center;gap:16px;padding:14px 22px 14px 16px;border-radius:18px;
  background:var(--surface-2);border:1px solid var(--line-2);color:var(--text);box-shadow:var(--shadow);font-size:13px;min-width:260px;max-width:calc(100vw - 32px)}
.exp-mark{width:44px;height:41px}
.exp-mark svg{width:100%;height:100%;overflow:visible}
.exp-body{flex:1;min-width:0;display:grid;gap:9px}
.exp-bar{height:3px;border-radius:3px;background:var(--line-2);overflow:hidden}
.exp-bar i{display:block;height:100%;background:var(--accent);transform-origin:left center}
/* Знак играет по кругу: части собираются, держатся и разлетаются (как на заставке, lg-in); анимируются только path — на них не действует no-motion на время сборки */
.exp-mark path{animation:lg-loop 2000ms var(--ease-out) infinite both}
.exp-mark .lg-c{--fx:12px;--fy:12px}
.exp-mark .lg-a{--fx:-14px;--fy:0px;animation-delay:200ms}
.exp-mark .lg-b{--fx:0px;--fy:-14px;animation-delay:400ms}
@keyframes lg-loop{0%{opacity:0;transform:translate(var(--fx),var(--fy))}28%,72%{opacity:1;transform:none}100%{opacity:0;transform:translate(var(--fx),var(--fy))}}
.exp-prog.no-count .exp-bar{display:none}
.exp-prog.done .exp-mark path,.exp-prog.still .exp-mark path{animation:none}
.toast button{border:0;background:transparent;color:inherit;font-weight:600;font-size:12px;padding:4px 8px;border-radius:99px;text-decoration:underline;text-underline-offset:3px}

/* ---------- PDF для оператора: узкие страницы под экран телефона, только то, что нужно на служении ---------- */
#print-op{display:none}
@page op{ size:80mm 170mm; margin:6mm 5mm 7mm }
@media print{
  body.op-print > *:not(#print-op){display:none!important}
  body.op-print{background:#fff!important;min-height:0}
  body.op-print::before,body.op-print::after{display:none!important}
  body.op-print #print-op{display:block;page:op}
}
#print-op{font-family:'Unbounded','Inter',sans-serif;color:#15120f;font-size:9.5pt;line-height:1.45;letter-spacing:-0.01em;
  -webkit-print-color-adjust:exact;print-color-adjust:exact}
#print-op .op-head{margin:0 0 3.5mm;padding-bottom:3mm;border-bottom:.35mm solid #ddd6cc}
#print-op .op-kick{font-size:6pt;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#a6542c;margin-bottom:1.2mm}
#print-op .op-title{margin:0;font-size:14pt;font-weight:600;line-height:1.2;letter-spacing:-0.03em}
#print-op .op-meta{margin-top:1.4mm;font-size:7pt;color:#7a736b}
#print-op .op-text{margin:2.5mm 0;padding-left:2.6mm;border-left:.5mm solid #e3ddd4;white-space:pre-wrap;font-weight:300;font-size:8.3pt;line-height:1.6;color:#6e6760}
#print-op .op-splash{display:inline-block;margin:1mm 0 1.6mm;padding:.5mm 2.2mm;border:.3mm solid #a6542c;border-radius:9pt;color:#a6542c;font-size:6.5pt;font-weight:600;letter-spacing:.1em;text-transform:uppercase}
#print-op .op-note{margin:3mm 0;padding:2.4mm 3mm 2.6mm;border-radius:2mm;background:#ffe066;border:.35mm solid #e0b300;break-inside:avoid}
#print-op .op-note-tag{font-size:6pt;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#7a5a00;margin-bottom:1mm}
#print-op .op-note-body{white-space:pre-wrap;text-transform:uppercase;font-weight:700;font-size:9.5pt;line-height:1.35}
#print-op .op-slide{margin:3mm 0;padding:2.4mm 3mm 2.8mm;border:.35mm solid #dcd5cb;border-left:1.6mm solid var(--tc);border-radius:2mm;break-inside:avoid}
#print-op .op-slide.op-cover{padding-bottom:2mm}
#print-op .op-cover .op-row{margin-bottom:0}
#print-op .op-row{display:flex;align-items:baseline;gap:2.4mm;margin-bottom:1.4mm}
#print-op .op-num{font-size:17pt;font-weight:700;line-height:1;letter-spacing:-0.04em;color:var(--tc)}
#print-op .op-type{font-size:6pt;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:#8f877e}
#print-op .op-p + .op-p{margin-top:2mm;padding-top:2mm;border-top:.3mm dashed #ddd6cc}
#print-op .op-ref{font-size:8.5pt;font-weight:600;color:#a6542c}
#print-op .op-tr{font-size:6.5pt;font-weight:400;color:#9a9188;margin-left:1.5mm}
#print-op .op-verses{font-size:9pt}
#print-op .op-verses sup{font-size:.6em;font-weight:700;color:#a6542c;vertical-align:.45em}
#print-op .op-thesis{font-size:10pt;font-weight:600;line-height:1.35;white-space:pre-wrap}
#print-op .op-author{margin-top:1mm;font-size:7.5pt;color:#7a736b}
#print-op .op-name{font-size:10.5pt;font-weight:600;line-height:1.3}
#print-op .op-play{margin-top:1mm;font-size:7.5pt;color:#5d5650}
#print-op b{font-weight:700}
#print-op mark{background:#ffe58a;color:inherit;padding:0 .6mm;border-radius:1mm}

/* Правки по скриншотам */
body.light .toggle button.on{background:#ffde59;color:#141414}
body.light .size button:hover{background:var(--surface-3)}
.home-note{margin-top:10px}


/* ---------- Движение (этап 7.6, js/motion.js) ----------
   Только transform и opacity (у переключателя статуса ещё цвет); слайды (.sl-*) не анимируются никогда. */
/* Жёлтая рамка #ffde59 на миниатюре и блоке «Текста»: «Дублировать», переход в «Текст» */
.st.hl::after,.blk.hl::after{content:"";position:absolute;inset:-2px;border:2px solid #ffde59;border-radius:12px;pointer-events:none;z-index:4;
  animation:hl-out var(--hl-ms,600ms) ease-in forwards}
.blk{position:relative}
.blk.hl::after{inset:6px -10px;border-radius:14px}
@keyframes hl-out{0%,55%{opacity:1}100%{opacity:0}}
.film-ghost{position:fixed;z-index:60;pointer-events:none}
.film-ghost .st-box{width:100%}
.film-ghost .st-acts{display:none}
/* Статус: подложка переезжает на новое место и меняет цвет */
.sw-pill{position:absolute;z-index:0;border-radius:999px;transform-origin:left center;pointer-events:none}
.stswitch .sw-opt.pill-wait{background:transparent!important}
.hd-edit{position:relative}
.lockbadge{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);color:var(--text);border:1px solid var(--line-2);pointer-events:none}
.lockbadge .ic{width:11px;height:11px}
.lockbadge .ic svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
/* Галочка автосохранения у статуса */
.hd-check{display:none;align-items:center;color:var(--ok);flex:none}
.hd-check.on{display:inline-flex}
.hd-check svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.hd-check .ck{stroke-dasharray:1;stroke-dashoffset:0}
/* Переход «Слайды ↔ Текст» */
::view-transition-group(root){animation-duration:var(--motion-slow)}
::view-transition-group(sel-slide){animation-duration:var(--motion-slow);animation-timing-function:var(--ease-out)}
/* Загрузка: серые заготовки карточек с медленным мерцанием (~1,2 с проход слева направо), потом проявление карточек */
.sk-card{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:12px;padding:12px 12px 18px;border-radius:18px;background:var(--surface);border:1px solid var(--line)}
.sk-img{aspect-ratio:16/9;border-radius:10px;background:var(--surface-2)}
.sk-line{height:12px;border-radius:6px;background:var(--surface-2);margin:0 4px}
.sk-line.w1{width:45%}.sk-line.w2{width:80%;height:16px}.sk-line.w3{width:55%}
.sk-card::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(236,223,207,.07),transparent);animation:sk-shine 1.2s linear infinite}
@keyframes sk-shine{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
@keyframes fade-in{from{opacity:0}to{opacity:1}}
.reveal{animation:fade-in var(--motion) var(--ease-out) both}
/* Экран входа: логотип собирается (три части по очереди, ~900 мс), живое зерно как у плёнки (~8 кадров в секунду) */
.gate-logo.intro .logo-mark path{animation:lg-in 500ms var(--ease-out) both}
/* этап 7.8: сначала свет — жёлтый клин, потом тени — две кремовые части */
.gate-logo.intro .logo-mark .lg-c{--fx:12px;--fy:12px;animation-delay:calc(0ms - var(--el,0ms))}
.gate-logo.intro .logo-mark .lg-a{--fx:-14px;--fy:0px;animation-delay:calc(200ms - var(--el,0ms))}
.gate-logo.intro .logo-mark .lg-b{--fx:0px;--fy:-14px;animation-delay:calc(400ms - var(--el,0ms))}
@keyframes lg-in{from{opacity:0;transform:translate(var(--fx),var(--fy))}to{opacity:1;transform:none}}
.gate{position:relative;z-index:1}
.gate-fx{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.gate-grain{position:absolute;inset:-140px;background:var(--noise);background-size:128px;opacity:.07;
  animation:grain 1s steps(1,end) infinite}
@keyframes grain{
  0%{transform:translate(0,0)}12.5%{transform:translate(-37px,29px)}25%{transform:translate(52px,-61px)}37.5%{transform:translate(-90px,-18px)}
  50%{transform:translate(23px,84px)}62.5%{transform:translate(-64px,47px)}75%{transform:translate(71px,12px)}87.5%{transform:translate(-12px,-95px)}}
/* Главная (этап 7.8): стена слайдов с библейскими названиями, затемнённая и мягкая, с зерном; поверх — тёмная дымка
   с одним «окном», которое медленно плывёт (только transform). Параметры стены — в --wall-filter */
.home-bg{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;--wall-filter:brightness(.51) contrast(.8) saturate(.85);opacity:0}
body.wall-on .home-bg{opacity:1}
.home-bg .hb-haze{animation-play-state:paused}
body.wall-on .home-bg .hb-haze{animation-play-state:running}
.hb-wall{position:absolute;display:grid;gap:22px;transform:rotate(-9deg);transform-origin:50% 50%;filter:var(--wall-filter)}   /* размер и место — fillWall (motion.js), по диагонали окна */
.hb-cell .sl{width:340px}
.hb-wall{opacity:0;transition:opacity .6s ease-out}
.hb-wall.ready{opacity:1}
.hb-grain{position:absolute;inset:0;background:var(--noise);background-size:128px;mix-blend-mode:overlay;opacity:.1}
.hb-haze{position:absolute;left:-100vw;top:-100vh;width:300vw;height:300vh;
  background:radial-gradient(ellipse 21% 25% at 50% 50%, rgba(14,14,14,0) 0%, rgba(14,14,14,.55) 45%, rgba(14,14,14,.93) 75%, #0e0e0e 100%);
  transform:translate(35vw,-25vh);animation:home-haze 70s ease-in-out infinite alternate}
@keyframes home-haze{
  0%{transform:translate(35vw,-25vh)}
  33%{transform:translate(28vw,30vh)}
  66%{transform:translate(-20vw,35vh)}
  100%{transform:translate(10vw,-15vh)}}
.home{position:relative;z-index:1}
/* Пример в «Настройках слайдов»: старый фон гаснет поверх нового */
.scfg-slide{position:relative}
.scfg-old{position:absolute;left:0;top:0;width:100%;pointer-events:none}

/* Этап 7.7: заставка входа расплывается в список; экран проповеди уезжает вправо; заготовка экрана проповеди */
/* Заставка при открытии: знак крупно, без карточки; строка про облако — только если ждать дольше ~1,5 с */
.topbar.is-splash{display:none}
.gate.full{min-height:100vh;min-height:100dvh}   /* заставка при открытии — без шапки (этап 7.8) */
.gate-card.splash{background:transparent;border-color:transparent;align-items:center;gap:22px;text-align:center}
.gate-card.splash .gate-logo{font-size:30px;gap:16px}
.gate-card.splash .gate-logo .logo-mark{height:46px}
.gate-wait{opacity:0;animation:fade-in .4s ease-out 1.5s forwards}
.gate-ghost{position:fixed;inset:0;z-index:40;pointer-events:none;background:var(--bg)}
.gate-ghost .gate-fx{position:absolute}
.gate-ghost .gate{min-height:100%}
.leave-ghost{position:fixed;z-index:40;pointer-events:none;overflow:hidden;background:var(--bg)}
.leave-ghost .sv{height:100%}
.sk-sv .film{gap:12px}
.sk-thumb{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:8px;padding:6px;border-radius:10px;flex:none}
.sk-thumb .sk-img,.sk-stage .sk-img{border-radius:7px}
.sk-stage{position:relative;overflow:hidden;width:min(100%, 880px);margin:52px auto 0;border-radius:14px}
.sk-sv .side{display:flex;flex-direction:column;gap:14px;padding-top:56px}
.sk-sv .sk-line{margin:0}
.sk-thumb::after,.sk-stage::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(236,223,207,.07),transparent);animation:sk-shine 1.2s linear infinite}

/* Фоновая вкладка: бесконечные анимации стоят */
html.page-hidden .gate-grain,html.page-hidden .hb-haze,html.page-hidden .home-bg .hb-haze,html.page-hidden .sk-card::after,html.page-hidden .sk-thumb::after,html.page-hidden .sk-stage::after{animation-play-state:paused}
/* На время снятия JPEG и ZIP движение выключено */
html.no-motion *:not(path),html.no-motion *::before,html.no-motion *::after{animation:none!important;transition:none!important}

/* «Уменьшить движение»: всё мгновенно; зерно, фон главной и мерцание стоят; подсветки (жёлтая рамка, блок в «Тексте») остаются без движения.
   Исключение: анимация сохранения знака (решение Виталия 12 ноября, logo.js) */
@media (prefers-reduced-motion: reduce){
  :root{--motion-fast:0ms;--motion:0ms;--motion-slow:0ms}
  *,*::before,*::after{transition-duration:0s!important;transition-delay:0s!important;animation-duration:0s!important;animation-delay:0s!important;scroll-behavior:auto!important}
  .logo-mark path{transition-duration:.3s!important}
  .gate-grain,.hb-haze,.sk-card::after,.sk-thumb::after,.sk-stage::after{animation:none!important}
  .toast-bar{display:none}
  .exp-mark path{animation:none!important}
  .st.hl::after,.blk.hl::after{animation:none!important}
}

/* ---------- Окно «О проповеди» (этап 7.8): воскресенья кнопками, свой календарь, список авторов ---------- */
.meta-sheet .set-grid{display:flex;flex-direction:column;gap:16px}
/* Этап 10.1.3: обязательные поля — пустое название или автор подсвечены, ошибка в строке кнопок; просмотр — серые поля без рамки */
.meta-sheet .sheet-foot{align-items:center}
.meta-err{flex:1;min-width:0;font-size:13px;color:var(--danger);text-align:right}
.meta-err:empty{display:none}
.meta-sheet .field.invalid .input,.meta-sheet .field.invalid .dfield{border-color:var(--danger)}
.meta-sheet .field.invalid .lbl{color:var(--danger)}
.meta-sheet .set-grid[inert] .input,.meta-sheet .set-grid[inert] .dfield{background:var(--surface-3);border-color:transparent;color:var(--muted);box-shadow:none}
.meta-sheet .set-grid[inert] .dfield .ic,.meta-sheet .set-grid[inert] .date-other{display:none}
.meta-sheet .set-grid[inert] .date-chip:not(.on){opacity:.45}
.date-chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:8px 13px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:500 13px 'Inter',sans-serif;white-space:nowrap;cursor:pointer}
.chip:hover{border-color:#4a4230}
.chip.on{background:var(--accent);border-color:var(--accent);color:#141414;font-weight:700}
.chip small{font-size:11px;font-weight:500;opacity:.7}
.chip .ic{width:15px;height:15px}
.date-other .ic{color:var(--accent)}
.dfield{display:flex;align-items:center;gap:10px;width:100%;min-height:46px;padding:0 14px;border-radius:13px;background:var(--surface-2);border:1px solid var(--line-2);color:var(--text);font:500 14px 'Inter',sans-serif;text-align:left;cursor:pointer}
.dfield:hover{border-color:#4a4230}
.dfield:focus-visible,.dfield[aria-expanded=true]{border-color:var(--accent);outline:none}
.dfield .dtext{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dfield .dtext.ph{color:var(--muted)}
.dfield .ic{width:15px;height:15px;color:var(--muted)}
.dfield.fixed{cursor:default;color:var(--muted)}
.dfield.fixed:hover{border-color:var(--line-2)}
.grid-eq{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.author-names{margin-top:8px}
.dd-list{position:fixed;z-index:80;padding:6px;border-radius:16px;background:#1a1a1a;border:1px solid var(--line-2);box-shadow:0 18px 50px rgba(0,0,0,.6);max-height:min(360px, 60vh);overflow:auto;display:flex;flex-direction:column}
.dd-list button{border:0;background:transparent;text-align:left;padding:10px 12px;border-radius:10px;font:500 14px 'Inter',sans-serif;color:#d8cdbd;cursor:pointer}
.dd-list button:hover,.dd-list button:focus-visible{background:var(--surface-2);color:var(--text);outline:none}
.dd-list button.on{background:var(--surface-3);color:var(--text)}
.dd-list button:disabled{opacity:.45;cursor:not-allowed;background:transparent;color:#d8cdbd}
.dd-list hr{border:0;height:1px;background:var(--line-2);margin:6px 4px;flex:none}
.dd-list .man{color:var(--accent)}
.dd-list .dd-act{color:var(--accent)}   /* «Настроить пространства…» под чертой (этап 10.1.2) */
.cal{position:fixed;z-index:80;width:300px;padding:14px;border-radius:18px;background:#1a1a1a;border:1px solid var(--line-2);box-shadow:0 18px 50px rgba(0,0,0,.6)}
.cal-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font:600 14px 'Unbounded',sans-serif;letter-spacing:-.01em}
.cal-nav{display:flex;gap:4px}
.cal-nav .icon-btn{width:28px;height:28px;border-radius:8px;border:1px solid var(--line-2)}
.cal-nav .icon-btn .ic{width:14px;height:14px}
.cal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}
.cal-g .wd{font:600 10px 'Inter',sans-serif;letter-spacing:.08em;color:var(--muted);padding:4px 0 6px}
.cal-g .wd.sun{color:var(--accent)}
.cal-g .d{position:relative;height:34px;display:grid;place-items:center;border:0;border-radius:10px;background:transparent;font:500 13px 'Inter',sans-serif;color:#d8cdbd;cursor:pointer}
.cal-g .d:hover,.cal-g .d:focus-visible{background:var(--surface-2);outline:none}
.cal-g .d.out{color:#4d4943}
.cal-g .d.sun{color:var(--accent);font-weight:700}
.cal-g .d.today{box-shadow:inset 0 0 0 1px var(--line-2)}
.cal-g .d.sel{background:var(--accent);color:#141414;font-weight:700}
.cal-g .d.has::after{content:"";position:absolute;bottom:4px;left:50%;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:#5ad17a}
.cal-g .d.sel.has::after{background:#141414}
.cal-f{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.cal-f .chip{padding:7px 11px;font-size:12px}
.cal-legend{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11px;color:var(--muted)}
.cal-legend i{width:6px;height:6px;border-radius:50%;background:#5ad17a}
@media (max-width:520px){ .grid-eq{grid-template-columns:1fr} }
/* «Как пользоваться» (этап 7.8) */
.hd-help .ic{width:17px;height:17px}

/* Ссылка для оператора и страница оператора (этап 9, js/operator.js) */
.tv-card2 .btn.wide + .btn.wide{margin-top:8px}
.oplink .oplink-url{width:100%;margin:12px 0 4px;text-overflow:ellipsis}
.oplink .sheet-foot{margin-top:14px;gap:8px}
/* «Поделиться» (этап 10.1.3): «Ссылка на конспект» и «PDF-файл» — разделы одного окна */
.share .share-sec{display:grid;gap:8px;margin-top:12px}
.share .share-sec + .share-sec{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.share .share-box{display:grid;gap:10px;justify-items:start}
.share .share-box .oplink-url{justify-self:stretch}
.share .share-box .sheet-foot{margin-top:0}
.share .share-box .hint{margin:0}
/* «Скачать слайды» (этап 9.3): две большие кнопки с пояснением */
.dl-opts{display:grid;gap:10px}
.dl-opt{display:flex;flex-direction:column;align-items:flex-start;gap:6px;height:auto;padding:14px 16px;text-align:left;white-space:normal}
.dl-opt-title{display:flex;align-items:center;gap:8px;font-weight:600}
.dl-opt-text{font-size:13px;font-weight:400;line-height:1.35;opacity:.72}
/* страница оператора: тёмная, под телефон; шапки формы нет */
body[data-screen="op"] .topbar{display:none}
body[data-screen="op"] .app-main{min-height:100vh;min-height:100dvh}
.opv{--ops:1;max-width:680px;margin:0 auto;padding:18px 14px 96px;font-size:calc(16px * var(--ops));line-height:1.5}
.opv-head{padding:6px 2px 14px;border-bottom:1px solid var(--line-2)}
.opv-kick{font:600 11px/1.2 'Inter',sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.opv-title{margin:6px 0 0;font:600 calc(22px * var(--ops))/1.2 'Unbounded','Inter',sans-serif;letter-spacing:-.03em}
.opv-meta{margin-top:8px;font-size:13px;color:var(--muted)}
.opv-upd{margin-top:2px;font-size:12px;color:var(--faint)}
.opv-bar{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;background:linear-gradient(var(--bg) 78%,transparent)}
.opv-bar .toggle button{padding:9px 14px;font-size:13px}
.opv-list{display:flex;flex-direction:column;gap:12px}
.opv-slide{padding:12px 14px 14px;border:1px solid var(--line-2);border-left:5px solid var(--tc);border-radius:14px;background:var(--surface)}
.opv-slide.cover{padding-bottom:10px}
.opv-row{display:flex;align-items:baseline;gap:12px}
.opv-slide:not(.cover) .opv-row{margin-bottom:8px}
.opv-num{font:700 calc(28px * var(--ops))/1 'Unbounded','Inter',sans-serif;letter-spacing:-.04em;color:var(--tc)}
.opv-type{font:600 11px/1.2 'Inter',sans-serif;letter-spacing:.13em;text-transform:uppercase;color:var(--faint)}
.opv-p + .opv-p{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line-2)}
.opv-ref{font-weight:600;color:var(--accent)}
.opv-tr{margin-left:8px;font-size:.75em;font-weight:400;color:var(--faint)}
.opv-verses{margin-top:2px}
.opv-verses sup{font-size:.62em;font-weight:700;color:var(--accent);vertical-align:.45em}
.opv-thesis{font-weight:600;line-height:1.35;white-space:pre-wrap}
.opv-author{margin-top:6px;font-size:.85em;color:var(--muted)}
.opv-name{font-weight:600;line-height:1.3}
.opv-play{margin-top:6px;font-size:.9em;color:var(--muted)}
.opv-speech{margin:10px 2px 4px;padding-left:12px;border-left:3px solid var(--line-2);white-space:pre-wrap;font-weight:300;font-size:.92em;line-height:1.6;color:var(--muted)}
.opv-note{padding:12px 14px 14px;border-radius:12px;background:#ffde59;color:#141414;border:1px solid #e0b300}
.opv-note-tag{font:700 11px/1.2 'Inter',sans-serif;letter-spacing:.14em;text-transform:uppercase;color:#7a5a00;margin-bottom:6px}
.opv-note-body{white-space:pre-wrap;text-transform:uppercase;font-weight:700;line-height:1.35}
.opv mark{background:var(--mark);color:inherit;padding:0 2px;border-radius:3px}
.opv-empty,.opv-text{color:var(--muted)}
.opv-msg{padding-top:18vh}
.opv-msg .btn{margin-top:18px}

/* Корзина (этап 9.1, js/trash.js): кнопка на главной и окно */
.home-trash .ic{width:16px;height:16px}
.trash-list{display:flex;flex-direction:column;gap:8px}
.trash-row{display:flex;align-items:center;gap:14px;padding:12px 14px;border:1px solid var(--line-2);border-radius:14px;background:var(--surface-2)}
.trash-info{flex:1;min-width:0}
.trash-title{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.trash-title.empty{color:var(--muted)}
.trash-meta,.trash-when{font-size:12px;color:var(--muted);margin-top:2px}
.trash-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.trash-meta .stchip{font-size:11px;padding:4px 8px}
.trash-when{color:var(--faint)}
.trash-acts{display:flex;gap:8px;flex-shrink:0}
.trash-empty{margin:4px 0 6px}
@media (max-width:620px){
  .trash-row{flex-direction:column;align-items:stretch}
  .trash-acts{justify-content:flex-end;flex-wrap:wrap}
}

/* Найти и заменить в конспекте (этап 9.6) */
.findbar{position:fixed;top:64px;right:16px;z-index:40;width:380px;max-width:calc(100vw - 24px);display:grid;gap:8px;padding:10px;background:var(--surface-2);border:1px solid var(--line-2);border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.5)}
.fb-row{display:flex;gap:6px;align-items:center}
.fb-row .input{flex:1;min-width:0}
.fb-count{font-size:12px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.fb-count.none{color:var(--danger)}
.fb-cs.on{background:var(--warn-bg);color:var(--warn)}
.findbar.ro .fb-rep{display:none}
::highlight(fr-cur){background-color:#ffde59;color:#141414}

/* Этап 9.7: «Копировать в пространство…» и окно «История» (js/cloud.js, js/versions.js) */
.copy-list{display:flex;flex-direction:column;gap:8px}
.copy-list .btn{justify-content:flex-start}
.ver-sheet{max-width:940px}
.ver-body{display:grid;grid-template-columns:240px 1fr;gap:14px;min-height:0}
.ver-list{display:flex;flex-direction:column;gap:4px;max-height:60vh;overflow:auto;padding-right:2px}
.ver-row{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;border:1px solid transparent;background:transparent;border-radius:12px;padding:9px 11px;cursor:pointer;color:var(--text)}
.ver-row:hover{background:var(--surface-2)}
.ver-row.on{background:var(--surface-2);border-color:var(--line-2)}
.ver-when{font-weight:600;font-size:13px}
.ver-who{font-size:12px;color:var(--muted)}
.ver-view{max-height:60vh;overflow:auto;border:1px solid var(--line-2);border-radius:14px;background:var(--surface-2);padding:14px 16px}
.ver-doc{--vs:.85}
.ver-doc .tv-card{padding:10px 14px}
.ver-title{font-weight:700;font-size:16px}
.ver-title.empty{color:var(--muted)}
.ver-meta{font-size:12px;color:var(--muted);margin:2px 0 12px}
.ver-slide{padding:10px 0;border-top:1px solid var(--line)}
.ver-cap{font-size:11px;font-weight:600;color:var(--faint);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}
.ver-speech{font-size:12px;color:var(--muted);margin-top:8px;white-space:pre-wrap}
.ver-note-op{font-size:12px;color:var(--muted);padding:8px 0;border-top:1px solid var(--line)}
.ver-empty{margin:4px 0 6px}
.ver-sheet .sheet-foot{align-items:center;gap:12px;margin-top:14px}
.ver-note{flex:1;font-size:12px}
@media (max-width:720px){
  .ver-body{grid-template-columns:1fr}
  .ver-list{max-height:30vh}
}
@media (max-width:440px){   /* четыре статуса (этап 9.7) на телефоне: уже, а если не влезают — прокрутка внутри переключателя */
  .stswitch{max-width:100%;overflow-x:auto;scrollbar-width:none}
  .stswitch::-webkit-scrollbar{display:none}
  .stswitch .sw-opt{padding:5px 6px;font-size:10.5px}
}

/* ---------- Правка и просмотр (этап 9.8) ----------
   Просмотр: поля правой панели и «Текст к слайду» серые, без рамки, текст приглушён, но читается; переключатели и выбранное
   в группах — тоже серые (правая панель и поле текста в просмотре — inert, lock.js). Правка: поля чуть светлее фона, с жёлтой рамкой.
   Слайды в ленте и на сцене одинаковые в обоих режимах */
.sv .side .bbody .input,.sv .side .bbody .rich,.sv .side .bbody .dfield{border-color:color-mix(in srgb, var(--accent) 38%, transparent);background:#1d1c1a}
.sv .side .bbody .input:hover,.sv .side .bbody .rich:hover,.sv .side .bbody .dfield:hover{border-color:color-mix(in srgb, var(--accent) 60%, transparent)}
.sv .side .bbody .input:focus,.sv .side .bbody .rich:focus,.sv .side .bbody .dfield:focus-visible{border-color:var(--accent)}
.sv .speech:has(.speech-text:not([inert])){border-color:color-mix(in srgb, var(--accent) 38%, transparent);background:#1a1918}
.sv .speech:has(.speech-text:not([inert]):focus){border-color:var(--accent)}
.sv .side .bbody[inert] .input,.sv .side .bbody[inert] .rich,.sv .side .bbody[inert] .dfield{background:var(--surface-3);border-color:transparent;color:#b9b0a4;box-shadow:none}
.sv .side .bbody[inert] .input::placeholder,.sv .side .bbody[inert] .rich:empty::before{color:#6f685f}
.sv .side .bbody[inert] select.input{background-image:none}
.sv .side .bbody[inert] .toggle{background:var(--surface-3);border-color:transparent}
.sv .side .bbody[inert] .toggle button{color:#8f877c}
.sv .side .bbody[inert] .toggle button.on{background:#3d3b38;color:#d6ccbf}
.sv .side .bbody[inert] .switch{color:#8f877c}
.sv .side .bbody[inert] .sw{background:var(--surface-3);border-color:transparent}
.sv .side .bbody[inert] .sw::after{background:#5c5750}
.sv .side .bbody[inert] .switch input:checked + .sw{background:#4a4743}
.sv .side .bbody[inert] .switch input:checked + .sw::after{background:#a39a8e}
.sv .side .bbody[inert] .vchip{background:var(--surface-3);border-color:transparent;color:#8f877c}
.sv .side .bbody[inert] .vchip.on{background:#4a4743;color:#e0d6c9}
.sv .side .bbody[inert] .chip{background:var(--surface-3);border-color:transparent;color:#b9b0a4}
.sv .side .bbody[inert] .chip.on{background:#4a4743;color:#e0d6c9}
.sv .side .bbody[inert] .btn{background:var(--surface-3);border-color:transparent;color:#8f877c}
.sv .speech:has(.speech-text[inert]){background:var(--surface-2);border-color:transparent}
.sv .speech:has(.speech-text[inert]) .speech-head{border-bottom-color:var(--line-2)}
.sv .rich.speech-text[inert]{color:#b9b0a4}
.sv .rich.speech-text[inert]:empty::before{color:#6f685f}
/* «Готово» в шапке — светлая кнопка (жёлтая «Редактировать» — в просмотре); под названием — «Правка · сохранено в 15:20» */
.btn.hd-done{background:var(--text);border-color:var(--text);color:#141414;font-weight:600}
.btn.hd-done:hover{background:#fff4e6;border-color:#fff4e6}
body.light .btn.hd-done{color:#fff}   /* «Текст» светлый: --text тёмный, кнопка — тёмная со светлой надписью (этап 10.1.3) */
body.light .btn.hd-done:hover{background:#3a3834;border-color:#3a3834}
.hd-sub.editing{color:var(--accent)}
/* Попытка править в просмотре: мягкая подсветка кнопки в шапке (lock.js, nudgeHead) — только opacity и transform */
.hd-act{position:relative}
.hd-act::after{content:"";position:absolute;inset:-5px;border-radius:999px;border:2px solid var(--accent);opacity:0;pointer-events:none}
.hd-act.nudge::after{animation:hd-nudge 1.1s var(--ease-out)}
@keyframes hd-nudge{0%{opacity:0;transform:scale(.92)}25%{opacity:.9;transform:scale(1.04)}55%{opacity:.6;transform:scale(1)}100%{opacity:0;transform:scale(1)}}
.hd-save.nudge{animation:hd-nudge-t 1.1s var(--ease-out)}
@keyframes hd-nudge-t{0%,100%{opacity:1}30%{opacity:.35}60%{opacity:1}}
@media (prefers-reduced-motion: reduce){
  .hd-act.nudge::after{animation:none!important;opacity:.9}
  .hd-save.nudge{animation:none!important;color:var(--text)}
}
/* Лента (этап 9.8): «+» между любыми слайдами, в том числе перед первым, — только при наведении и только в правке;
   в конце — пунктирная плашка размером с миниатюру «+ Добавить» */
.film-gap.first{height:12px}
.film-gap.first .film-ins{opacity:0}
.film-gap.first:hover .film-ins,.film-gap.first .film-ins:focus-visible{opacity:1}
@media (hover:none){ .film-gap.first .film-ins{opacity:.75} }   /* на сенсорном экране наведения нет: «+» видны всегда, как между слайдами */
.film-end{height:auto;padding:6px 6px 2px}
.film-end .film-ins.film-plate{position:static;transform:none;opacity:1;width:100%;height:auto;aspect-ratio:16/9;border-radius:7px;border:1px dashed var(--line-2);border-color:#4a463f;
  background:transparent;color:var(--muted);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:4px;font:500 11.5px/1.2 'Inter',sans-serif;white-space:nowrap}
.film-end .film-ins.film-plate .ic{width:15px;height:15px}
.film-end .film-ins.film-plate:hover,.film-end .film-ins.film-plate:focus-visible{border-style:dashed;border-color:var(--accent);color:var(--accent);background:color-mix(in srgb, var(--accent) 6%, transparent)}
@media (max-width:760px){
  .film-gap.first{width:16px;height:auto}
  .film-end{width:150px;align-self:flex-start;padding:6px}
}

/* ---------- Окно «Пространства» (этапы 10 и 10.1.2, space.js): слева пространства, справа люди, серии, общее ---------- */
.sheet.space-sheet{max-width:1160px}
.spw{display:grid;grid-template-columns:200px minmax(0,1fr);gap:20px;align-items:start}
.spw-side{display:flex;flex-direction:column;gap:12px;position:sticky;top:0}
.spw-list{display:flex;flex-direction:column;gap:2px}
.spw-item{border:0;background:transparent;text-align:left;padding:9px 12px;border-radius:10px;font:500 14px 'Inter',sans-serif;color:var(--muted);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.spw-item:hover,.spw-item:focus-visible{background:var(--surface-2);color:var(--text);outline:none}
.spw-item.on{background:var(--surface-3);color:var(--text)}
.spw-new{align-self:flex-start}
.spw-main{min-width:0}
.space-tabs{width:max-content;max-width:100%;margin:0 0 14px}
.space-tabs button{white-space:nowrap}
.sp-body > .hint{margin:0 0 12px}
.sp-table{display:flex;flex-direction:column;border:1px solid var(--line-2);border-radius:14px;overflow:hidden}
.sp-row{display:grid;gap:10px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line);font-size:13px;min-height:52px}
.sp-row:last-child{border-bottom:0}
.sp-row.sp-head{min-height:0;padding:9px 12px;color:var(--muted);font-size:12px;background:var(--surface-2)}
.sp-people .sp-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.3fr) minmax(0,1.4fr) 128px 116px 36px}
.sp-people .sp-add{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.3fr) minmax(0,1.4fr) 128px 162px}
.sp-series .sp-row{grid-template-columns:minmax(0,1.6fr) 130px minmax(0,1fr) 36px}
.sp-series .sp-add{grid-template-columns:minmax(0,1.6fr) auto}
.sp-row > .sp-err{grid-column:1 / -1;margin-top:-4px}
.sp-row .input{height:38px}
.sp-row .hf-sel select{height:36px}
.sp-tg{display:flex;align-items:center;gap:6px;min-width:0}
.sp-tg .input{flex:1;min-width:0}
.sp-tg .sp-check{flex:none}
.sp-mail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
.sp-role{color:var(--muted)}
.sp-seen{font-size:12px;color:var(--faint)}
.sp-seen.on{color:var(--muted)}
.sp-del-off{display:inline-flex}
.sp-del-off .icon-btn:disabled{opacity:.35;cursor:not-allowed}
.sp-fixed .sp-name{font-weight:500;padding-left:2px}
.sp-add{background:color-mix(in srgb, var(--accent) 5%, transparent)}
.sp-add .sp-err{grid-column:1 / -1}
.sp-err{color:var(--danger, #e07a6a);font-size:12px}
.sp-err:empty{display:none}
.sp-empty{padding:14px 12px;margin:0}
.sp-general{display:flex;flex-direction:column;gap:18px;max-width:560px}
.sp-general .hint{margin:6px 0 0}
.sp-general > .hint:first-child{margin:0}
.sp-danger .sp-err{margin:8px 0 0}
.sp-inline{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.sp-num{width:84px;text-align:center}

/* ---------- Отрывок по слайдам (этап 10.4) ---------- */
/* лента: части отрывка в обёртке, жёлтая скобка слева, подпись и значки над первой частью */
.pgroup{display:flex;flex-direction:column;gap:6px;padding-left:9px}
.pgroup::before{content:"";position:absolute;left:0;top:7px;bottom:6px;width:5px;border:2px solid var(--c-scripture);border-right:0;border-radius:6px 0 0 6px;opacity:.85}
.pg-head{position:relative;display:flex;align-items:center;gap:6px;min-height:24px;padding:0 4px;font:600 10.5px/1.3 'Inter',sans-serif;color:var(--c-scripture);letter-spacing:.02em}
.pg-cap{flex:1;min-width:0;overflow-wrap:anywhere}
.pg-head .st-acts{right:2px;top:50%;bottom:auto;transform:translateY(-50%);padding:2px;border-radius:9px;background:var(--bg)}
.pgroup:hover > .pg-head .st-acts,.pg-head:focus-within .st-acts{opacity:1;pointer-events:auto}
@media (hover:none){ .pg-head .st-acts{opacity:1;pointer-events:auto} }
.pg-body{display:flex;flex-direction:column;gap:6px}
.st-pn{position:absolute;left:6px;bottom:6px;z-index:2;font:700 10px/1 'Inter',sans-serif;background:rgba(0,0,0,.6);color:var(--c-scripture);padding:3px 5px;border-radius:5px}
/* справа: «Слайды отрывка», линии между стихами, список частей */
.split-sec{display:flex;flex-direction:column;gap:8px}
.split-sec .lbl{margin-bottom:0}
.split-sec.off{opacity:.45}
.split-sec .opt-row{display:flex;align-items:center;gap:10px}
.split-sec .parts{display:flex;flex-direction:column;gap:2px}
.part-row{display:flex;gap:4px;align-items:baseline;width:100%;padding:6px 8px;border:0;border-radius:8px;background:transparent;color:var(--muted);font:500 12px/1.3 'Inter',sans-serif;text-align:left;cursor:pointer}
.part-row:hover{background:var(--surface)}
.part-row.on{color:var(--text);background:color-mix(in srgb, var(--c-scripture) 14%, transparent)}
.pr-n{font-weight:700;color:var(--c-scripture)}
.verses.manual{gap:0}
.verses.manual .verse{margin:4px 0}
.vbreak{position:relative;display:block;width:100%;height:18px;margin:0;padding:0;border:0;background:transparent;cursor:pointer}
.vbreak::before{content:"";position:absolute;left:0;right:0;top:50%;border-top:1px dashed var(--line-2)}
.vbreak:hover::before{border-top-color:var(--muted)}
.vbreak.on::before,.vbreak.first::before{border-top:2px solid var(--c-scripture)}
.vbreak.first{cursor:default}
.vb-cap{position:absolute;left:8px;top:50%;transform:translateY(-50%);padding:0 6px;background:var(--surface);color:var(--c-scripture);font:700 9.5px/1.4 'Inter',sans-serif;letter-spacing:.1em;text-transform:uppercase}
.stage-info .split-now{margin-left:8px;vertical-align:middle}
/* «Текст»: части отрывка связаны полосой, над ними подпись; у каждой — плашка «Слайд 1 из 2 · на экране …» */
.tv-passage{position:relative;border-left:3px solid var(--c-scripture);padding-left:14px;margin:6px 0 6px -17px}
.tv-pcap{padding:14px 0 0;font-size:calc(12px * var(--vs));font-weight:600;color:var(--muted);letter-spacing:.02em}
.vs-part{display:inline-block;margin:6px 0 8px;padding:3px 9px;border-radius:99px;background:color-mix(in srgb, var(--c-scripture) 22%, transparent);font-size:calc(12px * var(--vs));font-weight:600}
/* PDF и страница оператора */
#print-op .op-v{margin:0 0 .8mm}
#print-op .op-part{display:inline-block;margin:1mm 0 1.4mm;padding:.5mm 2mm;border-radius:3mm;background:#f6ead9;font-size:7pt;font-weight:600;color:#7a5a37}
#print-op .op-passage{border-left:.9mm solid #e2b07a;padding-left:2.4mm;margin:3mm 0}
#print-op .op-pcap{font-size:7.5pt;font-weight:600;color:#8a6d45;padding-top:.5mm}
.opv-part{display:inline-block;margin:4px 0 6px;padding:2px 8px;border-radius:99px;background:color-mix(in srgb, var(--accent) 18%, transparent);font-size:12px;font-weight:600}

/* ---------- Телефон (этап 10.1.1) ----------
   Вид меняется только в узком окне (max-width:760px), а всё про скорость (стена-картинка, без размытия и движения) — только на телефоне:
   касание без наведения (то же условие, что isPhone() в util.js). На компьютере ничего не меняется, даже в узком окне: стена остаётся стеной */
.hd-sq,.sq-close,.hd-break{display:none}
.menu button.only-sm,.menu .only-sm{display:none}
.hb-img{position:absolute;inset:0;background:url("../img/wall-phone.webp") center top / cover no-repeat;opacity:0;transition:opacity .6s ease-out}
.hb-img.ready{opacity:1}
.hb-img.plain{background:linear-gradient(180deg,#191715 0%,var(--bg) 70%)}   /* у пространства свой фон по умолчанию: картинка со стандартным фоном была бы «чужой» */
@media (max-width:760px){
  /* поля не меньше 16 px: иначе iPhone увеличивает страницу при касании */
  input,select,textarea{font-size:16px!important}
  .rich.speech-text{font-size:16px}
  .rich.prose{font-size:max(16px, calc(16px * var(--vs)))}
  .rich.prose.lead{font-size:max(16px, calc(17px * var(--vs)))}
  input,select,textarea,.rich{scroll-margin-top:130px;scroll-margin-bottom:24px}   /* поле в фокусе не прячется под липкой шапкой (phone.js) */

  /* меню «⋯»: под шапкой, у правого края окна, с прокруткой; top и max-height — placeMenu (misc.js) */
  .menu{position:fixed;right:max(8px, env(safe-area-inset-right));top:56px;min-width:min(260px, calc(100vw - 16px));max-width:calc(100vw - 16px);overflow-y:auto;overscroll-behavior:contain}
  .menu button{padding:12px;font-size:15px}
  .menu button.only-sm{display:flex}
  .menu .menu-sep.only-sm{display:block}

  /* главная: одна строка — знак, пространство, поиск, «⋯» */
  .topbar.is-home{flex-wrap:nowrap;gap:8px;min-height:56px;padding:8px max(12px, env(safe-area-inset-right)) 8px max(12px, env(safe-area-inset-left))}
  .topbar.is-home .logo .logo-t,.topbar.is-home .hd-help,.topbar.is-home .who{display:none}
  .topbar.is-home .grow{flex:1 1 0;min-width:0}
  .topbar.is-home .search{display:none}
  .hd-sq{display:inline-grid}
  .topbar.is-home.sq-open > :not(.search){display:none}   /* поиск раскрыт: поле на всю шапку, с крестиком */
  .topbar.is-home.sq-open .search{display:flex;flex:1}
  .search input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;display:none}   /* свой крестик «Закрыть поиск» вместо встроенного */
  .topbar.is-home.sq-open .sq-close{display:inline-grid;flex:none;width:30px;height:30px;margin-right:-8px}
  .org-sel{min-width:0;flex:0 1 auto}
  .org-pick{max-width:46vw}

  /* конспект: две строки. 1-я — знак, название, «⋯»; 2-я — «Слайды / Текст», статус, «Редактировать / Готово» */
  .topbar:not(.is-home){flex-wrap:wrap;gap:8px 6px;min-height:0;padding:8px max(10px, env(safe-area-inset-right)) 8px max(10px, env(safe-area-inset-left))}
  .topbar:not(.is-home) .hd-back,.topbar:not(.is-home) .vsep,.topbar:not(.is-home) .grow,.topbar:not(.is-home) .hist,.topbar:not(.is-home) .hd-check{display:none!important}
  .topbar:not(.is-home) .logo-only{order:0}
  .topbar:not(.is-home) .hd-title{order:1;flex:1 1 0;min-width:0;max-width:none}
  .topbar:not(.is-home) .hd-name{max-width:100%;font-size:16px}
  .topbar:not(.is-home) .actions{order:2;margin-left:auto}
  .topbar:not(.is-home) .hd-break{display:block;order:3;flex:0 0 100%;height:0}
  .topbar:not(.is-home) .seg{order:4;flex:none}
  .topbar:not(.is-home) .seg button{padding:0 9px}
  .topbar:not(.is-home) .stdrop,.topbar:not(.is-home) .stswitch{order:5;flex:1 1 0;min-width:96px;max-width:max-content}   /* длинный статус («Презентация готова») ужимается с многоточием, а не переносит кнопку на третью строку */
  .topbar:not(.is-home) .stdrop{padding:7px 8px 7px 10px}
  .topbar:not(.is-home) .stdrop .dtext{overflow:hidden;text-overflow:ellipsis}
  .topbar:not(.is-home) .hd-act{order:6;flex:none;margin-left:auto;padding-left:10px;padding-right:10px}
  .topbar:not(.is-home) .hd-act .ic{display:none}
  .jpg-btn,.speech-toggle,.stage-info{display:none!important}   /* выгрузку делает Виталий с компьютера; «Развернуть» не нужно: поле растёт по тексту */

  /* «Текст к слайду» растёт по тексту, не меньше ~5 строк, без внутренней прокрутки */
  .speech{min-height:0}
  .rich.speech-text{line-height:1.6;min-height:calc(5 * 1.6em + 24px)}
  body:not(.ro) .rich.prose{min-height:3.4em;padding-top:6px;padding-bottom:6px}   /* в «Тексте» поле открывается касанием: цель крупнее одной строки */

  /* окна по видимой части экрана, низ не под панелью Safari */
  .overlay{padding:12px max(12px, env(safe-area-inset-right)) max(12px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left))}
  .sheet{max-height:calc(100vh - 24px - env(safe-area-inset-bottom));max-height:calc(100dvh - 24px - env(safe-area-inset-bottom));padding:16px 16px calc(16px + env(safe-area-inset-bottom))}

  /* окно «Пространства»: список пространств — полосой сверху; полосы прокручиваются вбок; строки таблиц — в две колонки, без шапки */
  .spw{grid-template-columns:minmax(0,1fr);gap:12px}
  .spw-side{position:static;flex-direction:row;align-items:center;gap:8px}
  .spw-list{flex-direction:row;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .spw-list::-webkit-scrollbar{display:none}
  .spw-item{flex:0 0 auto;max-width:70vw}
  .spw-new{flex:none}
  .space-tabs{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .space-tabs::-webkit-scrollbar{display:none}
  .space-tabs button{flex:0 0 auto}
  .sp-head{display:none !important}
  .sp-people .sp-row{grid-template-columns:1fr 1fr 36px}   /* имя, фамилия / почта / Telegram / роль, вход, корзина */
  .sp-people .sp-row > :nth-child(2){grid-column:2 / -1}
  .sp-people .sp-row > :nth-child(3),.sp-people .sp-row > :nth-child(4){grid-column:1 / -1}
  .sp-people .sp-add{grid-template-columns:1fr 1fr}
  .sp-series .sp-row{grid-template-columns:1fr auto}
  .sp-series .sp-add{grid-template-columns:1fr}
}
@media (hover:none) and (pointer:coarse) and (max-width:760px){
  /* скорость: стена — картинка (motion.js, homeBg), зерна и дымки нет; под окнами без размытия; зерно входа стоит */
  .hb-grain,.hb-haze{display:none}
  .overlay{background:rgba(5,7,12,.75);backdrop-filter:none;-webkit-backdrop-filter:none}
  .gate-grain{animation:none}
}
@media (max-width:760px){
  /* отрывок в ленте-строке (этап 10.4): части рядом, скобка снизу слева, подпись над ними */
  .st-box.pgroup{width:auto;padding:0 0 0 9px}
  .pg-body{flex-direction:row}
  .pgroup .ppart{width:150px}
  .pg-cap{white-space:nowrap}
}
