/* «Обзор» — утренний экран (deploy105, 10.10.2026). Те же токены, что у «Опционов» и «Арбитража». */
.ov-page { flex: 1; min-height: 0; overflow-y: auto; background: var(--bg); }
.ov-wrap { width: 100%; padding: 12px 14px 40px; display: grid; gap: 10px; }
.ov-head { display: grid; gap: 4px; }
.ov-title-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ov-title { font-size: 20px; font-weight: 700; margin: 0 6px 0 0; }
.ov-day { color: var(--text-muted); font-size: 13px; }
.ov-sp { flex: 1; }
.ov-sub { color: var(--text-muted); font-size: 12px; overflow-wrap: anywhere; }
.ov-sub b { color: var(--text); font-weight: 600; }
.ov-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md, 10px); padding: 10px 12px; display: grid; gap: 6px; min-width: 0; }
.ov-h { font-size: 14px; font-weight: 700; margin: 0; }
.ov-muted { color: var(--text-muted); font-size: 12px; }
.ov-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; font-size: 13px; }
.ov-list li { overflow-wrap: anywhere; }
.ov-d { color: var(--text-muted); font-variant-numeric: tabular-nums; margin-right: 4px; }
.ov-grid { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.ov-asset { font-size: 13px; align-content: start; }
.ov-a-h { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.ov-a-h b { font-size: 15px; }
.ov-a-h .ov-muted { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-px { font-weight: 700; font-variant-numeric: tabular-nums; }
.ov-at { color: var(--accent, #2962ff); font-weight: 600; }
.ov-lv { display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap; }
.ov-lv > span:first-child { color: var(--text-muted); min-width: 104px; }
.ov-lv b { font-variant-numeric: tabular-nums; }
.ov-sig { overflow-wrap: anywhere; }
.ov-acts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 2px; }
.ov-btn { border: 1px solid var(--border); background: transparent; color: var(--accent, #2962ff); border-radius: 8px;
    padding: 4px 10px; font: inherit; font-size: 12px; cursor: pointer; min-height: 30px; }
.ov-btn:hover { background: var(--surface-2); }
.ov-btn-main { background: var(--accent, #2962ff); color: #fff; border-color: transparent; }
.ov-btn-main:hover { background: var(--accent, #2962ff); filter: brightness(1.08); }
.ov-btn-s { min-height: 24px; padding: 1px 8px; font-size: 11px; margin-left: 4px; }
.ov-link { border: 0; background: none; padding: 0; color: var(--accent, #2962ff); font: inherit; cursor: pointer; text-align: left; }
.ov-more { display: grid; gap: 10px; }
.ov-more > summary { cursor: pointer; color: var(--text-muted); font-size: 13px; padding: 4px 0; }
.ov-more[open] > summary { margin-bottom: 10px; }
.ov-more > section + section { margin-top: 10px; }
.ov-scroll { overflow-x: auto; }
.ov-table { border-collapse: collapse; width: 100%; font-size: 12px; font-variant-numeric: tabular-nums; }
.ov-table th, .ov-table td { padding: 4px 8px; border-bottom: 1px solid var(--border); text-align: right; white-space: nowrap; }
.ov-table th:first-child, .ov-table td:first-child { text-align: left; }
.ov-table th { color: var(--text-muted); font-weight: 500; }
.ov-cls { display: inline-block; min-width: 18px; text-align: center; border-radius: 4px; font-size: 11px; font-weight: 700; padding: 0 4px; }
.ov-cls-A { background: rgba(16, 185, 129, .18); color: var(--text); }
.ov-cls-B { background: rgba(59, 130, 246, .18); color: var(--text); }
.ov-set { font-size: 13px; }
.ov-set-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ov-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ov-chip { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--border); border-radius: 999px; padding: 2px 4px 2px 10px; font-size: 12px; }
.ov-chip button { border: 0; background: none; color: var(--text-muted); cursor: pointer; font-size: 12px; padding: 2px 6px; }
.ov-in { background: var(--surface-2); border: 1px solid var(--border); color: var(--text); border-radius: 6px; padding: 5px 8px; font: inherit; font-size: 13px; min-width: 0; }
.ov-time { width: 72px; text-align: center; font-variant-numeric: tabular-nums; }
.ov-radio { display: block; color: var(--text); line-height: 2; }
.ov-radio > input[type=radio], .ov-radio > input[type=checkbox] { margin: 0 6px 0 0; vertical-align: middle; }
.ov-disc { border-top: 1px dashed var(--border); padding-top: 6px; }
@media (max-width: 860px) {
    .ov-wrap { padding: 10px 10px 90px; }
    .ov-grid { grid-template-columns: minmax(0, 1fr); }
    /* Кнопки шапки — отдельной строкой под заголовком, а не по одной */
    .ov-sp { flex-basis: 100%; height: 0; }
    .ov-btn { min-height: 40px; }
    .ov-btn-s { min-height: 32px; }
    .ov-lv > span:first-child { min-width: 96px; }
}

/* deploy105b: изменение цены за день */
.ov-chg { font-size: 12px; font-variant-numeric: tabular-nums; margin: 2px 0 4px; }
.ov-chg .ov-up { color: #26a69a; font-weight: 600; }
.ov-chg .ov-dn { color: #ef5350; font-weight: 600; }
.ov-chg { display: flex; flex-wrap: wrap; column-gap: 10px; }
.ov-chg-p { white-space: nowrap; }

/* deploy107d-1 (11.10.2026): вкладки «Найденные · Мой список» и карточки ситуаций */
.ov-tabs { display: flex; gap: 4px; margin: 6px 0 2px; border-bottom: 1px solid var(--border, #2a2f3a); }
.ov-tab { background: none; border: 0; border-bottom: 2px solid transparent; color: var(--text-muted); padding: 6px 10px; font: inherit; cursor: pointer; }
.ov-tab.is-on { color: var(--text); border-bottom-color: var(--accent, #3b82f6); font-weight: 600; }
.ov-sit-bar { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 8px 0; }
.ov-chipbtn { border: 1px solid var(--border, #2a2f3a); background: none; color: var(--text); border-radius: 999px; padding: 3px 10px; font: inherit; font-size: 12px; cursor: pointer; }
.ov-chipbtn.is-on { background: var(--accent, #3b82f6); border-color: var(--accent, #3b82f6); color: #fff; }
.ov-sit-meta { margin-bottom: 8px; font-size: 12px; }
.ov-sit { display: flex; flex-direction: column; gap: 4px; font-size: 13px; }
.ov-sit-h { display: flex; gap: 8px; align-items: baseline; }
.ov-sit-st { font-size: 11px; padding: 1px 6px; border-radius: 4px; background: var(--surface-2, rgba(127,127,127,.15)); }
.ov-st-in_zone, .ov-st-near { background: rgba(59,130,246,.18); }
.ov-st-bounce, .ov-st-break { background: rgba(234,179,8,.2); }
.ov-sit-plan { font-size: 12px; }
.ov-sit-q { font-size: 12px; color: var(--warn, #d97706); }
.ov-sit-hist { margin: 4px 0 0 18px; padding: 0; font-size: 12px; display: flex; flex-direction: column; gap: 2px; }
.ov-sit-sel { display: inline-flex; align-items: center; gap: 6px; }
.ov-sit-sel select { width: auto; min-width: 0; height: auto; padding: 3px 6px; font-size: 12px; }
/* deploy107d-2 (11.10.2026): оценка контекста, разбор, фильтры */
.ov-sit-sels { margin-top: 0; }
.ov-sit-score { font-size: 13px; }
.ov-sit-sc.is-part { color: var(--text-muted); }
.ov-sit-ag { font-size: 12px; color: var(--text-muted); }
.ov-sit-why { border-top: 1px solid var(--border, #2a2f3a); padding-top: 6px; font-size: 12px; display: flex; flex-direction: column; gap: 4px; }
.ov-sit-why-h { font-weight: 600; }
.ov-sit-tb { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.ov-sit-tb b { font-variant-numeric: tabular-nums; }
.ov-sit-sels select { min-width: 72px; }
@media (max-width: 600px) {
  .ov-sit-sels { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 8px; }
  .ov-sit-sels .ov-sit-sel { flex-direction: column; align-items: stretch; gap: 2px; }
  .ov-sit-sels select { width: 100%; min-height: 36px; height: 36px; padding: 4px 6px; font-size: 13px; }
  .ov-sit-sels .ov-sit-sel:has(input) { grid-column: 1 / -1; flex-direction: row; align-items: center; }
}
/* deploy107e (11.10.2026): страница ситуации */
/* Страница ситуации. 11.10.2026: класс «ov-sp» совпал с распоркой шапки, у которой на телефоне
   height: 0, — страница схлопывалась по высоте; сбрасываем это явно */
.ov-sp.ov-spage { display: flex; flex-direction: column; gap: 10px; flex: none; height: auto; flex-basis: auto; }
.ov-sp-top { display: flex; gap: 8px; }
.ov-sp-tk { font-size: 18px; }
.ov-sp-grid { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 10px; align-items: start; }
.ov-sp-chartc { grid-row: span 2; }
.ov-sp-svg { width: 100%; height: auto; display: block; }
.ov-sp-zone { fill: rgba(33, 150, 243, .16); stroke: rgba(33, 150, 243, .5); stroke-width: 1; }
.ov-sp-w { stroke: var(--text-muted, #8a93a6); stroke-width: 1; }
.ov-sp-up { fill: #26a69a; }
.ov-sp-dn { fill: #ef5350; }
.ov-sp-l { stroke-width: 1.2; stroke-dasharray: 5 4; }
.ov-sp-l.ov-sp-tg { stroke: #26a69a; }
.ov-sp-l.ov-sp-st { stroke: #ef5350; }
.ov-sp-l.ov-sp-gx { stroke: #ab47bc; stroke-dasharray: 2 3; }
.ov-sp-t { font-size: 10px; fill: var(--text-muted, #8a93a6); }
.ov-sp-t.ov-sp-tg { fill: #26a69a; }
.ov-sp-t.ov-sp-st { fill: #ef5350; }
.ov-sp-t.ov-sp-gx { fill: #ab47bc; }
.ov-sp-t.ov-sp-px { fill: currentColor; font-weight: 600; }
.ov-sp-ev { fill: #ffb300; stroke: #fff; stroke-width: 1; }
.ov-sp-leg { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: center; font-size: 12px; }
.ov-sp-k { display: inline-block; width: 14px; height: 8px; margin-right: 3px; vertical-align: middle; }
.ov-sp-kz { background: rgba(33, 150, 243, .3); }
.ov-sp-ktg { border-top: 2px dashed #26a69a; height: 0; }
.ov-sp-kst { border-top: 2px dashed #ef5350; height: 0; }
.ov-sp-kgx { border-top: 2px dotted #ab47bc; height: 0; }
.ov-sp-kev { background: #ffb300; border-radius: 50%; width: 8px; }
.ov-sp-tf .ov-up { color: #26a69a; font-weight: 600; }
.ov-sp-tf .ov-dn { color: #ef5350; font-weight: 600; }
@media (max-width: 900px) { .ov-sp-grid { grid-template-columns: 1fr; } .ov-sp-chartc { grid-row: auto; } }
.ov-sp-t.ov-sp-zn { fill: #2196f3; }
.ov-sp-t.ov-sp-old { fill: #ef5350; font-weight: 600; }

/* 107f (11.10.2026): «Следить» — кнопка и панель выбора событий */
.ov-btn-w{border-color:var(--color-primary,#01696f);color:var(--color-primary,#01696f)}
.ov-w{margin-top:8px;padding:10px;border:1px solid var(--color-border,#d4d1ca);border-radius:8px;background:var(--color-surface-2,rgba(0,0,0,.02))}
.ov-w-t{font-weight:600;margin-bottom:6px}
.ov-w-evs{display:flex;flex-wrap:wrap;gap:6px 14px;margin-bottom:6px}
.ov-w-ev{display:inline-flex;align-items:center;gap:6px;min-height:32px;cursor:pointer}
/* 122 (17.10.2026): порог Net Edge в окне «Следить» */
.ov-w-thr{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:2px 0 8px}
.ov-w-thr[hidden]{display:none}
.ov-w-thr input{width:90px}
.ov-w-thr small{flex-basis:100%;font-size:12px}
/* 123: пояснение к опционным событиям в окне «Следить» */
.ov-w-opt{display:block;font-size:12px;margin:0 0 8px}
.ov-w-opt[hidden]{display:none}
.ov-w-n{font-size:12px;margin:4px 0}
.ov-w-msg{font-size:13px;margin-top:6px;color:var(--color-primary,#01696f)}
.ov-w-was{font-size:12px;align-self:center}
@media (max-width:600px){.ov-w-evs{flex-direction:column;gap:2px}}
/* 107f: метка «Ситуации» в ленте центра оповещений (overview.css подключён на всех страницах) */
.cz-tag-sit { background: rgba(1, 105, 111, .1); color: #01696f; }
/* 107f: текст события ситуации — несколько строк (что случилось, зона, план) */
.cz-ev-t { white-space: pre-line; }

/* ===== 109 (11.10.2026): оформление по макетам — карточки, плитки, график =====
   Почему: карточка «Найденных» была сплошным текстом; плашки и мини-график
   показывают, где цена относительно зоны, без чтения. Цвета — через переменные
   темы, работают в светлой и тёмной. */
.ov-s2 { --s2-up: #26a69a; --s2-dn: #ef5350; --s2-sup: 38, 166, 154; --s2-res: 239, 83, 80; gap: 8px; }
.ov-s2-grid { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
.ov-s2-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ov-s2-tk { font-size: 16px; letter-spacing: .01em; }
.ov-s2-no { margin-left: auto; font-size: 11px; color: var(--text-muted); white-space: nowrap; }
.ov-s2 .ov-sit-st { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; padding: 2px 8px; border-radius: 999px; font-weight: 600; }
.ov-s2-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; display: inline-block; }
.ov-st-wait { color: var(--text-muted); }
.ov-st-near { color: #3b82f6; }
.ov-st-in_zone { color: #f59e0b; background: rgba(245, 158, 11, .14); }
.ov-st-bounce, .ov-st-break { color: #d97706; }
.ov-st-target { color: var(--s2-up, #26a69a); }
.ov-st-stop { color: var(--s2-dn, #ef5350); }
.ov-s2-kv { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: 6px; }
.ov-s2-box { background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 5px 8px; display: flex; flex-direction: column; min-width: 0; }
.ov-s2-box b { font-size: 15px; font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ov-s2-sup { border-left: 3px solid rgb(var(--s2-sup)); }
.ov-s2-res { border-left: 3px solid rgb(var(--s2-res)); }
.ov-s2-lbl { font-size: 11px; color: var(--text-muted); text-transform: none; }
.ov-s2-m { font-size: 11px; color: var(--text-muted); }
.ov-s2-chg { font-size: 11px; font-weight: 600; min-height: 14px; }
.ov-s2 .ov-up, .ov-sp-tip .ov-up { color: var(--s2-up, #26a69a); }
.ov-s2 .ov-dn, .ov-sp-tip .ov-dn { color: var(--s2-dn, #ef5350); }
.ov-s2-spark { height: 46px; border-radius: 6px; overflow: hidden; background: linear-gradient(180deg, transparent, var(--surface-2)); }
.ov-s2-svg { width: 100%; height: 46px; display: block; }
.ov-s2-svg.is-up { color: var(--s2-up); }
.ov-s2-svg.is-dn { color: var(--s2-dn); }
.ov-s2-zb-sup { fill: rgba(var(--s2-sup), .16); }
.ov-s2-zb-res { fill: rgba(var(--s2-res), .16); }
.ov-s2-nospark { font-size: 11px; color: var(--text-muted); padding: 14px 8px; }
.ov-s2-tf { display: flex; flex-wrap: wrap; gap: 4px; }
.ov-s2-tfc { font-size: 11px; padding: 1px 7px; border-radius: 6px; border: 1px solid var(--border); color: var(--text-muted); font-variant-numeric: tabular-nums; }
.ov-s2-tfc i { font-style: normal; font-weight: 700; }
.ov-s2-tfc.is-z { border-color: var(--accent, #3b82f6); color: var(--text); background: rgba(59, 130, 246, .1); }
.ov-s2-tfc.ov-up i { color: var(--s2-up); }
.ov-s2-tfc.ov-dn i { color: var(--s2-dn); }
.ov-s2-meta { font-size: 11px; color: var(--text-muted); }
.ov-s2-sc { display: flex; gap: 10px; align-items: center; border-top: 1px solid var(--border); padding-top: 8px; }
.ov-s2-rings { display: flex; gap: 8px; flex: none; }
.ov-s2-ring { position: relative; width: 44px; height: 54px; display: flex; flex-direction: column; align-items: center; }
.ov-s2-ring svg { width: 40px; height: 40px; }
.ov-s2-ring b { position: absolute; top: 0; left: 0; right: 0; height: 40px; display: flex; align-items: center; justify-content: center; font-size: 13px; font-variant-numeric: tabular-nums; }
.ov-s2-ring span { font-size: 10px; color: var(--text-muted); line-height: 14px; }
.ov-s2-rt { fill: none; stroke: var(--surface-2); stroke-width: 4; }
.ov-s2-rv { fill: none; stroke-width: 4; stroke-linecap: round; stroke: var(--text-muted); }
.ov-s2-ring.is-md .ov-s2-rv { stroke: #3b82f6; }
.ov-s2-ring.is-hi .ov-s2-rv { stroke: #14b8a6; }
.ov-s2-ring.is-na b { color: var(--text-muted); }
.ov-s2-sct { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-size: 12px; }
.ov-s2-sct .ov-sit-ag { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.ov-s2-acts { align-items: center; margin-top: auto; }
.ov-s2-links { display: inline-flex; gap: 10px; margin-left: auto; font-size: 12px; }
.ov-s2-links .ov-link { font-size: 12px; }
.ov-s2.ov-sit { display: flex; }

/* Плитки-счётчики (они же фильтры) */
.ov-kpis { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; margin: 8px 0 6px; }
.ov-kpi { display: flex; flex-direction: column; align-items: flex-start; gap: 0; text-align: left; border: 1px solid var(--border); background: var(--surface); color: var(--text); border-radius: 10px; padding: 6px 10px; cursor: pointer; font: inherit; border-left: 3px solid var(--border); min-width: 0; }
.ov-kpi:hover { background: var(--surface-2); }
.ov-kpi-l { font-size: 11px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.ov-kpi-n { font-size: 20px; line-height: 1.15; font-variant-numeric: tabular-nums; }
.ov-kpi.is-on { border-color: var(--accent, #3b82f6); box-shadow: inset 0 0 0 1px var(--accent, #3b82f6); }
.ov-kpi-open { border-left-color: #8b5cf6; }
.ov-kpi-near { border-left-color: #3b82f6; }
.ov-kpi-in_zone { border-left-color: #f59e0b; }
.ov-kpi-confirmed { border-left-color: #14b8a6; }
.ov-kpi-closed { border-left-color: var(--text-muted); }
.ov-kpi-watch { border-left-color: #ec4899; }
.ov-sit-flt { display: none; }

/* Страница ситуации: шапка и график */
.ov-sp-hrow { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.ov-sp-hrow .ov-s2-kv { flex: 1 1 420px; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ov-sp-hrow .ov-s2-sc { border-top: 0; padding-top: 0; flex: 0 1 320px; }
.ov-sp-head .ov-px { font-size: 18px; }
.ov-sp-cw { position: relative; }
.ov-sp-gr { stroke: var(--border); stroke-width: .6; opacity: .8; }
.ov-sp-hfoot { display: flex; align-items: center; gap: 6px 12px; flex-wrap: wrap; }
.ov-sp-hfoot .ov-sp-q { font-size: 12px; }
.ov-sp-hfoot .ov-acts { margin: 0 0 0 auto; }
.ov-sp-gv { stroke-dasharray: 2 3; }
.ov-sp-gl { font-size: 9px; fill: var(--text-muted); opacity: .85; }
.ov-sp-zone-sup { fill: rgba(38, 166, 154, .14); stroke: rgba(38, 166, 154, .55); }
.ov-sp-zone-res { fill: rgba(239, 83, 80, .13); stroke: rgba(239, 83, 80, .55); }
.ov-sp-zl { font-size: 10px; font-weight: 600; }
.ov-sp-zl-sup { fill: #26a69a; }
.ov-sp-zl-res { fill: #ef5350; }
.ov-sp-w.is-up { stroke: #26a69a; }
.ov-sp-w.is-dn { stroke: #ef5350; }
.ov-sp-pl { stroke: var(--text); stroke-width: .8; stroke-dasharray: 1 3; opacity: .7; }
.ov-sp-tag { fill: var(--surface-2); stroke: var(--border); stroke-width: .6; }
.ov-sp-tag-tg { fill: rgba(38, 166, 154, .14); stroke: rgba(38, 166, 154, .6); }
.ov-sp-tag-st { fill: rgba(239, 83, 80, .12); stroke: rgba(239, 83, 80, .6); }
.ov-sp-tag-gx { fill: rgba(171, 71, 188, .12); stroke: rgba(171, 71, 188, .55); }
.ov-sp-tag-px { fill: var(--accent, #3b82f6); stroke: none; }
.ov-sp-t.ov-sp-px { fill: #fff; font-weight: 700; }
.ov-sp-t.ov-sp-zn { fill: var(--text); }
.ov-sp-cx { stroke: var(--text-muted); stroke-width: .8; stroke-dasharray: 3 3; }
.ov-sp-tip { position: absolute; left: 8px; top: 6px; font-size: 12px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 3px 8px; pointer-events: none; box-shadow: 0 2px 8px rgba(0, 0, 0, .18); font-variant-numeric: tabular-nums; max-width: calc(100% - 16px); }
.ov-sp-kz-sup { background: rgba(38, 166, 154, .35); }
.ov-sp-kz-res { background: rgba(239, 83, 80, .35); }
.ov-sp-kgx { border-top: 2px dotted #ab47bc; height: 0; }
.ov-sp-kev { width: 8px; height: 8px; border-radius: 50%; background: #ffb300; }
.ov-sp-last { margin-left: auto; }
.ov-sp-old { color: var(--warn, #d97706); }
.ov-sp-ev.ov-st-bounce, .ov-sp-ev.ov-st-break { fill: #14b8a6; }
.ov-sp-ev.ov-st-stop { fill: #ef5350; }
.ov-sp-ev { stroke: var(--surface); stroke-width: 1.5; }

@media (max-width: 1100px) { .ov-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 600px) {
  .ov-kpis { display: flex; overflow-x: auto; scrollbar-width: none; gap: 6px; margin: 6px -2px; padding: 0 2px 2px; scroll-snap-type: x proximity; }
  .ov-kpis::-webkit-scrollbar { display: none; }
  .ov-kpi { flex: 0 0 auto; min-width: 92px; padding: 5px 9px; scroll-snap-align: start; min-height: 44px; }
  .ov-kpi-n { font-size: 17px; }
  .ov-sit-flt { display: inline-flex; align-items: center; width: max-content; max-width: 100%; justify-self: start; align-self: flex-start; margin: 2px 0 4px; min-height: 36px; }
  .ov-sit-sels:not(.is-open) { display: none; }
  .ov-s2-grid { grid-template-columns: minmax(0, 1fr); }
  .ov-s2-links { margin-left: 0; width: 100%; justify-content: flex-start; gap: 16px; }
  .ov-s2-links .ov-link { min-height: 32px; }
  .ov-sp-hrow .ov-s2-kv { grid-template-columns: 1fr 1fr; flex-basis: 100%; }
  .ov-sp-hrow .ov-s2-kv .ov-s2-box:nth-child(3) { grid-column: 1 / -1; }
  .ov-sp-tip { font-size: 11px; }
  .ov-sp-last { margin-left: 0; width: 100%; }
}

/* 109: «коридор» в «Моём списке» — цена между поддержкой и сопротивлением */
.ov-cor { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 8px; font-size: 11px; color: var(--text-muted); font-variant-numeric: tabular-nums; margin: 2px 0; }
.ov-cor-l { color: #26a69a; }
.ov-cor-r { color: #ef5350; }
.ov-cor-t { position: relative; height: 6px; border-radius: 999px; background: linear-gradient(90deg, rgba(38, 166, 154, .35), rgba(127, 127, 127, .18) 50%, rgba(239, 83, 80, .35)); }
.ov-cor-f { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 999px; background: transparent; }
.ov-cor-p { position: absolute; top: 50%; width: 12px; height: 12px; margin: -6px 0 0 -6px; border-radius: 50%; background: var(--accent, #3b82f6); border: 2px solid var(--surface); box-shadow: 0 0 0 1px var(--accent, #3b82f6); }
.ov-asset.ov-s2 { display: flex; flex-direction: column; gap: 6px; }
.ov-asset .ov-a-h { display: flex; align-items: baseline; gap: 8px; }
.ov-asset .ov-px { margin-left: auto; font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; }
.ov-asset .ov-at { font-size: 12px; padding: 3px 8px; border-radius: 6px; background: rgba(59, 130, 246, .1); color: var(--accent, #3b82f6); align-self: flex-start; }
.ov-asset .ov-lv { display: flex; justify-content: space-between; gap: 8px; font-size: 12.5px; }
.ov-asset .ov-lv > span:first-child { color: var(--text-muted); }
.ov-asset .ov-sig { font-size: 12px; border-top: 1px solid var(--border); padding-top: 6px; }
.ov-grid[data-testid=ov-assets] { grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); }

/* 112g (12.10.2026): страница ситуации — рабочий столбец и боковая панель.
   Раньше общая сетка рядами: высокая «Оценка контекста» справа оставляла
   пустоту под графиком, нижние блоки шли невпопад. Теперь два независимых
   столбца: слева график, сценарии, свой план, история; справа — оценка,
   итог, контекст, ТФ; боковая панель держится на экране при прокрутке.
   На узком экране — один столбец в порядке ov-o1…ov-o8. */
.ov-sp-grid { display: grid; grid-template-columns: minmax(0, 1fr) clamp(340px, 30vw, 460px); gap: 12px; align-items: start; }
.ov-sp-main, .ov-sp-side { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.ov-sp-side { position: sticky; top: 8px; max-height: calc(100vh - 24px); overflow-y: auto; scrollbar-width: thin; overscroll-behavior: contain; }
.ov-sp-chartc { grid-row: auto; }
.ov-sp-chh { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.ov-sp-chh .ov-h { margin: 0; }
.ov-lw-wrap { position: relative; height: clamp(360px, 58vh, 640px); border-radius: var(--u8-r-s, 8px); overflow: hidden; border: 1px solid var(--border); }
.ov-lw { position: absolute; inset: 0; }
.ov-lw-zone { position: absolute; left: 0; pointer-events: none; z-index: 2; border-top: 1px solid; border-bottom: 1px solid; }
.ov-lw-zone-sup { background: rgba(38, 166, 154, .13); border-color: rgba(38, 166, 154, .45); }
.ov-lw-zone-res { background: rgba(239, 83, 80, .12); border-color: rgba(239, 83, 80, .45); }
.ov-lw-ohlc { position: absolute; top: 6px; left: 8px; z-index: 3; pointer-events: none; font-size: 11.5px; color: var(--text-muted); display: flex; flex-wrap: wrap; gap: 2px 6px; align-items: baseline; padding: 2px 6px; border-radius: 6px; background: color-mix(in srgb, var(--surface, #0d1117) 78%, transparent); max-width: calc(100% - 90px); }
.ov-lw-ohlc b { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; }
.ov-sp-chartc .ov-sp-leg { margin-top: 8px; }
.ov-sp-last { margin-left: auto; }
@media (min-width: 1600px) { .ov-lw-wrap { height: clamp(420px, 60vh, 700px); } }
@media (max-width: 1100px) { .ov-sp-grid { grid-template-columns: minmax(0, 1fr) 320px; } }
@media (max-width: 900px) {
  .ov-sp-grid { grid-template-columns: minmax(0, 1fr); }
  .ov-sp-main, .ov-sp-side { display: contents; }
  .ov-sp-side { position: static; max-height: none; overflow: visible; }
  .ov-o1 { order: 1; } .ov-o2 { order: 2; } .ov-o3 { order: 3; } .ov-o4 { order: 4; }
  .ov-o5 { order: 5; } .ov-o6 { order: 6; } .ov-o7 { order: 7; } .ov-o8 { order: 8; }
  .ov-lw-wrap { height: clamp(280px, 46vh, 400px); }
  .ov-lw-ohlc { font-size: 10.5px; max-width: calc(100% - 70px); }
  .ov-sp-last { margin-left: 0; flex-basis: 100%; }
}
.ov-lw-far { position: absolute; top: 34px; left: 8px; z-index: 3; pointer-events: none; font-size: 11px; font-weight: 600; color: #10b981; padding: 2px 7px; border-radius: 6px; border: 1px solid color-mix(in srgb, #10b981 40%, transparent); background: color-mix(in srgb, var(--surface, #0d1117) 82%, transparent); max-width: calc(100% - 90px); }

/* 113c (12.10.2026): плашка «Показаны 3 из N» и ссылка «Подробнее» */
.ov-limited { font-size: 13px; line-height: 1.5; border-style: dashed; }
/* 115h (14.10.2026): только ссылка. Раньше правило било и по блоку
   <details class="ov-more"> «Ещё: радар, пары…» — весь блок был бирюзовым,
   жирным и без переноса строк (контраст 2,5 на белом). */
a.ov-more { color: var(--u8-ink-up, #177a6e); font-weight: 600; white-space: nowrap; }

/* 114b (13.10.2026): подписи оценок, статус разницы и факторы «+ / −» */
.ov-ctx-ns { display: flex; flex-wrap: wrap; gap: 2px 12px; font-size: 12px; }
.ov-ctx-n b { font-variant-numeric: tabular-nums; }
.ov-edge { font-size: 12.5px; font-weight: 600; margin-top: 2px; }
.ov-edge.is-none, .ov-edge.is-na { color: var(--text-muted); font-weight: 500; }
.ov-fct-w { display: flex; flex-direction: column; gap: 2px; }
.ov-fct { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; font-size: 12px; }
.ov-fct li { display: flex; gap: 6px; align-items: baseline; line-height: 1.35; }
.ov-fct li i { font-style: normal; font-weight: 700; width: 10px; flex: none; text-align: center; }
.ov-fct li.is-p i { color: #14b8a6; }
.ov-fct li.is-m i { color: #ef4444; }
.ov-fct-no { font-size: 12px; }
.ov-fct-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px 16px; margin: 8px 0; }
.ov-fct-col { display: flex; flex-direction: column; gap: 4px; }
.ov-fct-note { font-size: 11.5px; margin-bottom: 6px; }

/* 114c (13.10.2026): плитка «Главное» — первой, семь плиток в ряд; подписи причин отбора */
.ov-kpis { grid-template-columns: repeat(7, minmax(0, 1fr)); }
.ov-kpi-main { border-left-color: #0ea5a4; }
.ov-why-tags { display: flex; flex-wrap: wrap; gap: 4px 6px; align-items: center; margin: 2px 0 4px; }
.ov-why-tag { font-size: 11px; line-height: 1.5; padding: 0 7px; border-radius: 999px; background: color-mix(in srgb, #0ea5a4 14%, transparent); color: var(--text); border: 1px solid color-mix(in srgb, #0ea5a4 35%, transparent); white-space: nowrap; }
.ov-why-note { font-size: 11px; color: var(--text-muted); }
.ov-main-foot { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; justify-content: space-between; margin: 10px 0 4px; }
.ov-main-foot .ov-muted { flex: 1 1 320px; font-size: 12px; }
@media (max-width: 1100px) { .ov-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* 114d (13.10.2026): сводка ситуации — заголовок, пять плашек, ряд «Контекст», условия, связанные записи */
.ov-sp-title { font-size: 18px; font-weight: 600; margin: 0; line-height: 1.3; }
.ov-sp-title .ov-sp-tk { font-size: inherit; }
/* 133 (18.10.2026): части оценки без данных и блок «Порядок показа (внимание)» */
.ov-sit-nd { opacity: .62; }
.ov-att { margin-top: 10px; font-size: 13px; }
.ov-att > summary { cursor: pointer; color: var(--text-muted); }
.ov-att > summary b { color: var(--text); font-variant-numeric: tabular-nums; }
.ov-att .ov-sit-tb { margin-top: 6px; }
/* 132 (18.10.2026): «Почему сейчас» и изменившиеся факторы в истории переходов */
.ov-why-txt { margin: 0 0 6px; font-size: 13px; line-height: 1.45; }
.ov-why-chg { margin: 2px 0 6px; padding-left: 18px; display: grid; gap: 2px; font-size: 12px; font-variant-numeric: tabular-nums; }
.ov-why-code { font-size: 11px; letter-spacing: .02em; overflow-wrap: anywhere; }
.ov-sit-chg { font-size: 11px; color: var(--text-muted); margin: 1px 0 0; overflow-wrap: anywhere; }
/* 131 (18.10.2026): постоянный номер ситуации и версии — под заголовком, номер выделяется целиком для копирования */
.ov-sp-uid { flex-basis: 100%; font-size: 12px; color: var(--text-muted); overflow-wrap: anywhere; }
.ov-sp-uid b { font-weight: 600; color: var(--text); user-select: all; font-variant-numeric: tabular-nums; }
.ov-sp-hrow .ov-s2-kv.ov-sp-sum { flex: 1 1 560px; grid-template-columns: repeat(5, minmax(0, 1fr)); }
.ov-sp-sum .ov-sit-st { font-size: 12px; }
.ov-sp-ctx .ov-h { margin-bottom: 6px; }
.ov-ctx-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 8px; }
.ov-ctx-tile { display: flex; flex-direction: column; gap: 4px; align-items: flex-start; border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; background: var(--surface-2, transparent); min-width: 0; }
.ov-ctx-tile.is-na .ov-ctx-fact { color: var(--text-muted); }
.ov-ctx-fact { font-size: 13px; line-height: 1.4; overflow-wrap: anywhere; }
.ov-terms { margin: 0 0 6px; padding-left: 18px; display: grid; gap: 4px; font-size: 13px; line-height: 1.45; }
.ov-links { margin: 0; padding-left: 18px; display: grid; gap: 3px; font-size: 13px; }
@media (max-width: 1100px) { .ov-sp-hrow .ov-s2-kv.ov-sp-sum { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 600px) {
  .ov-sp-hrow .ov-s2-kv.ov-sp-sum { grid-template-columns: 1fr 1fr; }
  .ov-ctx-row { grid-template-columns: 1fr; }
  .ov-sp-title { font-size: 16px; }
}
/* 134 (18.10.2026): этап 9 — секции обзора, карточка по документу, меню «⋯», диагностика */
.ov-mode { display: inline-flex; gap: 4px; margin: 0 0 10px; flex-wrap: wrap; }
/* активный режим — тем же стилем, что главная кнопка (.ov-btn-main): иначе ui8.css перекрашивает текст */
.ov-sec { margin: 14px 0 6px; }
.ov-sec-h { font-size: 15px; font-weight: 600; margin: 0 0 8px; display: flex; gap: 8px; align-items: baseline; }
.ov-sec-n { font-size: 12px; font-weight: 500; color: var(--text-muted); }
.ov-s2[data-id] { cursor: pointer; }
.ov-s2.is-hidden { opacity: .7; }
.ov-s2-nm { font-size: 12px; color: var(--text-muted); max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-s2-hid { font-size: 11px; padding: 1px 6px; border-radius: 8px; border: 1px solid var(--border, #8884); color: var(--text-muted); }
.ov-s2-now { font-size: 12.5px; line-height: 1.35; margin: 4px 0; }
.ov-s2-upd { font-size: 11.5px; margin-top: 6px; }
.ov-s2-more { margin-left: auto; min-width: 40px; font-weight: 700; letter-spacing: 1px; }
.ov-s2-menu { display: flex; flex-direction: column; gap: 2px; margin-top: 6px; padding: 6px; border: 1px solid var(--border, #8884); border-radius: 8px; background: var(--surface-2, transparent); cursor: default; }
.ov-s2-mi { text-align: left; background: none; border: 0; padding: 7px 8px; border-radius: 6px; font: inherit; font-size: 13px; color: inherit; cursor: pointer; min-height: 32px; }
.ov-s2-mi:hover, .ov-s2-mi:focus-visible { background: var(--hover, #8882); }
.ov-diag-kv { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px 16px; margin: 8px 0 12px; font-size: 13px; }
.ov-diag-kv > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ov-diag-kv b { font-weight: 500; overflow-wrap: anywhere; }
.ov-diag-f { display: inline-flex; gap: 6px; align-items: center; margin: 4px 0; }
.ov-diag-f input { padding: 4px 8px; min-width: 160px; }
.ov-diag-wrap { overflow-x: auto; margin-top: 6px; }
.ov-diag-t { border-collapse: collapse; width: 100%; font-size: 12px; font-variant-numeric: tabular-nums; }
.ov-diag-t th, .ov-diag-t td { padding: 5px 6px; border-bottom: 1px solid var(--border, #8883); text-align: left; vertical-align: top; }
.ov-diag-t th { position: sticky; top: 0; background: var(--surface, #fff0); font-weight: 600; white-space: nowrap; }
.ov-diag-t tbody tr { cursor: pointer; }
.ov-diag-t tbody tr:hover { background: var(--hover, #8881); }
.ov-diag-p { min-width: 220px; font-size: 11px; }
.ov-diag-ex { color: var(--text-muted); }
/* 135 (18.10.2026): этап 10 — страница ситуации в порядке блоков документа (ov-b1…ov-b11,
   вспомогательные — ov-b12). На узком экране один столбец: блоки 2–11, затем итог и контекст. */
@media (max-width: 900px) {
  .ov-b2 { order: 2; } .ov-b3 { order: 3; } .ov-b4 { order: 4; } .ov-b5 { order: 5; } .ov-b6 { order: 6; }
  .ov-b7 { order: 7; } .ov-b8 { order: 8; } .ov-b9 { order: 9; } .ov-b10 { order: 10; } .ov-b11 { order: 11; }
  .ov-b12 { order: 12; }
}
.ov-h3 { font-size: 13px; font-weight: 600; margin: 12px 0 6px; }
.ov-sum-t td, .ov-sum-t th { white-space: nowrap; }
.ov-sum-t td:first-child { white-space: normal; min-width: 120px; }
.ov-sum-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px 16px; font-size: 13px; margin-bottom: 6px; }
.ov-sum-cols > div { display: flex; flex-direction: column; gap: 4px; }
.ov-sum-l { margin: 0; padding-left: 18px; }
.ov-sum-l li { margin: 2px 0; }
.ov-sp-follow .ov-acts { margin-top: 6px; }

/* 141 (18.10.2026): «Как посчитаны вход, стоп и цель» на странице ситуации */
.ov-howcalc { margin-top: 8px; font-size: 0.84rem; }
.ov-howcalc summary { cursor: pointer; color: var(--accent, #3b82f6); }
.ov-howcalc ul { margin: 6px 0 0; padding-left: 18px; display: flex; flex-direction: column; gap: 4px; }

/* 148 (20.10.2026): «Способы действия» на странице ситуации — та же матрица, что на главной.
   Компьютер: таблица с закреплённым столбцом названий строк; телефон (до 720px): карточки
   способов с четырьмя главными строками и «Ещё показатели». */
.ov-ways { margin-top: 12px; }
.ov-ways-h { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.ov-ways-h .ov-h { margin: 0; }
.ov-ways-h .ov-btn { margin-left: auto; }
.ov-ways-sc { display: flex; flex-wrap: wrap; gap: 6px; }
.ov-ways-plan { margin: 0; }
.ov-ways-tw { overflow-x: auto; }
.ov-ways-t { width: 100%; min-width: 960px; border-collapse: collapse; font-size: 12.5px; table-layout: fixed; }
.ov-ways-t th, .ov-ways-t td { text-align: left; vertical-align: top; padding: 7px 8px; border-bottom: 1px solid var(--border); overflow-wrap: anywhere; white-space: normal; }
.ov-ways-t thead th { font-weight: 600; color: var(--text); }
.ov-ways-t tbody th { width: 150px; color: var(--text-muted); font-weight: 500; position: sticky; left: 0; background: var(--surface); z-index: 1; }
.ov-ways-t thead th:first-child { width: 150px; position: sticky; left: 0; background: var(--surface); z-index: 1; }
.ov-ways-t .is-off { color: var(--text-muted); }
.ov-ways-t .ov-w-acts td { border-bottom: 0; }
.ov-ways-t .ov-w-acts td .ov-btn { display: block; width: 100%; margin-bottom: 4px; white-space: normal; }
.ov-w-tip { display: block; color: var(--text-muted); font-size: 11px; margin-top: 2px; }
.ov-w-na { color: var(--text-muted); cursor: help; }
.ov-w-why { color: var(--text-muted); font-style: normal; }
.ov-w-marks { display: flex; flex-wrap: wrap; gap: 3px; margin-top: 4px; }
.ov-w-mark { font-size: 10.5px; font-weight: 500; padding: 1px 6px; border: 1px solid var(--border); border-radius: 999px; color: var(--text-muted); }
.ov-ways-cards { display: none; }
.ov-w-card { border: 1px solid var(--border); border-radius: 10px; padding: 10px; display: grid; gap: 6px; min-width: 0; }
.ov-w-card.is-off { opacity: .85; }
.ov-w-card .ov-h3 { margin: 0; }
.ov-w-head { margin: 0; font-size: 12.5px; overflow-wrap: anywhere; }
.ov-w-dl { display: grid; grid-template-columns: minmax(0, 44%) minmax(0, 1fr); gap: 4px 8px; margin: 0; font-size: 12.5px; }
.ov-w-dl dt { color: var(--text-muted); }
.ov-w-dl dd { margin: 0; overflow-wrap: anywhere; }
.ov-w-more summary { cursor: pointer; color: var(--accent, #2962ff); font-size: 12.5px; }
.ov-w-more .ov-w-dl { margin-top: 6px; }
.ov-w-card .ov-acts { display: flex; flex-wrap: wrap; gap: 6px; }
.ov-ways-skel { display: grid; gap: 6px; }
.ov-ways-skel i { display: block; height: 14px; border-radius: 6px; background: var(--surface-2); }
.ov-ways-skel i:nth-child(2) { width: 85%; } .ov-ways-skel i:nth-child(3) { width: 70%; } .ov-ways-skel i:nth-child(4) { width: 55%; }
@media (max-width: 720px) {
  .ov-ways-tw { display: none; }
  .ov-ways-cards { display: grid; gap: 8px; }
  .ov-ways-h .ov-btn { margin-left: 0; }
}

/* 150 (20.10.2026, документ — раздел 15): светлая тема — контраст текста не ниже WCAG AA.
   Рост и падение остаются подписаны знаком и словами, цвет — только дополнение */
[data-theme="light"] .ov-s2 { --s2-up: #00796b; --s2-dn: #c62828; }
[data-theme="light"] .ov-st-target, [data-theme="light"] .ov-sp-tip .ov-up { color: #00796b; }
[data-theme="light"] .ov-st-stop, [data-theme="light"] .ov-sp-tip .ov-dn { color: #c62828; }
[data-theme="light"] .ov-howcalc summary { color: #1d4ed8; }
[data-theme="light"] .ov-lw-far { color: #047857; }
/* касание пальцем: кнопки и раскрывашки страницы «Обзора» не меньше 44×44 */
@media (pointer: coarse), (max-width: 760px) {
  #ov-page .ov-btn, #ov-page summary, #ov-page .ov-tab, #ov-page [role="tab"] { min-height: 44px; }
  #ov-page summary { display: flex; align-items: center; }
  #ov-page .ov-link { min-height: 44px; display: inline-flex; align-items: center; }
  #ov-page .ov-btn { display: inline-flex; align-items: center; justify-content: center; }
}
/* на компьютере с мышью — не меньше 24 × 24 (WCAG 2.2 AA): раскрывашки, «Подробнее» и коды пар */
@media (pointer: fine) and (min-width: 761px) {
  #ov-page .ov-howcalc summary { min-height: 24px; display: flex; align-items: center; }
  #ov-page .ov-sp-class-more { min-height: 24px; }
  #ov-page button.ov-link { min-height: 24px; display: inline-flex; align-items: center; }
}
@media (pointer: coarse), (max-width: 760px) {
  #ov-page .ov-sp-class-more, #ov-page button.ov-link { min-height: 44px; display: inline-flex; align-items: center; }
}
/* «Ещё показатели» в карточке способа: синий темы бледный на тёмном фоне */
[data-theme="dark"] .ov-w-more summary { color: #8ab4ff; }
[data-theme="light"] .ov-w-more summary { color: #1d4ed8; }
/* знаки «+» и «−» в списке «за и против»: светлая тема — контраст не ниже 4,5;
   раскрывашки карточки «Внимание» мышью — не меньше 24 */
[data-theme="light"] .ov-fct li.is-p i { color: #00796b; }
[data-theme="light"] .ov-fct li.is-m i { color: #c62828; }
@media (pointer: fine) and (min-width: 761px) {
  #ov-page summary { min-height: 24px; display: flex; align-items: center; }
}
