/* С-302 (A2 · Е2а, Е2б, Е2в) · SPEC-161 §12 «Дизайн»: пространство «Мастерская» (сервис 01 «Контент-Движ», цвет сервиса — токены
   `--kd-service-script-*` оболочки, #7556C7) и страницы приглашения и гостя без оболочки. Поверх styles.css (токены, кнопки, поля,
   плашки брендбука v1.2) и shell.css (цвета сервисов). Здесь нет ни литерального HEX, ни `rgb()`, ни `!important`: цвет — только токены
   `--kd-*`. Классы — `ws-…` или внутри `.kd-space-workshop` (корень пространства, его ставит оболочка). Контролы ≥ 44 px, радиус 8,
   фокус — синяя рамка 3 px. 1440 px — сетка карточек и колонки; 375 px — одна колонка, вкладки прокручиваются по горизонтали,
   страница по горизонтали не прокручивается. Статус — плашкой с текстом, ошибка — словами у поля, необратимое — с подтверждением. */

.kd-space-workshop,.ws-host{min-width:0}
.ws-screen{display:flex;flex-direction:column;gap:20px;min-width:0}
.ws-screen>*{min-width:0}
.ws-message{max-width:680px;padding-top:8px}
.ws-message h1{margin:6px 0 12px}

/* ---------- Заголовок: полоса сервиса, надзаголовок, h1, главное действие ---------- */
.ws-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px;margin:6px 0 0;padding:2px 0 2px 16px;border-left:4px solid var(--kd-service-script-accent)}
.ws-head-text{flex:1 1 320px;min-width:0}
.ws-head h1{margin:4px 0 0;overflow-wrap:anywhere}
.ws-head .eyebrow{color:var(--kd-service-script-ink)}
.ws-sub{margin:6px 0 0;font-size:.9375rem;color:var(--kd-color-muted)}
.ws-sub:empty{display:none}
.ws-actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.ws-crumbs a{display:inline-flex;align-items:center;min-height:var(--kd-control-h);color:var(--kd-service-script-ink);font-weight:700;text-decoration:none}
.ws-crumbs a:hover{color:var(--kd-color-ink);text-decoration:underline}
.ws-flash:empty{display:none}
.ws-flash .notice{margin:0}

/* Ссылка в виде кнопки: тот же размер и вид, что у `button`. */
.ws-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--kd-control-h);padding:0 var(--kd-control-px);border:1px solid var(--kd-color-border);border-radius:var(--kd-radius-control);background:var(--kd-color-white);color:var(--kd-color-ink);font-size:.9375rem;font-weight:700;line-height:1.2;text-align:center;text-decoration:none;white-space:nowrap;transition:background-color var(--kd-motion-fast),border-color var(--kd-motion-fast)}
.ws-btn:hover{background:var(--kd-color-surface);border-color:var(--kd-color-ink);color:var(--kd-color-ink)}
.ws-btn.primary{background:var(--kd-action-accent);border-color:var(--kd-action-accent);font-weight:800;color:var(--kd-action-on)}
.ws-btn.primary:hover{background:var(--kd-action-hover);border-color:var(--kd-action-hover);color:var(--kd-action-on)}
.ws-btn.quiet{background:transparent;border-color:transparent;color:var(--kd-color-muted);padding:0 12px}
.ws-btn.quiet:hover{background:var(--kd-color-surface);color:var(--kd-color-ink)}

/* ---------- Карточки, формы ---------- */
.ws-card{min-width:0;padding:20px 24px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card)}
.ws-card>h2{margin-top:0}
.ws-card h3{margin-top:0}
.ws-form{display:flex;flex-direction:column;gap:16px}
.ws-form>h2,.ws-form>h3{margin:0}
.ws-form-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.ws-form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.ws-form-part{display:flex;flex-direction:column;gap:16px}
.ws-form .crew-out{margin:0}
.ws-error{margin:0;color:var(--kd-status-error-ink);font-weight:700}
.ws-status{min-height:1.5em;margin:12px 0 0;font-weight:600}
.ws-status:empty{display:none}
.ws-confirm{margin:16px 0 0}
.ws-confirm p{margin:0 0 12px}
.ws-retry{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.ws-retry .notice{margin:0}

/* ---------- «Мои проекты»: сетка карточек ---------- */
.ws-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:16px;margin:0;padding:0;list-style:none}
.ws-grid-item{display:flex;min-width:0}
.ws-grid-item>*{flex:1 1 auto}
.ws-project{display:flex;flex-direction:column;gap:12px}
.ws-project-title{margin:0;font-size:1.125rem;line-height:1.3;overflow-wrap:anywhere}
.ws-project-title a{color:var(--kd-color-ink);text-decoration:none}
.ws-project-title a:hover{color:var(--kd-service-script-ink);text-decoration:underline}
.ws-meta{margin:0;font-size:.875rem;line-height:1.4;color:var(--kd-color-muted)}
.ws-tags{display:flex;flex-wrap:wrap;gap:6px}
.ws-tags .tag{white-space:normal}
.ws-script-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.ws-script-list li{overflow-wrap:anywhere}
.ws-script-list a{display:inline-block;padding:4px 0;color:var(--kd-service-script-ink);font-weight:600;text-decoration:none}
.ws-script-list a:hover{text-decoration:underline}
.ws-more{font-size:.875rem;color:var(--kd-color-muted)}
.ws-project .ws-btn{align-self:flex-start;margin-top:auto}

/* ---------- Страница проекта: вкладки (на 375 px прокручиваются по горизонтали), список сценариев ---------- */
.ws-tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--kd-color-line)}
.ws-tabs a{flex:0 0 auto;display:inline-flex;align-items:center;min-height:var(--kd-control-h);padding:0 16px;border-bottom:3px solid transparent;color:var(--kd-color-muted);font-weight:700;text-decoration:none;white-space:nowrap}
.ws-tabs a:hover{color:var(--kd-color-ink)}
.ws-tabs a[aria-current=page]{border-radius:var(--kd-radius-control) var(--kd-radius-control) 0 0;background:var(--kd-service-script-surface);color:var(--kd-service-script-ink);border-bottom-color:var(--kd-service-script-accent)}
.ws-tabs a:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:-3px}
/* С-323 Т-8: второй ряд «Ещё» */
.ws-tabs-more{flex:0 0 100%;display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-top:4px;border-top:1px dashed var(--kd-color-line)}
.ws-tabs-more a{min-height:calc(var(--kd-control-h) - 8px);font-size:.875rem}
.ws-tabs-more-label{padding:0 8px 0 16px;color:var(--kd-color-muted);font-size:.875rem;font-weight:700}
.ws-panel{min-width:0}
.ws-rows{display:grid;gap:12px;margin:0;padding:0;list-style:none}
.ws-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 16px;align-items:center}
.ws-row-main{min-width:0}
.ws-row-title{margin:0 0 8px;font-size:1.0625rem;overflow-wrap:anywhere}
.ws-row-title a{color:var(--kd-color-ink);text-decoration:none}
.ws-row-title a:hover{color:var(--kd-service-script-ink);text-decoration:underline}
.ws-row .ws-tags{margin-bottom:6px}
.ws-missing{max-width:680px}
.ws-missing h1{margin:0 0 12px}
.ws-stub{max-width:680px}
.ws-stub .ws-actions{margin-top:16px}

/* ---------- «Участники» (Е2б): люди, приглашения, форма; «Обмен»: колонки и подтверждения ---------- */
.ws-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-top:16px}
.ws-column,.ws-block{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-column>h3,.ws-block>h3{margin:0}
.ws-block>p{margin:0}
.ws-confirm{margin:16px 0 0}
.ws-confirm p{margin:0 0 12px}
.ws-confirm:focus{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-access-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px}
.ws-access-head h2{margin:0}
.ws-access>.ws-sub{margin:8px 0 0;max-width:640px}
.ws-owner-only-note{margin:16px 0 0}
.ws-access-body{display:flex;flex-direction:column;gap:20px;margin-top:16px}
.ws-access-flash:empty{display:none}
.ws-access-flash{display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.ws-access-flash:focus{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-access-flash .notice{margin:0;align-self:stretch}
.ws-access-flash>p{margin:0}
.ws-access .ws-columns{margin-top:0}
.ws-people-box{display:flex;flex-direction:column;align-items:flex-start;gap:12px;min-width:0}
.ws-people-box>.notice{margin:0;align-self:stretch}
.ws-people-box>.empty{align-self:stretch;padding:24px 16px;border:1px dashed var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-people{display:flex;flex-direction:column;align-self:stretch;gap:8px;margin:0;padding:0;list-style:none}
.ws-person{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 16px;align-items:center;padding:12px 16px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-surface)}
.ws-person-main{display:flex;flex-direction:column;gap:4px;min-width:0}
.ws-person-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.ws-person-name{font-size:1rem;line-height:1.35;overflow-wrap:anywhere}
.ws-person-side{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.ws-person>.ws-confirm{grid-column:1/-1;margin:4px 0 0}
.ws-invite{display:flex;flex-direction:column;gap:16px;max-width:960px;padding-top:20px;border-top:1px solid var(--kd-color-line)}
.ws-invite>h3{margin:0}
.ws-invite-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:start}
.ws-invite-grid>.crew-field.wide{grid-column:span 2}
.ws-invite .crew-out{margin:0}
.ws-invite .crew-out:focus{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-summary{margin:0}
.ws-summary-question{font-weight:800}
.ws-summary.ws-repeat{border-color:var(--kd-status-warning-line);background:var(--kd-status-warning-surface)}
.ws-repeat-warning{color:var(--kd-status-warning-ink)}
.kd-space-workshop input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):disabled{background:var(--kd-color-disabled);border-color:var(--kd-color-disabled);color:var(--kd-color-muted)}
/* ---------- «Обмен» (Е2в): файл, итог проверки, замечания, экспорт ---------- */
.ws-exchange .ws-block .notice{margin:0}
.ws-file{position:relative;display:inline-flex}
.ws-file-input{position:absolute;inline-size:1px;block-size:1px;margin:0;padding:0;border:0;opacity:0;overflow:hidden;clip-path:inset(50%)}
.ws-exchange .ws-file-label{display:inline-flex;align-items:center;justify-content:center;min-height:var(--kd-control-h);margin:0;padding:0 var(--kd-control-px);border:1px solid var(--kd-color-border);border-radius:var(--kd-radius-control);background:var(--kd-color-white);color:var(--kd-color-ink);font-size:.9375rem;font-weight:700;letter-spacing:0;line-height:1.2;text-align:center;text-transform:none;cursor:pointer;transition:background-color var(--kd-motion-fast),border-color var(--kd-motion-fast)}
.ws-exchange .ws-file-label:hover{background:var(--kd-color-surface);border-color:var(--kd-color-ink)}
.ws-file-input:focus-visible+.ws-file-label{outline:3px solid var(--kd-color-focus);outline-offset:3px}
.ws-file-input:disabled+.ws-file-label{background:var(--kd-color-disabled);border-color:var(--kd-color-disabled);color:var(--kd-color-muted);cursor:not-allowed}
.ws-file-info{overflow-wrap:anywhere}
.ws-exchange .field-error{margin:0}
.ws-result{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-surface)}
.ws-result:empty{display:none}
.ws-result:focus{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-result>*{margin:0}
.ws-result-title{font-size:1.0625rem}
.ws-scene-list{display:grid;gap:4px;padding-left:24px;overflow-wrap:anywhere}
.ws-problems-title{margin:0 0 8px;font-weight:800}
.ws-note-list{display:grid;gap:8px;margin:0;padding:0;list-style:none;overflow-wrap:anywhere}
.ws-note-list .tag{margin-right:4px}
.ws-problem-link{white-space:nowrap;font-weight:600}
.ws-export-out{display:flex;flex-direction:column;gap:12px}
/* С-323 Т-2/Т-9: загрузка — одна колонка; вставка текста и экспорт в Fountain свёрнуты */
.ws-exchange .ws-columns{grid-template-columns:minmax(0,1fr)}
/* С-324 з: этапы «1 Загрузка → 2 Правильная запись → 3 Экспорт» — кнопки с номерами; текущий — в цвете сервиса, пройденные — тёмным текстом */
.ws-exchange-steps{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px;padding:0;list-style:none;counter-reset:none}
.ws-exchange-steps .ws-step{display:inline-flex;align-items:center;gap:8px;min-height:var(--kd-control-h);padding:0 14px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-white);color:var(--kd-color-muted);font-size:.9375rem;font-weight:700;line-height:1.2;cursor:pointer}
.ws-exchange-steps .ws-step:hover:not(:disabled){border-color:var(--kd-color-ink)}
.ws-exchange-steps .ws-step.done{color:var(--kd-color-ink)}
.ws-exchange-steps .ws-step[aria-current=step]{border-color:var(--kd-service-script-accent);background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
.ws-exchange-steps .ws-step:disabled{cursor:not-allowed;opacity:.6}
.ws-exchange-steps .ws-step:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-step-n{display:inline-flex;align-items:center;justify-content:center;inline-size:24px;block-size:24px;border-radius:50%;border:1px solid currentColor;font-size:.8125rem}
.ws-stage[hidden]{display:none}
.ws-stage{display:flex;flex-direction:column;gap:16px;min-width:0}
/* С-324 в: файл и вставка текста — две равные крупные карточки рядом */
/* С-326: «Новый проект» — первый шаг «Написать сценарий» / «Загрузить файл» */
.ws-first-step{display:flex;flex-wrap:wrap;gap:4px 24px;margin:0;padding:0;border:0;min-width:0}
.ws-first-step legend{padding:0;margin:0 0 4px;font-weight:700}
.ws-step-option{display:inline-flex;align-items:center;gap:8px;min-height:44px;cursor:pointer}
.ws-first-step .crew-hint{flex-basis:100%;margin:0}
.ws-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.ws-choices>.ws-file{display:flex}
/* С-327 Д2: «Проект КИТ Сценариста» — третий пункт во всю ширину, ниже основных */
.ws-choices>.ws-kit{grid-column:1/-1}
.ws-exchange .ws-kit .ws-choice{min-height:56px}
.ws-exchange .ws-choice{display:flex;flex:1 1 auto;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;min-height:88px;margin:0;padding:16px 20px;border:1px solid var(--kd-color-border);border-radius:var(--kd-radius-card);background:var(--kd-color-white);color:var(--kd-color-ink);font:inherit;text-align:left;text-transform:none;letter-spacing:0;cursor:pointer;transition:background-color var(--kd-motion-fast),border-color var(--kd-motion-fast)}
.ws-exchange .ws-choice:hover:not(:disabled){background:var(--kd-color-surface);border-color:var(--kd-color-ink)}
.ws-exchange .ws-choice[aria-expanded=true]{border-color:var(--kd-service-script-accent);background:var(--kd-service-script-surface)}
.ws-exchange .ws-choice:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:3px}
.ws-exchange .ws-choice:disabled{background:var(--kd-color-disabled);border-color:var(--kd-color-disabled);color:var(--kd-color-muted);cursor:not-allowed}
.ws-choice-title{font-size:1.0625rem;font-weight:800;line-height:1.3}
.ws-choice-sub{font-size:.875rem;font-weight:400;color:var(--kd-color-muted);overflow-wrap:anywhere}
.ws-paste{display:flex;flex-direction:column;gap:8px}
.ws-paste[hidden],.ws-edit[hidden],.ws-export[hidden]{display:none}
.ws-paste textarea,.ws-edit textarea{inline-size:100%;box-sizing:border-box;font-family:'Courier New',monospace;font-size:1rem;line-height:1.45}
/* С-324 г/е: правка текста до загрузки, титул отдельной строкой */
.ws-edit{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--kd-service-script-line);border-radius:var(--kd-radius-control);background:var(--kd-color-white)}
.ws-edit>p{margin:0}
.ws-title-page{font-weight:700;overflow-wrap:anywhere}
.ws-preview-blocks>summary{cursor:pointer;font-weight:600}
/* С-324 ё/з: текущий сценарий со ссылкой «другой сценарий», подробности ответа Пети AI, экспорт в конце */
.ws-upload-current-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}
.ws-upload-current{margin:0;font-weight:700;overflow-wrap:anywhere}
.ws-exchange .ws-link-btn{min-height:auto;padding:0;border:0;background:none;color:var(--kd-service-script-ink);font-size:.9375rem;font-weight:600;text-decoration:underline;cursor:pointer}
.ws-exchange .ws-link-btn:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-upload-details>summary,.ws-upload-formatted>summary{cursor:pointer;font-weight:600}
.ws-upload-details[hidden],.ws-upload-formatted[hidden],.ws-upload-title-page[hidden]{display:none}
.ws-final{display:flex;flex-direction:column;gap:12px}
.ws-final>h3,.ws-final>p{margin:0}
.ws-final-actions .primary,.ws-final-actions .secondary{min-height:48px}
.ws-upload-plan{display:flex;flex-direction:column;gap:12px}
.ws-upload-impact:empty{display:none}
.ws-export-out:empty{display:none}
.ws-export-out>*{margin:0}
.ws-source{display:flex;flex-direction:column;gap:12px;padding-top:16px;border-top:1px solid var(--kd-color-line)}
.ws-source>h4,.ws-source>p{margin:0}
.ws-retry-box:empty,.ws-created:empty{display:none}
.ws-retry-box{display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.ws-retry-box .notice{align-self:stretch}
.ws-created:focus{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-exchange .crew-out:empty{display:none}

/* ---------- Страницы без оболочки: /workshop/invite и /workshop/guest ---------- */
body.ws-page{margin:0;min-height:100vh;background:var(--kd-color-paper);color:var(--kd-color-ink)}
.ws-page-top{background:var(--kd-color-graphite);border-bottom:4px solid var(--kd-svc-stripe)}
.ws-page-top-in{display:flex;flex-wrap:wrap;align-items:center;gap:4px 16px;max-width:1180px;margin:0 auto;padding:8px clamp(16px,3vw,32px)}
.ws-page-brand{display:inline-flex;align-items:center;min-height:var(--kd-control-h);border-radius:var(--kd-radius-control)}
.ws-page-brand img{display:block;width:176px;max-width:100%;height:auto}
.ws-page-brand:focus-visible,.ws-page-top button:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-page-badge{padding:2px 0 2px 12px;border-left:1px solid var(--kd-top-line);font-size:.8125rem;font-weight:700;color:var(--kd-top-muted)}
.ws-page-tools{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto}
.ws-page-top button{min-height:var(--kd-control-h);padding:0 14px;background:transparent;border:1px solid var(--kd-top-line);color:var(--kd-color-on-graphite)}
.ws-page-top button:hover:not(:disabled){background:var(--kd-top-hover);border-color:var(--kd-top-muted);color:var(--kd-color-on-graphite)}
.ws-page-top button:disabled{background:transparent;border-color:var(--kd-top-line);color:var(--kd-top-muted)}
.ws-page-main{max-width:720px;margin:0 auto;padding:28px clamp(16px,3vw,32px) 56px}
.ws-page-main.wide{max-width:900px}
.ws-page-card{padding:24px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card)}
.ws-page-card h1{margin:6px 0 16px}
.ws-page-card form{display:flex;flex-direction:column;gap:16px;margin:16px 0}
.ws-page-card form button{align-self:flex-start}
.ws-page-card>button,.ws-page-card>p>a.ws-btn{margin-top:4px}
.ws-page-card p{margin:0 0 12px}
.ws-page-card .ws-actions{margin-top:8px}
.ws-countdown:empty{display:none}
/* Приглашение (Е2в): три шага, на экране один шаг и одно главное действие. */
.ws-steps{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 8px;padding:0;list-style:none}
.ws-steps li{padding:6px 12px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);font-size:.875rem;font-weight:700;color:var(--kd-color-muted)}
.ws-steps li.done{color:var(--kd-color-ink)}
.ws-steps li[aria-current=step]{border-color:var(--kd-service-script-accent);background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
.ws-step-of{margin:0 0 4px;font-size:.875rem;color:var(--kd-color-muted)}
.ws-step-of:empty{display:none}
.ws-lead{font-size:1.0625rem;line-height:1.5;overflow-wrap:anywhere}
.ws-lead:empty{display:none}
.ws-field{display:flex;flex-direction:column;min-width:0}
.ws-field label{margin-bottom:0}
.ws-field label>input{margin-top:6px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--kd-color-ink)}
.ws-field .fine{margin:6px 0 0}
.ws-field .fine:empty{display:none}
.ws-field .field-error{margin:6px 0 0}
.ws-page-card .notice:empty{display:none}
/* Гость (Е2в): текст версии в типографике сценария — моноширинный шрифт, отступы и ширины блоков — те же доли строки печати (58 знаков), что в редакторе и экспорте (С-335 A), ремарка в скобках,
   переход вправо; имя персонажа, ремарки и реплика — одна группа `ws-dialogue`. Печать сценария — не эти стили, а общая печатная форма ниже (Е3б). */
.ws-guest-meta{margin:0 0 4px;font-size:.875rem;color:var(--kd-color-muted)}
.ws-guest-meta:empty{display:none}
.ws-page-main>.ws-lead{margin:8px 0 0}
.ws-sheet{max-width:760px;margin:20px 0 0;padding:40px 56px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card);font-family:"Cousine","Courier New",Courier,monospace;font-size:1rem;line-height:1.5;color:var(--kd-color-ink)}
.ws-sheet p{margin:0 0 1em;white-space:pre-wrap;overflow-wrap:anywhere}
.ws-sheet .ws-scene-heading{margin:1.75em 0 .75em;font-family:inherit;font-size:1rem;font-weight:700;letter-spacing:0;line-height:1.4;text-transform:uppercase;overflow-wrap:anywhere}
.ws-sheet .ws-scene:first-child .ws-scene-heading{margin-top:0}
.ws-sheet .ws-scene{max-width:34.8rem;margin-inline:auto}
.ws-dialogue{margin:0 0 1em}
.ws-dialogue p{margin-bottom:0}
.ws-sheet .ws-b-character{max-width:53.45%;margin-left:45.82%;margin-bottom:0;text-transform:uppercase;font-weight:700}
.ws-sheet .ws-b-parenthetical{max-width:44.83%;margin-left:34.48%;margin-bottom:0;font-style:italic}
.ws-sheet .ws-b-dialogue{max-width:48.28%;margin-left:25.45%}
.ws-sheet .ws-dialogue .ws-b-dialogue{margin-bottom:0}
.ws-sheet .ws-b-transition{margin-left:65.52%;text-align:right;text-transform:uppercase;font-weight:700}
/* С-326 А1: песня — курсивом по ширине реплики, план — прописными, «Персонажи сцены» — приглушённо; двойной диалог — две колонки рядом. */
.ws-sheet .ws-b-lyrics{max-width:48.28%;margin-left:25.45%;font-style:italic}
.ws-sheet .ws-dialogue .ws-b-lyrics{margin-bottom:0}
.ws-sheet .ws-b-shot{text-transform:uppercase;font-weight:700}
.ws-sheet .ws-b-scene_characters{color:var(--kd-color-muted);text-transform:uppercase}
.ws-dual{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 6.9%;margin:0 0 1em}
.ws-sheet .ws-dual .ws-b-character{max-width:none;margin-left:22.22%}
.ws-sheet .ws-dual .ws-b-parenthetical{max-width:none;margin-left:11.11%}
.ws-sheet .ws-dual .ws-b-dialogue,.ws-sheet .ws-dual .ws-b-lyrics{max-width:none;margin-left:0}
.ws-dual>.ws-dialogue{margin:0}
.ws-sheet .ws-dual .ws-b-dialogue,.ws-sheet .ws-dual .ws-b-lyrics,.ws-sheet .ws-dual .ws-b-parenthetical{max-width:none}
.ws-sheet .ws-b-note{padding:8px 12px;border-left:3px solid var(--kd-status-warning-ink);border-radius:0 var(--kd-radius-doc) var(--kd-radius-doc) 0;background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink);font-family:var(--kd-font-body);font-size:.875rem}

/* ---------- Узкий экран (375 px): одна колонка, контролы во всю ширину ---------- */
@media (max-width:760px){
  .ws-form-grid,.ws-form-row,.ws-columns{grid-template-columns:minmax(0,1fr)}
  .ws-grid{grid-template-columns:minmax(0,1fr)}
  .ws-card,.ws-page-card{padding:16px}
  .ws-sheet{padding:24px 16px}
  .ws-sheet .ws-b-parenthetical{max-width:72%}
  .ws-sheet .ws-b-dialogue{max-width:90%}
  .ws-file{display:flex}
  .ws-exchange .ws-file-label{flex:1 1 auto}
  .ws-choices{grid-template-columns:minmax(0,1fr)}
  .ws-exchange .ws-choice{min-height:72px}
  .ws-exchange-steps{gap:6px}
  .ws-exchange-steps .ws-step{padding:0 10px;font-size:.875rem}
  .ws-final-actions button{flex:1 1 auto}
  .ws-block .ws-actions button,.ws-retry-box .ws-actions button{flex:1 1 auto}
  .ws-steps{gap:6px}
  .ws-steps li{padding:6px 8px;font-size:.8125rem}
  .ws-head{padding-left:12px}
  .ws-head .ws-actions,.ws-head .ws-actions button{width:100%}
  .ws-form .ws-actions button,.ws-form .ws-actions .ws-btn{flex:1 1 auto}
  .ws-row{grid-template-columns:minmax(0,1fr)}
  .ws-row .ws-btn{justify-self:start}
  .ws-person{grid-template-columns:minmax(0,1fr)}
  .ws-person-side{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between}
  .ws-person-side button{flex:1 1 auto}
  .ws-invite-grid{grid-template-columns:minmax(0,1fr)}
  .ws-invite-grid>.crew-field.wide{grid-column:auto}
  .ws-access-head .ws-actions,.ws-access-head .ws-actions button{width:100%}
  .ws-access-head .ws-actions button{flex:1 1 0}
  .ws-summary .ws-actions button,.ws-confirm .ws-actions button{flex:1 1 auto}
  .ws-page-brand img{width:148px}
  .ws-page-badge{display:none}
  .ws-page-tools{width:100%;margin-left:0}
  .ws-page-tools button{flex:1 1 0}
  .ws-page-card form button{align-self:stretch}
}

/* С-317: печатные страницы A4; 55 строк по 12 pt в полях 37,5/25/25/25 мм. Заголовок страницы расположен в верхнем поле. */
.ws-print{display:none}
@page{size:A4;margin:25mm 25mm 25mm 37.5mm}
@media print{
  /* С-330 Б2: досье персонажей — `.ws-dossier-print` в конце <body>, класс `ws-dossier-printing` прячет остальное. */
  .ws-dossier-printing{display:block;height:auto;min-height:0;margin:0;padding:0;overflow:visible;background:var(--kd-color-white);color:var(--kd-color-ink)}
  .ws-dossier-printing>:not(.ws-dossier-print){display:none}
  .ws-dossier-printing>.ws-dossier-print{display:block;font-family:var(--kd-font-body);font-size:10.5pt;line-height:1.4;color:var(--kd-color-ink)}
  .ws-dossier-print h1{margin:0 0 12pt;font-size:18pt}
  .ws-dossier-print .ws-dossier-entry{margin:0 0 14pt;break-inside:avoid;page-break-inside:avoid}
  .ws-dossier-print .ws-dossier-head{display:flex;gap:12pt;align-items:flex-start}
  .ws-dossier-print .ws-dossier-photo{width:30mm;height:30mm;object-fit:cover}
  .ws-dossier-print h2{margin:0 0 4pt;font-size:14pt}
  .ws-dossier-print dt{font-weight:700;margin-top:4pt}
  .ws-dossier-print dd{margin:0;white-space:pre-wrap}
  /* С-327 В2: PDF-страница отчёта «Статистика и диаграммы» — `.ws-stats-print` в конце <body>, класс `ws-stats-printing` прячет остальное. */
  .ws-stats-printing{display:block;height:auto;min-height:0;margin:0;padding:0;overflow:visible;background:var(--kd-color-white);color:var(--kd-color-ink)}
  .ws-stats-printing>:not(.ws-stats-print){display:none}
  .ws-stats-printing>.ws-stats-print{display:block;font-family:var(--kd-font-body);font-size:10.5pt;line-height:1.4;color:var(--kd-color-ink);-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .ws-stats-print h1{margin:0 0 4pt;font-size:18pt}
  .ws-stats-print .ws-stats-summary{margin:12pt 0}
  .ws-stats-print .ws-stats-grid{display:block}
  .ws-stats-print .ws-chart{margin:0 0 12pt;break-inside:avoid;page-break-inside:avoid}
  .ws-stats-print .ws-chart-svg{max-width:100%}
  .ws-stats-print .ws-analytics-scroll{overflow:visible}
  .ws-stats-print table{width:100%;border-collapse:collapse;font-size:9.5pt}
  .ws-stats-print th,.ws-stats-print td{padding:3pt 6pt;border-bottom:1px solid var(--kd-color-line);text-align:left;vertical-align:top}
  .ws-stats-print .ws-stats-lists,.ws-stats-print .ws-stats-cast{break-inside:avoid-page}
  .ws-page-main .ws-review{display:none}
  body.ws-printing{display:block;height:auto;min-height:0;margin:0;padding:0;overflow:visible;background:var(--kd-color-white);color:var(--kd-color-ink)}
  .ws-printing>:not(.ws-print){display:none}
  .ws-printing>.ws-print{display:block;font-family:"Cousine","Courier New",Courier,monospace;font-size:12pt;line-height:12pt;font-kerning:none;font-variant-ligatures:none;color:var(--kd-color-ink);background:var(--kd-color-white)}
  .ws-print-page{position:relative;box-sizing:content-box;padding-left:0;break-after:page;page-break-after:always}
  .ws-print-page:last-child{break-after:auto;page-break-after:auto}
  .ws-print-head{position:absolute;top:-12mm;right:0;height:12pt;text-align:right}
  .ws-print-line{position:relative;box-sizing:content-box;height:12pt;margin:0;padding:0;white-space:pre;overflow:visible}
  .ws-print-line--heading{margin-left:0ch;width:58ch;text-align:left;font-weight:700;font-style:normal}
  .ws-print-line--action{margin-left:0ch;width:58ch;text-align:left;font-weight:700;font-style:normal}
  .ws-print-line--character{margin-left:26.574803ch;width:31ch;text-align:left;font-weight:700;font-style:normal}
  .ws-print-line--parenthetical{margin-left:20ch;width:26ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--dialogue{margin-left:14.76378ch;width:28ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--transition{margin-left:38ch;width:20ch;text-align:right;font-weight:400;font-style:normal}
  .ws-print-line--more{margin-left:26.574803ch;width:31ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--contd{margin-left:26.574803ch;width:31ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--title{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--credit{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--meta{margin-left:0ch;width:40ch;text-align:left;font-weight:400;font-style:normal}
  /* С-326 А1: песня — как реплика, курсивом; план и «Персонажи сцены» — как действие; строка двойного диалога несёт обе колонки в тексте; акт — перед сценой. */
  .ws-print-line--lyrics{margin-left:14.76378ch;width:28ch;text-align:left;font-weight:400;font-style:italic}
  .ws-print-line--shot{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--scene_characters{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--dual{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:normal}
  .ws-print-line--act{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:normal;text-decoration:underline}
  /* С-327 Д1: заметка автора (по выбору экспорта), подсветка персонажа (строка или колонка двойного диалога) и водяной знак страницы. */
  .ws-print-line--note{margin-left:0ch;width:58ch;text-align:left;font-weight:400;font-style:italic}
  .ws-print-mark{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .ws-print-mark--line,.ws-print-mark--both{background:var(--kd-color-selection)}
  .ws-print-mark--left{background:linear-gradient(to right,var(--kd-color-selection) 0,var(--kd-color-selection) 27ch,transparent 27ch)}
  .ws-print-mark--right{background:linear-gradient(to right,transparent 0,transparent 31ch,var(--kd-color-selection) 31ch,var(--kd-color-selection) 58ch,transparent 58ch)}
  .ws-print-watermark{position:absolute;left:0;right:0;top:40%;z-index:1;text-align:center;white-space:nowrap;font-size:44pt;line-height:44pt;color:var(--kd-color-ink);transform:rotate(-30deg);pointer-events:none}
  .ws-print-watermark--10{opacity:.1}
  .ws-print-watermark--15{opacity:.15}
  .ws-print-watermark--20{opacity:.2}
  .ws-print-watermark--30{opacity:.3}
}
/* ---------- Редактор сценария (Е3а): панель действий, навигатор сцен, блоки в типографике сценария, правая панель, диалог вставки ---------- */
/* Раскладка по ширине ОБЛАСТИ редактора, а не окна (БИ3, SPEC-161 v0.7.7 §8.7б п. 1): обёртка `.ws-ed-work` — контейнер `ws-ed`. Открытая панель Пети отнимает у `#kd-main` 416 px, окно при этом
   остаётся широким, и по ширине окна колонка текста сжималась до ≈160 px. Три колонки (навигатор 220 · текст · панель 320, зазоры 16) — от 992 px области: колонка текста не уже 420 px.
   Уже 992 px — две колонки (навигатор 240 + текст), правая панель — выезжающий лист справа (кнопка «Панель»). Уже 720 px — одна колонка, и навигатор — лист слева (кнопка «Сцены»);
   текст в двух колонках от 720 px не уже 464 px. Листы — `position:fixed` от окна (контейнер по ширине не меняет содержащий блок), выше панели Пети (z-index 30): иначе лист «Панель», открытый
   при открытой панели Пети, оказался бы под её колонкой. Чего это не касается: печать (`@media print`) и телефонная вёрстка по ширине окна (панель действий, блоки; касание, а не область).
   Одна основная кнопка на экран — «Сохранить»; цвет сервиса — токены `--kd-service-script-*`. */
.ws-ed,.ws-ed-work{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-ed-work{container-name:ws-ed;container-type:inline-size}
.ws-ed-bar{position:sticky;top:0;z-index:5;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;padding:10px 12px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-left:4px solid var(--kd-service-script-accent);border-radius:var(--kd-radius-card)}
.ws-ed-bar-main,.ws-ed-bar-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0}
.ws-production{min-width:0;max-width:100%;overflow-wrap:anywhere}
.ws-production .ws-actions{margin-top:8px}
.ws-ed-status{white-space:normal}
.ws-ed-status[hidden]{display:none}
.ws-ed-meta{font-weight:700}
.ws-ed-hint{margin:0}
.ws-ed-flash:empty,.ws-ed-live:empty{display:none}
.ws-ed-flash .notice{margin:0}
/* Успех восстановления и вставки — тон успеха (токены статуса), а не оранжевый тон внимания; успех сохранения плашки не получает (Е3б). */
.ws-ed-flash .ws-notice--success{border-color:var(--kd-status-success-ink);background:var(--kd-status-success-surface);color:var(--kd-status-success-ink)}
.ws-ed-live{position:absolute;inline-size:1px;block-size:1px;margin:0;overflow:hidden;clip-path:inset(50%)}
.ws-ed-recovery{display:flex;flex-direction:column;gap:12px;padding:16px;background:var(--kd-status-warning-surface);border:1px solid var(--kd-status-warning-ink);border-radius:var(--kd-radius-control);color:var(--kd-status-warning-ink)}
.ws-ed-recovery>p{margin:0;font-weight:600}
.ws-ed-recovery[hidden]{display:none}
/* С-325 P0-Г: полоса «Есть несохранённый черновик от 12:41 (на версии 3). Восстановить · Отбросить» — тон сведения (токены `--kd-status-info-*`, в тёмной теме они переопределены
   в styles.css под `:root[data-theme="dark"]`, литеральных цветов здесь нет); пометка «сервер ушёл вперёд» — тон внимания. Пока полоса открыта, редактор для чтения (`.ws-ed--held`). */
.ws-ed-restore{display:flex;flex-direction:column;gap:10px;padding:16px;background:var(--kd-status-info-surface);border:1px solid var(--kd-status-info-line);border-left:4px solid var(--kd-status-info-ink);border-radius:var(--kd-radius-control);color:var(--kd-color-ink)}
.ws-ed-restore>p{margin:0;font-weight:600;color:var(--kd-status-info-ink)}
.ws-ed-restore>p.ws-ed-restore-ahead{color:var(--kd-status-warning-ink)}
.ws-ed-restore>p.ws-ed-restore-note{font-weight:400;color:var(--kd-color-muted)}
.ws-ed-restore[hidden]{display:none}
/* С-329 Ж1: присутствие соавторов — метка сцены в навигаторе («правит Иван»: тон сведения, не цвет единственный признак — слово в метке) и строка «Сейчас в сценарии». */
.ws-ed-presence{margin:0;color:var(--kd-status-info-ink);font-weight:600;overflow-wrap:anywhere}
.ws-ed-presence[hidden]{display:none}
.ws-ed-scene-presence{grid-column:2;justify-self:start;white-space:normal;padding:0 8px;border:1px solid var(--kd-status-info-line);border-radius:var(--kd-radius-doc);background:var(--kd-status-info-surface);color:var(--kd-status-info-ink);font-size:.75rem;font-weight:700;line-height:1.6;overflow-wrap:anywhere}
.ws-ed-scene-presence.is-editing{border-color:var(--kd-status-warning-line);background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink)}
.ws-ed-scene-presence.is-editing::before{content:"✎ "}
/* С-329 Ж1: конфликт слияния по сценам — список «Моя / Их / Сравнить» и два текста рядом (на узком экране — друг под другом). */
.ws-ed-merge-list{display:flex;flex-direction:column;gap:12px;margin:0;padding:0;list-style:none}
.ws-ed-merge-item{display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-surface);color:var(--kd-color-ink)}
.ws-ed-merge-title{margin:0;font-weight:700;overflow-wrap:anywhere}
.ws-ed-merge button.is-chosen{border-color:var(--kd-color-ink);box-shadow:inset 0 0 0 1px var(--kd-color-ink);font-weight:800}
.ws-ed-merge button.is-chosen::before{content:"✓ "}
.ws-ed-merge-compare{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.ws-ed-merge-side{display:flex;flex-direction:column;gap:6px;min-width:0}
.ws-ed-merge-side-title{margin:0;font-size:.8125rem;font-weight:700;color:var(--kd-color-muted)}
.ws-ed-merge-text{margin:0;padding:8px 10px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-doc);background:var(--kd-color-surface);color:var(--kd-color-ink);font-family:var(--kd-font-mono,ui-monospace,monospace);font-size:.875rem;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere;max-height:320px;overflow:auto}
@media (max-width:760px){.ws-ed-merge-compare{grid-template-columns:minmax(0,1fr)}}
.ws-ed--held .ws-ed-main,.ws-ed--held .ws-ed-nav{opacity:.72}
/* Автокопии в «Истории»: над списком версий, та же тональность, что у полосы. */
.ws-hx-extras{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-hx-drafts{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;list-style:none}
.ws-hx-drafts[hidden],.ws-hx-drafts-out[hidden]{display:none}
.ws-hx-draft{display:flex;flex-direction:column;gap:8px;padding:12px;background:var(--kd-status-info-surface);border:1px solid var(--kd-status-info-line);border-radius:var(--kd-radius-control);overflow-wrap:anywhere}
.ws-hx-draft>p{margin:0;font-weight:600;color:var(--kd-status-info-ink)}
.ws-hx-draft .ws-actions{gap:8px}
.ws-ed-confirm-host:empty{display:none}
.ws-ed-grid{display:grid;grid-template-columns:220px minmax(0,1fr) 320px;gap:16px;align-items:start;min-width:0}
.ws-ed-nav,.ws-ed-panel{min-width:0;padding:12px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card)}
.ws-ed-nav,.ws-ed-panel{position:sticky;top:76px;max-height:calc(100vh - 92px);overflow:auto}
.ws-ed-toggle,.ws-ed-close,.ws-ed-panel-head{display:none}
.ws-ed-backdrop{position:fixed;inset:0;z-index:31;background:color-mix(in srgb,var(--kd-color-graphite) 50%,transparent)}
.ws-ed-backdrop[hidden]{display:none}

/* Навигатор сцен */
.ws-ed-nav-head{display:flex;align-items:center;gap:8px}
.ws-ed-nav-head h2{flex:1 1 auto;margin:0;font-size:1rem}
.ws-ed-count{font-family:var(--kd-font-body);font-weight:700;color:var(--kd-color-muted)}
.ws-ed-scenes{display:grid;gap:4px;margin:12px 0 0;padding:0;list-style:none}
.ws-ed-scenes[hidden]{display:none}
.ws-ed-scene-item{border-radius:var(--kd-radius-control)}
.ws-ed-scene-item.is-dragging{opacity:.5}
.ws-ed-scene-item.is-drop-before{box-shadow:inset 0 3px 0 var(--kd-service-script-accent)}
.ws-ed-scene-item.is-drop-after{box-shadow:inset 0 -3px 0 var(--kd-service-script-accent)}
.ws-ed-scene{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);justify-content:stretch;align-items:start;gap:4px 10px;width:100%;padding:10px 10px 10px 20px;background:transparent;border-color:transparent;font-weight:600;text-align:left}
.ws-ed-scene:hover:not(:disabled){background:var(--kd-color-surface);border-color:var(--kd-color-line)}
.ws-ed-scene[aria-current=true],.ws-ed-scene[aria-current=true]:hover:not(:disabled){background:var(--kd-service-script-surface);border-color:var(--kd-service-script-line);box-shadow:inset 4px 0 0 var(--kd-service-script-accent);color:var(--kd-service-script-ink)}
.ws-ed-scene-num{font-variant-numeric:tabular-nums;color:var(--kd-color-muted);font-weight:800}
.ws-ed-scene-title{min-width:0;overflow-wrap:anywhere;white-space:normal}
/* Метки цветных карточек (Д3а, С-302 D): токены `--kd-label-*` оболочки через локальные `--ws-label-*` по атрибуту `data-label`. Метка — приглушённая плашка, не акцент
   экрана и не статус: полоса 4 px слева внутри карточки сцены, плашка с названием цвета под заголовком; цвет не единственный признак. */
.ws-label[data-label=red]{--ws-label-surface:var(--kd-label-red-surface);--ws-label-ink:var(--kd-label-red-ink);--ws-label-line:var(--kd-label-red-line)}
.ws-label[data-label=orange]{--ws-label-surface:var(--kd-label-orange-surface);--ws-label-ink:var(--kd-label-orange-ink);--ws-label-line:var(--kd-label-orange-line)}
.ws-label[data-label=yellow]{--ws-label-surface:var(--kd-label-yellow-surface);--ws-label-ink:var(--kd-label-yellow-ink);--ws-label-line:var(--kd-label-yellow-line)}
.ws-label[data-label=green]{--ws-label-surface:var(--kd-label-green-surface);--ws-label-ink:var(--kd-label-green-ink);--ws-label-line:var(--kd-label-green-line)}
.ws-label[data-label=blue]{--ws-label-surface:var(--kd-label-blue-surface);--ws-label-ink:var(--kd-label-blue-ink);--ws-label-line:var(--kd-label-blue-line)}
.ws-label[data-label=purple]{--ws-label-surface:var(--kd-label-purple-surface);--ws-label-ink:var(--kd-label-purple-ink);--ws-label-line:var(--kd-label-purple-line)}
.ws-label[data-label=grey]{--ws-label-surface:var(--kd-label-grey-surface);--ws-label-ink:var(--kd-label-grey-ink);--ws-label-line:var(--kd-label-grey-line)}
.ws-label[data-label=brown]{--ws-label-surface:var(--kd-label-brown-surface);--ws-label-ink:var(--kd-label-brown-ink);--ws-label-line:var(--kd-label-brown-line)}
.ws-ed-scene-mark{position:absolute;left:8px;top:8px;bottom:8px;width:4px;border-radius:2px;background:var(--ws-label-ink)}
.ws-ed-scene-synopsis{grid-column:2;white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;font-size:.8125rem;font-weight:500;line-height:1.35;color:var(--kd-color-muted)}
.ws-ed-scene-tag{grid-column:2;justify-self:start;white-space:normal;padding:0 8px;border:1px solid var(--ws-label-line);border-radius:var(--kd-radius-doc);background:var(--ws-label-surface);color:var(--ws-label-ink);font-size:.75rem;font-weight:700;line-height:1.6}
.ws-ed-act-sep{margin:8px 0 0;padding:0 4px}
.ws-ed-act-sep:first-child{margin-top:0}
.ws-ed-act{margin:0;padding:8px 0 2px;border-top:1px solid var(--kd-color-line);font-family:var(--kd-font-body);font-size:.75rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--kd-service-script-ink);overflow-wrap:anywhere}
.ws-ed-act-sep:first-child .ws-ed-act{border-top:0;padding-top:0}

/* Центр: панель сцены, заголовок, блоки */
.ws-ed-main{min-width:0}
.ws-ed-page{display:flex;flex-direction:column;gap:16px;padding:20px 24px 24px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card)}
.ws-ed-scenebar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ws-ed-progress{margin:0 auto 0 0;font-weight:800;color:var(--kd-color-muted)}
.ws-ed-empty{border:1px dashed var(--kd-color-line);border-radius:var(--kd-radius-card);background:var(--kd-color-white)}
.ws-ed-empty .ws-ed-first-scene{margin-top:16px}
.ws-ed-field{display:flex;flex-direction:column;min-width:0}
.ws-ed-heading{font-family:"Courier Prime","Courier New",Courier,monospace;font-size:1rem;font-weight:700;letter-spacing:0;text-transform:uppercase}
.ws-ed-blocks{display:flex;flex-direction:column;gap:8px}
.ws-ed-kind{padding-top:12px;font-size:.6875rem;line-height:1.3;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--kd-color-muted);overflow-wrap:anywhere}
/* Тип и удаление блока: на широком экране — в панели действий (для блока, где стоит курсор), на узком — у самого блока. */
.ws-ed-type,.ws-ed-remove{display:none}
.ws-ed-type{font-size:.8125rem;font-weight:700;color:var(--kd-color-muted)}
.ws-ed-remove{padding:0;font-size:1.25rem;color:var(--kd-color-muted)}
.ws-ed-bar-block{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ws-ed-bar-block label{margin:0}
.ws-ed-bar-block select{width:auto;min-width:132px}
.ws-ed-bar-block .ws-ed-dual{display:inline-flex}
.ws-ed-text{display:block;width:100%;min-height:var(--kd-control-h);resize:none;field-sizing:content;font-family:"Courier Prime","Courier New",Courier,monospace;font-size:1rem;line-height:1.5}
.ws-ed-block[data-type=character] .ws-ed-text{text-transform:uppercase;font-weight:700}
.ws-ed-block[data-type=parenthetical] .ws-ed-text{font-style:italic}
.ws-ed-block[data-type=transition] .ws-ed-text{text-align:right;text-transform:uppercase;font-weight:700}
/* С-326 А1: новые типы и двойной диалог в редакторе. Вторая группа пары помечена полосой слева и подписью «одновременно» у типа блока. */
.ws-ed-block[data-type=lyrics] .ws-ed-text{font-style:italic}
.ws-ed-block[data-type=shot] .ws-ed-text{text-transform:uppercase;font-weight:700}
.ws-ed-block[data-type=scene_characters] .ws-ed-text{text-transform:uppercase;color:var(--kd-color-muted)}
.ws-ed-block[data-dual=true] .ws-ed-text{box-shadow:inset 3px 0 0 var(--kd-color-muted)}
.ws-ed-dual{display:none}
.ws-ed-dual[aria-pressed=true]{font-weight:800}
.ws-ed-block[data-type=note] .ws-ed-text{background:var(--kd-status-warning-surface);border-color:var(--kd-status-warning-ink);color:var(--kd-status-warning-ink);font-family:var(--kd-font-body);font-size:.875rem}
.ws-ed-scene-empty{margin:0}
.ws-ed-scene-empty[hidden]{display:none}
.ws-ed-add-block{align-self:flex-start}
.ws-ed-pager{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;padding-top:8px;border-top:1px solid var(--kd-color-line)}
.ws-ed-scene-confirm:empty{display:none}
.ws-ed--locked .ws-ed-text,.ws-ed--locked .ws-ed-heading{background:var(--kd-color-surface)}
/* Режим чтения (читатель, комментатор): плашка вместо «Сохранить» и статуса; текст — белый лист, а не серая «блокировка» сохранения. */
.ws-ed-readonly{white-space:normal}
.ws-ed--readonly .ws-ed-text,.ws-ed--readonly .ws-ed-heading{background:var(--kd-color-white)}
/* Выбор «Что напечатать?» — карточка, как диалог вставки (фон, отступ, радиус 8); фокус стоит на первой кнопке, а не рамкой на весь блок. */
.ws-ed-choice{margin:0;padding:16px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-ed-choice p{margin:0 0 12px}

/* Правая панель: вкладки «Титул», «Замысел», «Карточка сцены», «Статистика», «История», «Поиск». Шесть вкладок не прокручиваются, а переносятся на вторую строку:
   все разделы видны сразу и в панели 320 px, и в листе «Панель» на 375 px. */
.ws-ed-panel-head{align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.ws-ed-panel-head h2{margin:0;font-size:1rem}
.ws-ed-tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--kd-color-line)}
.ws-ed-tabs [role=tab]{flex:1 1 auto;padding:0 8px;font-size:.875rem;white-space:nowrap;border:0;border-bottom:3px solid transparent;border-radius:var(--kd-radius-control) var(--kd-radius-control) 0 0;background:transparent;color:var(--kd-color-muted);font-weight:700}
.ws-ed-tabs [role=tab]:hover:not(:disabled){background:var(--kd-color-surface);color:var(--kd-color-ink)}
.ws-ed-tabs [role=tab][aria-selected=true]{background:var(--kd-service-script-surface);border-bottom-color:var(--kd-service-script-accent);color:var(--kd-service-script-ink)}
.ws-ed-tabpanel{padding-top:16px}
.ws-ed-tabpanel:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-ed-pane{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-ed-pane>*{margin:0}
.ws-ed-pane-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}
.ws-ed-fields{display:grid;gap:12px}
.ws-ed-field small{margin-top:6px}
.ws-ed-field textarea{resize:vertical;field-sizing:content}
.ws-ed-panel .ws-sheet{max-width:none;margin:0;padding:16px;font-size:.875rem}
.ws-ed-titlepage-name{margin:0 0 1em;text-align:center;text-transform:uppercase;font-weight:700}
.ws-ed-titlepage-row{margin:0 0 .75em;text-align:center}
.ws-ed-titlepage-row small{display:block;font-family:var(--kd-font-body);font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.ws-ed-revs,.ws-ed-matches{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.ws-ed-rev,.ws-ed-match{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:2px;width:100%;padding:8px 12px;text-align:left;font-weight:600}
.ws-ed-rev small,.ws-ed-match small{color:var(--kd-color-muted);font-weight:700}
/* Б2: версия по предложению Пети — плашка с текстом (в строке истории и в просмотре версии), без отдельного цвета-значения. */
.ws-ed-via{align-self:flex-start;white-space:normal}
.ws-ed-rev[aria-current=true],.ws-ed-match[aria-current=true]{background:var(--kd-service-script-surface);border-color:var(--kd-service-script-accent);color:var(--kd-service-script-ink)}
.ws-ed-match-text{min-width:0;overflow-wrap:anywhere;font-weight:400}
.ws-ed-match mark{padding:0 2px;border-radius:var(--kd-radius-doc);background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink);font-weight:800}
.ws-ed-revview{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--kd-color-line)}
.ws-ed-revview>*{margin:0}
.ws-ed-diff:empty{display:none}
.ws-ed-diff p{margin:0 0 4px}
.ws-ed-diff-group{padding-bottom:8px}
.ws-ed-diff-group .ws-ed-diff-head{margin-top:4px;font-weight:700;color:var(--kd-color-ink)}
/* ---------- С-317 М2a (SPEC-166 FR-CR-23, 25, 26): «Основание правки», «История» (основание, редакции, «Сравнить»), экран «Сравнить» ----------
   Цвета — только токены оболочки (`--kd-status-*`, `--kd-service-script-*`); значение не только цветом: у меток знак и слова, вставка подчёркнута, удаление зачёркнуто. Кнопки не ниже `--kd-control-h` (44 px). */
.ws-basis-toggle{white-space:normal}
.ws-basis-row{flex:1 1 100%;display:grid;gap:6px;padding-top:8px;border-top:1px solid var(--kd-color-line)}
.ws-basis-row[hidden]{display:none}
.ws-basis-row label{font-weight:700}
.ws-basis-row input{width:100%}
.ws-basis-row small,.ws-basis-out{margin:0}
.ws-basis-out:empty{display:none}
.ws-ed-rev-basis,.ws-ed-rev-drafts{max-width:100%;white-space:normal;overflow-wrap:anywhere;font-weight:600}
.ws-ed-rev-basis{color:var(--kd-color-ink)}
.ws-hx-compare{display:grid;gap:8px;padding:12px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-surface)}
.ws-hx-compare[hidden]{display:none}
.ws-hx-compare p{margin:0}
.ws-hx-compare-field{display:grid;gap:4px}
.ws-hx-compare-field label{font-weight:700}
.ws-hx-compare-field select{width:100%}
.ws-hx-compare-hint:empty{display:none}
.ws-ed-dialog.ws-cmp-dialog{width:min(1120px,calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px)}
.ws-cmp-dialog .ws-ed-dialog-body{flex:1 1 auto}
.ws-cmp{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-cmp>*{margin:0}
.ws-cmp-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px}
.ws-cmp-head .ws-cmp-title{margin:0}
.ws-cmp-sides{font-weight:800;overflow-wrap:anywhere}
.ws-cmp-sides[hidden],.ws-cmp-error[hidden],.ws-cmp-body[hidden]{display:none}
.ws-cmp-live:empty,.ws-cmp-totals:empty,.ws-cmp-notes:empty{display:none}
.ws-cmp-totals{display:grid;gap:2px}
.ws-cmp-totals-line,.ws-cmp-note,.ws-cmp-empty,.ws-cmp-error p{margin:0}
.ws-cmp-notes{display:grid;gap:6px}
.ws-cmp-empty{font-weight:700}
.ws-cmp-error{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.ws-cmp-body{display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:16px;align-items:start}
.ws-cmp-nav{min-width:0}
.ws-cmp-scenes{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.ws-cmp-scene{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;min-height:var(--kd-control-h);padding:8px 12px;text-align:left;font-weight:600;white-space:normal}
.ws-cmp-scene small{color:var(--kd-color-muted);font-weight:700}
.ws-cmp-scene-title{overflow-wrap:anywhere}
.ws-cmp-scene[aria-current=true]{background:var(--kd-service-script-surface);border-color:var(--kd-service-script-accent);color:var(--kd-service-script-ink)}
.ws-cmp-scene[aria-current=true] small{color:var(--kd-service-script-ink)}
.ws-cmp-scene-marks,.ws-cmp-detail-marks,.ws-cmp-block-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.ws-cmp-detail-marks{margin:0}
.ws-cmp-mark{display:inline-flex;align-items:center;gap:4px;max-width:100%;white-space:normal}
.ws-cmp-sign{font-weight:800}
.ws-cmp-mark--added{background:var(--kd-status-success-surface);color:var(--kd-status-success-ink)}
.ws-cmp-mark--removed{background:var(--kd-status-error-surface);color:var(--kd-status-error-ink)}
.ws-cmp-mark--changed,.ws-cmp-mark--renamed{background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink)}
.ws-cmp-mark--moved{background:var(--kd-status-info-surface);color:var(--kd-status-info-ink)}
.ws-cmp-detail{display:grid;gap:12px;min-width:0}
.ws-cmp-detail-head{display:grid;gap:6px}
.ws-cmp-detail-head h3,.ws-cmp-detail-head p{margin:0}
.ws-cmp-detail-head h3{overflow-wrap:anywhere}
.ws-cmp-blocks{display:grid;gap:10px;margin:0;padding:0;list-style:none}
.ws-cmp-block{display:grid;gap:6px;padding:10px 12px;border:1px solid var(--kd-color-line);border-left-width:4px;border-radius:var(--kd-radius-control);background:var(--kd-color-white)}
.ws-cmp-block--added{border-left-color:var(--kd-status-success-ink)}
.ws-cmp-block--removed{border-left-color:var(--kd-status-error-ink)}
.ws-cmp-block--changed{border-left-color:var(--kd-status-warning-ink)}
.ws-cmp-block--moved{border-left-color:var(--kd-status-info-ink)}
.ws-cmp-text{margin:0;overflow-wrap:anywhere;white-space:pre-wrap}
.ws-cmp ins{padding:0 2px;border-radius:var(--kd-radius-doc);background:var(--kd-status-success-surface);color:var(--kd-status-success-ink);font-weight:700;text-decoration:underline;text-underline-offset:2px}
.ws-cmp del{padding:0 2px;border-radius:var(--kd-radius-doc);background:var(--kd-status-error-surface);color:var(--kd-status-error-ink);text-decoration:line-through}
.ws-cmp-none,.ws-cmp-cut{margin:0}
@media (max-width:760px){
  .ws-basis-toggle{flex:1 1 100%}
  .ws-ed-dialog.ws-cmp-dialog{width:100vw;max-width:100vw;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;margin:0;border:0;border-radius:0}
  .ws-cmp-body{grid-template-columns:minmax(0,1fr)}
  .ws-cmp-head .ws-cmp-close{flex:1 1 auto}
}
.ws-ed-storyview{border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-white)}
.ws-ed-storyview[hidden]{display:none}
.ws-ed-storyview summary{display:flex;align-items:center;min-height:var(--kd-control-h);padding:0 12px;cursor:pointer;font-weight:700;border-radius:var(--kd-radius-control)}
.ws-ed-storyview summary:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:-3px}
.ws-ed-storylist{margin:0;padding:0 12px 12px}
.ws-ed-storylist dt{margin-top:10px;font-weight:700;font-size:.875rem}
.ws-ed-storylist dd{margin:2px 0 0;overflow-wrap:anywhere;white-space:pre-wrap}

/* «Замысел», «Карточка сцены» со структурой и «Статистика» (Д3а): панели правой колонки, поля как у «Титула», метки — плашки с названием цвета */
.ws-ed-readonly-note{padding:8px 12px;border-left:4px solid var(--kd-color-border);background:var(--kd-color-surface)}
.ws-ed-legend{font-weight:700;font-size:.9375rem}
.ws-ed-card-form{display:flex;flex-direction:column;gap:16px}
.ws-ed-card-scene{display:flex;flex-direction:column;gap:12px}
.ws-ed-card-heading,.ws-ed-structure h3{margin:0;font-size:1rem;overflow-wrap:anywhere}
.ws-ed-colors{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
/* М1 П4: две колонки цветов в листе шириной 332 px — «Фиолетовый» и «Коричневый» (кнопка не переносит слова) с отступами 12/8 px вылезали из блока на 7 px и касались галочки выбранного цвета */
.ws-ed-color{position:relative;justify-content:flex-start;gap:6px;min-height:var(--kd-control-h);padding:0 8px;border-color:var(--ws-label-line,var(--kd-color-border));background:var(--ws-label-surface,var(--kd-color-white));color:var(--ws-label-ink,var(--kd-color-ink));font-weight:700;text-align:left}
.ws-ed-color:hover:not(:disabled){background:var(--ws-label-surface,var(--kd-color-surface));border-color:var(--ws-label-ink,var(--kd-color-ink))}
.ws-ed-color[aria-checked=true]{border-color:var(--ws-label-ink,var(--kd-color-ink));box-shadow:inset 0 0 0 1px var(--ws-label-ink,var(--kd-color-ink))}
.ws-ed-color-dot,.ws-ed-struct-dot{flex:0 0 auto;width:14px;height:14px;border-radius:50%;border:2px solid var(--ws-label-ink,var(--kd-color-muted));background:var(--ws-label-ink,transparent)}
.ws-ed-color-name{min-width:0;overflow-wrap:anywhere}
.ws-ed-color-check{margin-left:auto;visibility:hidden;font-weight:800}
.ws-ed-color[aria-checked=true] .ws-ed-color-check{visibility:visible}
.ws-ed-readvalue{margin:0;font-weight:600;overflow-wrap:anywhere}
.ws-ed-tag{display:inline-block;padding:0 8px;border:1px solid var(--ws-label-line,var(--kd-color-line));border-radius:var(--kd-radius-doc);background:var(--ws-label-surface,var(--kd-color-surface));color:var(--ws-label-ink,var(--kd-color-ink));font-size:.8125rem;font-weight:700;line-height:1.6}
.ws-ed-structure{display:flex;flex-direction:column;gap:12px;padding-top:16px;border-top:1px solid var(--kd-color-line)}
.ws-ed-struct-kind{display:flex;flex-direction:column;gap:8px}
.ws-ed-struct-kind h4{margin:0;font-size:.9375rem}
.ws-ed-struct-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.ws-ed-struct-row{display:flex;flex-direction:column;gap:8px;padding:10px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-white)}
.ws-ed-struct-row--read{flex-direction:row;flex-wrap:wrap;align-items:center}
.ws-ed-struct-name{min-width:0;overflow-wrap:anywhere;font-weight:600}
.ws-ed-struct-tools{display:flex;flex-wrap:wrap;gap:6px}
.ws-ed-struct-tools button{flex:1 1 auto;padding:0 10px;font-size:.875rem}
.ws-ed-struct-color{display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:center;gap:8px}
.ws-ed-struct-color label{margin:0;font-size:.875rem}
.ws-ed-stats{gap:8px}
.ws-ed-stats h3{margin:12px 0 0;font-size:1rem}
.ws-ed-stats-caption{margin:0;font-weight:700}
.ws-ed-stats-body{display:flex;flex-direction:column;gap:8px}
.ws-ed-stats-switch button[aria-pressed=true]{border-color:var(--kd-color-ink);box-shadow:inset 0 0 0 1px var(--kd-color-ink);font-weight:800}
.ws-ed-stats-list{display:grid;gap:0;margin:0}
.ws-ed-stat{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 12px;padding:8px 0;border-bottom:1px solid var(--kd-color-line)}
.ws-ed-stat dt{font-weight:600;overflow-wrap:anywhere}
.ws-ed-stat dd{margin:0;font-weight:800;font-variant-numeric:tabular-nums;text-align:right;overflow-wrap:anywhere}
.ws-ed-stat dd.ws-meta{grid-column:1 / -1;font-weight:400;text-align:left}
.ws-ed-stats-people{display:flex;flex-direction:column;gap:8px}
.ws-ed-stats-people h3{margin:12px 0 0}
.ws-ed-stats-table{width:100%;border-collapse:collapse;font-size:.875rem}
.ws-ed-stats-table th,.ws-ed-stats-table td{padding:8px;border-bottom:1px solid var(--kd-color-line);text-align:left;overflow-wrap:anywhere}
.ws-ed-stats-table td,.ws-ed-stats-table thead th:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}

/* Диалог предпросмотра вставки */
.ws-ed-dialog{width:min(640px,calc(100vw - 32px));max-height:min(80vh,720px);padding:0;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card);background:var(--kd-color-white);color:var(--kd-color-ink)}
.ws-ed-dialog[open]{display:flex;flex-direction:column}
.ws-ed-dialog::backdrop{background:color-mix(in srgb,var(--kd-color-graphite) 60%,transparent)}
.ws-ed-dialog-body{display:flex;flex-direction:column;gap:12px;min-height:0;padding:20px 24px;overflow:auto}
.ws-ed-dialog-body>*{margin:0}
.ws-ed-dialog-summary{font-weight:800}
.ws-ed-dialog>.ws-actions{padding:16px 24px;border-top:1px solid var(--kd-color-line)}
.ws-ed-paste-rows{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.ws-ed-paste-row{display:grid;grid-template-columns:132px minmax(0,1fr);gap:8px;align-items:start;padding:6px 8px;border-bottom:1px solid var(--kd-color-line)}
.ws-ed-paste-row .tag{justify-self:start;white-space:normal}
.ws-ed-paste-text{min-width:0;overflow-wrap:anywhere;white-space:pre-wrap;font-family:"Courier Prime","Courier New",Courier,monospace;font-size:.875rem}

/* Область уже 992 px: две колонки, правая панель — выезжающий лист справа.
   БИ4: колонка с фокусом внутри (`:focus-within`) не прячется (`visibility`), пока редактор не откроет её листом (`syncSheets` в workshop-editor.mjs): иначе браузер снял бы фокус с активного поля раньше. */
@container ws-ed (width < 992px){
  .ws-ed-grid{grid-template-columns:240px minmax(0,1fr)}
  .ws-ed-toggle-panel,.ws-ed-panel .ws-ed-close,.ws-ed-panel-head{display:inline-flex}
  .ws-ed-panel-head{display:flex}
  .ws-ed-panel{position:fixed;top:0;right:var(--ws-ed-sheet-right,0);bottom:0;z-index:32;width:min(400px,92vw);max-height:none;border-radius:var(--kd-radius-card) 0 0 var(--kd-radius-card);transform:translateX(calc(100% + var(--ws-ed-sheet-right,0px)));visibility:hidden;transition:transform var(--kd-motion-panel),visibility var(--kd-motion-panel)}
  .ws-ed-panel:focus-within{visibility:visible}
  .ws-ed--panel-open .ws-ed-panel{transform:none;visibility:visible;transition:transform var(--kd-motion-panel),visibility 0s}
}
/* З1 (С-302): лист «Панель» стоит от правого края окна на `--ws-ed-sheet-right`. Панель Пети — колонка справа от 1024 px (у неё `@media (max-width:1023px)` — лист), `#kd-main` уступает ей 416 px (`assistant-panel.css`, тот же отступ):
   листы редактора («Панель») и их затемнение кончаются у левой границы колонки, а не лежат на ней; колонка Пети остаётся видимой и доступной. Закрытый лист уезжает за край окна на свою ширину плюс этот отступ, иначе он на всём пути лежал бы поверх колонки.
   З1б: граница — дополнение к `max-width:1023px` Пети (`not all and …`), а не `min-width:1024px`: на дробной ширине (зум, 1023.5 px) между ними не остаётся зазора, где лист лёг бы на колонку Пети.
   Ниже границы Петя — лист на весь экран, отступа под колонку нет, а `--ws-ed-petya-cover` говорит редактору, что экран закрыт: ссылка Пети на блок только выбирает сцену, фокус в блок (клавиатура телефона) не ставится. Здесь только переменные — ступени листов задаёт область редактора (@container). */
@media not all and (max-width:1023px){
  body.kd-shell:has(.kd-assistant[data-state="open"]){--ws-ed-sheet-right:416px}
}
@media (max-width:1023px){
  body.kd-shell:has(.kd-assistant[data-state="open"]){--ws-ed-petya-cover:1px}
}
.ws-ed-backdrop{right:var(--ws-ed-sheet-right,0)}

/* Область уже 720 px: одна колонка, навигатор — лист слева */
@container ws-ed (width < 720px){
  .ws-ed-grid{grid-template-columns:minmax(0,1fr)}
  .ws-ed-toggle-nav,.ws-ed-nav .ws-ed-close{display:inline-flex}
  .ws-ed-nav{position:fixed;top:0;left:0;bottom:0;z-index:32;width:min(340px,92vw);max-height:none;border-radius:0 var(--kd-radius-card) var(--kd-radius-card) 0;transform:translateX(-100%);visibility:hidden;transition:transform var(--kd-motion-panel),visibility var(--kd-motion-panel)}
  .ws-ed-nav:focus-within{visibility:visible}
  .ws-ed--nav-open .ws-ed-nav{transform:none;visibility:visible;transition:transform var(--kd-motion-panel),visibility 0s}

 .ws-ed,.ws-ed-work,.ws-ed-grid,.ws-ed-bar-main,.ws-ed-bar-tools,.ws-ed-pane,.ws-ed-panel>*{min-width:0;max-width:100%;box-sizing:border-box}
 .ws-ed-panel,.ws-ed-nav{width:min(400px,100vw);max-width:100vw;box-sizing:border-box;transform:none;display:none;overscroll-behavior:contain}
 .ws-ed--panel-open .ws-ed-panel,.ws-ed--nav-open .ws-ed-nav{display:block;transform:none;visibility:visible}
 .ws-ed-tabs{flex-wrap:wrap;overflow:visible}
 .ws-ed-tabs [role=tab]{white-space:normal;overflow-wrap:anywhere;flex:1 1 auto;min-height:var(--kd-control-h)}
 .ws-ed-panel input,.ws-ed-panel textarea,.ws-ed-panel select{min-width:0;max-width:100%;box-sizing:border-box}
 .ws-ed-scenebar,.ws-ed-panel-head{flex-wrap:wrap}
 .ws-ed-panel-head h2{min-width:0;overflow-wrap:anywhere}
 /* С-325 П-8: плашка «Петя AI» стоит в правом нижнем углу над безопасной зоной (assistant-panel.css); листы «Панель» и «Сцены» — fixed, отступ #kd-main им не помогает,
    поэтому последние поля и кнопки листов получают свой отступ снизу и не оказываются под плашкой; заголовок сцены в навигаторе и счётчик сцен переносятся, а не обрезаются. */
 .ws-ed-panel,.ws-ed-nav{padding-bottom:calc(88px + env(safe-area-inset-bottom,0px))}
 .ws-ed-scene-title,.ws-ed-progress,.ws-ed-scene{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}
 .ws-review .ws-actions button{flex:1 1 100%}
}

/* Телефон (375 px): панель действий и блоки — по ширине окна (касание); колонки и листы — выше, по ширине области */
@media (max-width:760px){
  .ws-ed-bar{position:static;padding:10px}
  .ws-ed-bar-main,.ws-ed-bar-tools{width:100%}
  .ws-ed-save{flex:1 1 100%}
  /* Две строки: «Отменить» и «Повторить» по полстроки; «Печать», «Сцены» и «Панель» — по трети следующей (Е3б: печать под рукой, как листы). */
  .ws-ed-bar-tools{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
  .ws-ed-bar-tools>*{grid-column:span 3}
  .ws-ed-bar-tools>.ws-ed-print,.ws-ed-bar-tools>.ws-ed-toggle{grid-column:span 2}
  .ws-ed-bar-tools button{padding:0 8px}
  .ws-ed-meta,.ws-ed-hint{display:none}
  .ws-ed-page{padding:16px}
  .ws-ed-bar-block{display:none}
  .ws-ed-pager button{flex:1 1 auto}
  .ws-ed-scenebar button{flex:1 1 auto}
  .ws-ed-paste-row{grid-template-columns:minmax(0,1fr)}
  .ws-ed-dialog-body{padding:16px}
  .ws-ed-dialog>.ws-actions{padding:12px 16px}
  .ws-ed-dialog>.ws-actions button{flex:1 1 auto}
}

/* ---------- Д3б (С-302): «Персонажи» и «Локации», эпизоды сериала, диалоги «Переименовать проект» и переименования записи ----------
   Цвет сервиса — токены `--kd-service-script-*`; контролы не ниже `--kd-control-h`; на 375 px — одна колонка, действия во всю ширину. */
.ws-entities{display:flex;flex-direction:column;gap:16px;min-width:0}
.ws-entities-head,.ws-episodes-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px}
.ws-entities-head h2,.ws-episodes-head h2{margin:0}
.ws-entities-note{max-width:720px}
.ws-entities-flash:empty,.ws-episodes-flash:empty{display:none}
.ws-entities-flash,.ws-episodes-flash{display:flex;flex-direction:column;gap:8px}
.ws-entities-flash .notice,.ws-episodes-flash .notice{margin:0}
.ws-entities-failed{margin:0;padding-left:24px;overflow-wrap:anywhere}
.ws-entities-progress{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;padding:12px 16px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-surface)}
.ws-entities-progress[hidden]{display:none}
.ws-entities-progress-text{margin:0;font-weight:700}
.ws-entities-body,.ws-episodes-body{display:flex;flex-direction:column;gap:16px;min-width:0}
.ws-entities-body>.empty,.ws-episodes-body>.empty{padding:24px 16px;border:1px dashed var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-entities-tools{justify-content:flex-end}
.ws-entity-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:16px;margin:0;padding:0;list-style:none}
.ws-entity{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-entity--editing{grid-column:1/-1;padding:0;border:0;background:transparent}
.ws-entity-main{display:flex;flex-direction:column;gap:8px;min-width:0}
.ws-entity-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.ws-entity-name{margin:0;font-size:1.0625rem;line-height:1.3;overflow-wrap:anywhere}
.ws-entity-aliases{margin:0}
.ws-entity-desc{margin:0;overflow-wrap:anywhere;white-space:pre-line}
.ws-entity-actions{margin-top:auto}
.ws-entity-form{max-width:760px}
.ws-entity-form textarea{field-sizing:content}
.ws-entity-appear{padding:10px 12px;border-left:4px solid var(--kd-service-script-accent);border-radius:0 var(--kd-radius-control) var(--kd-radius-control) 0;background:var(--kd-service-script-surface)}
.ws-entity-appear--none{border-left-color:var(--kd-color-border);background:var(--kd-color-surface)}
.ws-entity-appear-head{margin:0;font-weight:800}
.ws-entity-appear-list{display:grid;gap:2px;margin:6px 0 0;padding-left:20px;font-size:.875rem;overflow-wrap:anywhere}
.ws-history{border-top:1px solid var(--kd-color-line)}
.ws-history summary{font-size:.875rem;color:var(--kd-service-script-ink)}
.ws-history summary:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:-3px}
.ws-history-list{display:grid;gap:6px;margin:0 0 8px;padding-left:24px;font-size:.875rem;overflow-wrap:anywhere}

/* Эпизоды сериала на вкладке «Сценарии» */
.ws-episodes{display:flex;flex-direction:column;gap:16px}
.ws-episodes-head-text{display:flex;flex-direction:column;gap:4px;min-width:0}
.ws-episodes-head-text h2{margin:0}
.ws-episodes-summary:empty{display:none}
.ws-episode-list{display:grid;gap:12px;margin:0;padding:0;list-style:none}
.ws-episode{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 16px;align-items:center;padding:12px 16px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-surface)}
.ws-episode--editing{grid-template-columns:minmax(0,1fr);background:var(--kd-color-white)}
.ws-episode-main{min-width:0}
.ws-episode-title{margin:0 0 4px;font-size:1rem;line-height:1.35;overflow-wrap:anywhere}
.ws-episode-script{margin:0;overflow-wrap:anywhere}
.ws-episode-script-name{font-weight:600;color:var(--kd-color-ink)}
.ws-episode-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ws-episode>.ws-confirm{grid-column:1/-1;margin:4px 0 0}
.ws-episode-form{max-width:760px}
.ws-attach{margin-top:4px}

/* Диалоги: «Переименовать проект» и переименование записи с предпросмотром */
.ws-modal .ws-ed-dialog-body{gap:16px}
.ws-title-dialog{width:min(560px,calc(100vw - 32px))}
/* С-327 Д1: окно «Экспорт» — группы выбора, список сцен с прокруткой; цвета — токены (тёмная тема — через них же). */
.ws-export-dialog{width:min(640px,calc(100vw - 32px))}
.ws-export-dialog .ws-ed-dialog-body{max-height:calc(100vh - 160px);overflow:auto}
.ws-export-dialog fieldset{display:flex;flex-wrap:wrap;gap:8px 16px;margin:0;padding:12px;border:1px solid var(--kd-color-line);border-radius:8px}
.ws-export-dialog legend{padding:0 4px;font-weight:700}
.ws-export-include,.ws-export-scenes{flex-direction:column}
.ws-export-choice{display:inline-flex;align-items:center;gap:6px;min-height:32px;cursor:pointer}
.ws-export-hint{flex-basis:100%;margin:0}
.ws-export-range{align-items:flex-end}
.ws-export-range input{width:96px}
.ws-export-pick{display:flex;flex-direction:column;gap:2px;max-height:220px;overflow:auto;padding:4px 8px;border:1px solid var(--kd-color-line);border-radius:6px;background:var(--kd-color-surface)}
.ws-export-pick span{overflow-wrap:anywhere}
.ws-ed-release-notice{margin:0;color:var(--kd-color-ink)}
.ws-title-preview{font-weight:800;overflow-wrap:anywhere}
.ws-title-preview:empty,.ws-title-note:empty{display:none}
.ws-rename-dialog{width:min(780px,calc(100vw - 32px))}
.ws-rename-lead{font-size:1.0625rem;font-weight:800;overflow-wrap:anywhere}
.ws-rename-progress{font-weight:700}
.ws-rename-progress:empty,.ws-rename-detail:empty,.ws-rename-summary:empty{display:none}
.ws-rename-area{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-rename-area[hidden]{display:none}
.ws-rename-area>*{margin:0}
.ws-rename-summary{font-weight:800}
.ws-rename-tools{gap:8px}
.ws-rename-failed{margin:8px 0 0;padding-left:24px;overflow-wrap:anywhere}
.ws-rename-failed-box .notice{margin:0}
.ws-rename-group{display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-rename-rows{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.ws-rename-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);gap:4px 16px;align-items:start;padding:8px 0;border-top:1px solid var(--kd-color-line)}
.ws-rename-row .ws-check{align-items:flex-start;padding-top:6px;padding-bottom:6px}
.ws-rename-texts{display:flex;flex-direction:column;gap:4px;min-width:0}
.ws-rename-line{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;margin:0;align-items:baseline}
.ws-rename-key{font-size:.75rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--kd-color-muted)}
.ws-rename-before{overflow-wrap:anywhere;text-decoration:line-through;text-decoration-thickness:1px;color:var(--kd-color-muted)}
.ws-rename-after{overflow-wrap:anywhere;font-weight:700;color:var(--kd-color-ink)}
.ws-rename-manual{margin:0}
.ws-rename-result-title{margin:0;font-size:1.0625rem}
.ws-rename-result-list{display:grid;gap:6px;margin:0;padding-left:24px;overflow-wrap:anywhere}
.ws-rename-error{margin:0}
.ws-check{align-self:flex-start}

@media (max-width:760px){
  .ws-entities-head,.ws-episodes-head{align-items:stretch}
  .ws-entities-tools{justify-content:stretch}
  .ws-entities-tools button,.ws-episodes-head>button{flex:1 1 auto}
  .ws-entity-list{grid-template-columns:minmax(0,1fr)}
  .ws-entity-actions button{flex:1 1 auto}
  .ws-entity-form .ws-actions button{flex:1 1 auto}
  .ws-entities-progress button{flex:1 1 100%}
  .ws-episode{grid-template-columns:minmax(0,1fr)}
  .ws-episode-actions button,.ws-episode-actions .ws-btn{flex:1 1 auto}
  .ws-episode-form .ws-actions button{flex:1 1 auto}
  .ws-rename-row{grid-template-columns:minmax(0,1fr)}
  .ws-rename-line{grid-template-columns:56px minmax(0,1fr)}
  .ws-rename-group{padding:8px}
  .ws-modal .ws-ed-dialog-body{padding:16px}
}

/* ---------- Е2 (С-302): «Редакции», «Авторы», «Сделать редакцией», «Подставить авторов проекта» ----------
   Цвет — только токены `--kd-service-script-*` и `--kd-*`; контролы не ниже `--kd-control-h`; статус — плашкой с текстом; на 375 px — одна колонка, действия во всю ширину. */
.ws-drafts,.ws-authors{display:flex;flex-direction:column;gap:16px;min-width:0}
.ws-drafts-head,.ws-authors-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px}
.ws-drafts-head-text,.ws-authors-head-text{display:flex;flex-direction:column;gap:4px;min-width:0}
.ws-drafts-head h2,.ws-authors-head h2{margin:0}
.ws-drafts-summary:empty,.ws-authors-summary:empty{display:none}
.ws-drafts-note,.ws-authors-note{max-width:720px}
.ws-drafts-flash:empty,.ws-authors-flash:empty{display:none}
.ws-drafts-flash,.ws-authors-flash{display:flex;flex-direction:column;gap:8px}
.ws-drafts-flash .notice,.ws-authors-flash .notice{margin:0}
.ws-drafts-body,.ws-authors-body{display:flex;flex-direction:column;gap:16px;min-width:0}
.ws-drafts-body>.empty,.ws-authors-body>.empty{padding:24px 16px;border:1px dashed var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-draft-list{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;margin:0;padding:0;list-style:none}
.ws-author-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:16px;margin:0;padding:0;list-style:none}
.ws-draft,.ws-author{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-draft--editing,.ws-author--editing{padding:0;border:0;background:transparent}
.ws-author--editing{grid-column:1/-1}
.ws-draft-main,.ws-author-main{display:flex;flex-direction:column;gap:6px;min-width:0}
.ws-draft-line,.ws-author-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.ws-draft-title,.ws-author-name{margin:0;font-size:1.0625rem;line-height:1.3;overflow-wrap:anywhere}
.ws-draft-script,.ws-draft-episode,.ws-draft-changed,.ws-author-legal,.ws-author-contact,.ws-author-binding,.ws-draft-main .ws-draft-authors{overflow-wrap:anywhere}
.ws-draft-script a{color:var(--kd-service-script-ink);font-weight:700}
.ws-draft-note{margin:0;overflow-wrap:anywhere;white-space:pre-line}
.ws-draft-actions,.ws-author-actions{gap:8px;margin-top:auto}
.ws-draft-actions select{width:auto;min-width:200px}
.ws-draft-busy[hidden]{display:none}
.ws-draft-form,.ws-author-form{max-width:760px}
.ws-draft-form textarea,.ws-author-form textarea{field-sizing:content}
.ws-draft-fixed,.ws-draft-version{font-weight:700;color:var(--kd-color-ink);overflow-wrap:anywhere}
.ws-draft-form .ws-draft-authors{display:flex;flex-direction:column;gap:2px}
.ws-checks{display:flex;flex-direction:column;gap:2px;min-width:0}
.ws-checks .ws-check{align-self:stretch;overflow-wrap:anywhere}
.ws-draft-archive,.ws-author-archive{padding-top:8px;border-top:1px solid var(--kd-color-line)}
.ws-draft-archive>summary,.ws-author-archive>summary{font-size:.9375rem;color:var(--kd-service-script-ink)}
.ws-draft-archive>.ws-draft-list,.ws-author-archive>.ws-author-list{margin-top:8px}
.ws-draft-dialog{width:min(720px,calc(100vw - 32px))}
.ws-draft-dialog .ws-draft-form{max-width:none;padding:0;border:0;background:transparent}
.ws-confirm-dialog{width:min(520px,calc(100vw - 32px))}
.ws-subst-dialog{width:min(560px,calc(100vw - 32px))}
.ws-subst-caption{font-size:.75rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.ws-subst-before{overflow-wrap:anywhere;white-space:pre-line;text-decoration:line-through;text-decoration-thickness:1px;color:var(--kd-color-muted)}
.ws-subst-after{overflow-wrap:anywhere;white-space:pre-line;font-weight:700;color:var(--kd-color-ink)}
.ws-script-source{margin-top:4px;overflow-wrap:anywhere}
.ws-ed-fill-out,.ws-ed-make-out{margin:6px 0 0}
.ws-ed-fill-out:empty,.ws-ed-make-out:empty{display:none}
.ws-ed-field>button{align-self:flex-start;margin-top:8px}

/* ---------- С-302 М1 (П5) · SPEC-161 §8.8 п. 9–10: «Импорт в подготовку съёмок» на странице проекта и плашки импорта в «Истории» (владельцу) ---------- */
.ws-imports-host:empty{display:none}
.ws-imports{display:flex;flex-direction:column;gap:12px;min-width:0;margin-top:24px;padding-top:20px;border-top:1px solid var(--kd-color-line)}
.ws-imports>h2{margin:0;font-size:1.0625rem}
.ws-imports-list{margin:0}
.ws-import-row{padding:12px 16px}
.ws-import-text{margin:0;overflow-wrap:anywhere;color:var(--kd-color-ink)}
.ws-import-row .ws-btn{min-height:var(--kd-control-h)}
.ws-imports>button{align-self:flex-start;min-height:var(--kd-control-h)}
.ws-imports-empty{margin:0;color:var(--kd-color-muted)}
.ws-imports-error-box{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}
.ws-imports-error{margin:0;color:var(--kd-status-error-ink);font-weight:700;overflow-wrap:anywhere}
.ws-ed-imports-host:empty{display:none}
.ws-ed-imports{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-width:0}
.ws-ed-imports>*{margin:0}
.ws-ed-import{max-width:100%;white-space:normal;overflow-wrap:anywhere;background:var(--kd-service-script-surface);border:1px solid var(--kd-service-script-accent);color:var(--kd-service-script-ink)}

@media (max-width:760px){
  .ws-drafts-head,.ws-authors-head{align-items:stretch}
  .ws-drafts-head>button,.ws-authors-head>button{flex:1 1 auto}
  .ws-draft-actions button,.ws-draft-actions select,.ws-author-actions button{flex:1 1 auto}
  .ws-draft-actions select{width:100%;min-width:0}
  .ws-draft-form .ws-actions button,.ws-author-form .ws-actions button{flex:1 1 auto}
  .ws-author-list{grid-template-columns:minmax(0,1fr)}
  .ws-draft-dialog .ws-draft-form{gap:12px}
  .ws-ed-field>button{align-self:stretch}
  .ws-imports>button,.ws-import-row .ws-btn{align-self:stretch;width:100%}
  .ws-import-row{grid-template-columns:minmax(0,1fr)}
}

/* ---------- С-317 М2e · SPEC-166 FR-CR-40, NFR-CR-05: «Сообщить о проблеме» (кнопка в шапке мастерской и диалог) ---------- */
.ws-feedback-bar{display:flex;justify-content:flex-end;margin:0 0 8px}
.ws-feedback-bar:empty{display:none}
.ws-feedback-open{min-height:var(--kd-control-h)}
.ws-feedback-dialog{width:min(560px,calc(100vw - 32px))}
.ws-feedback-form{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-feedback-form>*{margin:0}
.ws-feedback-warning{padding:10px 12px;border:1px solid var(--kd-service-script-accent);border-radius:var(--kd-radius-control);background:var(--kd-service-script-surface);color:var(--kd-service-script-ink);font-weight:700}
.ws-feedback-form textarea{width:100%;min-height:144px;resize:vertical;field-sizing:content}
.ws-feedback-counter{text-align:right}
.ws-feedback-project label{display:flex;align-items:center;gap:10px;min-height:var(--kd-control-h);font-weight:700}
.ws-feedback-project input{flex:none}
.ws-feedback-thanks{margin:0;font-size:1.0625rem;font-weight:800}
@media (max-width:760px){
  .ws-feedback-bar{justify-content:stretch}
  .ws-feedback-bar .ws-feedback-open{width:100%}
}
/* С-317 М2b · SPEC-166 FR-CR-08, NFR-CR-05: панель «Замечания» участников (`workshop-comments.mjs`). Токены оболочки (сервис «Контент-Движ» — `--kd-service-script-*`), контролы ≥ 44 px
   (`--kd-control-h`), фокус 3 px, статусы словом (не только цветом), перенос строк текста замечания сохраняется (`pre-wrap`), длинные слова переносятся. */
.ws-cm{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-cm-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}
.ws-cm-title{margin:0;font-size:1rem}
.ws-cm .ws-btn{min-height:var(--kd-control-h)}
.ws-cm-filters{display:flex;flex-wrap:wrap;gap:6px}
.ws-cm-filter{padding:0 12px;font-size:.875rem}
.ws-cm-filter[aria-pressed=true]{background:var(--kd-service-script-surface);border-color:var(--kd-service-script-accent);color:var(--kd-service-script-ink)}
.ws-cm-live:empty{display:none}
.ws-cm-error{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:12px 16px;border:1px solid var(--kd-status-error-ink);border-radius:var(--kd-radius-control);background:var(--kd-status-error-surface)}
.ws-cm-error[hidden],.ws-cm-form-error[hidden]{display:none}
.ws-cm-error p,.ws-cm-form-error{margin:0;overflow-wrap:anywhere}
.ws-cm-list{display:flex;flex-direction:column;gap:16px}
.ws-cm-group{display:flex;flex-direction:column;gap:8px;min-width:0}
.ws-cm-scene{margin:0;padding-left:12px;border-left:4px solid var(--kd-service-script-accent);font-size:.9375rem}
.ws-cm-group.is-deleted .ws-cm-scene{border-left-color:var(--kd-color-line)}
.ws-cm-block{display:flex;flex-direction:column;gap:8px;min-width:0}
.ws-cm-block-title{margin:0;font-size:.875rem;font-weight:700;overflow-wrap:anywhere}
.ws-cm-thread{display:flex;flex-direction:column;gap:8px;padding:12px 16px;min-width:0}
.ws-cm-thread.is-resolved{background:var(--kd-color-surface)}
.ws-cm-thread.is-stale{border-left:4px solid var(--kd-status-warning-ink)}
.ws-cm-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px}
.ws-cm-author{font-weight:700;color:var(--kd-color-ink)}
.ws-cm-author.is-customer{color:var(--kd-service-script-ink)}
.ws-cm-status.is-resolved{background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
.ws-cm-stale{margin:0;padding:8px 12px;border-radius:var(--kd-radius-control);background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink);overflow-wrap:anywhere}
.ws-cm-quote{margin:0;padding:4px 12px;border-left:3px solid var(--kd-service-script-line);color:var(--kd-color-muted);overflow-wrap:anywhere}
.ws-cm-scope{margin:0}
.ws-cm-text{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.ws-cm-replies{display:flex;flex-direction:column;gap:8px;margin:0;padding:0 0 0 12px;list-style:none;border-left:2px solid var(--kd-color-line)}
.ws-cm-reply{display:flex;flex-direction:column;gap:2px;min-width:0}
.ws-cm-actions{display:flex;flex-wrap:wrap;gap:8px}
.ws-cm-form,.ws-cm-new{display:flex;flex-direction:column;gap:8px;min-width:0}
.ws-cm-new{padding:12px 16px}
.ws-cm-place{display:flex;flex-direction:column;gap:8px}
.ws-cm-select{min-height:var(--kd-control-h);width:100%;min-width:0}
.ws-cm-area{width:100%;min-width:0;min-height:96px}
.ws-cm-new-quote:empty{display:none}
.ws-cm-warning{margin:0;padding:8px 12px;border-radius:var(--kd-radius-control);background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink);font-weight:700}
.ws-cm-form-error{color:var(--kd-status-error-ink);font-weight:700}
.ws-cm-empty{margin:0;padding:16px;border:1px dashed var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-cm-empty[hidden]{display:none}
.ws-cm .ws-btn:focus-visible,.ws-cm-select:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-cm-area:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
@media (max-width:760px){
  .ws-cm-add,.ws-cm-more{align-self:stretch;width:100%}
  .ws-cm-actions .ws-btn{flex:1 1 auto}
}
/* С-317 М2b-UI · SPEC-166 FR-CR-08, NFR-CR-05: «Замечания» в редакторе (`workshop-editor.mjs`, `createCommentsTab`). Вкладка с числом открытых, значок «N замечаний» у блока (в колонке типа блока), в панели сцены и в навигаторе —
   кнопка ≥ 44 px с подписью словами (число и слово, не только цвет); область списка по значку; на 375 px значок блока стоит в строке «тип · значок · удалить», а «Добавить замечание» — отдельной строкой панели действий. Только токены. */
.ws-ed-tabs [role=tab] .ws-ed-tab-count{margin-left:6px;padding:0 6px;border-radius:var(--kd-radius-doc);background:var(--kd-service-script-surface);color:var(--kd-service-script-ink);font-size:.75rem;font-weight:800;line-height:1.5}
.ws-ed-cm-badge{min-height:var(--kd-control-h);min-width:var(--kd-control-h);padding:0 4px;border-color:var(--kd-service-script-accent);background:var(--kd-service-script-surface);color:var(--kd-service-script-ink);font-size:.75rem;font-weight:800;line-height:1.2;white-space:normal}
.ws-ed-cm-badge:hover{background:var(--kd-service-script-line);border-color:var(--kd-service-script-accent);color:var(--kd-service-script-ink)}
.ws-ed-cm-badge:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-ed-scene-item.has-cm .ws-ed-cm-nav{margin:2px 0 6px 20px}
.ws-ed-scenebar .ws-ed-cm-scene{flex:0 0 auto}
.ws-cm-scope-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--kd-service-script-line);border-radius:var(--kd-radius-control);background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
.ws-cm-scope-bar[hidden]{display:none}
.ws-cm-scope-text{flex:1 1 160px;margin:0;font-weight:700;overflow-wrap:anywhere}
@media (max-width:760px){
  .ws-ed-bar-tools>.ws-ed-comment{grid-column:span 6;order:-1}
  .ws-ed-cm-badge{padding:0 12px;font-size:.8125rem}
}
/* С-317 М2d (SPEC-166 FR-CR-36, NFR-CR-05): «Корзина» — вкладки «Проекты | Корзина» списка проектов, строки корзины, кнопки «Удалить в корзину» (44 px, токены брендбука, статус не только цветом). */
.ws-pane{display:flex;flex-direction:column;gap:20px;min-width:0}
.ws-pane[hidden]{display:none}
.ws-pane>*{min-width:0}
.ws-view-tabs button{flex:0 0 auto;display:inline-flex;align-items:center;min-height:var(--kd-control-h);padding:0 16px;border:0;border-bottom:3px solid transparent;border-radius:var(--kd-radius-control) var(--kd-radius-control) 0 0;background:transparent;color:var(--kd-color-muted);font:inherit;font-weight:700;white-space:nowrap;cursor:pointer}
.ws-view-tabs button:hover{color:var(--kd-color-ink)}
.ws-view-tabs button[aria-current=page]{border-radius:var(--kd-radius-control) var(--kd-radius-control) 0 0;background:var(--kd-service-script-surface);color:var(--kd-service-script-ink);border-bottom-color:var(--kd-service-script-accent)}
.ws-view-tabs button:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:-3px}
.ws-card-actions,.ws-row-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ws-project .ws-card-actions{margin-top:auto}
.ws-card-actions button,.ws-row-actions button,.ws-trash-row button{min-height:var(--kd-control-h)}
.ws-trash-term{font-weight:700;color:var(--kd-color-ink)}
.ws-trash-dialog .ws-ed-dialog-body p{overflow-wrap:anywhere}
@media (max-width:760px){
  .ws-card-actions button,.ws-card-actions .ws-btn,.ws-row-actions button,.ws-row-actions .ws-btn,.ws-trash-row button{flex:1 1 auto}
  .ws-view-tabs button{flex:1 1 50%;justify-content:center}
}

/* С-317: 375 px, редактор и листы. Скрытый лист не выносится transform за viewport. */
.ws-review{display:flex;flex-direction:column;gap:12px;min-width:0;padding:16px;border:1px solid var(--kd-service-script-line);border-radius:var(--kd-radius-card);background:var(--kd-color-white)}
.ws-review[hidden]{display:none}
.ws-review label,.ws-review-comment{display:flex;flex-direction:column;gap:8px;min-width:0}
.ws-review textarea,.ws-review select{width:100%;min-width:0;max-width:100%;box-sizing:border-box;min-height:var(--kd-control-h)}
.ws-review textarea{min-height:96px;resize:vertical}
.ws-review button{min-height:var(--kd-control-h);white-space:normal;overflow-wrap:anywhere}
.ws-review p,.ws-review blockquote,.ws-review-result{overflow-wrap:anywhere}



@media (max-width:760px){.ws-review .ws-actions button{flex:1 1 100%}}

.ws-contract-terms { white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; }
.ws-analytics-scroll { max-width: 100%; overflow-x: auto; }
.ws-analytics-scroll table { width: 100%; border-collapse: collapse; }
.ws-analytics-scroll th, .ws-analytics-scroll td { padding: 8px; text-align: left; vertical-align: top; overflow-wrap: anywhere; color: var(--kd-color-ink); }
/* С-327 В2: «Статистика и диаграммы» Аналитики. Столбики SVG одним акцентом сервиса с прямыми подписями (брендбук: палитру пятнадцати сервисов
   на линии графика не переносим), дорожка — мягкая подложка сервиса; цвета только токенами, на тёмной теме их меняют styles.css и shell.css.
   Под каждой диаграммой — таблица-альтернатива. Печать отчёта — `.ws-stats-print` в конце <body>, как печать сценария; печать всегда светлая.
   С-331 G: плитки сводки — белые с рамкой и полосой акцента (было сиреневое `script-surface`), подписи, пояснения, таблицы и значения — цветом текста. */
.ws-stats { display: flex; flex-direction: column; gap: 12px; margin-top: 16px; }
.ws-stats > h2 { margin: 0; }
.ws-stats-body { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.ws-stats-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); gap: 12px; margin: 0; padding: 0; list-style: none; }
.ws-stats-summary li { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: 12px 16px; border-left: 4px solid var(--kd-service-script-accent); border-radius: var(--kd-radius-control); background: var(--kd-color-white); box-shadow: inset 0 0 0 1px var(--kd-color-line); color: var(--kd-color-ink); font-size: .875rem; font-weight: 600; }
.ws-stats-summary b { font-family: var(--kd-font-display); font-size: 1.375rem; line-height: 1.2; color: var(--kd-color-ink); overflow-wrap: anywhere; }
.ws-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 520px), 1fr)); gap: 16px; }
.ws-chart { min-width: 0; margin: 0; padding: 16px; border: 1px solid var(--kd-color-line); border-top: 4px solid var(--kd-service-script-accent); border-radius: var(--kd-radius-card); background: var(--kd-color-white); }
.ws-chart > h3 { margin: 0 0 4px; }
.ws-chart > .ws-meta { margin-bottom: 8px; color: var(--kd-color-ink); }
.ws-chart-svg { display: block; max-width: 100%; height: auto; overflow: visible; }
.ws-chart-label, .ws-chart-value { font-family: var(--kd-font-body); font-size: 14px; font-weight: 600; fill: var(--kd-color-ink); }
.ws-chart-value { font-weight: 800; }
.ws-chart-track { fill: var(--kd-service-script-surface); }
.ws-chart-bar { fill: var(--kd-service-script-accent); }
.ws-chart-row:hover .ws-chart-bar { fill: var(--kd-service-script-ink); }
.ws-chart-table { margin-top: 8px; }
.ws-chart-table summary { display: inline-flex; align-items: center; min-height: var(--kd-control-h); cursor: pointer; color: var(--kd-service-script-ink); font-weight: 700; }
.ws-chart-table summary:focus-visible, .ws-stats-cast a:focus-visible, .ws-stats-plan a:focus-visible { outline: 3px solid var(--kd-color-focus); outline-offset: 2px; }
.ws-stats-caption { padding: 0 0 6px; text-align: left; font-weight: 700; color: var(--kd-color-ink); }
.ws-stats-lists { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 16px; }
.ws-stats-list ul { margin: 0; padding-left: 20px; }
.ws-stats-list li { padding: 2px 0; overflow-wrap: anywhere; }
.ws-stats-cast a, .ws-stats-plan a { display: inline-flex; align-items: center; min-height: var(--kd-control-h); color: var(--kd-service-script-ink); font-weight: 700; }
.ws-stats-plan { margin: 0; }
/* Печатные правила отчёта — в единственном блоке @media print (печать сценария, С-317), отдельной группой в его начале. */
.ws-stats-print { display: none; }
/* С-317: manual read-through, including 375 px. */
.ws-read-through { width: min(48rem, calc(100vw - 2rem)); max-height: calc(100dvh - 2rem); overflow: auto; }
.ws-read-through .ws-ed-dialog-body { display: grid; gap: .75rem; min-width: 0; }
.ws-read-through select, .ws-read-through input { width: 100%; min-width: 0; max-width: 100%; }
.ws-read-clock { font-size: 2rem; font-variant-numeric: tabular-nums; }
.ws-read-text { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 1.25rem; line-height: 1.6; }
.ws-read-through .ws-actions { flex-wrap: wrap; }
/* С-328: озвученная читка — режимы окна, подсветка строки, плеер, время озвучки, таблица голосов (375 px — прокрутка таблицы). Только токены: тёмная тема из styles.css. */
.ws-read-mode button[aria-pressed=true] { background: var(--kd-service-script-surface); border-color: var(--kd-service-script-accent); color: var(--kd-service-script-ink); font-weight: 800; }
.ws-read-aloud, .ws-read-manual { display: grid; gap: .75rem; min-width: 0; }
.ws-read-aloud[hidden], .ws-read-manual[hidden] { display: none; }
.ws-read-aloud > *, .ws-read-manual > *, .ws-read-voices-box { min-width: 0; max-width: 100%; }
.ws-read-through input[type=checkbox] { width: auto; min-width: 1.25rem; height: 1.25rem; margin: 0; }
.ws-read-check { display: flex; align-items: center; gap: .5rem; min-height: var(--kd-control-h); cursor: pointer; }
.ws-read-range { display: grid; gap: .5rem; min-width: 0; }
.ws-read-current { border: 1px solid var(--kd-color-line); border-left: 4px solid var(--kd-service-script-accent); border-radius: var(--kd-radius-card); padding: .75rem 1rem; background: var(--kd-color-surface); min-width: 0; }
.ws-read-current h3 { margin: 0 0 .25rem; color: var(--kd-service-script-ink); }
.ws-read-warn { margin: 0; padding: .75rem 1rem; border-radius: var(--kd-radius-card); background: var(--kd-status-warning-surface); color: var(--kd-status-warning-ink); }
.ws-read-warn[hidden] { display: none; }
.ws-read-player button { min-height: var(--kd-control-h); }
.ws-read-time h3 { margin: 0; }
.ws-read-voices-box summary { display: flex; align-items: center; min-height: var(--kd-control-h); cursor: pointer; font-weight: 700; color: var(--kd-service-script-ink); }
.ws-read-voices-box summary:focus-visible { outline: 3px solid var(--kd-color-focus); outline-offset: 2px; }
.ws-read-voices-wrap { overflow-x: auto; max-width: 100%; }
.ws-read-voices { width: 100%; min-width: 40rem; border-collapse: collapse; font-size: .875rem; }
.ws-read-voices th, .ws-read-voices td { padding: 6px 8px; border-bottom: 1px solid var(--kd-color-line); text-align: left; vertical-align: middle; overflow-wrap: anywhere; }
.ws-read-voices select { min-height: var(--kd-control-h); min-width: 5.5rem; }
.ws-read-voices td:nth-child(2) select { min-width: 14rem; }
.ws-read-voices th[scope=row] { overflow-wrap: normal; word-break: normal; min-width: 7rem; }
.ws-read-missing { color: var(--kd-status-error-ink); }
/* С-317: board columns scroll locally on narrow screens. */
.ws-board-dialog { width: min(1200px, calc(100vw - 24px)); max-width: calc(100vw - 24px); }
.ws-board-grid { display: flex; gap: 16px; overflow-x: auto; max-width: 100%; padding-bottom: 12px; }
.ws-board-act { flex: 0 0 280px; min-width: 0; }
.ws-board-lane { border: 1px solid var(--kd-color-line); border-radius: 8px; padding: 8px; margin-bottom: 12px; min-height: 90px; border-top: 5px solid var(--kd-color-muted); }
.ws-board-lane[data-color="red"] { border-top-color: var(--kd-label-red-line); }
.ws-board-lane[data-color="orange"] { border-top-color: var(--kd-label-orange-line); }
.ws-board-lane[data-color="yellow"] { border-top-color: var(--kd-label-yellow-line); }
.ws-board-lane[data-color="green"] { border-top-color: var(--kd-label-green-line); }
.ws-board-lane[data-color="blue"] { border-top-color: var(--kd-label-blue-line); }
.ws-board-lane[data-color="purple"] { border-top-color: var(--kd-label-purple-line); }
.ws-board-lane[data-color="brown"] { border-top-color: var(--kd-label-brown-line); }
.ws-board-card { border: 1px solid var(--kd-color-line); border-radius: 6px; padding: 10px; margin: 10px 0; overflow-wrap: anywhere; }
.ws-board-card--selected { outline: 2px solid var(--kd-color-focus); }
.ws-board-card p { white-space: pre-wrap; }
.ws-board-card button { margin: 4px 4px 0 0; }
.ws-board-timeline { max-width: 100%; overflow-x: auto; }
.ws-board-timeline-track { display: flex; flex-wrap: nowrap; min-width: 600px; }
.ws-board-timeline-track .ws-board-segment { flex-shrink: 0; }
.ws-board-segment { display: inline-block; vertical-align: top; min-width: 130px; box-sizing: border-box; border: 1px solid var(--kd-color-muted); padding: 8px; overflow-wrap: anywhere; }
/* С-317: series bible and season forms, including 375 px. */
.ws-series { min-width: 0; overflow-wrap: anywhere; }
.ws-series fieldset { border: 0; padding: 0; margin: 0; min-width: 0; }
.ws-series textarea, .ws-series input, .ws-series select { box-sizing: border-box; width: 100%; max-width: 100%; min-width: 0; min-height: var(--kd-control-h); }
.ws-series textarea { resize: vertical; white-space: pre-wrap; }
.ws-series .ws-card { margin-top: 16px; }
.ws-series button { min-height: var(--kd-control-h); white-space: normal; overflow-wrap: anywhere; }
.ws-series-handoff { min-width: 0; }
@media (max-width:760px) { .ws-series .ws-actions button { flex: 1 1 100%; } }

.ws-board-segment meter { display: block; width: 100%; }
/* С-326 В1: пустая доска, пометки «новая» и «сцены нет»; цвета — токены статусов (светлая и тёмная темы). */
.ws-board-empty:empty { display: none; }
.ws-board-empty { border: 1px dashed var(--kd-color-line); border-radius: 8px; padding: 12px 16px; margin-bottom: 12px; overflow-wrap: anywhere; }
.ws-board-empty button { min-height: var(--kd-control-h); white-space: normal; }
.ws-board-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.ws-board-card--new { border-color: var(--kd-status-info-ink); }
.ws-board-card--missing { border-style: dashed; border-color: var(--kd-status-warning-ink); }
.ws-board-total { font-weight: 600; }
/* Writing cards reuse workshop tokens and remain readable on narrow screens. */
.ws-write-step textarea { width: 100%; box-sizing: border-box; min-height: 6rem; resize: vertical; }
.ws-write-text, .ws-write-notice { white-space: pre-wrap; overflow-wrap: anywhere; max-width: 100%; }
.ws-write-step details { margin-top: 1rem; }
.ws-write-step summary { min-height: 44px; cursor: pointer; }
/* С-327 Г4: требования запроса и проверка шага 7 «Сценарий» (цвета — токены, тёмная тема переключается сама). */
.ws-write-require { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); gap: 12px; margin: 12px 0; padding: 12px 16px; border: 1px solid var(--kd-color-line); border-radius: 8px; min-width: 0; }
.ws-write-require legend { padding: 0 4px; font-weight: 600; }
.ws-write-require .ws-meta { grid-column: 1 / -1; }
.ws-write-require input, .ws-write-require select { min-height: var(--kd-control-h); width: 100%; box-sizing: border-box; }
.ws-write-check { display: flex; flex-direction: column; gap: 4px; margin: 8px 0; padding: 8px 12px; border-left: 3px solid var(--kd-status-info-ink); overflow-wrap: anywhere; }
.ws-write-warn { margin: 0; color: var(--kd-status-warning-ink); font-weight: 600; }

@font-face{font-family:"Cousine";src:url("./cousine-regular.ttf") format("truetype");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Cousine";src:url("./cousine-bold.ttf") format("truetype");font-weight:700;font-style:normal;font-display:swap}
.ws-form-hints{grid-column:1 / -1;margin:4px 0 8px;padding:8px 12px;border-left:3px solid var(--kd-status-warning-ink);font-family:var(--kd-font-body);font-size:.8125rem;white-space:normal}
.ws-form-hints p{margin:4px 0}
/* С-317 upload: full scene comparison also on narrow screens. */
.ws-upload-text { white-space: pre-wrap; overflow-wrap: anywhere; font-family: 'Courier New', monospace; font-size: 1rem; max-width: 100%; }
.ws-upload .ws-columns > div { min-width: 0; }
.ws-upload .pp { max-width: 100%; overflow-x: auto; }
/* С-324: внутри проекта под-меню мастерской и строка «Сообщить о проблеме» скрыты; кнопка — справа в строке «← Мои проекты». Ссылка «← Вернуться к загрузке сценария» над вкладкой. */
.kd-space-workshop>.kd-service-sections[hidden],.kd-space-workshop>.ws-feedback-bar[hidden],.ws-back-row[hidden]{display:none}
.ws-crumbs-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;min-width:0}
.ws-crumbs-side{display:flex;align-items:center;margin-left:auto}
.ws-crumbs-side:empty{display:none}
.ws-back-row{margin:12px 0 0}
/* С-324: «Написать сценарий» без проекта — поле текста шрифтом сценария, сохранение отдельной карточкой. */
.ws-write-simple .ws-form{margin-top:16px}
.ws-write-simple-text{display:block;width:100%;min-height:360px;resize:vertical;font-family:"Courier Prime","Courier New",Courier,monospace;font-size:1rem;line-height:1.5}
.ws-write-simple-summary{margin:0}
@media (max-width:760px){
  .ws-crumbs-side{margin-left:0}
  .ws-write-simple .ws-actions>button{width:100%}
}
/* ---------- С-325: причины неактивных кнопок, успех загрузки, поиск, панель Пети на телефоне ---------- */
/* P1-И: строка «почему неактивна» под кнопками (цвета — токены, в тёмной теме переключаются сами). */
.ws-upload-why,.ws-write-why,.ws-ed-why{display:flex;flex-direction:column;gap:2px;margin:0;color:var(--kd-color-muted)}
.ws-upload-why[hidden],.ws-write-why[hidden],.ws-ed-why[hidden]{display:none}
/* П-9: «Сценарий «…» создан.» — тон успеха, как у восстановления в редакторе. */
.ws-exchange .ws-notice--success{border-color:var(--kd-status-success-ink);background:var(--kd-status-success-surface);color:var(--kd-status-success-ink)}
/* П-10: переключатель регистра в «Поиске». */
.ws-ed-search-options{display:flex;align-items:center;gap:8px;margin:0;font-size:.9375rem;color:var(--kd-color-ink)}
.ws-ed-search-options input{width:20px;height:20px;margin:0;flex:0 0 auto}
/* П-8 (панель Пети на телефоне) — в ступени «одна колонка» области редактора ниже: отступ листов под плашку «Петя AI» и перенос заголовка сцены. */
/* С-326 Б1: «Собрать из сценария» (итог с галочками по персонажам и локациям), «Такой вкладки нет» (П-11), ссылки на «Аналитику», подсказка имени в блоке
   «Персонаж». Только токены — тёмная тема берёт их из `styles.css` (`:root[data-theme="dark"]`). */
.ws-collect{display:flex;flex-direction:column;gap:12px;max-width:960px}
.ws-collect[hidden]{display:none}
.ws-collect h3{margin:0}
.ws-collect-group{display:flex;flex-direction:column;gap:8px;min-width:0;margin:0;padding:12px 16px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control)}
.ws-collect-group legend{padding:0 4px;font-weight:800;color:var(--kd-color-ink)}
.ws-collect-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,280px),1fr));gap:6px 16px;margin:0;padding:0;list-style:none}
.ws-collect-row label{display:flex;align-items:flex-start;gap:8px;margin:0;font-weight:400;overflow-wrap:anywhere;color:var(--kd-color-ink)}
.ws-collect-row input{width:20px;height:20px;margin:2px 0 0;flex:0 0 auto}
.ws-collect-row--failed label{color:var(--kd-status-error-ink)}
.ws-collect-error{margin:2px 0 0 28px;color:var(--kd-status-error-ink)}
.ws-collect-known summary{font-size:.875rem;color:var(--kd-service-script-ink)}
.ws-collect-known summary:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:-3px}
.ws-collect-known ul{display:grid;gap:2px;margin:6px 0 0;padding-left:20px;font-size:.875rem;color:var(--kd-color-muted);overflow-wrap:anywhere}
.ws-entities-analytics{margin:0}
.ws-missing-tab{display:flex;flex-direction:column;gap:12px}
.ws-missing-tab h2{margin:0}
.ws-missing-tab-list{display:flex;flex-wrap:wrap;gap:8px 16px;margin:0;padding:0;list-style:none}
.ws-ed-stats-analytics{display:inline-block;margin:0 0 8px;font-size:.875rem}
.ws-ed-suggest{grid-column:2;display:flex;flex-direction:column;margin:0;padding:4px 0;list-style:none;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-white)}
.ws-ed-suggest[hidden]{display:none}
.ws-ed-suggest-option{padding:6px 12px;font-family:"Courier Prime","Courier New",Courier,monospace;font-weight:700;cursor:pointer;color:var(--kd-color-ink)}
.ws-ed-suggest-option.is-active,.ws-ed-suggest-option:hover{background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
/* С-326 Г1: «Петя AI» у блока (видна при фокусе в блоке) и окно вариантов под блоком или под панелью сцены. Только токены оболочки — тёмная тема из них же. */
.ws-ed-block{position:relative}
.ws-ed-petya{position:absolute;right:0;top:-14px;z-index:1;display:none;min-height:28px;padding:0 10px;border:1px solid var(--kd-service-script-line,var(--kd-color-line));border-radius:var(--kd-radius-control);background:var(--kd-service-script-surface,var(--kd-color-surface));color:var(--kd-service-script-ink,var(--kd-color-ink));font-size:.8125rem;font-weight:700}
.ws-ed-block:focus-within .ws-ed-petya,.ws-ed-petya:focus-visible{display:inline-flex;align-items:center}
.ws-ed--readonly .ws-ed-petya{display:none}
.ws-petya{margin:4px 0 12px;padding:12px 14px;border:1px solid var(--kd-service-script-line,var(--kd-color-line));border-left:4px solid var(--kd-service-script-accent,var(--kd-color-ink));border-radius:var(--kd-radius-card);background:var(--kd-color-white);color:var(--kd-color-ink);font-family:var(--kd-font-body);font-size:.875rem}
.ws-petya-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ws-petya-title{margin:0;font-size:.9375rem}
.ws-petya-note,.ws-petya-status,.ws-petya-cost,.ws-petya-summary{margin:6px 0;color:var(--kd-color-muted)}
.ws-petya-summary{color:var(--kd-color-ink);font-weight:700}
.ws-petya-error,.ws-petya-rejected{color:var(--kd-status-warning-ink)}
.ws-petya-ops,.ws-petya-actions,.ws-petya-choices{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0 0}
.ws-petya-scope-label{display:flex;align-items:center;gap:8px}
.ws-petya-what summary{cursor:pointer;font-weight:700}
.ws-petya-lines,.ws-petya-findings,.ws-petya-questions{margin:6px 0;padding-left:18px;white-space:pre-wrap;overflow-wrap:anywhere}
.ws-petya-finding.is-error{color:var(--kd-color-ink)}
.ws-petya-finding.is-hint{color:var(--kd-color-muted)}
.ws-petya-card{margin:8px 0;padding:10px 12px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card);background:var(--kd-color-surface)}
.ws-petya-card[data-state=rejected],.ws-petya-card[data-state=undone],.ws-petya-card[data-state=expired]{opacity:.7}
.ws-petya-card-title{margin:0 0 4px;font-size:.875rem}
.ws-petya-warn,.ws-petya-state{margin:4px 0;color:var(--kd-color-muted)}
@media (max-width:767px){.ws-petya{padding:10px}}
/* С-327 Г2 · находки Пети AI: в окне «Проверить сцену» и в «Замечаниях» (автор «Петя AI», тип, цитата, причина, правка, «намеренный приём»). Только токены — тёмная тема из `styles.css`. */
.ws-petya-finding{margin:6px 0}
.ws-petya-finding-head{margin:0;font-weight:700}
.ws-petya-kind{color:var(--kd-service-script-ink)}
.ws-petya-quote{margin:4px 0;padding:2px 10px;border-left:3px solid var(--kd-service-script-line);color:var(--kd-color-muted);overflow-wrap:anywhere}
.ws-petya-reason,.ws-petya-fix{margin:2px 0;overflow-wrap:anywhere}
.ws-cm-author.is-petya{color:var(--kd-service-script-ink);font-weight:700}
.ws-cm-kind{background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
.ws-cm-kind.is-form{background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink)}
.ws-cm-fix{margin:4px 0;overflow-wrap:anywhere;white-space:pre-wrap}
.ws-cm-intentional{margin:4px 0;font-style:italic}
.ws-cm-fix-slot:empty{display:none}
/* С-330 Д3: пакет для автора/продюсера в окне «Экспорт» */
.ws-export-package{display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--kd-color-line);padding-top:12px;margin-top:4px}
.ws-export-package h3{margin:0;font-size:1rem}
.ws-export-package-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.ws-export-package-item{display:flex;flex-direction:column;gap:4px;overflow-wrap:anywhere}
.ws-export-package-item a{min-height:44px;display:inline-flex;align-items:center}
.ws-export-package-item p{margin:0}
/* С-330 З (П-12): скелетон ожидания и сообщение «дольше 10 секунд» */
.ws-loading{display:flex;flex-direction:column;gap:12px}
.ws-skeleton{display:grid;gap:12px}
.ws-skeleton-cards{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.ws-skeleton-cards .ws-skeleton-item{height:120px;border-radius:12px}
.ws-skeleton-lines .ws-skeleton-item{height:18px;border-radius:6px}
.ws-skeleton-lines .ws-skeleton-item:nth-child(3n){width:60%}
.ws-skeleton-item{background:var(--kd-color-line);opacity:.5}
.ws-slow{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.ws-slow p{margin:0}
.ws-slow[hidden]{display:none}

/* ---------- С-329 Г3: шаг 3 — «В Плане версия N, у вас M» и «Что устарело в Плане» со ссылками в разделы Плана ---------- */
.ws-upload-gap{margin:0;padding:8px 12px;border:1px solid var(--kd-status-warning-ink);border-radius:var(--kd-radius-control);background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink)}
.ws-upload-gap[hidden],.ws-upload-consent-where[hidden]{display:none}
.ws-upload-changes:empty{display:none}
.ws-upload-changes,.ws-upload-impact{display:flex;flex-direction:column;gap:8px}
.ws-upload-changes>h4,.ws-upload-impact>h4{margin:0}
.ws-plan-changes{display:flex;flex-direction:column;gap:6px;margin:0;padding-left:20px;color:var(--kd-color-ink)}
.ws-plan-changes li{overflow-wrap:anywhere}
.ws-plan-change-links{display:inline-flex;flex-wrap:wrap;gap:4px 10px;margin-left:8px}

/* С-329 Ж1: ссылка приглашения на адрес тестового контура — поле со ссылкой и «Скопировать ссылку приглашения». */
.ws-invite-link{display:flex;flex-direction:column;gap:8px;align-items:stretch}
.ws-invite-link[hidden]{display:none}
.ws-invite-link>p{margin:0}
.ws-invite-link>button{align-self:flex-start}
/* С-329 Ж1: код из тестового ящика на странице приглашения (адрес @kinodvizh.test). */
.ws-invite-testbox{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.ws-invite-testbox[hidden]{display:none}
.ws-invite-testbox>p{margin:0}

/* С-329 Б4 · «Библия истории» (вкладка проекта) и доказательства находки «Канон» в «Замечаниях». Цвета — токены брендбука (светлая и тёмная темы). */
.ws-canon-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px 16px}
.ws-canon-filters:empty{display:none}
.ws-canon-filters .crew-field{flex:1 1 240px;min-width:0;max-width:420px}
.ws-canon-filters select{min-height:var(--kd-control-h);width:100%}
.ws-canon-count{margin:0}
.ws-canon-group{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-canon-facts{display:flex;flex-direction:column;gap:12px;margin:0;padding:0;list-style:none}
.ws-canon-fact{display:flex;flex-direction:column;gap:6px;min-width:0;padding-top:12px;border-top:1px solid var(--kd-color-line)}
.ws-canon-fact:first-child{padding-top:0;border-top:0}
.ws-canon-fact.is-archived .ws-canon-text{color:var(--kd-color-muted)}
.ws-canon-text{margin:0;font-weight:700;color:var(--kd-color-ink);overflow-wrap:anywhere}
.ws-canon-meta,.ws-canon-source{margin:0;overflow-wrap:anywhere}
.ws-canon-source{padding-left:10px;border-left:3px solid var(--kd-service-script-line);color:var(--kd-color-ink)}
.ws-canon-stale{margin:0;padding:8px 10px;border-radius:var(--kd-radius-control);background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink)}
.ws-canon-jump{min-height:max(44px,var(--kd-control-h))}
.ws-canon-form select,.ws-canon-form input,.ws-canon-form textarea{width:100%}
.ws-canon-form textarea{field-sizing:content;min-height:4.5em}
.ws-canon-counter{display:block;margin-top:4px;color:var(--kd-color-muted)}
.ws-canon-form-out:empty{display:none}
.ws-cm-evidence{margin:4px 0;padding-left:10px;border-left:3px solid var(--kd-service-script-line);overflow-wrap:anywhere}
@media (max-width:640px){
  .ws-canon-filters .crew-field{max-width:none}
  .ws-canon-fact .ws-actions button,.ws-canon-fact .ws-actions .ws-btn{flex:1 1 auto}
}
/* ---------- С-330 А2: режим «Страница» — весь сценарий одним листом, отступы и ширины по шаблону печати (`pageLayout`, доли 58 знаков).
   Поля те же, что в «Блоках»: кнопки блока скрыты, тип виден у блока с фокусом (Tab — тоже). Только токены: тёмная тема — из styles.css. */
.ws-ed-view{display:inline-flex;gap:4px;flex-wrap:wrap}
.ws-ed-view-btn{min-height:var(--kd-control-h);min-width:var(--kd-control-h)}
.ws-ed-view-btn[aria-pressed=true]{border-color:var(--kd-color-ink);box-shadow:inset 0 -3px 0 var(--kd-color-ink);font-weight:700}
.ws-ed-sheet{max-width:none;margin:0 auto;padding:32px clamp(12px,6%,56px);background:var(--kd-color-white);color:var(--kd-color-ink);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-doc);font-family:"Cousine","Courier New",Courier,monospace}
.ws-ed-page-scene{margin:0 0 24px;scroll-margin-top:16px}
.ws-ed--page .ws-ed-sheet .ws-ed-field>label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.ws-ed--page .ws-ed-sheet .ws-ed-field input.ws-ed-heading:not([type=checkbox]){width:100%;border:0;border-bottom:1px dashed transparent;background:transparent;font-family:inherit;font-weight:700;text-transform:uppercase;padding:4px 0;color:inherit}
.ws-ed--page .ws-ed-sheet .ws-ed-kind,.ws-ed--page .ws-ed-sheet .ws-ed-remove,.ws-ed--page .ws-ed-sheet .ws-ed-dual{display:none}
.ws-ed--page .ws-ed-sheet .ws-ed-type{display:none}
.ws-ed--page .ws-ed-sheet .ws-ed-block:focus-within .ws-ed-type{display:inline-block;margin:0 0 4px}
.ws-ed--page .ws-ed-sheet .ws-ed-text{width:100%;border:0;border-left:2px solid transparent;border-radius:0;background:transparent;padding:2px 4px;font-family:inherit;font-size:1rem;line-height:1.5;color:inherit;text-align:left;justify-self:stretch;font-style:normal}
.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=transition] .ws-ed-text{text-align:right}
.ws-ed--page .ws-ed-sheet .ws-ed-text:focus,.ws-ed--page .ws-ed-sheet .ws-ed-heading:focus{outline:2px solid var(--kd-color-focus);outline-offset:1px}
.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=character] .ws-ed-text,.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=transition] .ws-ed-text,.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=shot] .ws-ed-text{text-transform:uppercase;font-weight:400}
.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=parenthetical] .ws-ed-text,.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=lyrics] .ws-ed-text{font-style:italic}
.ws-ed--page .ws-ed-sheet .ws-ed-block[data-dual=true] .ws-ed-text{border-left-color:var(--kd-color-muted)}
.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=note] .ws-ed-text{background:var(--kd-status-warning-surface);color:var(--kd-status-warning-ink)}
.ws-ed--page .ws-ed-sheet .ws-ed-add-block{min-height:var(--kd-control-h)}
/* На листе кнопка «Петя AI» у блока — только у блока с фокусом (и на узком экране): сплошной текст не перебивается кнопками. */
.ws-ed--page .ws-ed-sheet .ws-ed-block:not(:focus-within) .ws-ed-petya:not(:focus-visible){display:none}
@media (max-width:600px){.ws-ed-sheet{padding:16px 12px}}

/* ---------- С-330 А3: цветовые пометки — слой над полем блока (тот же текст невидимым цветом), заливка и рисунок подчёркивания по цвету,
   список пометок под блоком словами. Различимы не только цветом: рисунок линии и подпись. Цвета — токены, тёмная тема ниже. */
/* Цвета пометок — токены статусов брендбука (тёмная тема — их же значения в styles.css). Розовая — поверхность статуса ошибки. */
.ws-ed,.ws-mk-panel{--ws-mk-yellow:var(--kd-status-warning-surface);--ws-mk-green:var(--kd-status-success-surface);--ws-mk-blue:var(--kd-status-info-surface);--ws-mk-pink:var(--kd-status-error-surface);--ws-mk-line:var(--kd-color-ink)}
/* Слой несёт класс поля (.ws-ed-text): шрифт, ширина, выравнивание и место в сетке блока те же; поверх поля — та же ячейка сетки. */
.ws-ed .ws-ed-block .ws-mk-layer.ws-ed-text{position:relative;z-index:1;pointer-events:none;overflow:hidden;white-space:pre-wrap;overflow-wrap:break-word;color:transparent;background:transparent;border-color:transparent;padding:10px 12px;border-width:1px;border-style:solid;border-radius:var(--kd-radius-control);min-height:0;align-self:stretch}
.ws-ed .ws-ed-block .ws-mk-layer[hidden],.ws-ed .ws-ed-block .ws-mk-list[hidden]{display:none}
.ws-mk{color:transparent;border-radius:2px;text-decoration-line:underline;text-decoration-thickness:3px;text-underline-offset:3px;text-decoration-color:var(--ws-mk-line);-webkit-box-decoration-break:clone;box-decoration-break:clone}
.ws-mk[data-color=yellow]{background:color-mix(in srgb,var(--ws-mk-yellow) 40%,transparent);text-decoration-color:var(--kd-status-warning-ink);text-decoration-style:solid}
.ws-mk[data-color=green]{background:color-mix(in srgb,var(--ws-mk-green) 40%,transparent);text-decoration-color:var(--kd-status-success-ink);text-decoration-style:dashed}
.ws-mk[data-color=blue]{background:color-mix(in srgb,var(--ws-mk-blue) 40%,transparent);text-decoration-color:var(--kd-status-info-ink);text-decoration-style:dotted}
.ws-mk[data-color=pink]{background:color-mix(in srgb,var(--ws-mk-pink) 40%,transparent);text-decoration-color:var(--kd-status-error-ink);text-decoration-style:double}
.ws-mk-sample{color:var(--kd-color-ink);padding:0 4px}
.ws-mk-list{grid-column:1/-1;list-style:none;margin:4px 0 0;padding:0;display:grid;gap:4px}
.ws-mk-item{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:.875rem;color:var(--kd-color-ink);overflow-wrap:anywhere}
.ws-mk-swatch{flex:0 0 auto;width:24px;height:12px;border-bottom:3px solid var(--ws-mk-line);border-radius:2px}
.ws-mk-item[data-color=yellow] .ws-mk-swatch{background:var(--ws-mk-yellow);border-bottom-color:var(--kd-status-warning-ink);border-bottom-style:solid}
.ws-mk-item[data-color=green] .ws-mk-swatch{background:var(--ws-mk-green);border-bottom-color:var(--kd-status-success-ink);border-bottom-style:dashed}
.ws-mk-item[data-color=blue] .ws-mk-swatch{background:var(--ws-mk-blue);border-bottom-color:var(--kd-status-info-ink);border-bottom-style:dotted}
.ws-mk-item[data-color=pink] .ws-mk-swatch{background:var(--ws-mk-pink);border-bottom-color:var(--kd-status-error-ink);border-bottom-style:double;border-bottom-width:4px}
.ws-mk-item.is-stale .ws-mk-caption{text-decoration:line-through}
.ws-mk-stale{color:var(--kd-status-warning-ink);font-weight:700}
.ws-mk-actions{display:inline-flex;gap:4px;margin-left:auto}
.ws-mk-actions button,.ws-mk-panel button{min-height:var(--kd-control-h);min-width:var(--kd-control-h)}
.ws-mk-panel{margin:8px 0;display:grid;gap:8px;max-width:640px}
.ws-mk-quote{margin:0;padding:8px 12px;border-left:3px solid var(--kd-color-line);background:var(--kd-color-surface);overflow-wrap:anywhere;white-space:pre-wrap}
.ws-mk-colors{display:grid;gap:4px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);padding:8px 12px;margin:0}
.ws-mk-choice,.ws-mk-with-comment{display:flex;align-items:center;gap:8px;min-height:var(--kd-control-h)}
.ws-mk-choice input,.ws-mk-with-comment input{width:20px;height:20px}
.ws-mk-panel input[type=text]{min-height:var(--kd-control-h);width:100%;box-sizing:border-box}
.ws-ed-mark{min-height:var(--kd-control-h)}

/* С-330 Б2/Б3: карточка персонажа (на карточке справочника), карта отношений (таблица, форма, схема SVG) и досье. Только токены темы:
   тёмная тема берёт их из `styles.css`. Цвета связей — токены меток (`--kd-label-*-line`). Печать досье — в общем блоке @media print. */
.ws-dossier-print{display:none}
/* С-331 G: связи — текстовый тон метки (`ink`), а не линия рамки: светлая рамка давала на схеме 1,3:1 (светлая тема) и 1,5:1 (тёмная). */
.ws-rel-c-orange{color:var(--kd-label-orange-ink)}
.ws-rel-c-blue{color:var(--kd-label-blue-ink)}
.ws-rel-c-green{color:var(--kd-label-green-ink)}
.ws-rel-c-red{color:var(--kd-label-red-ink)}
.ws-rel-c-violet{color:var(--kd-label-purple-ink)}
.ws-rel-c-gray{color:var(--kd-color-muted)}
.ws-charcard{display:flex;flex-direction:column;gap:8px;min-width:0}
.ws-charcard-row{display:flex;gap:12px;align-items:flex-start;min-width:0}
.ws-charcard-text{display:flex;flex-direction:column;gap:4px;min-width:0;overflow-wrap:anywhere}
.ws-charcard-text p{margin:0}
.ws-charcard-line{font-weight:700;color:var(--kd-color-ink)}
.ws-charcard-summary{color:var(--kd-color-ink)}
.ws-charcard-photo{flex:0 0 auto;width:64px;height:64px;object-fit:cover;border-radius:var(--kd-radius-control);border:1px solid var(--kd-color-line);background:var(--kd-color-surface)}
.ws-charcard-photo--large{width:120px;height:120px}
.ws-charcard-photo[hidden]{display:none}
.ws-charcard-casting a{color:var(--kd-service-script-ink);font-weight:700}
.ws-charcard>.ws-btn,.ws-charcard>button{align-self:flex-start;min-height:var(--kd-control-h)}
.ws-charcard-form{display:flex;flex-direction:column;gap:12px;padding:12px 0 0;border-top:1px solid var(--kd-color-line);min-width:0}
.ws-charcard-form h3{margin:0}
.ws-charcard-form textarea,.ws-charcard-form input[type=text],.ws-charcard-form select{width:100%;min-width:0;max-width:100%;box-sizing:border-box}
.ws-charcard-photo-box{display:flex;flex-direction:column;gap:8px;align-items:flex-start;min-width:0}
.ws-charcard-photo-box input[type=file]{min-height:var(--kd-control-h);max-width:100%}
.ws-charcard-read{display:grid;gap:4px;margin:0;overflow-wrap:anywhere}
.ws-charcard-read dt{font-weight:700;color:var(--kd-color-ink)}
.ws-charcard-read dd{margin:0 0 6px;white-space:pre-wrap;color:var(--kd-color-ink)}
.ws-entities-extras{margin-top:24px;min-width:0}
.ws-relations{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-relations h2,.ws-relations h3,.ws-relations p{margin:0}
.ws-rel-wrap{max-width:100%;overflow-x:auto}
.ws-rel-table{width:100%;border-collapse:collapse;font-size:.9375rem;color:var(--kd-color-ink)}
.ws-rel-table th,.ws-rel-table td{padding:6px 8px;border-bottom:1px solid var(--kd-color-line);text-align:left;vertical-align:middle;overflow-wrap:anywhere}
.ws-rel-table caption{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ws-rel-swatch{display:inline-block;width:14px;height:14px;border-radius:50%;background:currentColor;vertical-align:-2px}
.ws-rel-actions{display:flex;flex-wrap:wrap;gap:6px}
.ws-rel-actions button{min-height:var(--kd-control-h)}
.ws-rel-form{display:flex;flex-direction:column;gap:10px;min-width:0}
.ws-rel-form select,.ws-rel-form input{width:100%;min-width:0;max-width:100%;box-sizing:border-box}
.ws-scheme{min-width:0;max-width:960px}
.ws-scheme-svg{display:block;width:100%;height:auto;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card);background:var(--kd-color-surface);color:var(--kd-color-ink);font-family:var(--kd-font-body);touch-action:none}
.ws-scheme-edge line{stroke:currentColor;stroke-width:2.5}
.ws-scheme-head{fill:currentColor}
.ws-scheme-label{fill:var(--kd-color-ink);font-size:13px;font-weight:600;paint-order:stroke;stroke:var(--kd-color-surface);stroke-width:4px}
.ws-scheme-dot{fill:var(--kd-service-script-surface);stroke:var(--kd-service-script-accent);stroke-width:2}
.ws-scheme-initial{fill:var(--kd-color-ink);font-size:20px;font-weight:800;pointer-events:none}
.ws-scheme-name{fill:var(--kd-color-ink);font-size:13px;font-weight:600;pointer-events:none;paint-order:stroke;stroke:var(--kd-color-surface);stroke-width:4px}
.ws-scheme-node--drag{cursor:grab}
.ws-scheme-node--active{cursor:grabbing}
.ws-scheme-node--active .ws-scheme-dot{stroke-width:4}
.ws-scheme-node:focus{outline:none}
.ws-scheme-node:focus-visible .ws-scheme-dot{stroke:var(--kd-color-focus);stroke-width:4}
.ws-dossier-tools button{min-height:var(--kd-control-h)}

/* С-331 B: фон Мастерской, «Новый проект» под заголовком, кнопка-жучок «Сообщить о проблеме» (ТЗ п. 3).
   Фон — слой `.ws-bg` (первый узел корня пространства, `space-workshop.mjs`): `position:fixed` под всем содержимым (z-index −1 — ниже сплошных
   подложек карточек, шапки и полей), только на экранах Мастерской (уходит вместе с корнем). (С-332 C: ролик заменён живыми SVG-слоями, см. блок «С-332 C» в конце файла) Был свой 4-секундный ролик `assets/workshop-bg.webm|mp4`
   (ffmpeg, фильтр — `assets/workshop-bg.ffmpeg-filter.txt`) поверх своей картинки `assets/workshop-bg.svg`; ролик проявляется после `playing`.
   Видимость — 30 % в обеих темах (С-331 живая проверка: 10 % не видно); фон `body` на это время прозрачный (`shell.css`, `body:has(.ws-bg)`), иначе он перекрывает слой с z-index −1 (средний сепийный тон: на светлой бумаге чуть темнит, на тёмной чуть светлит): текст читается, карточки остаются
   сплошными. «Меньше движения» — только картинка; печать — без фона (слой виден только на экране). */
.ws-bg{display:none}
@media screen{
  .ws-bg{position:fixed;inset:0;z-index:-1;display:block;overflow:hidden;pointer-events:none;opacity:.3;background:url("/assets/workshop-bg.svg") center/cover no-repeat}
}
/* «Новый проект» — строкой сразу под заголовком «Мои проекты» (выровнена по тексту заголовка: полоса 4 px + отступ 16 px). */
.ws-screen>.ws-new-row{margin:-8px 0 0 20px}
.ws-screen>.ws-new-row:not(:has(button:not([hidden]))){display:none}
/* Жучок: круглая кнопка 40 px (на сенсорных — 44 px) в левом нижнем углу окна, справа внизу — Петя AI (z-index 29); выше содержимого, ниже листов
   редактора и панели Пети. Нижний отступ страницы под обе кнопки — у `#kd-main` (56 px, с панелью Пети 96 px); на сенсорных +8 px корню. */
.kd-space-workshop>.ws-feedback-bar{margin:0}
.kd-space-workshop button.ws-feedback-open.ws-bug{position:fixed;left:calc(16px + env(safe-area-inset-left,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:28;display:inline-grid;place-items:center;width:40px;min-width:0;height:40px;min-height:0;padding:0;border:1px solid var(--kd-color-line);border-radius:50%;background:var(--kd-color-white);color:var(--kd-service-script-ink);box-shadow:0 6px 16px color-mix(in srgb,var(--kd-color-graphite) 18%,transparent)}
.kd-space-workshop button.ws-feedback-open.ws-bug:hover:not(:disabled){border-color:var(--kd-service-script-accent);color:var(--kd-service-script-accent)}
.kd-space-workshop button.ws-feedback-open.ws-bug svg{display:block;width:18px;height:18px}
.ws-bug-text{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
@media (pointer:coarse){
  .kd-space-workshop button.ws-feedback-open.ws-bug{width:44px;height:44px}
  .kd-space-workshop:has(.ws-bug){padding-bottom:calc(8px + env(safe-area-inset-bottom,0px))}
}
/* С-331 C: зал проекта — тихая «Переименовать проект» под названием, синяя «Отправить проект в ПЛАН» (кобальт Плана), подвкладки «Аналитики» */
.ws-head .ws-rename-link{display:inline-flex;align-items:center;min-height:32px;margin:2px 0 4px -12px;font-size:.875rem;font-weight:500;text-decoration:underline;text-underline-offset:3px}
.ws-head .ws-head-actions{align-self:center}
.ws-head .ws-plan-send{background:var(--kd-service-planning-accent);border-color:var(--kd-service-planning-accent);color:var(--kd-service-planning-on-accent);font-weight:700}
.ws-head .ws-plan-send:hover:not(:disabled){background:var(--kd-service-planning-ink);border-color:var(--kd-service-planning-ink);color:var(--kd-service-planning-on-accent)}
.ws-head .ws-plan-send:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:2px}
.ws-subtabs{display:flex;flex-wrap:wrap;gap:4px;margin:8px 0 0;padding:0 0 8px;border-bottom:1px dashed var(--kd-color-line)}
.ws-subtabs[hidden]{display:none}
.ws-subtabs a{display:inline-flex;align-items:center;min-height:calc(var(--kd-control-h) - 8px);padding:0 14px;border-radius:var(--kd-radius-control);color:var(--kd-color-muted);font-size:.9375rem;font-weight:700;text-decoration:none;white-space:nowrap}
.ws-subtabs a:hover{color:var(--kd-color-ink);background:var(--kd-color-hover)}
.ws-subtabs a[aria-current=page]{background:var(--kd-service-script-surface);color:var(--kd-service-script-ink)}
.ws-subtabs a:focus-visible{outline:3px solid var(--kd-color-focus);outline-offset:-3px}
.ws-scripts-more{margin-top:8px}
@media (max-width:760px){.ws-head .ws-rename-link{width:auto}.ws-subtabs{flex-wrap:nowrap;overflow-x:auto}}
/* С-331 E: раскадровка в проекте — строка статуса и компактный переключатель сценария (без выбора организации и проекта Плана). */
.ws-sb-status{margin-bottom:8px}
.ws-sb-status .ws-meta{margin:0 0 8px}
.ws-sb-bar{margin-bottom:8px}
.ws-sb-bar:empty{display:none}
.ws-sb-bar .crew-field{min-width:220px;max-width:360px}
@media (max-width:760px){.ws-sb-bar .crew-field{max-width:none;flex:1 1 100%}}
/* ---------- С-331 D: окно сценария — панель типов блока, лист бумаги, режим «Петя пишет по шагам» ----------
   Панель типов (`createTypePanel`, `workshop-editor-page.mjs`) всегда открыта рядом с текстом — между текстом и правой панелью («Титул», «Замысел»…).
   Ступени по ширине ОБЛАСТИ редактора (контейнер `ws-ed`, как БИ3): от 1180 px — четыре колонки (сцены 208 · текст ≥ 420 · типы 196 · панель 300);
   1180…992 — типы компактной полосой над текстом, правая панель колонкой; уже 992 — панель листом, полоса над текстом; уже 720 — одна колонка.
   Текст пишется на белом листе с тенью на нейтральном фоне страницы; в тёмной теме лист остаётся бумагой: внутри листа токены светлой темы
   (значения — те же, что `:root` в styles.css и shell.css), поэтому блоки, подсказки формы, заметки, пометки и кнопки на листе — тёмным по белому. */
.ws-ed-grid{grid-template-columns:208px minmax(0,1fr) 188px 272px;grid-template-areas:"nav main types panel"}
.ws-ed-nav{grid-area:nav}
.ws-ed-main{grid-area:main}
.ws-ed-types{grid-area:types}
.ws-ed-panel{grid-area:panel}
.ws-ed-types{min-width:0;padding:12px;background:var(--kd-color-white);border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-card);position:sticky;top:76px;max-height:calc(100vh - 92px);overflow:auto}
.ws-ed-types-title{margin:0 0 8px;font-size:1rem}
.ws-ed-types-list{display:flex;flex-direction:column;gap:4px}
.ws-ed-type-btn{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;min-height:40px;padding:0 10px;border-color:transparent;background:var(--kd-color-surface);font-size:.8125rem;font-weight:700;letter-spacing:.02em;text-align:left;white-space:normal}
.ws-ed-type-btn:hover:not(:disabled){border-color:var(--kd-color-line);background:var(--kd-color-hover)}
.ws-ed-type-btn[aria-pressed=true],.ws-ed-type-btn[aria-pressed=true]:hover:not(:disabled){background:var(--kd-service-script-surface);border-color:var(--kd-service-script-line);box-shadow:inset 4px 0 0 var(--kd-service-script-accent);color:var(--kd-service-script-ink);font-weight:800}
.ws-ed-type-label{min-width:0;overflow-wrap:anywhere}
.ws-ed-type-keys{flex:0 0 auto;padding:0 6px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-doc);background:var(--kd-color-white);color:var(--kd-color-muted);font-family:var(--kd-font-body);font-size:.75rem;font-weight:700;line-height:1.6}
.ws-ed-type-btn[aria-pressed=true] .ws-ed-type-keys{color:var(--kd-service-script-ink);border-color:var(--kd-service-script-line)}
.ws-ed-type-btn:disabled .ws-ed-type-keys{background:transparent}
.ws-ed-types-hint{margin:8px 0 0;font-size:.75rem}
@container ws-ed (width < 1180px){
  .ws-ed-grid{grid-template-columns:220px minmax(0,1fr) 320px;grid-template-areas:"nav types panel" "nav main panel"}
  .ws-ed-types{position:static;max-height:none;padding:6px 8px;overflow:visible}
  .ws-ed-types-title{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .ws-ed-types-list{flex-direction:row;gap:4px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}
  .ws-ed-type-btn{flex:0 0 auto;width:auto;min-height:var(--kd-control-h);white-space:nowrap}
  .ws-ed-types-hint{display:none}
}
@container ws-ed (width < 992px){
  .ws-ed-grid{grid-template-columns:240px minmax(0,1fr);grid-template-areas:"nav types" "nav main"}
  .ws-ed-panel{grid-area:auto}
}
@container ws-ed (width < 720px){
  .ws-ed-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:"types" "main"}
  .ws-ed-nav{grid-area:auto}
  .ws-ed-type-keys{display:none}
}
/* Лист бумаги: «Блоки» — карточка сцены, «Страница» — весь сценарий; пустой сценарий — тоже лист. */
.ws-ed-main>.ws-ed-page,.ws-ed-main>.ws-ed-sheet,.ws-ed-main>.ws-ed-empty{
  color-scheme:light;
  --ws-sheet:white;--ws-sheet-ink:black;--ws-sheet-muted:color-mix(in srgb,black 64%,white);
  --ws-sheet-placeholder:color-mix(in srgb,black 68%,white);--ws-sheet-border:color-mix(in srgb,black 50%,white);--ws-sheet-line:color-mix(in srgb,black 16%,white);
  --ws-sheet-edge:color-mix(in srgb,black 12%,white);--ws-sheet-surface:color-mix(in srgb,black 3%,white);--ws-sheet-hover:color-mix(in srgb,black 8%,white);
  --ws-sheet-disabled:color-mix(in srgb,black 10%,white);--ws-sheet-focus:royalblue;--ws-sheet-selection:color-mix(in srgb,orange 30%,white);
  --ws-sheet-accent:rebeccapurple;--ws-sheet-accent-surface:color-mix(in srgb,rebeccapurple 10%,white);--ws-sheet-accent-line:color-mix(in srgb,rebeccapurple 30%,white);
  --ws-sheet-warn:saddlebrown;--ws-sheet-warn-surface:color-mix(in srgb,orange 12%,white);--ws-sheet-warn-line:color-mix(in srgb,saddlebrown 40%,white);
  --ws-sheet-info:color-mix(in srgb,royalblue 75%,black);--ws-sheet-info-surface:color-mix(in srgb,royalblue 8%,white);--ws-sheet-info-line:color-mix(in srgb,royalblue 35%,white);
  --ws-sheet-ok:darkgreen;--ws-sheet-ok-surface:color-mix(in srgb,green 8%,white);--ws-sheet-ok-line:color-mix(in srgb,green 35%,white);
  --ws-sheet-error:firebrick;--ws-sheet-error-surface:color-mix(in srgb,firebrick 8%,white);--ws-sheet-error-line:color-mix(in srgb,firebrick 35%,white);
  /* Токены кабинета внутри листа — от переменных листа, не от темы: кнопки, поля, подсказки, заметки и пометки на листе тёмные по белому. */
  --kd-color-ink:var(--ws-sheet-ink);--kd-color-white:var(--ws-sheet);--kd-color-muted:var(--ws-sheet-muted);--kd-color-border:var(--ws-sheet-border);
  --kd-color-line:var(--ws-sheet-line);--kd-color-surface:var(--ws-sheet-surface);--kd-color-hover:var(--ws-sheet-hover);--kd-color-disabled:var(--ws-sheet-disabled);
  --kd-color-tint:var(--ws-sheet-hover);--kd-color-tag:var(--ws-sheet-hover);--kd-color-fill:var(--ws-sheet-hover);--kd-color-placeholder:var(--ws-sheet-placeholder);
  --kd-color-selection:var(--ws-sheet-selection);--kd-color-focus:var(--ws-sheet-focus);--kd-color-on-ink:var(--ws-sheet);--kd-color-strong:var(--ws-sheet-ink);
  --kd-color-on-strong:var(--ws-sheet);--kd-color-accent-ink:var(--ws-sheet-error);
  --kd-status-info-ink:var(--ws-sheet-info);--kd-status-info-surface:var(--ws-sheet-info-surface);--kd-status-info-line:var(--ws-sheet-info-line);
  --kd-status-success-ink:var(--ws-sheet-ok);--kd-status-success-surface:var(--ws-sheet-ok-surface);--kd-status-success-line:var(--ws-sheet-ok-line);
  --kd-status-warning-ink:var(--ws-sheet-warn);--kd-status-warning-surface:var(--ws-sheet-warn-surface);--kd-status-warning-line:var(--ws-sheet-warn-line);
  --kd-status-error-ink:var(--ws-sheet-error);--kd-status-error-surface:var(--ws-sheet-error-surface);--kd-status-error-line:var(--ws-sheet-error-line);
  --kd-service-script-surface:var(--ws-sheet-accent-surface);--kd-service-script-ink:var(--ws-sheet-accent);--kd-service-script-line:var(--ws-sheet-accent-line);
  --kd-svc-surface:var(--ws-sheet-accent-surface);--kd-svc-ink:var(--ws-sheet-accent);
  --ws-mk-yellow:var(--ws-sheet-warn-surface);--ws-mk-green:var(--ws-sheet-ok-surface);--ws-mk-blue:var(--ws-sheet-info-surface);--ws-mk-pink:var(--ws-sheet-error-surface);--ws-mk-line:var(--ws-sheet-ink);
  background:var(--ws-sheet);color:var(--ws-sheet-ink);border:1px solid var(--ws-sheet-edge);border-radius:var(--kd-radius-doc);
  box-shadow:0 1px 2px color-mix(in srgb,black 10%,transparent),0 10px 28px color-mix(in srgb,black 14%,transparent)
}
.ws-ed-main>.ws-ed-page{max-width:none;margin:0 auto;padding:28px clamp(16px,5%,48px) 32px}
/* Поля блоков на листе — без рамок формы: рамка появляется при наведении и фокусе. Шрифт — Cousine (метрика Courier New, с кириллицей; С-332 D). */
.ws-ed-text,.ws-ed-heading{font-family:"Cousine","Courier New",Courier,monospace}
.ws-ed-page .ws-ed-text,.ws-ed-page .ws-ed-heading{background:transparent;border-color:transparent;color:var(--ws-sheet-ink)}
.ws-ed-page .ws-ed-text:hover:not(:disabled),.ws-ed-page .ws-ed-heading:hover:not(:disabled){border-color:var(--ws-sheet-line)}
.ws-ed-page .ws-ed-text:focus,.ws-ed-page .ws-ed-heading:focus{border-color:var(--ws-sheet-border)}
.ws-ed-main .ws-ed-page .ws-ed-field input.ws-ed-heading:not([type=checkbox]):not([type=radio]){background:transparent;border-color:transparent;border-bottom-color:var(--ws-sheet-line);color:var(--ws-sheet-ink)}
.ws-ed-main .ws-ed-page .ws-ed-field input.ws-ed-heading:not([type=checkbox]):not([type=radio]):hover{border-color:var(--ws-sheet-line)}
.ws-ed-main .ws-ed-page .ws-ed-field input.ws-ed-heading:not([type=checkbox]):not([type=radio]):focus{border-color:var(--ws-sheet-border)}
.ws-ed-main .ws-ed-text,.ws-ed-main .ws-ed-heading{caret-color:var(--ws-sheet-ink)}
.ws-ed-main .ws-ed-text::placeholder,.ws-ed-main .ws-ed-heading::placeholder{color:var(--ws-sheet-placeholder)}
.ws-ed-page .ws-ed-block[data-type=note] .ws-ed-text,.ws-ed-sheet .ws-ed-block[data-type=note] .ws-ed-text{background:var(--ws-sheet-warn-surface);border-color:var(--ws-sheet-warn-line);color:var(--ws-sheet-warn)}
.ws-ed-page .ws-ed-block[data-type=scene_characters] .ws-ed-text{color:var(--ws-sheet-ink)}
.ws-ed-main .ws-ed-page .ws-ed-kind,.ws-ed-main .ws-ed-page .ws-ed-progress,.ws-ed-main .ws-ed-heading-hint{color:var(--ws-sheet-muted)}
.ws-ed-main .ws-form-hints{border-left-color:var(--ws-sheet-warn);color:var(--ws-sheet-ink)}
/* Режимы окна: «Текст сценария» и «Петя пишет по шагам» — переключатель как «Блоки / Страница»; в режиме мастера редактор скрыт, но живёт. */
.ws-ed-modes{display:inline-flex;flex-wrap:wrap;gap:4px;align-self:flex-start}
.ws-ed-mode{min-height:var(--kd-control-h)}
.ws-ed-mode[aria-pressed=true]{border-color:var(--kd-service-script-accent);box-shadow:inset 0 -3px 0 var(--kd-service-script-accent);color:var(--kd-service-script-ink);font-weight:800}
.ws-ed--wizard>.ws-ed-work,.ws-ed--wizard>.crew-loading,.ws-ed--wizard>.ws-missing{display:none}
.ws-ed-wizard{display:flex;flex-direction:column;gap:12px;min-width:0}
.ws-write-top{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px 12px;margin:0 0 12px}
.ws-write-top .ws-field{margin:0}
.ws-write-top input[type=text]{width:min(320px,100%)}
.ws-write-top>p{margin:0}
@media (max-width:760px){
  .ws-ed-main>.ws-ed-page{padding:16px 12px}
  .ws-write-top>*{flex:1 1 100%}
}

/* С-332 C: живой фон Мастерской (замечание 8) и кнопка «Сообщить о проблеме» над подвалом (замечание 9).
   Фон: вместо 4-секундного ролика — сцена `.ws-bg-stage` из своих SVG-слоёв (`space-workshop.mjs`, WORKSHOP_BG_PARTS). Сцена 16:9 накрывает окно, как
   `cover` (размер — от окна: 100vw × 100vh; container-type в workshop.css только у редактора), слои стоят в долях сцены 1600×900 (координаты — как в `workshop-bg.svg`). Двигаются только
   transform и opacity (композитор, без перерисовки): цикл 10 с, листы — 20 с; каждый цикл кончается тем же кадром, что начинается (бобина — поворот на
   120° при трёх окнах, плёнка — сдвиг на один кадр 108), поэтому повтор без шва. Предметы медленно проявляются и уходят (1 → .6 → 1 за 10 с, со сдвигом),
   сцена проявляется за 3 с. Прозрачность слоя .3 и прозрачный `body` — как в С-331. «Меньше движения» — неподвижная картинка (без сцены; включили на
   ходу — анимации стоят). Печать — без фона (блок С-331 B). */
@media screen{
  .ws-bg-live{background:none}
  .ws-bg-stage{position:absolute;left:50%;top:50%;width:max(100vw,177.778vh);height:max(100vh,56.25vw);
    transform:translate(-50%,-50%);background:url("/assets/workshop-bg-desk.svg") center/100% 100% no-repeat;animation:ws-bg-in 3s ease-out both}
  .ws-bg-part,.ws-bg-stick,.ws-bg-track{position:absolute;background-position:center;background-size:100% 100%;background-repeat:no-repeat}
  .ws-bg-part{animation:ws-bg-breathe 10s ease-in-out infinite}
  .ws-bg-papers{left:7.5%;top:28.889%;width:56.25%;height:83.333%;background-image:url("/assets/workshop-bg-papers.svg");
    animation:ws-bg-breathe 10s ease-in-out -2s infinite,ws-bg-papers 20s ease-in-out infinite}
  .ws-bg-clap{left:33.75%;top:8.889%;width:28.75%;height:47.778%;background-image:url("/assets/workshop-bg-clap.svg");transform-origin:47.826% 51.163%;transform:rotate(-14deg);
    animation:ws-bg-breathe 10s ease-in-out -4s infinite,ws-bg-clap 10s ease-in-out infinite}
  .ws-bg-stick{left:2.174%;top:18.605%;width:95.652%;height:17.674%;background-image:url("/assets/workshop-bg-clap-stick.svg");transform-origin:2.273% 78.947%;transform:rotate(-10deg);
    animation:ws-bg-stick 10s ease-in-out infinite}
  .ws-bg-reel{left:66.875%;top:11.111%;width:25%;height:44.444%;background-image:url("/assets/workshop-bg-reel.svg");
    animation:ws-bg-breathe 10s ease-in-out -6s infinite,ws-bg-reel 10s linear infinite}
  .ws-bg-film{left:47.5%;top:72.222%;width:61.25%;height:8%;overflow:hidden;transform-origin:44.898% 97.222%;transform:rotate(-22deg);
    animation:ws-bg-breathe 10s ease-in-out -8s infinite,ws-bg-film 10s ease-in-out infinite}
  .ws-bg-track{left:0;top:0;width:111.0204%;height:100%;background-image:url("/assets/workshop-bg-film.svg");animation:ws-bg-track 10s linear infinite}
  .ws-bg-pencil{left:6.875%;top:17.556%;width:24.75%;height:4.667%;background-image:url("/assets/workshop-bg-pencil.svg");transform-origin:47.98% 52.381%;transform:rotate(32deg);
    animation:ws-bg-breathe 10s ease-in-out -1s infinite,ws-bg-pencil 10s ease-in-out infinite}
  .ws-bg-cup{left:66.25%;top:78.889%;width:15.625%;height:11.111%;background-image:url("/assets/workshop-bg-cup.svg");animation-delay:-5s}
  /* свет лампы: тёплое пятно медленно дышит и смещается */
  .ws-bg-light{left:0;top:0;width:100%;height:100%;background-image:url("/assets/workshop-bg-light.svg");animation:ws-bg-light 10s ease-in-out infinite}
}
@keyframes ws-bg-in{from{opacity:0}to{opacity:1}}
@keyframes ws-bg-breathe{0%,100%{opacity:1}50%{opacity:.6}}
@keyframes ws-bg-papers{0%,100%{transform:translate(0,0) rotate(0deg)}50%{transform:translate(-.8%,.9%) rotate(-.9deg)}}
@keyframes ws-bg-clap{0%,100%{transform:rotate(-14deg) translate(0,0)}50%{transform:rotate(-11.5deg) translate(.6%,-2.2%)}}
@keyframes ws-bg-stick{0%,30%{transform:rotate(-11deg)}50%,62%{transform:rotate(-.5deg)}100%{transform:rotate(-11deg)}}
@keyframes ws-bg-reel{from{transform:rotate(0deg)}to{transform:rotate(120deg)}}
@keyframes ws-bg-film{0%,100%{transform:rotate(-22deg) translateY(0)}50%{transform:rotate(-20.5deg) translateY(-14%)}}
@keyframes ws-bg-track{from{transform:translateX(0)}to{transform:translateX(-9.9265%)}}
@keyframes ws-bg-pencil{0%,100%{transform:rotate(32deg) translate(0,0)}30%{transform:rotate(29deg) translate(5%,-25%)}65%{transform:rotate(33.5deg) translate(-3%,20%)}}
@keyframes ws-bg-light{0%,100%{opacity:.15;transform:translate(0,0) scale(1)}50%{opacity:.5;transform:translate(3%,2%) scale(1.06)}}
@media (prefers-reduced-motion:reduce){.ws-bg .ws-bg-stage,.ws-bg .ws-bg-stage *{animation:none}}
/* Кнопка «Сообщить о проблеме»: рукопожатие (Lucide, ISC) в круге 48 px — той же высоты и на той же линии, что «Петя AI» (`--kd-fab-bottom`, `--kd-fab-h` —
   `assistant-panel.css`); подвал под обеими кнопками получает нижний отступ там же, поэтому «КиноДвиж · кабинет» не перекрывается. */
.kd-space-workshop button.ws-feedback-open.ws-bug{bottom:var(--kd-fab-bottom,calc(20px + env(safe-area-inset-bottom,0px)));width:var(--kd-fab-h,48px);height:var(--kd-fab-h,48px)}
.kd-space-workshop button.ws-feedback-open.ws-bug svg{width:22px;height:22px}
/* С-332 D: шрифт сценария, жирные блоки, лист редактора шире, строка у «Скачать киносценарий».
   Шрифт — Cousine (@font-face выше, вместо KD Mono): ячейка 0,6 em как у Courier New, поэтому страницы считаются по прежней сетке 12 pt.
   Жирным — заголовок сцены, действие и имя персонажа: в редакторе (оба вида и слой пометок), в просмотре (.ws-sheet — страница гостя,
   версии) и в «Результате Пети AI» на шаге загрузки; реплики, ремарки и переходы — обычные. Печать — правила .ws-print-line-- в @media print.
   Лист редактора без предела ширины: занимает колонку текста целиком (отступы типов — в процентах листа); боковые колонки уже (сетка выше). */
.ws-ed-heading{font-weight:700}
.ws-ed-block[data-type=action] .ws-ed-text,.ws-ed-block[data-type=character] .ws-ed-text,
.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=action] .ws-ed-text,.ws-ed--page .ws-ed-sheet .ws-ed-block[data-type=character] .ws-ed-text{font-weight:700}
.ws-ed-block[data-type=transition] .ws-ed-text{font-weight:400}
.ws-sheet .ws-b-action{font-weight:700}
.ws-sheet .ws-b-transition{font-weight:400}
/* «Результат Пети AI» — лист в колонке сравнения: бумага белая в обеих темах, как лист редактора. */
.ws-upload .ws-upload-sheet{max-width:none;margin:0;padding:16px 20px;color-scheme:light;--kd-color-muted:color-mix(in srgb,black 64%,white);background:white;color:color-mix(in srgb,black 91%,white);border-color:color-mix(in srgb,black 12%,white);font-size:.9375rem}
.ws-upload .ws-upload-sheet .ws-scene-heading{margin:0 0 .75em}
.ws-upload .ws-upload-sheet p:last-child{margin-bottom:0}
.ws-upload-download-why{margin:8px 0 0}
.ws-upload-download-why[hidden]{display:none}
@media (max-width:600px){.ws-upload .ws-upload-sheet{padding:12px}}
/* С-332 (сведение): на средних экранах (область редактора 1180…1640 px) правая панель «Титул / Замысел…» уходит под лист,
   чтобы зона письма стала заметно шире (замечание 13: при 1440 px лист ~960 px вместо ~680). Шире 1640 — четыре колонки, как в D. */
@container ws-ed (1180px <= width < 1640px){
  .ws-ed-grid{grid-template-columns:208px minmax(0,1fr) 188px;grid-template-areas:"nav main types" "nav panel panel"}
}
/* С-333 (ТЗ «ФОН», п. 4): фон Мастерской движется 5 секунд после захода и застывает картинкой. Все слои проигрывают свою
   анимацию один раз за 5 с без сдвигов по фазе и останавливаются на последнем кадре; ключевые кадры кончаются исходной позой (бобина —
   поворот на 120° при трёх окнах, плёнка — сдвиг на один кадр), поэтому застывшая картинка совпадает с неподвижной заставкой. */
@media screen{
  .ws-bg-stage .ws-bg-part,.ws-bg-stage .ws-bg-stick,.ws-bg-stage .ws-bg-track{animation-duration:5s;animation-delay:0s;animation-iteration-count:1;animation-fill-mode:both}
}
/* С-335 A: лист сценария как при экспорте. Источник геометрии — `LAYOUT` печати (`workshop-print-model.mjs`): строка 58 знаков, ячейка 0,6 em, поэтому
   колонка текста — 34,8rem; отступ и ширина типа — доли этой колонки (`pageLayout` в workshop-editor-page.mjs, тест сверяет). «Блоки» и «Страница» — одни правила.
   Подпись типа и «Петя AI» стоят вне колонки, на полях листа, и текст не двигают. Поля есть от 1252 px области редактора (колонка листа ≥ 824 px); уже — подпись и кнопки строкой под текущим блоком.
   `--ws-pad` — поле ввода выступает за колонку на свой отступ, поэтому буквы стоят точно на отступе и в строке помещается столько же знаков, сколько на печати.
   Лист уже строки печати: начало блока то же, а ширина растёт до края колонки (`4*(--ws-col - 100%)`), иначе реплика переносилась бы через слово. */
.ws-ed-main>.ws-ed-page,.ws-ed-main>.ws-ed-sheet{--ws-col:34.8rem;--ws-pad:6px;--ws-line:1.5rem}
.ws-ed-main .ws-ed-field,.ws-ed-main .ws-ed-blocks,.ws-ed-main .ws-ed-scene-empty{box-sizing:border-box;width:100%;max-width:var(--ws-col);margin-inline:auto}
.ws-ed-main .ws-ed-field{position:relative}
.ws-ed-main .ws-ed-blocks{display:block}
.ws-ed-main .ws-ed-add-block{margin-left:max(0px,calc((100% - var(--ws-col))/2))}
.ws-ed-main .ws-ed-page-scene>.ws-ed-field{margin-bottom:var(--ws-line)}
.ws-ed-block{--ws-ind:0%;--ws-wid:100%}
.ws-ed-block[data-type=character]{--ws-ind:45.82%;--ws-wid:53.45%}
.ws-ed-block[data-type=parenthetical]{--ws-ind:34.48%;--ws-wid:44.83%}
.ws-ed-block[data-type=dialogue]{--ws-ind:25.45%;--ws-wid:48.28%}
.ws-ed-block[data-type=lyrics]{--ws-ind:25.45%;--ws-wid:48.28%}
.ws-ed-block[data-type=transition]{--ws-ind:65.52%;--ws-wid:34.48%}
/* Между блоками — пустая строка, как на печати; имя, ремарка и реплика одной группы идут строка за строкой. */
.ws-ed-main .ws-ed-block{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto auto;gap:0 8px;align-items:center;min-width:0;margin:var(--ws-line) 0 0}
.ws-ed-main .ws-ed-block:first-child{margin-top:0}
.ws-ed-main .ws-ed-block[data-type=character]+.ws-ed-block[data-type=dialogue],.ws-ed-main .ws-ed-block[data-type=character]+.ws-ed-block[data-type=parenthetical],.ws-ed-main .ws-ed-block[data-type=character]+.ws-ed-block[data-type=lyrics],
.ws-ed-main .ws-ed-block[data-type=dialogue]+.ws-ed-block[data-type=dialogue],.ws-ed-main .ws-ed-block[data-type=dialogue]+.ws-ed-block[data-type=parenthetical],.ws-ed-main .ws-ed-block[data-type=dialogue]+.ws-ed-block[data-type=lyrics],
.ws-ed-main .ws-ed-block[data-type=parenthetical]+.ws-ed-block[data-type=dialogue],.ws-ed-main .ws-ed-block[data-type=parenthetical]+.ws-ed-block[data-type=parenthetical],.ws-ed-main .ws-ed-block[data-type=parenthetical]+.ws-ed-block[data-type=lyrics],
.ws-ed-main .ws-ed-block[data-type=lyrics]+.ws-ed-block[data-type=dialogue],.ws-ed-main .ws-ed-block[data-type=lyrics]+.ws-ed-block[data-type=parenthetical],.ws-ed-main .ws-ed-block[data-type=lyrics]+.ws-ed-block[data-type=lyrics]{margin-top:0}
.ws-ed-main .ws-ed-block>.ws-ed-text,.ws-ed .ws-ed-main .ws-ed-block .ws-mk-layer.ws-ed-text{grid-column:1/-1;grid-row:1;justify-self:start;box-sizing:border-box;width:calc(min(100% - var(--ws-ind),var(--ws-wid) + 4*(var(--ws-col) - 100%)) + 2*var(--ws-pad));min-height:0;margin:0 0 0 calc(var(--ws-ind) - var(--ws-pad));padding:0 calc(var(--ws-pad) - 1px);border:1px solid transparent;border-radius:var(--kd-radius-doc)}
.ws-ed-main .ws-ed-block[data-type=note]>.ws-ed-text{padding-block:4px}
.ws-ed-main .ws-ed-page .ws-ed-field input.ws-ed-heading:not([type=checkbox]):not([type=radio]),.ws-ed-main .ws-ed-sheet .ws-ed-field input.ws-ed-heading:not([type=checkbox]):not([type=radio]){box-sizing:border-box;width:calc(100% + 2*var(--ws-pad));min-height:0;margin-inline:calc(-1*var(--ws-pad));padding:2px calc(var(--ws-pad) - 1px);border-inline:1px solid transparent;font-size:1rem;line-height:1.5}
.ws-ed-main .ws-ed-block>.ws-ed-kind,.ws-ed-main .ws-ed-block>.ws-ed-type{grid-row:2;grid-column:1;min-width:0;margin-top:4px;padding-top:0}
.ws-ed-main .ws-ed-block>.ws-ed-kind{display:none}
.ws-ed-main .ws-ed-page .ws-ed-block.is-current>.ws-ed-kind{display:block}
.ws-ed-main .ws-ed-block>.ws-ed-dual{grid-row:2;grid-column:2;margin-top:4px}
.ws-ed-main .ws-ed-block>.ws-ed-cm-block{grid-row:2;grid-column:3;width:auto;margin-top:4px}
.ws-ed-main .ws-ed-block>.ws-ed-remove{grid-row:2;grid-column:4;margin-top:4px}
.ws-ed-main .ws-ed-block>.ws-ed-petya{position:static;grid-row:2;grid-column:5;justify-self:end;margin-top:4px}
/* Текущий блок держит «Петя AI» и после потери фокуса: нажатие в браузере, который не ставит фокус на кнопку, не теряется. */
.ws-ed-main .ws-ed-block.is-current>.ws-ed-petya,.ws-ed--page .ws-ed-main .ws-ed-sheet .ws-ed-block.is-current>.ws-ed-petya{display:inline-flex;align-items:center}
.ws-ed-main .ws-ed-block>.ws-mk-list{grid-row:3}
.ws-ed-main .ws-ed-block>.ws-ed-suggest{grid-row:4;grid-column:1/-1;box-sizing:border-box;width:calc(100% - var(--ws-ind));margin:4px 0 0 var(--ws-ind)}
@container ws-ed (width >= 1252px){
  .ws-ed-main .ws-ed-page .ws-ed-block>.ws-ed-kind,.ws-ed--page .ws-ed-sheet .ws-ed-block:focus-within>.ws-ed-kind,.ws-ed-main .ws-ed-page .ws-ed-field>label{display:block;position:absolute;grid-area:auto;top:5px;right:calc(100% + 12px);width:76px;margin:0;padding:0;font-family:var(--kd-font-body);font-size:.6875rem;line-height:1.3;font-weight:800;letter-spacing:.08em;text-align:left;text-transform:uppercase;color:var(--ws-sheet-muted)}
  .ws-ed--page .ws-ed-sheet .ws-ed-block:focus-within>.ws-ed-type{display:none}
  .ws-ed-main .ws-ed-block>.ws-ed-petya{position:absolute;grid-area:auto;justify-self:auto;top:-2px;right:auto;left:calc(100% + 12px);margin:0}
  .ws-ed-main .ws-ed-block>.ws-ed-cm-block{position:absolute;grid-area:auto;top:-10px;left:calc(100% + 12px);margin:0}
  .ws-ed-main .ws-ed-block.has-cm>.ws-ed-petya{top:38px}
}
@media (max-width:760px){
  .ws-ed-main .ws-ed-page .ws-ed-block.is-current>.ws-ed-kind{display:none}
  .ws-ed-main .ws-ed-page .ws-ed-block.is-current>.ws-ed-type{display:block}
  .ws-ed-main .ws-ed-page .ws-ed-block.is-current>.ws-ed-remove{display:inline-flex}
  .ws-ed-main .ws-ed-page .ws-ed-block.is-current[data-type=character]>.ws-ed-dual{display:inline-flex}
  .ws-sheet .ws-b-character,.ws-sheet .ws-b-parenthetical,.ws-sheet .ws-b-dialogue,.ws-sheet .ws-b-lyrics{max-width:none}
}
.ws-ed-panel .ws-sheet .ws-b-character,.ws-ed-panel .ws-sheet .ws-b-parenthetical,.ws-ed-panel .ws-sheet .ws-b-dialogue,.ws-ed-panel .ws-sheet .ws-b-lyrics{max-width:none}
/* Подсказки пустых полей: темнее и обычным начертанием, чтобы не спутать с написанным текстом. */
.ws-ed-main .ws-ed-text::placeholder,.ws-ed-main .ws-ed-heading::placeholder{opacity:1;font-weight:400;font-style:normal}
/* Строка клавиш над редактором лежит на фоне Мастерской: сплошная подложка и текст цветом основного текста, жирнее. Токены — обе темы. */
.ws-ed .ws-ed-hint{padding:6px 12px;border:1px solid var(--kd-color-line);border-radius:var(--kd-radius-control);background:var(--kd-color-white);color:var(--kd-color-ink);font-weight:700}

/* С-335 B: «Петя AI пишет по шагам» — причина и ответ стоят сразу под кнопками и читаются как текст, а не как служебная мелочь */
.ws-write-step .ws-actions{margin-top:12px}
.ws-write-step .ws-write-why,.ws-write-note{margin-top:8px;color:var(--kd-color-ink);font-weight:600}
.ws-write-step .ws-write-why[hidden],.ws-write-note[hidden]{display:none}

/* С-340 f: компактная панель и отступ колонок по её фактической высоте. */
.ws-ed-bar{gap:6px 10px;padding:6px 10px;justify-content:flex-start}
.ws-ed-bar-main,.ws-ed-bar-tools{display:contents}
.ws-ed-bar-block{display:flex;gap:4px}
.ws-ed-bar button,.ws-ed-bar select{width:auto;max-width:100%;min-height:34px;height:auto;padding:6px 9px;font-size:.8125rem;line-height:1.25}
.ws-ed-bar select{flex:0 1 150px}
.ws-ed-bar .ws-ed-view{display:flex;gap:4px}
.ws-ed-nav,.ws-ed-types,.ws-ed-panel{scroll-margin-top:var(--ws-ed-bar-offset,112px)}
@container ws-ed (width >= 720px){
  .ws-ed-nav{top:var(--ws-ed-bar-offset,112px);max-height:calc(100dvh - var(--ws-ed-bar-offset,112px) - 16px)}
}
@container ws-ed (width >= 992px){
  .ws-ed-panel{top:var(--ws-ed-bar-offset,112px);max-height:calc(100dvh - var(--ws-ed-bar-offset,112px) - 16px)}
}
@container ws-ed (width >= 1180px){
  .ws-ed-types{top:var(--ws-ed-bar-offset,112px);max-height:calc(100dvh - var(--ws-ed-bar-offset,112px) - 16px)}
}
@media (max-width:760px){
  .ws-ed-bar{position:static;padding:8px}
  .ws-ed-bar-main,.ws-ed-bar-tools{display:flex;flex-wrap:wrap;width:100%;gap:6px}
  .ws-ed-bar .ws-ed-save{flex:0 1 auto}
  .ws-ed-bar button,.ws-ed-bar select{min-height:44px}
  .ws-ed-bar select{flex:0 1 140px}
  .ws-ed-bar-block{display:flex;flex-wrap:wrap}
}

/* С-341 C: длинная кнопка выгрузки шагов помещается на телефоне. */
.ws-write-export button{max-width:100%;white-space:normal;overflow-wrap:anywhere;padding-top:10px;padding-bottom:10px}

/* С-342 E: карточки проектов Мастерской — белое свечение по периметру при наведении и фокусе внутри (`--kd-glow-white` из shell.css). */
.ws-card.ws-project{transition:border-color var(--kd-motion-fast),box-shadow var(--kd-motion-fast)}
.ws-card.ws-project:hover,.ws-card.ws-project:focus-within{border-color:var(--kd-glow-edge);box-shadow:var(--kd-glow-white)}
@media (prefers-reduced-motion:reduce){.ws-card.ws-project{transition:none}}

/* С-342 E: «Исправить автоматически» и места ошибок в проверке файла — строка с номером и фрагментом, нажатие выделяет место в поле правки. */
.ws-autofix{align-items:center;margin-top:12px}
.ws-autofix-hint{flex:1 1 220px;min-width:0}
.ws-places{margin-top:6px}
.ws-places>summary{cursor:pointer;font-size:.875rem;font-weight:700}
.ws-place-list{display:grid;gap:2px;max-height:15rem;margin:6px 0 0;padding:0;overflow:auto;list-style:none}
.ws-place-list button.ws-place{display:flex;gap:8px;align-items:baseline;justify-content:flex-start;width:100%;min-height:36px;padding:4px 10px;text-align:left;white-space:normal;font-weight:400;overflow-wrap:anywhere}
.ws-place-line{flex:0 0 auto;white-space:nowrap}
.ws-place-text{min-width:0;font-family:var(--kd-font-mono,ui-monospace,Consolas,monospace);font-size:.8125rem}
@media (max-width:560px){.ws-place-list button.ws-place{flex-direction:column;gap:2px}}
