/* Startup OS — пользовательский фронт. Стилистика photon.uz/startupOS (Notion-подобная светлая). */
/* SOS-DARK1: токены палитры. Светлая тема = :root. Тёмная (DARK2) переопределяет ТОЛЬКО значения. */
:root{
  color-scheme:light;
  /* поверхности/фон */
  --bg:#f7f6f3; --surface:#fff; --surface-2:#f9f9f8; --surface-3:#f1f0ef;
  --surface-hover:#edece9; --surface-active:#e8e7e4; --field:#ebebea;
  /* текст */
  /* --muted и --text-faint подняты 04.09: были 2.81:1 и 2.05:1 на белом — ниже нормы
     4.5:1, а ими подписаны данные («4 в финальном статусе», периоды спринтов),
     а не украшения. Стало 5.1:1 и 4.5:1; иерархия между ними сохранена. */
  /* 08.09: ещё на шаг темнее. Замер по ФАКТИЧЕСКОМУ фону (а не по белому) дал
     4,48:1 у --text-2 и 3,98:1 у --text-faint: подписи «демо», «web v137»,
     ссылки подвала и подзаголовки быстрого старта были ниже нормы. */
  --text:#37352f; --text-2:#706f6c; --muted:#6f6e6b; --text-faint:#6f6d69; --sep:#c9c8c6;
  /* границы */
  --border:#e9e9e7; --border-2:#e0dfdd; --border-3:#d0d0ce;
  /* акцент (фиолетовый) */
  --accent:#6d28d9; --accent-hover:#5b3fb8; --accent-bg:#f0ebfb; --accent-border:#c9bdf0;
  /* сплошные тёмные кнопки / выделение */
  --solid-bg:#2f3437; --solid-bg-hover:#454b4f; --on-solid:#fff; --chip-on-bg:#37352f;
  /* семантика (текст на поверхности — чтобы читалось в тёмной) */
  --ok:#15803d; --ok-text:#166534;   /* 4.64:1 на карточке; было #16a34a — 3.05:1 */ --danger:#dc2626; --danger-text:#b3402f;
  --danger-solid:#b3402f; --danger-strong:#991b1b; --warn-text:#854d0e;
  /* прочее (SOS-DARK2) */
  --text-3:#4a4842; --hair:#ededec; --row-total:#faf9f7; --row-uncoded:#fbfbfa; --row-sel:#f7f3fe;
}
/* SOS-DARK2: тёмная тема. Переопределяет ТОЛЬКО значения токенов. Два входа:
   (1) системная тема, если пользователь не выбрал явно светлую; (2) явный выбор [data-theme=dark]. */
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){ color-scheme:dark;
  --bg:#191919; --surface:#212121; --surface-2:#282828; --surface-3:#2f2f2f;
  --surface-hover:#363634; --surface-active:#3f3f3d; --field:#2a2a2a;
  --text:#e7e6e3; --text-2:#b5b3ae; --muted:#9d9c98; --text-faint:#8a8985; --sep:#4a4947;
  --border:#333331; --border-2:#3b3a38; --border-3:#484745; --hair:#2c2c2a;
  --accent:#a78bfa; --accent-hover:#c4b5fd; --accent-bg:#2b2440; --accent-border:#4a3f6b;
  --solid-bg:#4a4a48; --solid-bg-hover:#575755; --on-solid:#f5f5f4; --chip-on-bg:#7c3aed;
  --ok:#22c55e; --ok-text:#4ade80; --danger:#ef4444; --danger-text:#f87171;
  --danger-solid:#c0392b; --danger-strong:#f87171; --warn-text:#fbbf24;
  --text-3:#a9a8a3; --row-total:#242422; --row-uncoded:#232321; --row-sel:#2b2440;
}}
:root[data-theme="dark"]{ color-scheme:dark;
  --bg:#191919; --surface:#212121; --surface-2:#282828; --surface-3:#2f2f2f;
  --surface-hover:#363634; --surface-active:#3f3f3d; --field:#2a2a2a;
  /* Значения ровно как в блоке системной тёмной выше: они разошлись, и «тёмная
     по выбору» была тусклее «тёмной по настройке ОС» — те же подписи не читались. */
  --text:#e7e6e3; --text-2:#b5b3ae; --muted:#9d9c98; --text-faint:#8a8985; --sep:#4a4947;
  --border:#333331; --border-2:#3b3a38; --border-3:#484745; --hair:#2c2c2a;
  --accent:#a78bfa; --accent-hover:#c4b5fd; --accent-bg:#2b2440; --accent-border:#4a3f6b;
  --solid-bg:#4a4a48; --solid-bg-hover:#575755; --on-solid:#f5f5f4; --chip-on-bg:#7c3aed;
  --ok:#22c55e; --ok-text:#4ade80; --danger:#ef4444; --danger-text:#f87171;
  --danger-solid:#c0392b; --danger-strong:#f87171; --warn-text:#fbbf24;
  --text-3:#a9a8a3; --row-total:#242422; --row-uncoded:#232321; --row-sel:#2b2440;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:'Inter',-apple-system,sans-serif;background:var(--surface);color:var(--text);font-size:14px;overflow:hidden}
.hidden{display:none !important}

/* ── ЛОГИН ── */
#login-screen{height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg);gap:0}
.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-panel);padding:36px 40px;width:100%;max-width:400px;box-shadow:0 4px 24px rgba(0,0,0,.06)}
.login-logo{font-size:40px;margin-bottom:8px}
.login-card h1{font-size:24px;font-weight:700;margin-bottom:4px}
.login-sub{color:var(--muted);font-size:13px;margin-bottom:24px}
.login-card label{display:block;font-size:12px;font-weight:500;color:var(--text-2);margin-bottom:14px}
.login-card input{display:block;width:100%;margin-top:5px;padding:9px 12px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:14px;font-family:inherit;outline:none;transition:border-color .1s,box-shadow .1s}
.login-card input:focus{border-color:var(--text);box-shadow:0 0 0 2px rgba(55,53,47,.08)}
.login-btn{width:100%;padding:10px;background:var(--solid-bg);color:var(--on-solid);border:none;border-radius:var(--os-radius-control);font-size:14px;font-weight:500;font-family:inherit;cursor:pointer;margin-top:4px;transition:background .1s}
.login-btn:hover{background:var(--solid-bg-hover)}
.login-btn:disabled{opacity:.6;cursor:default}
.login-error{background:#fee2e2;color:#991b1b;font-size:12.5px;padding:8px 12px;border-radius:var(--os-radius-control);margin-bottom:12px}
.login-footer{margin-top:20px;font-size:12px;color:var(--text-faint)}
.login-btn.alt{background:transparent;color:var(--text);border:1px solid var(--border-2)}
.login-btn.alt:hover{background:var(--bg)}
.login-sep{display:flex;align-items:center;gap:10px;margin:14px 0 10px;font-size:12px;color:var(--text-faint)}
.login-sep::before,.login-sep::after{content:"";flex:1;height:1px;background:var(--border)}

/* ── КАРКАС ── */
#app{display:flex;height:100vh}
#sidebar{width:250px;min-width:250px;background:var(--bg);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}
#sidebar-header{padding:12px 14px 8px;border-bottom:1px solid var(--border)}
.ws-name{font-weight:600;font-size:14px;display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--os-radius-control)}
.ws-emoji{font-size:18px}
.sb-search-wrap{margin:8px 8px 4px;position:relative}
.sb-search-inp{width:100%;padding:6px 10px 6px 28px;background:var(--field);border:none;border-radius:var(--os-radius-control);font-size:12px;color:var(--text);font-family:inherit;outline:none}
.sb-search-inp::placeholder{color:var(--muted)}
.sb-search-inp:focus{background:var(--border-2);box-shadow:0 0 0 2px rgba(55,53,47,.1)}
.sb-search-ico{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:12px;pointer-events:none}
#sb-nav{flex:1;overflow-y:auto;padding:4px 0 16px}
.nav-lbl{padding:10px 14px 2px;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.ni{display:flex;align-items:center;gap:8px;padding:5px 14px;cursor:pointer;color:var(--text);font-size:13.5px;transition:background .1s;user-select:none;border-radius:var(--os-radius-control);margin:0 4px}
.ni:hover{background:var(--surface-hover)}
.ni.active{background:var(--surface-active);font-weight:500}
.ni .ico{font-size:15px;width:20px;text-align:center;flex-shrink:0}
.ni .lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ni .bdg{margin-left:auto;background:var(--border);color:var(--text-2);font-size:11px;padding:1px 6px;border-radius:var(--os-radius-card);flex-shrink:0}
.sb-footer{padding:8px 14px 12px;border-top:1px solid var(--border);font-size:11px;color:var(--muted);display:flex;gap:8px;align-items:center;justify-content:space-between}
.sb-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-footer-btn{cursor:pointer;padding:3px 8px;border-radius:var(--os-radius-control);background:var(--field);color:var(--text-2);font-size:11px;border:none;font-family:inherit}
.sb-footer-btn:hover{background:var(--border-2);color:var(--text)}
.sb-no-res{font-size:12px;color:var(--muted);padding:8px 14px;font-style:italic}

#main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
#topbar{padding:0 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;min-height:50px;background:var(--surface);gap:8px;flex-shrink:0}
.bc{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:4px;flex:1;min-width:0}
.bc .cur{color:var(--text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bc-sep{color:var(--sep);font-size:11px}
.tba{display:flex;gap:6px;flex-shrink:0}
/* Геометрия по стандарту Photon (tokens.css): кнопка не ниже 28px, радиус из общего слоя. */
.btn{padding:5px 12px;border-radius:var(--ph-radius-sm,6px);font-size:13px;cursor:pointer;border:none;font-family:inherit;display:inline-flex;align-items:center;gap:5px;transition:background .1s;min-height:28px;box-sizing:border-box}
.bt-g{background:transparent;color:var(--text)}
.bt-g:hover{background:var(--surface-3)}
.btn-icon{padding:5px 8px;background:transparent;border:none;cursor:pointer;border-radius:var(--os-radius-control);color:var(--muted);font-size:14px}
.btn-icon:hover{background:var(--surface-3);color:var(--text)}
#content{flex:1;overflow-y:auto;padding:32px 60px 60px}
@media (max-width:900px){#content{padding:20px 16px 40px}#sidebar{width:210px;min-width:210px}}

/* ── СТРАНИЦА ── */
.pt{font-size:32px;font-weight:700;margin-bottom:4px;line-height:1.2}
.ps{color:var(--muted);font-size:14px;margin-bottom:24px}
.sh{font-size:13px;font-weight:600;color:var(--text);margin:20px 0 10px;display:flex;align-items:center;gap:8px}
.cnt{font-weight:400;color:var(--muted);font-size:12px}
.empty-state{text-align:center;padding:40px;color:var(--muted);font-size:14px}
.empty-state .ei{font-size:36px;margin-bottom:10px}
.loading{text-align:center;padding:60px;color:var(--muted);font-size:14px}

/* ── МЕТРИКИ ── */
.mg{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:24px}
.mc{background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:16px 20px;cursor:pointer;transition:box-shadow .15s,border-color .15s}
.mc:hover{box-shadow:0 2px 8px rgba(0,0,0,.08);border-color:var(--border-3)}
.mv{font-size:28px;font-weight:700;line-height:1}
.ml{font-size:12px;color:var(--muted);margin-top:4px}
.ms{font-size:11px;color:var(--text-faint);margin-top:2px}

/* ── ПРОГРЕСС ── */
.pgw{background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:16px 20px;margin-bottom:24px}
.pgt{font-size:13px;font-weight:600;margin-bottom:8px;display:flex;justify-content:space-between}
.pgt .sub{color:var(--muted);font-weight:400;font-size:12px}
.gbb{height:6px;background:var(--surface-3);border-radius:var(--os-radius-control);overflow:hidden}
.gbf{height:100%;border-radius:var(--os-radius-control);background:var(--accent);transition:width .3s}
.gbf.g{background:var(--ok)}

/* ── ФАЗЫ ── */
.gr{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:24px}
.gc{border:1px solid var(--border);border-radius:var(--os-radius-card);padding:16px;background:var(--surface);cursor:pointer;transition:box-shadow .15s,border-color .15s}
.gc:hover{box-shadow:0 2px 8px rgba(0,0,0,.08);border-color:var(--border-3)}
.gt{font-weight:600;font-size:13px;margin-bottom:8px;display:flex;justify-content:space-between;align-items:center;gap:6px}
.gp{font-size:20px;font-weight:700}

/* ── ЧИПЫ-ФИЛЬТРЫ ── */
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.chip{padding:3px 11px;border-radius:var(--os-radius-panel);font-size:12px;cursor:pointer;background:var(--surface-3);color:var(--text-2);border:none;font-family:inherit;transition:background .1s}
.chip:hover{background:var(--surface-active)}
.chip.on{background:var(--chip-on-bg);color:var(--on-solid)}
.tbl-search{margin-bottom:12px}
.tbl-search input{width:280px;max-width:100%;padding:7px 12px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:13px;font-family:inherit;outline:none}
.tbl-search input:focus{border-color:var(--text)}

/* ── ТАБЛИЦА ── */
.tw{overflow-x:auto;border:1px solid var(--border);border-radius:var(--os-radius-card);margin-bottom:16px;background:var(--surface)}
.tw table{width:100%;border-collapse:collapse;font-size:13px}
.tw thead{position:sticky;top:0;z-index:2}
.tw th{padding:8px 12px;text-align:left;font-weight:500;color:var(--muted);font-size:11px;background:var(--surface-2);border-bottom:1px solid var(--border);white-space:nowrap;text-transform:uppercase;letter-spacing:.03em}
.tw td{padding:8px 12px;border-bottom:1px solid var(--surface-3);vertical-align:top;max-width:340px;overflow:hidden;text-overflow:ellipsis}
.tw tr:last-child td{border-bottom:none}
.tw tbody tr{cursor:pointer;transition:background .1s}
.tw tbody tr:hover{background:var(--surface-2)}
td.num{font-variant-numeric:tabular-nums;white-space:nowrap}

/* ── БЕЙДЖИ ── */
.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--os-radius-card);font-size:11px;font-weight:500;white-space:nowrap;background:var(--surface-3);color:var(--text-2);margin:1px 2px 1px 0}
.b-green{background:#dcfce7;color:#166534}
.b-blue{background:#dbeafe;color:#1e40af}
.b-purple{background:#ede9fe;color:#6d28d9}
.b-yellow{background:#fef9c3;color:#854d0e}
.b-red{background:#fee2e2;color:#991b1b}
/* SOS-RUNWAY1: финансовое здоровье */
.rw-red .mv{color:var(--danger-strong)}.rw-red{border-color:#fca5a5}
.rw-warn .mv{color:var(--warn-text)}.rw-warn{border-color:#fde047}
.rw-ok .mv{color:var(--ok-text)}.rw-ok{border-color:#bbf7d0}
.rw-note{margin:8px 0 4px;padding:8px 12px;border-radius:var(--os-radius-card);font-size:13px}
/* SOS-AIREVIEW1: ИИ-ревью одностраничника */
.air-panel{border:1px solid var(--border);border-radius:var(--os-radius-card);padding:14px 16px;margin:12px 0;background:var(--surface)}
.air-head{font-size:14px;color:var(--text);margin-bottom:6px}
.air-score{font-size:18px}
.air-score.air-ok{color:var(--ok-text)}.air-score.air-warn{color:var(--warn-text)}.air-score.air-bad{color:var(--danger-strong)}
.air-sum{font-size:13.5px;color:var(--text);margin:4px 0 12px;line-height:1.5}
.air-f{border-left:3px solid var(--border-3);padding:6px 0 6px 12px;margin:8px 0}
.air-f.air-bad{border-color:var(--danger)}.air-f.air-warn{border-color:#d97706}.air-f.air-ok{border-color:#2563eb}
.air-ft{font-size:13.5px;color:var(--text)}
.air-d{font-size:12.5px;color:var(--text-2);margin-top:3px;line-height:1.5}
/* SOS-HEALTH1: чипы гигиены данных */
.hl-chips{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;flex:1}
.hl-chip{font-size:11.5px;padding:2px 8px;border-radius:var(--os-radius-card);white-space:nowrap}
.hl-clk{cursor:pointer}.hl-clk:hover{filter:brightness(0.95);text-decoration:underline}
/* SOS-TOTALS1: итоговая строка таблицы */
.tbl-total td{border-top:2px solid var(--border-3);background:var(--row-total);font-size:12.5px;padding:8px 12px}
.tbl-total .num{font-variant-numeric:tabular-nums}
.tbl-total-lbl{color:var(--text-2);font-weight:600}
/* SOS-PRINTREC1: печать/PDF только карточки записи (дровер) */
@media print {
  body.printing-drawer #sidebar, body.printing-drawer #topbar, body.printing-drawer #main,
  body.printing-drawer #content, body.printing-drawer #drawer-overlay,
  body.printing-drawer .drawer-btns { display:none !important; }
  body.printing-drawer { background:var(--surface) !important; }
  body.printing-drawer #drawer { position:static !important; inset:auto !important; transform:none !important;
    width:auto !important; max-width:none !important; height:auto !important; box-shadow:none !important;
    border:none !important; overflow:visible !important; }
}
/* SOS-HEALTHDRILL1: баннер транзиентного фильтра в реестре */
.hl-banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:8px 0;padding:8px 12px;border-radius:var(--os-radius-card);background:#fef9c3;color:#854d0e;font-size:13px}
/* SOS-CMDK2: теги типов в ⌘K */
.sh-tag-nav{color:#2563eb !important}
.sh-tag-act{color:#0a7d33 !important}
/* SOS-A11Y1: видимый фокус для клавиатуры */
/* Кольцо фокуса по стандарту Photon: цвет — акцент борда, а не зашитое число
   мимо палитры (в тёмной теме прежний #7c6cf0 не совпадал с акцентом). */
.btn:focus-visible,.btn-icon:focus-visible,#drawer :focus-visible,.ni:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,
a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.b-orange{background:#ffedd5;color:#c2410c}
.b-pink{background:#fce7f3;color:#9d174d}
.b-indigo{background:#e0e7ff;color:#3730a3}
.b-teal{background:#ccfbf1;color:#115e59}
.b-grey{background:var(--surface-3);color:var(--text-2)}
.rel-link{color:var(--text);border-bottom:1px dotted var(--sep)}
.rel-cell{cursor:pointer}.rel-cell:hover{color:#6b5bd2;border-color:#6b5bd2}

/* мини-прогресс в ячейке */
.cellbar{display:flex;align-items:center;gap:8px;min-width:110px}
.cellbar .gbb{flex:1}
.cellbar span{font-size:11px;color:var(--text-2);font-variant-numeric:tabular-nums}

/* ── ПАНЕЛЬ ЗАПИСИ ── */
#drawer-overlay{position:fixed;inset:0;background:rgba(15,15,15,.35);z-index:40}
#drawer{position:fixed;top:0;right:0;bottom:0;width:480px;max-width:92vw;background:var(--surface);z-index:41;box-shadow:-8px 0 32px rgba(0,0,0,.12);display:flex;flex-direction:column}
.drawer-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 20px;border-bottom:1px solid var(--border)}
.drawer-title{font-size:16px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.drawer-body{flex:1;overflow-y:auto;padding:16px 20px 40px}
.fld{margin-bottom:14px}
.fld .fl{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:3px}
.fld .fv{font-size:13.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.fld .fv.muted{color:var(--text-faint)}
.drawer-meta{margin-top:20px;padding-top:12px;border-top:1px solid var(--surface-3);font-size:11.5px;color:var(--text-faint)}

/* ── ГРУППЫ ДАШБОРДА ── */
/* MINMAX(0,1FR), А НЕ 1FR (27.09.2026, цикл 178). У колонки `1fr` неявный `min-width:auto`, и
   неразрывное содержимое растягивает КОЛОНКУ за пределы короба: измерено на 390 px — панели
   выходили за край на 559 px (три `.panel` шириной 933 px в коробе 390). Складывание в одну
   колонку на ≤1100 px этого не лечило: виновата не раскладка, а минимальная ширина. */
.two-col{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-bottom:24px}
.two-col > .panel{min-width:0}
@media (max-width:1100px){.two-col{grid-template-columns:minmax(0,1fr)}}
.panel{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);padding:16px 20px}
.panel .sh{margin-top:0}
.rowline{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--bg);font-size:13px;cursor:pointer}
.rowline:last-child{border-bottom:none}
.rowline:hover{background:var(--surface-2)}
.rowline .rt{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rowline .rm{color:var(--muted);font-size:11.5px;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}

/* ── КАНБАН (SOS-FRONT1) ── */
.reg-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.view-toggle{display:flex;gap:4px;background:var(--surface-3);border-radius:var(--os-radius-card);padding:3px;margin-bottom:12px}
.vt{padding:4px 12px;border-radius:var(--os-radius-control);font-size:12.5px;border:none;background:transparent;color:var(--text-2);font-family:inherit;cursor:pointer}
.vt.on{background:var(--surface);color:var(--text);box-shadow:0 1px 3px rgba(0,0,0,.08);font-weight:500}
.kb{display:flex;gap:12px;overflow-x:auto;align-items:flex-start;padding-bottom:16px}
.kb-col{min-width:230px;width:230px;flex-shrink:0;background:var(--bg);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:10px}
.kb-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.kb-head .cnt{color:var(--muted);font-size:12px}
.kb-cards{display:flex;flex-direction:column;gap:8px}
.kb-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-control);padding:10px 12px;cursor:pointer;transition:box-shadow .12s,border-color .12s}
.kb-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.08);border-color:var(--border-3)}
.kb-title{font-size:13px;font-weight:500;line-height:1.35;margin-bottom:4px}
.kb-meta{display:flex;gap:4px;flex-wrap:wrap}
.kb-empty{color:var(--text-faint);font-size:12px;text-align:center;padding:14px 0;font-style:italic}

/* ── ПЕРЕХОДЫ WORKFLOW В КАРТОЧКЕ ── */
.wf-box{display:flex;align-items:center;gap:6px;flex-wrap:wrap;background:var(--bg);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:8px 12px;margin-bottom:16px}
.wf-lbl{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.wf-btn{border:none;border-radius:var(--os-radius-card);padding:3px 10px;font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;transition:filter .1s}
.wf-btn:hover{filter:brightness(.95)}
.wf-err{font-size:12px;color:var(--danger-text)}

/* ── ФОРМА ЗАПИСИ (SOS-FRONT2) ── */
.pt-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.bt-p{background:var(--solid-bg);color:var(--on-solid)}
.bt-p:hover{background:var(--solid-bg-hover)}
.drawer-btns{display:flex;gap:4px;align-items:center}
.ff{margin-bottom:13px}
.ff .fl{display:block;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}
.ff input[type=text],.ff input[type=email],.ff input[type=password],.ff input[type=number],.ff input[type=date],.ff input[type=datetime-local],.ff select,.ff textarea{
  width:100%;padding:7px 10px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:13.5px;font-family:inherit;outline:none;background:var(--surface);color:var(--text)}
.ff input:focus,.ff select:focus,.ff textarea:focus{border-color:var(--text);box-shadow:0 0 0 2px rgba(55,53,47,.08)}
.ff textarea{resize:vertical;min-height:60px}
.ff-check{font-size:13px;display:flex;align-items:center;gap:6px}
.ff-multi{display:flex;flex-direction:column;gap:4px;font-size:13px;max-height:160px;overflow-y:auto;border:1px solid #eee;border-radius:var(--os-radius-control);padding:8px 10px}
.ff-multi label{display:flex;align-items:center;gap:6px;cursor:pointer}
.ff-err{color:var(--danger-text);font-size:11.5px;margin-top:2px;min-height:0}
/* Подсказка поля — текст из пака (options.hint). До 21.09.2026 её не показывал ни один
   потребитель: 86 объяснений уезжали в браузер и молча отбрасывались. Переносов строки НЕ
   режем и многоточием не обрезаем: спрятали бы ровно ту часть, ради которой она написана. */
.ff-hint{color:var(--muted);font-size:11.5px;line-height:1.45;margin-top:3px;white-space:pre-wrap}
.fld .fld-hint{color:var(--text-faint);font-size:11.5px;line-height:1.45;margin-top:2px;white-space:pre-wrap}
/* ТЕХНИЧЕСКИЕ КЛЮЧИ В КАРТОЧКЕ — ПО ЗАПРОСУ (05.10.2026, U6). Блок закрыт по умолчанию и выглядит
   как служебный: он не спорит с рабочими графами за внимание, но и не спрятан насовсем. */
.fld-machine{margin:2px 0 14px;border:1px solid var(--line,#e6e4e0);border-radius:var(--os-radius-control);background:var(--paper2,#faf9f7)}
.fld-machine>summary{cursor:pointer;padding:8px 10px;font-size:11.5px;font-weight:600;color:var(--muted);
  text-transform:uppercase;letter-spacing:.04em;list-style:none}
.fld-machine>summary::-webkit-details-marker{display:none}
.fld-machine>summary::before{content:"▸ ";font-weight:400}
.fld-machine[open]>summary::before{content:"▾ "}
.fld-machine .fld-machine-b{padding:2px 10px 4px}
.fld-machine .fld-machine-b .fld:last-child{margin-bottom:8px}
.fld-machine .fld .fv{font-family:var(--mono,ui-monospace,monospace);font-size:12.5px}
.ff-actions{display:flex;align-items:center;gap:8px;margin-top:18px;flex-wrap:wrap}

/* ── СПАРКЛАЙНЫ (SOS-METR1) ── */
.sp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:24px}
.sp-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:14px 18px;cursor:pointer;transition:box-shadow .15s,border-color .15s}
.sp-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.08);border-color:var(--border-3)}
.sp-name{font-size:12px;color:var(--muted);font-weight:500;margin-bottom:4px}
.sp-demo{background:var(--surface-3);color:var(--text);font-size:10px;padding:1px 6px;border-radius:var(--os-radius-card);font-weight:400}  /* --text-2, а не --text-faint: приглушённый на приглушённой плашке давал 3,8:1 */
.sp-val{font-size:22px;font-weight:700;line-height:1.2;margin-bottom:6px}
.sp-unit{font-size:12px;color:var(--muted);font-weight:400;margin-left:4px}
.spark{width:100%;height:34px;display:block}
.sp-line{color:var(--accent)}
.sp-fin{color:var(--ok)}
.sp-period{font-size:10.5px;color:var(--text-faint);margin-top:4px;font-variant-numeric:tabular-nums}
.sp-empty .sp-hint{font-size:12px;color:var(--muted);line-height:1.5;margin-top:2px}

/* ── ДЕРЕВО WBS (SOS-TREE1) ── */
.tree{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);padding:6px 0;margin-bottom:16px}
.tree-row{display:flex;align-items:center;gap:8px;padding:4px 14px 4px 0;font-size:13px;border-bottom:1px solid var(--bg);min-height:30px}
.tree-row:last-child{border-bottom:none}
.tree-row:hover{background:var(--surface-2)}
.tree-tgl{border:none;background:transparent;cursor:pointer;color:var(--muted);font-size:12px;width:18px;padding:0;flex-shrink:0}
.tree-tgl:hover{color:var(--text)}
.tree-dot{color:var(--border-3);width:18px;text-align:center;flex-shrink:0}
.tree-code{font-size:11px;color:var(--text-faint);font-variant-numeric:tabular-nums;min-width:52px;flex-shrink:0}
.tree-title{cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tree-title:hover{border-bottom:1px dotted var(--sep)}
.tree-agg{margin-left:auto;display:flex;align-items:center;gap:8px;flex-shrink:0}
.tree-agg .num{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.tree-bar{display:inline-block;width:70px;height:5px}
.tree-bar .gbf{display:block;height:100%}
.tree-uncoded{color:var(--muted);font-size:11.5px;font-style:italic;padding-left:14px;background:var(--row-uncoded)}

/* ── КНОПКИ «СОЗДАТЬ СВЯЗАННУЮ» (SOS-INST1) ── */
.rel-create{display:flex;gap:6px;flex-wrap:wrap;margin:14px 0 4px;padding-top:12px;border-top:1px solid var(--surface-3)}
.rel-add{font-size:12px;border:1px dashed var(--border-3);border-radius:var(--os-radius-control)}
.rel-add:hover{border-style:solid}

/* ── COVERAGE (SOS-COV1) ── */
.cov-more{margin:10px auto 4px;display:block}

/* ── ЛИМИТЫ РЕНДЕРА (SOS-UX1) ── */
.tbl-more{margin:10px auto 16px;display:block}
.kb-more{width:100%;border:1px dashed var(--border-3);background:transparent;border-radius:var(--os-radius-control);padding:6px;font-size:12px;color:var(--text-2);cursor:pointer;font-family:inherit;margin-top:2px}
.kb-more:hover{border-style:solid;color:var(--text)}

/* ── НАСТРОЙКИ (SOS-SETNAV1) ── */
.set-nav{display:flex;gap:4px;flex-wrap:wrap;margin:16px 0 20px;border-bottom:1px solid var(--border);padding-bottom:0}
.set-tab{padding:8px 14px;border:none;background:transparent;color:var(--text-2);font-size:13.5px;font-family:inherit;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.set-tab:hover{color:var(--text)}
.set-tab.on{color:var(--text);font-weight:500;border-bottom-color:var(--solid-bg)}
.set-body{max-width:640px}
.set-h{font-size:13px;font-weight:600;margin-bottom:12px}
.kv{display:flex;justify-content:space-between;gap:16px;padding:9px 0;border-bottom:1px solid var(--bg);font-size:14px}
.kv:last-of-type{border-bottom:none}
.kv span{color:var(--muted)}
.set-note{margin-top:16px;font-size:12.5px;color:var(--muted);line-height:1.6;background:var(--surface-2);border-radius:var(--os-radius-control);padding:10px 14px}
.set-soon{text-align:center;color:var(--muted);padding:36px}
.set-soon .ei{font-size:32px;margin-bottom:10px}

/* ── ПРОФИЛЬ (SOS-PROFILE1) ── */
.set-body .panel{margin-bottom:16px}
.backup-codes{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.backup-codes code{background:var(--surface-3);padding:3px 8px;border-radius:var(--os-radius-control);font-size:12.5px}
#sos-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--solid-bg);color:var(--on-solid);padding:10px 18px;border-radius:var(--os-radius-card);font-size:13.5px;opacity:0;transition:opacity .25s;z-index:60;box-shadow:0 4px 16px rgba(0,0,0,.2)}
#sos-toast.err{background:var(--danger-solid)}

/* ── КОМАНДА (SOS-TEAM1) ── */
.team-invite{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.team-invite input{flex:1;min-width:200px;padding:7px 10px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:13.5px;font-family:inherit}
.team-invite select{padding:7px 10px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:13.5px;font-family:inherit;background:var(--surface)}
.mem-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--bg)}
.mem-row:last-child{border-bottom:none}
.mem-id{flex:1;min-width:0}
.mem-email{font-size:12px;color:var(--muted);margin-top:1px}
.mem-role{padding:5px 8px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:12.5px;font-family:inherit;background:var(--surface)}

/* ── ПРИЁМ ИНВАЙТА (SOS-TEAM2) ── */
#join-screen{height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg)}
.join-tabs{display:flex;gap:4px;background:var(--surface-3);border-radius:var(--os-radius-card);padding:3px;margin-bottom:16px}
.join-tab{flex:1;padding:7px;border-radius:var(--os-radius-control);border:none;background:transparent;color:var(--text-2);font-size:13px;font-family:inherit;cursor:pointer}
.join-tab.on{background:var(--surface);color:var(--text);font-weight:500;box-shadow:0 1px 3px rgba(0,0,0,.08)}

/* ── QR 2FA (SOS-PROFILE2) ── */
.mfa-qr{display:flex;justify-content:center;margin:12px 0}
.mfa-qr canvas{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);image-rendering:pixelated}

/* ── ПЕРЕКЛЮЧАТЕЛЬ ПРОЕКТОВ (SOS-PROJ1) ── */
.company-switch{display:inline-flex;align-items:center}
.cs-single{font-size:12.5px;color:var(--text-2);padding:5px 10px;background:var(--bg);border-radius:var(--os-radius-control)}
.cs-select{padding:5px 10px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);font-size:13px;font-family:inherit;background:var(--surface);color:var(--text);cursor:pointer;max-width:200px}

/* + Новый проект (SOS-PROJ2) */
.cs-new{margin-left:4px;width:26px;height:26px;border:1px solid var(--border-2);border-radius:var(--os-radius-control);background:var(--surface);color:var(--text-2);font-size:15px;cursor:pointer;font-family:inherit;line-height:1}
.cs-new:hover{background:var(--surface-3);color:var(--text)}

/* ── ИНТЕГРАЦИИ (SOS-INTEG1) ── */
.int-badge{display:inline-block;font-size:11px;font-weight:500;padding:2px 10px;border-radius:var(--os-radius-card);margin-bottom:10px}
.int-badge.b-green{background:#dcfce7;color:#166534}
.int-badge.b-grey{background:var(--surface-3);color:var(--text-2)}

/* ссылка на мобильную версию (SOS-MOBILE2) */
.login-mobile{display:block;text-align:center;margin-top:14px;font-size:13px;color:var(--text-2);text-decoration:none}
.login-mobile:hover{color:var(--text)}

/* ── ОТЧЁТЫ (SOS-REPORT1) ── */
.rep-chart{background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:14px 18px;margin-bottom:16px;display:flex;flex-direction:column;gap:8px}
.rep-bar-row{display:flex;align-items:center;gap:10px;font-size:13px}
.rep-bar-lbl{min-width:120px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rep-bar-track{flex:1;height:14px;background:var(--surface-3);border-radius:var(--os-radius-control);overflow:hidden}
.rep-bar-fill{display:block;height:100%;background:var(--accent);border-radius:var(--os-radius-control)}
.rep-bar-val{min-width:44px;text-align:right;color:var(--text-2)}

/* экспорт реестра (SOS-EXPORT1) */
.pt-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}

/* ── ГЕЙТЫ ФАЗ НА ДАШБОРДЕ (SOS-DASH1) ── */
.gate-note{margin-top:8px;font-size:11.5px;padding:4px 8px;border-radius:var(--os-radius-control);display:inline-block}
.gate-note.b-yellow{background:#fef9c3;color:#854d0e}
.gate-note.b-green{background:#dcfce7;color:#166534}
.gate-actions{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}
.gate-btn{font-size:12px;padding:3px 10px}

/* ── ЧЕРНОВИК ДОКУМЕНТА (SOS-DOCGEN1) ── */
.draft-back,.drawer-back{margin-bottom:12px}
.draft-area{width:100%;font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:12.5px;line-height:1.55;border:1px solid var(--border-2);border-radius:var(--os-radius-control);padding:10px 12px;resize:vertical;color:var(--text);background:var(--surface)}

/* ── ТАЙМЛАЙН / ГАНТ (SOS-WBS1) ── */
.gantt{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);overflow-x:auto;margin-bottom:16px;min-width:520px}
.g-scale-row{display:grid;grid-template-columns:220px 1fr;border-bottom:1px solid var(--border);background:var(--surface-2);position:sticky;top:0;z-index:2}
.g-corner{border-right:1px solid var(--border)}
.g-scale{position:relative;height:26px}
.g-tick{position:absolute;top:0;bottom:0;border-left:1px solid var(--hair)}
.g-tick span{position:absolute;top:7px;left:3px;font-size:10px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.g-phase{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:7px 12px;background:var(--bg);border-bottom:1px solid var(--surface-3)}
.g-phase .cnt{color:var(--text-faint);font-weight:400;margin-left:4px}
.g-row{display:grid;grid-template-columns:220px 1fr;align-items:stretch;border-bottom:1px solid var(--surface-3);min-height:30px}
.g-row:last-child{border-bottom:none}
.g-label{display:flex;align-items:center;gap:6px;padding:5px 10px;font-size:12.5px;overflow:hidden;cursor:pointer;border-right:1px solid var(--surface-3);min-width:0}
.g-label:hover .g-name{color:var(--accent)}
.g-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.g-wbs{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;flex-shrink:0}
.g-track{position:relative;min-height:30px}
.g-track::before{content:'';position:absolute;top:0;bottom:0;left:var(--tl,-999px);width:1px;background:var(--danger);opacity:.45;z-index:1}
.g-bar{position:absolute;top:8px;height:14px;background:var(--accent);border-radius:var(--os-radius-control);cursor:pointer;min-width:3px;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(0,0,0,.05);z-index:2}
.g-bar.done{background:var(--ok)}
.g-bar.crit{background:var(--danger)}
.g-bar:hover{filter:brightness(1.06)}
.g-prog{position:absolute;left:0;bottom:0;height:3px;background:rgba(0,0,0,.4)}
.g-mile{position:absolute;top:9px;width:12px;height:12px;background:#d97706;transform:translateX(-50%) rotate(45deg);border-radius:var(--os-radius-control);cursor:pointer;z-index:2}
.g-mile.done{background:var(--ok)}
.g-mile.crit{background:var(--danger)}
.g-legend{display:flex;gap:16px;flex-wrap:wrap;align-items:center;padding:9px 12px;font-size:11px;color:var(--text-2);border-top:1px solid var(--surface-3)}
.g-legend i{display:inline-block;vertical-align:middle;margin-right:5px}
.g-sw{width:14px;height:10px;border-radius:var(--os-radius-control);background:var(--accent)}
.g-sw.done{background:var(--ok)}
.g-sw.crit{background:var(--danger)}
.g-mile-sw{display:inline-block;vertical-align:middle;margin-right:5px;width:10px;height:10px;background:#d97706;transform:rotate(45deg)}
.g-today-sw{display:inline-block;vertical-align:middle;margin-right:5px;width:2px;height:12px;background:var(--danger);opacity:.6}
.g-undated{color:var(--muted)}

/* ── ГРУППИРОВКА ПО КАТЕГОРИИ (SOS-ARTCAT1) ── */
.cat-groups{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);overflow:hidden;margin-bottom:16px}
.cat-group{border-bottom:1px solid var(--surface-3)}
.cat-group:last-child{border-bottom:none}
.cat-head{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer}
.cat-head:hover{background:var(--surface-2)}
.cat-tgl{color:var(--muted);width:12px;flex-shrink:0}
.cat-name{font-size:13px;font-weight:500;color:var(--text)}
.cat-cnt{font-size:12px;color:var(--muted);background:var(--surface-3);border-radius:var(--os-radius-card);padding:0 8px;min-width:24px;text-align:center;font-variant-numeric:tabular-nums}
.cat-bar{flex:1;max-width:220px;height:6px;background:var(--surface-3);border-radius:var(--os-radius-control);overflow:hidden;margin-left:auto}
.cat-bar-f{display:block;height:100%;background:var(--accent);border-radius:var(--os-radius-control)}
.cat-items{padding:2px 12px 8px 34px}
.cat-type{font-size:11px;color:var(--muted);background:var(--bg);border:1px solid var(--hair);border-radius:var(--os-radius-control);padding:0 6px;white-space:nowrap}
/* Coverage: разбивка по категориям */
.cov-cats{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.ccrow{display:flex;align-items:center;gap:10px;font-size:12.5px}
.ccname{min-width:150px;color:var(--text)}
.ccnum{color:var(--muted);font-variant-numeric:tabular-nums;min-width:44px}
.ccbar{flex:1;max-width:260px}
.ccpct{color:var(--text-2);font-variant-numeric:tabular-nums;min-width:34px;text-align:right}

/* ── ВИДЖЕТ «МОЙ ДЕНЬ» (SOS-HOME2) ── */
.md-panel{margin-bottom:16px}
.md-panel .sh.sub{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:12px 0 6px}
.md-hint{font-size:12.5px;color:#8a6d1a;background:#fef9e7;border:1px solid #f5e6a8;border-radius:var(--os-radius-card);padding:8px 12px;margin-bottom:10px}
.md-stats{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:4px}
.md-stat{display:flex;flex-direction:column;background:var(--bg);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:8px 14px;min-width:84px}
.md-n{font-size:20px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.1}
.md-l{font-size:11px;color:var(--muted)}
.md-empty{font-size:12.5px;color:var(--muted);padding:6px 0}
.due-badge{font-size:11px;color:var(--text-2);background:var(--surface-3);border-radius:var(--os-radius-control);padding:1px 7px;white-space:nowrap}
.due-badge.overdue{background:#fdecea;color:#b3402f}
.due-badge.today{background:#fff3e0;color:#b26a00}
.due-badge.soon{background:#eef6ee;color:#2f7d32}

/* ── ГЛОБАЛЬНЫЙ ПОИСК (SOS-SEARCH1) ── */
.topbar-search{display:inline-flex;align-items:center;gap:6px}
.topbar-search kbd{font-size:10px;background:var(--border);border-radius:var(--os-radius-control);padding:0 4px;color:var(--text-2)}
#search-overlay{position:fixed;inset:0;background:rgba(15,15,15,.35);z-index:70}
#search-modal{position:fixed;top:12vh;left:50%;transform:translateX(-50%);width:620px;max-width:92vw;max-height:70vh;background:var(--surface);z-index:71;border-radius:var(--os-radius-panel);box-shadow:0 16px 48px rgba(0,0,0,.25);display:flex;flex-direction:column;overflow:hidden}
.search-inp-wrap{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--hair)}
.search-ico{font-size:16px;color:var(--muted)}
#search-input{flex:1;border:none;outline:none;font-size:16px;font-family:inherit;color:var(--text);background:transparent}
#search-results{overflow-y:auto;padding:6px}
.search-hit{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--os-radius-card);cursor:pointer;font-size:13.5px}
.search-hit.on{background:var(--accent-bg)}
.search-hit:hover{background:var(--bg)}
.sh-ico{flex-shrink:0}
.sh-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.sh-reg{color:var(--muted);font-size:11.5px;white-space:nowrap;background:var(--surface-3);border-radius:var(--os-radius-control);padding:1px 7px}
.search-empty{padding:22px;text-align:center;color:var(--muted);font-size:13px}
.search-foot{border-top:1px solid var(--hair);padding:8px 14px;font-size:11px;color:var(--muted);display:flex;gap:6px;align-items:center}
.search-foot kbd{background:var(--surface-3);border-radius:var(--os-radius-control);padding:0 5px;font-size:10px}

/* ── МАТРИЦА РИСКОВ (SOS-RISK1) ── */
.riskmatrix{margin-bottom:16px}
.rm-hint{margin:0 0 10px}
.rm-wrap{overflow-x:auto;margin-bottom:12px}
.rm-table{border-collapse:separate;border-spacing:4px}
.rm-corner{font-size:10px;color:var(--muted);font-weight:500;text-align:left;padding:4px 8px;white-space:nowrap}
.rm-colh{font-size:11px;color:var(--text-2);font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:4px 8px;text-align:center}
.rm-rowh{font-size:11px;color:var(--text-2);font-weight:600;text-align:right;padding:4px 10px;white-space:nowrap}
.rm-cell{width:96px;height:60px;border-radius:var(--os-radius-card);text-align:center;vertical-align:middle;cursor:pointer;transition:filter .1s,box-shadow .1s}
.rm-cell:hover{filter:brightness(.96)}
.rm-cell.sel{box-shadow:0 0 0 3px var(--text) inset}
.rm-n{font-size:22px;font-weight:700;color:var(--on-solid);font-variant-numeric:tabular-nums}
.rm-cell.rm-empty .rm-n{color:rgba(255,255,255,.55)}
.rm-crit{background:var(--danger)}
.rm-high{background:#ea7317}
.rm-med{background:#e0a80d}
.rm-low{background:var(--ok)}
.rm-legend{display:flex;gap:16px;flex-wrap:wrap;align-items:center;font-size:11px;color:var(--text-2);margin-bottom:8px}
.rm-legend i{display:inline-block;vertical-align:middle;margin-right:5px;width:14px;height:10px;border-radius:var(--os-radius-control)}
.rm-sw.rm-crit{background:var(--danger)}.rm-sw.rm-high{background:#ea7317}.rm-sw.rm-med{background:#e0a80d}.rm-sw.rm-low{background:var(--ok)}
.rm-resolved{color:var(--muted)}
.rm-owner{color:var(--muted);font-size:11.5px;white-space:nowrap}

/* ── ПАНЕЛЬ OKR (SOS-OKR1) ── */
.sh.sub{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:16px 0 8px}
.sh.sub .cnt{color:var(--text-faint);font-weight:400;text-transform:none;letter-spacing:0;font-size:11.5px;margin-left:6px}
.okr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;margin-bottom:8px}
.okr-card{border:1px solid var(--border);border-radius:var(--os-radius-card);padding:14px 16px;background:var(--surface);cursor:pointer;transition:box-shadow .15s,border-color .15s;display:flex;flex-direction:column;gap:8px}
.okr-card:hover{box-shadow:0 2px 12px rgba(0,0,0,.08);border-color:var(--border-3)}
.okr-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.okr-obj{font-weight:600;font-size:13.5px;color:var(--text);line-height:1.35}
.okr-kr{font-size:12px;color:var(--text-2);line-height:1.4}
.okr-meta{display:flex;justify-content:space-between;gap:8px;font-size:11.5px;color:var(--muted);flex-wrap:wrap}
.okr-ct{font-variant-numeric:tabular-nums}
.okr-foot{display:flex;justify-content:space-between;align-items:center;font-size:11.5px}
.okr-prog{font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.okr-conf{color:var(--muted)}
.gbf.y{background:#e0a80d}
.gbf.r{background:var(--danger)}

/* ── ПРИВЯЗКА ПРОФИЛЯ (SOS-PROFILELINK1) ── */
.pl-sel{padding:6px 10px;border:1px solid var(--border);border-radius:var(--os-radius-control);font-family:inherit;font-size:13px;background:var(--surface);max-width:300px;color:var(--text)}

/* ── ЗАВИСИМОСТИ ЗАДАЧ (SOS-DEP1) ── */
.dep-block{margin-top:4px}
.dep-warn{font-size:12.5px;color:#8a2f22;background:#fdecea;border:1px solid #f5c6bd;border-radius:var(--os-radius-card);padding:8px 12px;margin-bottom:6px}

/* ── СПРИНТ-ОБЗОР (SOS-SPRINT1) ── */
.sprint-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin-bottom:16px}
.sprint-card{border:1px solid var(--border);border-radius:var(--os-radius-card);padding:14px 16px;background:var(--surface);display:flex;flex-direction:column;gap:8px}
.sp-head{display:flex;justify-content:space-between;align-items:center;gap:8px;cursor:pointer}
.sp-head:hover .sp-name{color:var(--accent)}
.sp-name{font-weight:600;font-size:13.5px;color:var(--text)}
.sp-sub{font-size:11.5px;color:var(--muted)}
.sp-metric{display:flex;align-items:center;gap:8px;font-size:12px}
.sp-lbl{color:var(--muted);min-width:64px}
.sp-val{color:var(--text);font-variant-numeric:tabular-nums;min-width:60px}
.sp-bar{flex:1;max-width:160px}
.sp-pct{color:var(--text-2);font-variant-numeric:tabular-nums;min-width:34px;text-align:right}
.sp-tasks{margin-top:4px;border-top:1px solid var(--surface-3);padding-top:4px}
.sp-more{font-size:11.5px;color:var(--muted);padding:4px 0}

/* ── ПРОГРЕСС ИНИЦИАТИВ (SOS-INIT1) ── */
.init-okr{display:inline-block;font-size:11.5px;color:var(--accent-hover);background:var(--accent-bg);border-radius:var(--os-radius-control);padding:3px 9px;cursor:pointer}
.init-okr:hover{background:#e7dffa}
.init-goal{font-size:12px;color:var(--text-2);line-height:1.4}

/* ── ФИНАНСОВЫЙ ОБЗОР (SOS-FIN1) ── */
.fin-trends{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:16px}
.fin-trend{border:1px solid var(--border);border-radius:var(--os-radius-card);padding:12px 14px;background:var(--surface)}
.fin-tl{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;color:var(--muted);margin-bottom:6px}
.fin-tl b{color:var(--text);font-size:15px;font-variant-numeric:tabular-nums}
.fin-trend .spark{width:100%;height:38px;color:var(--accent)}
.fin-trend .fin-exp{color:var(--danger)}
.fin-table{margin-bottom:12px}
.fin-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.fin-neg{color:var(--danger-text)}
.fin-pos{color:var(--ok-text)}
.fin-src{color:var(--muted);font-size:11.5px}

/* ── ВСТРЕЧИ (SOS-MEET1) ── */
.meet-row .meet-when{font-size:12px;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:112px}
.meet-att{color:var(--muted);font-size:11.5px;white-space:nowrap}

/* ── ВОРОНКА ИНВЕСТОРОВ (SOS-CRM1) ── */
.crm{margin-bottom:16px}
.cf{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.cf-row{display:flex;align-items:center;gap:10px;font-size:12.5px}
.cf-stage{min-width:130px;color:var(--text)}
.cf-cnt{min-width:24px;text-align:center;color:var(--text-2);font-variant-numeric:tabular-nums;background:var(--surface-3);border-radius:var(--os-radius-card);padding:0 6px}
.cf-barwrap{flex:1;max-width:280px;height:16px;background:var(--surface-3);border-radius:var(--os-radius-control);overflow:hidden}
.cf-bar{display:block;height:100%;background:var(--accent);border-radius:var(--os-radius-control)}
.cf-bar.won{background:var(--ok)}
.cf-bar.lost{background:var(--text-faint)}
.cf-sum{min-width:72px;text-align:right;font-variant-numeric:tabular-nums;color:var(--text)}
.cf-w{min-width:100px;color:var(--muted);font-size:11.5px;white-space:nowrap}
.cf-next{color:var(--text-2);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}

/* ── ИНВЕСТ-ОДНОСТРАНИЧНИК (SOS-ONEPAGER1) ── */
.op-actions{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.op-note{font-size:11.5px;color:var(--muted)}
.op-page{max-width:900px;background:var(--surface);border:1px solid var(--border);border-radius:var(--os-radius-panel);padding:28px 32px;box-shadow:0 2px 14px rgba(0,0,0,.05)}
.op-head{display:flex;align-items:center;gap:14px;border-bottom:2px solid var(--text);padding-bottom:16px;margin-bottom:18px}
.op-logo{font-size:34px}
.op-title{font-size:24px;font-weight:700;color:var(--text);line-height:1.1}
.op-sub{font-size:12.5px;color:var(--muted);margin-top:2px}
.op-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}
.op-k{background:var(--bg);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:12px 14px;text-align:center}
.op-kv{font-size:22px;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums;line-height:1.1}
.op-kl{font-size:11px;color:var(--text-2);margin-top:3px}
.op-cols{columns:2;column-gap:26px}
.op-sec{break-inside:avoid;margin-bottom:18px;display:inline-block;width:100%}
.op-sec.op-full{column-span:all}
.op-sh{font-size:12px;font-weight:700;color:var(--text);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--hair);padding-bottom:5px;margin-bottom:8px}
.op-metrics{display:flex;gap:20px;flex-wrap:wrap}
.op-metric .op-mv{font-size:20px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.op-metric .op-mv span{font-size:12px;color:var(--muted);font-weight:500}
.op-metric .op-ml{font-size:11.5px;color:var(--text-2)}
.op-okr{margin-bottom:10px}
.op-okr-h{display:flex;justify-content:space-between;gap:8px;font-size:12.5px;color:var(--text);margin-bottom:4px}
.op-okr-m{font-size:11px;color:var(--muted);margin-top:3px;font-variant-numeric:tabular-nums}
.op-fin{font-size:12.5px;color:var(--text);line-height:1.7}
.op-fin b{font-variant-numeric:tabular-nums}
.op-src{font-size:11px;color:var(--muted);margin-top:4px}
.op-row{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:3px 0;border-bottom:1px solid var(--bg)}
.op-rt{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.op-when{color:var(--muted);font-size:11.5px;font-variant-numeric:tabular-nums;white-space:nowrap}
.op-foot{margin-top:18px;padding-top:12px;border-top:1px solid var(--hair);font-size:11px;color:var(--text-faint);text-align:center}
@media print {
  /* Заголовок экрана нужен человеку на экране и мешает на листе: одностраничник печатают
     инвестору, и шапка продукта над его сводкой — лишняя строка. Скрываем ТОЛЬКО его
     заголовок: у «Отчётов» и «Покрытия» печатный заголовок как раз уместен. */
  #sidebar, #topbar, .op-actions, #op-review, .op-pt { display:none !important; }
  #main { margin:0 !important; }
  #content { padding:0 !important; overflow:visible !important; }
  body, #app, #main, #content { background:var(--surface) !important; }
  .op-page { box-shadow:none; border:none; max-width:none; padding:0; }
}
/* SOS-REPSHARE1: чистая печать/PDF экранов «Отчёты» и «Coverage» */
@media print {
  .chips, .cov-more, .ff-actions, .ps { display:none !important; }
  .tw { overflow:visible !important; max-height:none !important; }
  .tw table { width:100% !important; }
  .rowline, .ccrow, .rep-bar-row, .mc, tr { break-inside:avoid; }
  .panel { box-shadow:none !important; border:none !important; padding:0 !important; }
  .mc { border:1px solid #ddd !important; box-shadow:none !important; }
}

/* ── ПЕРЕХОД В СОСЕДНИЙ ПРОДУКТ (SOS-GO1, 23.09.2026) ── */
.go-row{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}

/* ── ГРАФИК РЯДА ВО ВРЕМЕНИ (SOS-CHART1, 23.09.2026) ── */
.ch-wrap{padding:12px 14px}
.ch-svg{width:100%;height:auto;display:block}
.ch-grid{stroke:var(--border,#e5e7eb);stroke-width:1}
.ch-ax{fill:var(--muted,#6b7280);font-size:11px}
.ch-legs{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:8px}
.ch-leg{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted,#6b7280)}
.ch-leg i{width:10px;height:10px;border-radius:var(--os-radius-control);display:inline-block}

/* ── ОНБОРДИНГ (SOS-ONBOARD1) ── */
.onboard-empty{padding:36px 20px}
.onboard-empty .oe-title{font-size:15px;font-weight:600;color:var(--text);margin:6px 0 4px}
.empty-state .oe-sub{font-size:12.5px;color:var(--muted);margin-bottom:14px}
.qs-panel{margin-bottom:16px}
.qs-sub{font-size:12.5px;color:var(--text-2);margin-bottom:10px}
.qs-step{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--os-radius-card);margin-bottom:6px;cursor:pointer;font-size:13px;transition:border-color .12s,background .12s}
.qs-step:hover{border-color:var(--accent-border);background:#faf9fe}
.qs-step.done{cursor:default;background:var(--bg);color:var(--muted)}
.qs-step.done:hover{border-color:var(--border);background:var(--bg)}
.qs-check{flex-shrink:0}
.qs-ic{flex-shrink:0}
.qs-label{flex:1}
.qs-hint{font-size:11.5px;color:var(--accent)}
.qs-step.done .qs-hint{color:var(--ok)}

/* ── ЖУРНАЛ РЕШЕНИЙ / ADR (SOS-DECISION1) ── */
.adr-log{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}
.adr-card{border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--os-radius-card);padding:14px 16px;background:var(--surface);cursor:pointer;transition:box-shadow .12s}
.adr-card:hover{box-shadow:0 2px 12px rgba(0,0,0,.06)}
.adr-card.adr-sup{border-left-color:var(--text-faint);opacity:.7}
.adr-h{display:flex;justify-content:space-between;align-items:center;gap:8px}
.adr-title{font-weight:600;font-size:14px;color:var(--text)}
.adr-meta{font-size:11.5px;color:var(--muted);margin-top:4px}
.adr-body{margin-top:10px;display:grid;grid-template-columns:96px 1fr;gap:4px 12px}
.adr-k{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;padding-top:2px}
.adr-v{font-size:12.5px;color:var(--text);line-height:1.45}

/* ── ЦЕНТР ВНИМАНИЯ (SOS-ACTION1) ── */
.ac-grp{margin-bottom:14px}
.ac-grp .sh{margin-top:0}

/* ── DRAG-AND-DROP КАНБАНА (SOS-KANBAN2) ── */
.kb-card[draggable="true"]{cursor:grab}
.kb-card[draggable="true"]:active{cursor:grabbing}
.kb-col.kb-over{background:var(--accent-bg);outline:2px dashed var(--accent-border);outline-offset:-3px}

/* ── СОХРАНЁННЫЕ ВИДЫ (SOS-SAVEDVIEW1) ── */
.sv-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.sv-lbl{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.sv-none{font-size:12px;color:var(--text-faint)}
.sv-chip{display:inline-flex;align-items:center;background:var(--surface-3);border-radius:var(--os-radius-panel);overflow:hidden}
.sv-chip.on{background:#e7dffa;box-shadow:inset 0 0 0 1px var(--accent-border)}
.sv-apply{border:none;background:transparent;font-family:inherit;font-size:12.5px;color:var(--text);padding:4px 4px 4px 12px;cursor:pointer}
.sv-del{border:none;background:transparent;color:var(--muted);font-size:11px;padding:4px 8px 4px 4px;cursor:pointer}
.sv-del:hover{color:var(--danger-text)}
.sv-add{border:1px dashed #c9c8c4;background:transparent;border-radius:var(--os-radius-panel);font-family:inherit;font-size:12px;color:var(--accent);padding:4px 12px;cursor:pointer}
.sv-add:hover{border-color:var(--accent);background:#faf9fe}

/* ── ЗАГРУЗКА КОМАНДЫ (SOS-TEAMLOAD1) ── */
.tl-hint{margin:0 0 12px}
.tl-list{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.tl-row{display:grid;grid-template-columns:190px 1fr auto;align-items:center;gap:14px;padding:9px 12px;border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);cursor:pointer}
.tl-row:hover{border-color:var(--border-3);background:var(--surface-2)}
.tl-who{min-width:0}
.tl-name{display:block;font-size:13px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-role{font-size:11px;color:var(--muted)}
.tl-bar-wrap{position:relative;height:14px;background:var(--surface-3);border-radius:var(--os-radius-control);overflow:hidden}
.tl-bar{position:absolute;left:0;top:0;height:100%;background:var(--accent);border-radius:var(--os-radius-control)}
.tl-bar-over{position:absolute;left:0;top:0;height:100%;background:var(--danger);border-radius:var(--os-radius-control)}
.tl-nums{font-size:12.5px;color:var(--text);white-space:nowrap}
.tl-nums b{font-variant-numeric:tabular-nums}
.tl-over{color:var(--danger-text)}
.tl-total{color:var(--muted);font-size:11.5px}
.tl-flag{font-size:11px;border-radius:var(--os-radius-card);padding:1px 8px;margin-left:6px}
.tl-flag.over{background:#fdecea;color:#b3402f}
.tl-flag.idle{background:var(--surface-3);color:var(--muted)}

/* OS-WIDE-01 (26.09.2026): на телефоне два экрана клали содержимое ШИРЕ короба, и оно
   обрезалось молча — нашёл это не человек, а обход экранов os-screens-sweep-check.
   Замер на 390 px (содержимого 358): строка чисел «Загрузки» 270 px в сетке с жёсткой
   колонкой 190 px вылезала на 127 px — за краем оставались итог «(15 всего)» и флаг
   «🔴 перегруз», то есть ровно то, ради чего на этот экран и заходят. Подпись встречи
   вылезала на 283 px. Прокрутить вбок можно, но полосы на телефоне не видно, и человек
   не знает, что там что-то есть.
   На узком экране сетка складывается в одну колонку, а подпись строки ПЕРЕНОСИТСЯ, а не
   усекается: повестка встречи на телефоне должна читаться целиком. Порог 640 px — тот
   же, что уже принят в этом стиле для цели нажатия и раскладки подвала. */
@media (max-width:640px){
  .tl-row{grid-template-columns:1fr;gap:8px}
  /* Одного `white-space:normal` мало: в гибкой строке подпись сжималась до 76 px и
     раскладывалась в шесть строк по одному слову — формально «целиком», на деле столбик.
     Разрешаем строке переносить свои части и даём подписи разумный минимум: не помещается
     рядом с заголовком — уходит на свою строку во всю ширину. Тот же приём уже принят
     здесь для `.doc-index-row`. */
  .rowline{flex-wrap:wrap}
  .rowline .rm{white-space:normal;overflow:visible;text-overflow:clip;flex:1 1 150px}
  /* ГЛАВНАЯ ПОДПИСЬ ТОЖЕ ПЕРЕНОСИТСЯ (27.09.2026, цикл 178). Цикл 137 научил переносу приписку
     `.rm`, а название строки `.rt` осталось в одну линию с многоточием: измерено на главном
     экране 390 px — 12 обрезанных главных подписей, «Начисление и выплата роялти за квартал»
     видно 15 px из 265. Задание требует читаемости названия целиком, а не аккуратного обрезка.
     На настольном виде поведение прежнее: правило живёт только в этом медиа-запросе. */
  .rowline .rt{white-space:normal;overflow:visible;text-overflow:clip;flex:1 1 100%}
  /* ЧИСЛО НА КАРТОЧКЕ ОБЯЗАНО ЧИТАТЬСЯ ЦЕЛИКОМ (27.09.2026, цикл 178). Сетка карточек —
     `repeat(auto-fit,minmax(170px,1fr))`, и на 390 px в неё встают ДВЕ колонки по ~170 px, а
     значение «22 000 000» при шрифте 28 px требует 164 px при внутренних 131 — измерено: видно 131
     из 164, то есть у суммы отрезан хвост. На телефоне карточка занимает всю ширину: сумма не
     переносится и не мельчает, а просто помещается. Уменьшать шрифт числа было бы тише, но
     обрезка вернулась бы на следующем разряде. */
  .mg{grid-template-columns:1fr}
  /* ИМЯ ЗАДАЧИ В ДЕРЕВЕ — НА СВОЮ СТРОКУ (27.09.2026, цикл 179). Измерено на 390 px: у
     `.tree-title` с `nowrap` оставалось 121 px из 452 нужных — имя видно на четверть, при нулевом
     выносе страницы. Соседи в гибкой строке (код, значок статуса, сводка «сделано/всего») забирают
     место, а отступ уровня (`padding-left: 14 + level*22`, он в разметке) съедает до сотни пикселей.
     Отступ оставляем — иерархия на телефоне нужна, — но имя больше не делит с ним одну линию.
     Правка общая для всех реестров с деревом WBS: отрисовщик один. */
  .tree-row{flex-wrap:wrap}
  .tree-title{white-space:normal;overflow:visible;text-overflow:clip;flex:1 1 100%}
  /* ОДНОСТРАНИЧНИК: ДВЕ КОЛОНКИ И ПЕРЕНОС НАЗВАНИЯ (27.09.2026, цикл 180). Измерено на 390 px:
     `.op-kpi` держит `repeat(4,1fr)` при любой ширине — четыре карточки с зазорами выносят
     содержимое за край на 103 px; а `.op-rt` с `nowrap` режет названия рисков («Зависимость от
     одного канала поставок» видно 59 px из 245). Обе беды те же, что уже сняты на других экранах,
     но у одностраничника СВОИ классы, и правки корня его не задели. Печать не трогаем: у неё свои
     `@media print`, там четыре колонки уместны. */
  /* ОДНА КОЛОНКА, А НЕ ДВЕ: значение карточки бывает СЛОВОМ («прибыльны»), а одно слово не
     переносится — в двух колонках ему доставалось 110 px при нужных 131, и хвост терялся. Две
     колонки были компромиссом, одна даёт ~350 px и снимает обрезку без мелкого шрифта; ужать
     отступы карточки до 122 px всё равно не хватило бы. */
  .op-kpi{grid-template-columns:minmax(0,1fr)}
  .op-kv{white-space:normal}
  .op-row{flex-wrap:wrap}
  .op-rt{white-space:normal;overflow:visible;text-overflow:clip;flex:1 1 100%}
}

/* ── СКОРОСТЬ И ЦИКЛ (SOS-VELOCITY1) ── */
.vel-list{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.vel-row{display:flex;align-items:center;gap:10px;font-size:12.5px;cursor:pointer;padding:3px 0}
.vel-row:hover .vel-name{color:var(--accent)}
.vel-name{min-width:220px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vel-barwrap{flex:1;max-width:360px;height:16px;background:var(--surface-3);border-radius:var(--os-radius-control);overflow:hidden}
.vel-bar{display:block;height:100%;background:var(--accent);border-radius:var(--os-radius-control)}
.vel-bar.g{background:var(--ok)}
.vel-bar.planned{background:var(--accent-border)}
.vel-val{min-width:56px;text-align:right;font-variant-numeric:tabular-nums;color:var(--text)}
.vel-note{color:var(--muted);margin-top:4px}

/* ── ИМПОРТ CSV (SOS-IMPORT1) ── */
.imp-csv{width:100%;border:1px solid var(--border);border-radius:var(--os-radius-card);padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;resize:vertical;background:var(--surface);color:var(--text);margin-bottom:10px}
.imp-map{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.imp-map-row{display:flex;align-items:center;gap:10px;font-size:12.5px}
.imp-h{min-width:160px;font-family:ui-monospace,monospace;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.imp-arrow{color:var(--muted)}
.imp-sel{flex:1;max-width:320px;padding:5px 10px;border:1px solid var(--border);border-radius:var(--os-radius-control);font-family:inherit;font-size:12.5px;background:var(--surface);color:var(--text)}
.imp-sample{margin-bottom:12px}
.imp-warn{font-size:12.5px;color:#8a6d1a;background:#fef9e7;border:1px solid #f5e6a8;border-radius:var(--os-radius-card);padding:8px 12px;margin-bottom:12px}
.imp-done{font-size:14px;color:#166534;background:#dcfce7;border:1px solid #bbf7d0;border-radius:var(--os-radius-card);padding:10px 14px;margin:12px 0}
/* Правило сведения при повторной заливке. Синее, а не жёлтое как .imp-warn: это устройство
   импорта, а не тревога, — пугать тем, что работает правильно, значит обесценить предупреждения. */
.imp-merge{font-size:12.5px;color:#1e40af;background:#eff6ff;border:1px solid #bfdbfe;border-radius:var(--os-radius-card);padding:8px 12px;margin-bottom:12px}
.imp-merge code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;background:#dbeafe;border-radius:var(--os-radius-control);padding:1px 5px}
/* Исход строки в предпросмотре. Обновление — янтарное: оно ПЕРЕЗАПИШЕТ существующее, и это то,
   чего человек боится; заведение — спокойное серо-зелёное, это обычный ход импорта. */
.imp-out-h{white-space:nowrap}
.imp-out{white-space:nowrap;font-size:12px;font-weight:600}
.imp-out-u{color:#92400e;background:#fef3c7}
.imp-out-c{color:#166534;background:#f0fdf4}

/* ── СПРАВКА (SOS-HELP1) ── */
.help-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px;margin-bottom:16px}
.help-card{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);padding:16px 18px}
.help-h{font-size:14px;font-weight:600;color:var(--text);margin-bottom:8px}
.help-b{font-size:13px;color:var(--text)}
.help-ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;line-height:1.45}
.help-ul li{color:var(--text-3)}
.help-ul b{color:var(--text);font-weight:600}
.help-foot{color:var(--muted)}

/* ── СОРТИРОВКА ТАБЛИЦЫ (SOS-SORT1) ── */
.th-sort{cursor:pointer;user-select:none}
.th-sort:hover{color:var(--accent)}

/* ── КОНФИГ КОЛОНОК (SOS-COLCONFIG1) ── */
.cc-list{display:flex;flex-direction:column;gap:8px;margin:12px 0;max-height:50vh;overflow-y:auto}
.cc-list label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text)}

/* ── УДАЛЕНИЕ ЗАПИСИ (SOS-DELETE1) ── */
.drawer-danger{margin-top:18px;padding-top:14px;border-top:1px solid var(--surface-3)}
.btn.bt-danger{background:#fdecea;color:#b3402f;border:1px solid #f5c6bd}
.btn.bt-danger:hover{background:#fbdbd6}

/* ── КЛИКАБЕЛЬНЫЕ ССЫЛКИ (SOS-LINK1) ── */
.cell-link{color:var(--accent);text-decoration:underline;word-break:break-all}
.cell-link:hover{color:var(--accent-hover)}

/* ── ДУБЛИРОВАНИЕ (SOS-DUP1) ── */
.drawer-actions{margin-top:14px}

/* ── МАССОВЫЕ ОПЕРАЦИИ (SOS-BULK1) ── */
.bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--accent-bg);border:1px solid var(--accent-border);border-radius:var(--os-radius-card);padding:8px 12px;margin-bottom:10px}
.bulk-n{font-size:13px;font-weight:500;color:var(--text)}
.bulk-sel{padding:5px 10px;border:1px solid var(--border);border-radius:var(--os-radius-control);font-family:inherit;font-size:12.5px;background:var(--surface);color:var(--text)}
.bulk-th,.bulk-td{width:34px;text-align:center;padding:6px 4px !important}
.tw tr.row-sel td{background:var(--row-sel)}

/* ── ТАРИФЫ (SOS-BILLING1) ── */
.tier-card{display:flex;flex-direction:column}
.tier-feats{display:flex;flex-direction:column;gap:5px;margin:10px 0;font-size:12.5px}
.tier-f.ok{color:var(--text)}
.tier-f.no{color:var(--muted)}
.tier-cur{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.tier-cta{margin-top:auto;padding-top:8px}

/* SOS-BILLING1c: плашка-замок недоступной по тарифу фичи */
.tier-lock{font-size:12px;border:1px dashed var(--border-3);background:var(--surface-3);color:var(--muted);
  border-radius:var(--os-radius-pill);padding:3px 12px;cursor:pointer;font-family:inherit}
.tier-lock:hover{border-color:var(--accent);color:var(--accent)}

/* ── С ЧЕГО НАЧАТЬ (SOS-GUIDE1) ── */
.guide-hub{background:linear-gradient(180deg,var(--accent-bg),var(--surface));border-color:var(--accent-border)}
.guide-hub-top{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:700}
.guide-hub-ic{font-size:28px;line-height:1}
.guide-hub-d{color:var(--text-2);margin-top:8px;font-size:14px;line-height:1.5;max-width:66ch}
.guide-sats{margin-bottom:8px}
.guide-sat{display:flex;flex-direction:column}
.guide-sat-ic{font-size:22px}
.guide-sat-t{font-weight:600;font-size:15px;margin-top:6px}
.guide-sat-d{color:var(--text-2);font-size:13px;line-height:1.45;margin-top:2px;flex:1}
.guide-cta{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.guide-go{font-size:12.5px;padding:4px 10px;text-decoration:none}
.guide-phase{margin:14px 0}
.guide-ph-h{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:700;margin-bottom:2px}
.guide-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0}
.guide-pn{font-size:11.5px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.05em}
.guide-ph-sub{color:var(--text-2);font-size:13.5px;margin:0 0 10px 21px}
.guide-step{border:1px solid var(--border);border-radius:var(--os-radius-card);background:var(--surface);padding:11px 15px;margin-bottom:8px}
.guide-step-h{display:flex;align-items:center;gap:9px;font-size:14.5px}
.guide-n{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:var(--os-radius-control);background:var(--surface-3);color:var(--text-2);font-size:12px;font-weight:700;flex-shrink:0}
.guide-n.on{background:var(--accent);color:#fff}
.guide-step-b{color:var(--text-2);font-size:13.5px;margin-top:5px;line-height:1.5}
.guide-start{margin-top:20px}

/* ── ЕДИНЫЙ СТАНДАРТ ШАПКИ И ПОДВАЛА ПАНЕЛИ ──────────────────────────────
   Образец: photon.uz/new-design/standard.html. Три зоны: слева путь, по
   центру поиск, справа управление. Ширина слотов постоянной части задана
   жёстко — тогда переключатель проекта, уведомления, оформление и справка
   стоят на ОДНОМ месте во всех продуктах, и рука не ищет их заново. */
/* Колонки шапки. Левая зона зеркалит правую по ширине (--tb-side ставит JS по
   фактическому содержимому правой зоны), поэтому поиск стоит ровно по центру
   шапки, а не по центру остатка. Сам поиск ужимается с 420 до 120: при 1440px
   и рельсе 250px на 420 и симметрию места физически не хватает, и выбор здесь
   в пользу центра — его и обещает стандарт. */
/* Центр без жёсткого минимума: при нехватке места поиск сжимается до иконки,
   но шапка не переполняется и кнопки не вылезают за край. */
/* Правая колонка НЕ уже своего содержимого (--tb-right ставит syncTopbarSides).
   Без этого минимума 1fr сжимался при нехватке места, и кнопки ложились поверх
   поиска: на 1024px «Обновить» наезжала на строку поиска. Левая — не уже 140px,
   иначе путь схлопывался в две строки. */
#topbar{display:grid;grid-template-columns:minmax(max(140px,var(--tb-side,0px)),1fr) minmax(0,420px) minmax(var(--tb-right,0px),1fr);
  align-items:center;gap:10px}
#topbar .tb-l{min-width:0;display:flex;align-items:center}
#topbar .tb-c{display:flex;justify-content:center;min-width:0}
/* Без overflow:hidden. С ним автоминимум колонки равен нулю: правая зона
   получала 351px под 471px содержимого, и «Обновить» просто обрезалась
   слева — в DOM кнопка была, на экране её не было. */
#topbar .tb-r{display:flex;align-items:center;gap:6px;justify-content:flex-end}
.tb-sep{width:1px;height:20px;background:var(--border);flex:0 0 1px;margin:0 2px}
.tb-search{display:flex;align-items:center;gap:7px;width:100%;max-width:420px;cursor:pointer;
  background:var(--card);border:1px solid var(--border);border-radius:var(--os-radius-card);padding:5px 10px;
  color:var(--muted);font:13px inherit;text-align:left}
.tb-search:hover{border-color:var(--muted)}
.tb-search-txt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.tb-search kbd{font-size:10.5px;border:1px solid var(--border);border-radius:var(--os-radius-control);padding:1px 4px;color:var(--muted)}
.tb-ico{width:30px;height:30px;flex:0 0 30px;display:grid;place-items:center;cursor:pointer;
  border:1px solid transparent;background:none;border-radius:var(--os-radius-control);color:var(--muted);font-size:15px}
.tb-ico:hover{background:var(--bg);border-color:var(--border);color:var(--text)}
.slot-space{width:172px;flex:0 0 172px;display:flex;justify-content:flex-end;overflow:hidden}
.slot-space > *{max-width:172px}
.slot-lang{width:74px;flex:0 0 74px;display:flex;justify-content:flex-end;overflow:hidden}
.tb-pop-wrap{position:relative;display:inline-flex}
.tb-pop{position:absolute;top:calc(100% + 6px);right:0;min-width:232px;background:var(--card);
  border:1px solid var(--border);border-radius:var(--os-radius-card);box-shadow:0 10px 30px rgba(15,20,30,.16);padding:5px;z-index:60}
.tb-pop.hidden{display:none}
.tb-pop-h{padding:7px 9px 5px;font-size:10px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.tb-pop button,.tb-pop a{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;background:none;
  color:var(--text);font:13px inherit;padding:6px 9px;border-radius:var(--os-radius-control);cursor:pointer;text-decoration:none}
.tb-pop button:hover,.tb-pop a:hover{background:var(--bg)}
.tb-pop-sep{height:1px;background:var(--border);margin:4px 2px}
/* Подвал панели: настройки, затем аккаунт — всегда последним. */
.sb-footer{display:flex;flex-direction:column;gap:2px;align-items:stretch}
.sb-foot-set{display:flex;align-items:center;gap:8px;padding:5px 14px;cursor:pointer;color:var(--text);font-size:13.5px;border-radius:var(--os-radius-control)}
.sb-foot-set:hover{background:var(--card)}
.sb-who{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:var(--os-radius-control);cursor:pointer}
.sb-who:hover{background:var(--card)}
.sb-who .av{width:24px;height:24px;flex:0 0 24px;border-radius:50%;background:var(--accent);color:#fff;
  display:grid;place-items:center;font-size:11px;font-weight:600}
.sb-who .nm{min-width:0;flex:1;overflow:hidden}
.sb-who .nm b{display:block;font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-who .nm small{display:block;font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-pop{position:absolute;bottom:calc(100% + 6px);left:8px;right:8px;background:var(--card);
  border:1px solid var(--border);border-radius:var(--os-radius-card);box-shadow:0 10px 30px rgba(15,20,30,.16);padding:5px;z-index:60}
.sb-pop.hidden{display:none}
/* ПЛОТНОСТЬ ШАПКИ НА УЗКОМ ЭКРАНЕ. Порядок кнопок не меняется — уступает только
   плотность, в том же порядке, что и в едином модуле оболочки:
   пространство до знака → подпись поиска → сам поиск. Это временная мера в
   собственной копии стандарта: когда новый вид станет основным, копия уходит
   вместе с этими правилами. */
@media (max-width:1120px){
  #topbar{grid-template-columns:minmax(120px,auto) minmax(0,1fr) auto;padding:0 16px}
  #topbar .cs-select,#topbar .cs-single{max-width:104px}
  .slot-space{width:auto;flex-basis:auto;max-width:120px}
  .slot-lang{width:auto;flex-basis:auto}
}
@media (max-width:940px){
  #topbar .tb-search-txt,#topbar .tb-search kbd{display:none}
  #topbar .tb-search{max-width:44px;justify-content:center;padding:5px 8px}
  #topbar .cs-new{display:none}
}
@media (max-width:720px){
  #topbar .bc>span:not(.cur),#topbar .bc-sep{display:none}
  #topbar .btn{padding:5px 8px}
}
/* Телефон: зонам перестаёт хватать места на разделители и широкий переключатель
   проекта. Порядок кнопок и здесь не меняется — только их плотность. */
@media (max-width:560px){
  #topbar{grid-template-columns:minmax(64px,auto) auto minmax(0,1fr);padding:0 10px;gap:6px}
  #topbar .cs-select,#topbar .cs-single{max-width:88px}
  #topbar .tb-sep{display:none}
}
/* Боковая панель на узком экране — иконками, а не половиной экрана: на 430px
   она занимала 210px из 430 и читать было нечего. Ссылки остаются доступны. */
@media (max-width:820px){
  #sidebar{width:56px;min-width:56px}
  #sidebar .lbl,#sidebar .bdg,.nav-lbl,.sb-search-wrap,.sb-who .nm,.sb-foot-set .lbl,#sidebar .ws-name span:not(.ws-emoji){display:none}
  #sidebar .ni,.sb-foot-set{justify-content:center;padding:6px 0;margin:0 4px}
  .sb-who{justify-content:center;padding:6px 0}
  #sidebar-header{padding:12px 0;text-align:center}
  .sb-pop{left:4px;right:auto;min-width:220px}
}

/* Подвал страницы — единый стандарт photon.uz/new-design/standard.html. */
.pfoot{border-top:1px solid var(--border);background:var(--surface);
  display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px;
  padding:10px 24px;font-size:12px;color:var(--muted);flex-shrink:0}
.pfoot .l{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pfoot .c{display:flex;gap:14px;flex-wrap:wrap;justify-content:center}
.pfoot .r{display:flex;gap:8px;align-items:center;justify-content:flex-end;font-variant-numeric:tabular-nums}
.pfoot a{color:var(--muted);text-decoration:none;border-bottom:1px solid transparent}
.pfoot a:hover{color:var(--text);border-bottom-color:var(--border)}
@media (max-width:820px){.pfoot{grid-template-columns:1fr;text-align:center}
  .pfoot .c,.pfoot .r{justify-content:center}}

/* Кнопки шапки не переносятся: в узкой правой зоне «↻ Обновить» ломалась на две
   строки и распирала шапку по высоте. */
#topbar .tb-r .btn,#topbar .tb-r .cs-single{white-space:nowrap}
/* Поиск сжимается по ширине экрана — текст должен усекаться многоточием,
   а не переноситься на вторую строку. */
#topbar .tb-search{white-space:nowrap}
#topbar .tb-search-txt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Хосты единой оболочки (shell-bridge.js): без флага «Новый вид» их нет в раскладке. */
.sh-host{display:none}

/* ── Новый вид: скрыть старую шапку и сайдбар ДО загрузки моста ─────────────
   Класс sh-on ставит скрипт в <head>, а правило жило в стиле, который вставлял
   мост в конце тела: между этими двумя моментами старый вид успевал мелькнуть.
   Мост это правило тоже ставит — оно осталось на случай устаревшего styles.css. */
html.sh-on #sidebar,html.sh-on #topbar{display:none}
html.sh-on .sh-host{display:contents}

/* UX-9 (14.09.2026): цель нажатия на телефоне. Палец крупнее курсора, и общепринятый
   минимум касания — 24px. Замер показал чипы фильтров 21px в высоту, а треугольник
   раскрытия дерева 14×18 — по такому на телефоне просто не попасть.
   Размер меняем ТОЛЬКО для касания и узкого экрана: на большом экране с мышью 21px
   достаточно, и перекраивать там вид ради телефона было бы лишним. */
@media (max-width: 640px), (pointer: coarse) {
  .chip { padding: 7px 12px; min-height: 30px; }
  .tree-tgl { width: 30px; min-height: 30px; font-size: 14px; }
  .vt { min-height: 30px; }   /* вкладки видов: были 23px — ровно на один пиксель мимо */
}

/* UX2-8 (15.09.2026): чип фильтра в СВЕТЛОЙ теме давал 4,41:1 при норме 4,5 — на волосок
   ниже, и потому незаметно: глазом такое не поймать, только замером. Пара виновата
   конкретная: --text-2 (#706f6c) на --surface-3 (#f1f0ef). В остальных местах --text-2
   лежит на более светлом фоне и проходит, поэтому правим ЧИП, а не общий токен.
   #6b6a67 даёт 4,75 — с запасом и визуально почти неотличим от прежнего.
   Тёмная тема замером чиста, её не трогаем.
   Та же пара подводит ещё в двух местах на том же сером фоне: вкладки видов (.vt) и
   значок простоя (.tl-flag.idle, 4,48). Перечисляем их рядом — правило одно, поверхности
   разные. */
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) .chip:not(.on),
  :root:not([data-theme="dark"]) .vt:not(.on),
  :root:not([data-theme="dark"]) .tl-flag.idle { color: #6b6a67; }
}
:root[data-theme="light"] .chip:not(.on),
:root[data-theme="light"] .vt:not(.on),
:root[data-theme="light"] .tl-flag.idle { color: #6b6a67; }

/* ── Карта процессов (21.09.2026) ────────────────────────────────────────────
   Стадии в ряд, переходы списком под рядом. Ряд прокручивается вбок сам: у потока
   бывает пять-шесть стадий, и на телефоне они не обязаны влезать — но и резать
   их нельзя, иначе конец хода не виден вовсе. */
.fl-row{display:flex;align-items:stretch;gap:8px;overflow-x:auto;padding:2px 0 6px}
.fl-stage{flex:0 0 auto;min-width:132px;max-width:190px;border:1px solid var(--border);border-radius:var(--os-radius-card);
  background:var(--surface);padding:10px 12px}
.fl-go{cursor:pointer}
.fl-go:hover{border-color:var(--text);background:var(--surface-2)}
.fl-st-lbl{font-size:12.5px;font-weight:600;color:var(--text);line-height:1.3}
.fl-st-num{font-size:20px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;margin-top:2px}
.fl-st-reg{font-size:11px;color:var(--muted);margin-top:1px}
.fl-arr{flex:0 0 auto;align-self:center;color:var(--muted);font-size:14px}
.fl-edges{font-size:11.5px;color:var(--muted);margin-top:8px;line-height:1.7}
.fl-edge{display:inline-block;border:1px solid var(--border);border-radius:var(--os-radius-control);padding:1px 7px;margin:0 6px 4px 0;white-space:nowrap}
.fl-empty{font-size:12px;color:var(--muted);margin-top:8px}
.fl-flow{margin-bottom:14px}

/* Правило поля — границы, объявленные паком и проверяемые движком. Стоит под подсказкой:
   подсказка говорит, ЧТО писать, правило — в каких пределах. Тон спокойнее подсказки: это
   не объяснение, а рамка. */
.ff-rule{color:var(--text-faint);font-size:11px;line-height:1.4;margin-top:2px}

/* Подсказка колонки (21.09): знак вопроса в шапке таблицы и своя всплывашка.
   Системный `title` тут не годится — приходит с задержкой и не читается с клавиатуры. */
.th-help{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;
  margin-left:6px;border-radius:50%;border:1px solid var(--line,#d8dbe2);color:var(--muted,#6b7280);
  font-size:10px;line-height:1;cursor:help;vertical-align:middle;background:var(--bg,#fff)}
.th-help:hover,.th-help:focus{border-color:var(--accent,#6d28d9);color:var(--accent,#6d28d9);outline:none}
#th-tip{position:absolute;display:none;z-index:9000;max-width:360px;padding:8px 10px;border-radius:var(--os-radius-card);
  background:var(--panel,#fff);border:1px solid var(--line,#d8dbe2);box-shadow:0 6px 24px rgba(0,0,0,.12);
  color:var(--text,#111827);font-size:11.5px;line-height:1.45;white-space:pre-wrap}

/* ВЫРАЖЕНИЕ ВЫЧИСЛЯЕМОЙ ГРАФЫ (21.09). Моноширинно и приглушённо: это не текст для чтения
   подряд, а ссылка на действие — глаз находит её, когда нужно, и не спотыкается иначе. */
.fld-formula, .ff-formula { margin-top: 2px; font-size: 12px; color: var(--muted); }
.fld-formula code, .ff-formula code {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px; background: var(--chip-bg, rgba(127,127,127,.12));
  padding: 1px 5px; border-radius:var(--os-radius-control); color: var(--fg);
}

/* ССЫЛКА НА ДЕЛО В СОСЕДНЕМ ПРОДУКТЕ. Графа объявляет `options.opens`, и рядом со значением
   появляется стрелка. Само значение оставлено видимым (в середине сокращено): по нему
   сверяются, когда переход отказал, — и по нему же ищут руками, если продукт недоступен. */
.opens-cell { white-space: nowrap; }
.opens-cell .opens-go { margin-left: 4px; text-decoration: none; font-weight: 600; }
.opens-cell .opens-go:hover { text-decoration: underline; }

/* Блок подключения нового проекта: что сделано, что идёт и что сделать человеку. Стоит до
   «С чего начать», потому что отвечает на более ранний вопрос — готов ли проект вообще. */
.conn-box { border: 1px solid var(--line, #e5e7eb); border-radius:var(--os-radius-card); padding: 12px 14px; margin: 12px 0; background: #fbfaff; }
.conn-head { font-weight: 600; margin-bottom: 8px; }
.conn-row { display: flex; align-items: center; gap: 8px; padding: 3px 0; font-size: 13px; }
.conn-mark { width: 14px; text-align: center; color: #6d28d9; }
.conn-txt { flex: 1; }
/* Состояние шага подключения видно ЗНАКОМ И ЦВЕТОМ: «не видно отсюда» не должно читаться как
   «идёт», а провалившийся шаг — теряться среди готовых (F05 часть 2, 24.09.2026). */
.conn-row.cs-ok .conn-mark { color: #15803d; }
.conn-row.cs-err .conn-mark { color: #b45309; }
.conn-row.cs-need .conn-mark { color: #6d28d9; }
.conn-row.cs-blind .conn-mark { color: #6b7280; }
.conn-row.cs-blind .conn-txt { color: #6b7280; }
.conn-err { margin-top: 6px; font-size: 12px; color: #b91c1c; }
/* Строка исполнения автоматизации: плотнее обычной, её бывает шесть подряд. */
.ex-row { padding: 2px 0; }
/* Частота случая в строке исполнения: главное число такой строки. */
.ex-n { color: #6b7280; font-variant-numeric: tabular-nums; }

/* Documents and Legal cases share discovery, not file ownership. */
.doc-index-filters{display:flex;gap:12px;flex-wrap:wrap;align-items:end;margin:16px 0}
.doc-index-filters label{display:flex;flex-direction:column;gap:5px;flex:1 1 180px;min-width:0;font-size:12px}
.doc-index-filters .cs-select{width:100%;min-width:0;max-width:100%}
.doc-index-help{font-size:13px;color:var(--muted);max-width:85ch;margin:12px 0 18px}
.doc-index-list{padding:0}.doc-index-row{display:flex;gap:20px;align-items:center;justify-content:space-between;padding:18px;border-bottom:1px solid var(--line,#e5e7eb)}
.doc-index-row:last-child{border-bottom:0}.doc-index-main{min-width:0;flex:1}.doc-index-main h3{font-size:15px;line-height:1.45;margin:5px 0;overflow-wrap:anywhere}
.doc-index-meta{display:flex;gap:9px;flex-wrap:wrap;align-items:center;font-size:12px;margin:8px 0}
.doc-index-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end;max-width:42%}.doc-index-actions .btn{white-space:normal;text-align:center;overflow-wrap:anywhere}
@media(max-width:640px){.doc-index-row{align-items:stretch;flex-direction:column;gap:12px;padding:14px}.doc-index-actions{justify-content:flex-start;max-width:100%}.doc-index-filters label{flex-basis:100%}}

/* ── Паспорт нового проекта (пакет P1, 28.09.2026) ─────────────────────────────
   Своё окно, потому что обязательных полей три, а `prompt` умеет одно. Стили
   держатся на тех же переменных, что и остальной борд: отдельной темы у окна нет. */
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.42);display:flex;align-items:center;
  justify-content:center;z-index:60;padding:16px}
.np-box{background:var(--card,#fff);color:var(--fg,#111);border-radius:var(--os-radius-panel);padding:20px;
  width:min(440px,100%);box-shadow:0 18px 48px rgba(0,0,0,.28);box-sizing:border-box}
.np-h{font-size:18px;font-weight:600;margin-bottom:6px}
.np-sub{font-size:13px;color:var(--muted,#667);margin-bottom:14px;line-height:1.45}
.np-l{display:block;font-size:12px;color:var(--muted,#667);margin-bottom:12px}
.np-l .inp{display:block;width:100%;margin-top:4px;padding:8px 10px;font:inherit;font-size:14px;
  color:var(--fg,#111);background:var(--bg,#fff);border:1px solid var(--line,#d8dbe0);
  border-radius:var(--os-radius-card);box-sizing:border-box;min-height:38px}
.np-l .inp:focus{outline:2px solid var(--accent,#2f6feb);outline-offset:1px}
.np-why{font-size:12px;color:var(--muted,#667);margin:2px 0 14px;min-height:16px}
.np-btns{display:flex;gap:8px;justify-content:flex-end}
.np-btns .btn{min-height:34px;padding:7px 14px;background:var(--bg2,#eef0f3);color:var(--fg,#111)}
.np-btns .btn.pri{background:var(--accent,#2f6feb);color:#fff}
.np-btns .btn[disabled]{opacity:.5;cursor:not-allowed}
@media(max-width:640px){.np-box{padding:16px}.np-btns{flex-direction:column-reverse}
  .np-btns .btn{width:100%;justify-content:center}}

/* ── ЛЕНТА АКТИВНОСТИ: ФИЛЬТРЫ СВЁРНУТЫ (OS-ACTIVITY-M, 29.09.2026) ──
   Замер на 390 px: 43 фишки занимали 678 px, и первая запись ленты начиналась
   на 1025-й точке при экране 844 — ни одного изменения на первом экране.
   Строка управления держит поиск и переключатель в один ряд и переносится,
   а не выдавливает поиск за край. */
.act-filter{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 10px}
.act-chips-q{flex:1 1 180px;min-width:0;padding:6px 10px;border:1px solid var(--line,#d3d3d6);background:var(--surface,#fff);font-size:13px}
.act-chips-toggle{white-space:nowrap}
.act-chips-none{margin:2px 0 0}
/* Атрибут hidden СЛАБЕЕ правила display у класса: `.chips{display:flex}` его перебивает, и
   свёрнутая полоса оставалась на экране во всю высоту (замер: скрыта по атрибуту, а первая
   запись всё равно на 1063-й точке). Поэтому скрытие объявлено явно и рядом с самим классом. */
.chips[hidden]{display:none !important}

/* ── РЕЕСТР НА ТЕЛЕФОНЕ: СТРОКА ТАБЛИЦЫ КАК КАРТОЧКА (OS-REG-TASKS-M, 29.09.2026) ──
   Замер на 390 px: колонка названия 145 px — около 25 знаков, и таблица едет
   вбок своим коробом. Карточка показывает ПОЛНОЕ название и подписанные поля;
   данные и порядок те же, что в таблице, — раскладку меняет только это правило.
   Пустые ячейки не показываются: подпись без значения — шум, из-за которого
   перестают читать и непустые. */
@media (max-width: 560px) {
  .tw { overflow-x: visible; }
  .tw table, .tw thead, .tw tbody, .tw tr, .tw td { display: block; width: auto; }
  .tw thead { position: absolute; left: -10000px; }
  .tw tr {
    border: 1px solid var(--line, #d9d9de); border-radius:var(--os-radius-card);
    padding: 10px 12px; margin: 0 0 8px; background: var(--surface, #fff);
  }
  .tw td { border: 0; padding: 2px 0; display: flex; gap: 8px; align-items: baseline; }
  .tw td::before {
    content: attr(data-label); flex: 0 0 38%; max-width: 38%;
    font-size: 11px; opacity: .7; overflow-wrap: break-word;
  }
  /* Первая графа — название: во всю ширину, крупнее и без подписи. */
  .tw td:first-child::before, .tw td.bulk-td::before { content: none; }
  .tw td:first-child { display: block; font-weight: 600; font-size: 14px; margin-bottom: 4px; }
  .tw td:empty { display: none; }
}

/* Метка заготовки в строке реестра (OS-REG-TASKS-01, 29.09.2026): библиотека
   плана и текущая работа выглядели одинаково. Приглушена намеренно — она
   поясняет, а не требует внимания. */
.zagot-tag{font-size:11px;padding:1px 6px;border-radius:var(--os-radius-card);border:1px solid var(--line,#d9d9de);opacity:.72;white-space:nowrap}
.uch-tag{font-size:11px;padding:1px 6px;border-radius:var(--os-radius-card);border:1px dashed var(--line,#d9d9de);opacity:.8;white-space:nowrap}

/* Карточка текущего гейта (OS-REG-GATE-PASSPORT-01/-M, 29.09.2026): строки
   переносятся, а не выдавливают кнопку за край — на 390 px это единственный
   способ оставить «Открыть» на экране. */
.gate-now .gate-line{display:flex;flex-wrap:wrap;gap:6px;align-items:baseline;margin:4px 0}
.gate-now .gate-block{color:var(--danger,#b3261e)}

/* Назначение раздела на карточке записи: короткая проза сверху, не предупреждение.
   29.09.2026, OS-REG-PROCESS-DEPLOYMENTS-01. */
.rec-about{font-size:12px;line-height:1.45;opacity:.72;margin:0 0 10px;padding:8px 10px;border:1px solid var(--line,#2a3446);border-radius:var(--os-radius-card)}

/* Сверка показателя: из каких строк получено число. Одна и та же на главной, одностраничнике и
   экране «Финансы». 29.09.2026, независимый аудит, раздел «одна семантика цифр и статусов».
   Основа — ВИДИМЫЙ текст, а не подсказка title: на телефоне подсказки нет. */
.sverka{margin:10px 0 18px}
.sv-osnova{font-size:12px;line-height:1.45;color:var(--muted);margin-bottom:6px}
.sv-d>summary{font-size:12px;cursor:pointer;color:var(--text-2);padding:4px 0;user-select:none}
.sv-rows{border:1px solid var(--border);border-radius:var(--os-radius-card);overflow:hidden;margin:6px 0}
.sv-row{display:flex;gap:8px;align-items:baseline;padding:7px 10px;font-size:12px;cursor:pointer;border-top:1px solid var(--border)}
.sv-row:first-child{border-top:0}
.sv-row:hover{background:var(--hover,rgba(127,127,127,.08))}
.sv-p{font-weight:600;min-width:64px;overflow-wrap:anywhere}
.sv-c{color:var(--muted);flex:1}
.sv-n{font-variant-numeric:tabular-nums;font-weight:600}
.sv-minus{color:var(--danger,#b3261e)}
.sv-itog{font-size:12px;margin:6px 0}
.sv-go{margin-top:6px}
/* Какие строки таблицы «Финансы» вошли в окно расчёта. */
.fin-win td:first-child{font-weight:600}
.fin-wm{font-size:10px;padding:1px 5px;border-radius:var(--os-radius-control);border:1px solid var(--border);color:var(--muted);white-space:nowrap}

/* Состав созданного развёрткой: вид объекта, имя, номер и дверь. 29.09.2026. */
.sozd{margin:10px 0 4px;padding:8px 10px;border:1px solid var(--line,#2a3446);border-radius:var(--os-radius-card)}
.sozd-grp{font-size:12px;margin:4px 0 2px;opacity:.8}
.sozd-row{display:flex;gap:8px;align-items:center;font-size:12px;padding:3px 0;flex-wrap:wrap}
.sozd-kind{min-width:120px;opacity:.75}
.sozd-name{flex:1}
.sozd-id{font-variant-numeric:tabular-nums;opacity:.6}
.ctx-tag{font-size:11px;padding:1px 6px;border-radius:var(--os-radius-card);background:var(--bg2,#f1f1f4);color:var(--muted,#6b6b76);white-space:nowrap}
.tl-est{font-size:11.5px;opacity:.85;margin-top:2px}
.scope-tag{font-size:11px;padding:1px 7px;border-radius:var(--os-radius-card);background:var(--bg2,#f1f1f4);color:var(--muted,#6b6b76);white-space:nowrap;font-weight:400}
.scope-tag.scope-id{border:1px solid var(--line,#d9d9de)}
/* Отчёты: на телефоне — селектор, на широком — чипы (29.09.2026, OS-REPORTS-M). */
.rep-select-m{display:none;margin:6px 0}
.rep-select-m select{width:100%}
@media (max-width:680px){.rep-select-m{display:block}.rep-chips-d{display:none}}
/* Карта на телефоне: этапы дела списком, граф — по раскрытию (29.09.2026, OS-MAP-M). */
.rowline-col{display:block}
.map-steps{margin-top:4px}
.map-steps>summary{cursor:pointer;padding:2px 0}
details.fl-flow>summary{cursor:pointer;list-style:none}
details.fl-flow>summary::-webkit-details-marker{display:none}
.doc-filters-wrap>summary{cursor:pointer;list-style:none;padding:6px 0}
.doc-filters-wrap>summary::-webkit-details-marker{display:none}
/* Карточка требования-артефакта на телефоне (29.09.2026, OS-REG-ARTIFACTS-M). */
.art-cards{display:flex;flex-direction:column;gap:8px}
.art-card{border:1px solid var(--line,#e5e7eb);border-radius:var(--os-radius-card);padding:10px 12px;cursor:pointer}
.art-name{font-weight:600;line-height:1.35;overflow-wrap:anywhere;margin-bottom:4px}
.art-facts{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:12.5px;margin-bottom:2px}
.help-anchors{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}

/* Владелец и срок второй строкой (30.09.2026, решение владельца №8). Строка дерева — flex, и
   вторая строка обязана занять ВСЮ ширину: иначе она встаёт четвёртой колонкой и уезжает вбок
   на 390 px. Пустое названо словами и приглушено — это не ошибка, а факт. */
.tree-row{flex-wrap:wrap}
.tree-sub{flex:0 0 100%;margin-top:2px;font-size:12px;line-height:1.4;color:var(--mut,#6b7280)}
.tree-none{opacity:.8}

/* ── Сколько строк за итогом (01.10.2026, раздел 4 аудита, п. 6) ──
   «19/135» стоит рядом с итогом и не должно с ним сливаться: итог — ответ, это — его основание.
   Тем же приглушённым тоном, что подписи плиток, и без переноса. */
.tot-n{font-size:11px;color:var(--muted);font-weight:400;white-space:nowrap}
