/* Крипто «EXOS · Daily AI Insights» (#dash-insight) — js/features/dashboard/daily-insight.js.
   Kamron 30.07: «по дизайну вот так должен выглядеть» (скриншот героя витрины акций).
   Поэтому блок использует ТЕ ЖЕ классы h-*, что и герой акций, а их стили расширены на
   #page-dashboard в css/mobile.css через :is(). Дублировать сорок правил ради одинакового
   вида было бы прямым путём к расхождению двух витрин при первой же правке.

   Здесь остаётся только то, чего у акций нет: заземлённый нарратив со ссылками на факты.

   Гейт «моб-only» снимали 30.07, а 31.07 вернули по просьбе Kamron'а — но только для крипты:
   на десктопе блока нет вовсе (см. loadDailyInsight). Витрина акций живёт своим кодом. */

/* ── «Разбор по фактам» (fact-grounded read) ─────────────────────────────────────────────────
   🔴 Kamron 02.08: «fact ground read в мобилке в крипте на главной сделай дизайнерский
   нормальным, а то там просто в ряд текста и все». Было: один <ul> с точками-маркерами, где
   в кучу свалены измеренные наблюдения и предположенные связи, а ссылки на факты болтались
   скобками посреди предложения.

   Стало — три вещи, и каждая несёт смысл, а не украшает:
   1. ДВЕ ГРУППЫ вместо одного списка. Наблюдение измерено, «возможная связь» — гипотеза модели;
      одним списком второе читалось как первое. Заголовки-надписи в стиле .so-eyebrow, который
      уже стоит выше в этой же карточке.
   2. СТРОКИ-ДАННЫЕ вместо буллетов: разделители-волосинки и числа моно с табличными цифрами —
      блок сканируется по значениям, а не читается абзацем.
   3. ССЫЛКИ НА ФАКТЫ из текста вырезаются (_stripIds). Чипы с их именами были и убраны
      02.08 по просьбе Kamron'а: `whales_flow` / `px_BTC` — внутренние имена, читателю они
      ничего не говорят. Стили чипов оставлены ниже — вернуть можно, не переписывая заново.

   Только токены из variables.css, ни одного нового цвета. Блок существует лишь в мобильной
   крипте (на десктопе сводки нет вовсе — см. _wantInsight), поэтому скоуп #page-dashboard. */
#page-dashboard .di-grp{margin-top:10px}
#page-dashboard .di-grp + .di-grp{margin-top:16px}
#page-dashboard .di-grp-h{display:flex;align-items:baseline;gap:8px;font-family:var(--font);font-size:11px;
  font-weight:600;color:var(--dim);margin-bottom:2px}
/* Связи теперь считает код (crypto_brain/divergences.py) по числам фактов, а не предполагает
   модель, поэтому синий цвет группы остаётся как различитель семейства, а чип «гипотезы» с них
   снят: это измеренное расхождение, а не догадка. */
#page-dashboard .di-links .di-grp-h{color:var(--blue)}
#page-dashboard .di-hint{font-family:var(--mono);font-size:10px;letter-spacing:.02em;text-transform:none;
  color:var(--muted);background:var(--elevated);border-radius:6px;padding:2px 6px}
#page-dashboard .di-nar-l{margin:0;padding:0;list-style:none}
#page-dashboard .di-nar-l .di-row{font-size:13px;line-height:1.5;color:var(--text);padding:9px 0;
  margin:0;min-width:0;overflow-wrap:anywhere}
#page-dashboard .di-nar-l .di-row + .di-row{border-top:1px solid var(--border)}
#page-dashboard .di-nar-l .di-row .num{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600}
/* Чип идёт В ПОТОКЕ сразу за предложением, а не отдельной строкой: на строку-ссылку список
   вырастал вдвое и превращался в лестницу. Если места в строке нет — перенесётся сам. */
#page-dashboard .di-ids{display:inline;margin-left:6px;white-space:nowrap}
#page-dashboard .di-id{display:inline-block;font-family:var(--mono);font-size:10px;line-height:1.5;color:var(--dim);
  background:var(--elevated);border-radius:6px;padding:1px 6px;vertical-align:1px}
#page-dashboard .di-id + .di-id{margin-left:4px}
#page-dashboard .di-nar-foot{font-size:11px;color:var(--dim);margin-top:12px;padding-top:10px;
  border-top:1px solid var(--border);font-family:var(--mono)}

/* Раскладка верхней строки #dash-top (сетка `1fr 400px`: сводка + лента «Важные события»).
   Основное правило теперь структурное, через :has() — оно в stocks.css рядом с самой сеткой и
   работает для обеих витрин. Классы ниже ставит _syncTop() в daily-insight.js; они остаются
   запасным путём для браузеров без :has().
   (Прежний комментарий здесь утверждал, что :has() «не годится, потому что [hidden] выставляется
   асинхронно» — это было неверно: CSS пересчитывает :has() при изменении атрибута сам, и именно
   поэтому он надёжнее флага из JS, который может и не успеть отработать.) */
#page-dashboard #dash-top[hidden]{display:none}   /* `.so-hrow{display:grid}` — авторский стиль, он перебивает UA-шное [hidden] */
#page-dashboard #dash-top.di-solo{grid-template-columns:minmax(0,1fr)}          /* нет ленты → сводка на всю строку */
#page-dashboard #dash-top.di-solo > #dash-insight{grid-column:1 / -1}
#page-dashboard #dash-top.di-solo > .so-hrail{display:none}
#page-dashboard #dash-top.di-nohero{grid-template-columns:minmax(0,1fr)}        /* нет сводки (десктоп) → лента на всю строку */
#page-dashboard #dash-top.di-nohero > .so-hrail{grid-column:1 / -1}

/* ─────────────────────────────────────────────────────────────────────────────
   🔴 Kamron 02.08: «Key events и в целом важные новости в десктопе располагалось справа над
   orderbook» + «для мобилки одно, для десктопа по-другому, мобилку не трогай».

   Правая колонка на ШИРОКОМ экране: Важные события → Order Book → News
   (Kamron 02.08, следом: «ордер бук и новости местами поменяй»).
   «Обзор рынка» отдаёт свой слот событиям — ровно то решение, что было принято 30.07
   («важные события вместо market cap обзор рынка, именно в этот блок»), просто теперь лента
   переехала туда целиком, а не половиной. На мобилке обзор остаётся на месте.

   Колонку переводим в flex-столбец: у грида `auto auto 1fr` строки распределялись бы по числу
   ВИДИМЫХ детей, а лента событий исчезает в дни без красных USD-событий (правило :has() в
   stocks.css) — тогда 1fr доставался бы Order Book'у, который всё равно упёрт в max-height:310px,
   и низ колонки зиял бы пустотой. Во flex свободную высоту явно забирает News.

   Всё внутри @media(min-width:769px) — мобильный слой (css/mobile.css) не затронут ни одним
   селектором отсюда: там .dash-right вообще `display:contents`, а лента лежит в .dashboard.
   ───────────────────────────────────────────────────────────────────────────── */
@media(min-width:769px){
  #page-dashboard .dash-right{display:flex;flex-direction:column;gap:var(--gap);min-height:0}

  /* 1. Лента важных событий. Приехала из строки над дашбордом (_dashTopPlace в index.html),
        поэтому снимаем её «строчные» отступы: паддинги колонки задаёт .dashboard.
        flex:0 0 auto — НЕ ужимается: при 0 1 auto колонка добирала недостающие пиксели именно
        отсюда и срезала последнюю строку события («прогноз 54.0» уходил под край). Дефицит
        высоты обязана гасить лента новостей — она скроллится, а карточка события нет.
        max-height страхует обратный случай: событий много → карточка упирается и скроллится
        сама, а не выдавливает стакан из колонки. */
  #page-dashboard .dash-right > #dash-top{order:1;flex:0 0 auto;min-height:0;max-height:42%;
    padding:0;margin:0;grid-template-columns:minmax(0,1fr)}
  #page-dashboard .dash-right > #dash-top > .so-hrail{grid-column:1 / -1;min-height:0}
  #page-dashboard .dash-right > #dash-top .so-card{min-height:0;overflow-y:auto}

  /* 2. Order Book — своей натуральной высотой (max-height:310px в components.css), не ужимается:
        стакан с обрезанными уровнями бесполезен. */
  #page-dashboard .dash-right > #w-orderbook{order:2;flex:0 0 auto}

  /* 3. News — последним, забирает всю свободную высоту колонки и ужимается первой при дефиците
        (единственный список здесь, который скроллится). */
  #page-dashboard .dash-right > #w-news{order:3;flex:1 1 auto;min-height:120px}

  /* «Обзор рынка» — слот отдан событиям (см. шапку блока). Только десктоп. */
  #page-dashboard .dash-right > #w-market{display:none}
}

/* 🔴 Kamron 31.07: «в десктопе убери раскрывашку и растяни текст вправо».
   На широком экране карточка занимает всю строку и проза помещается целиком, поэтому «…»
   нечего раскрывать: кнопка обещала бы скрытый текст, которого нет. Клампинг снимаем вместе с
   ней — иначе маска гасила бы низ абзаца без всякого способа его открыть. max-width:62ch —
   комфортная длина строки под узкую колонку — тоже снимаем, текст идёт до правого края.
   Кнопку и класс обрезки на десктопе не рендерит уже сам JS (render в daily-insight.js);
   правила ниже — страховка, если разметка всё же окажется в DOM: например, окно расширили
   ПОСЛЕ отрисовки, а обработчик ресайза не отработал.
   Скоуп жёсткий: только #dash-insight (крипта) и только ≥769px. Мобилка вне медиа-выборки —
   там текст реально не влезает, 4 строки + «…» остаются. Витрина акций (#page-stocks .so-hero)
   сюда не попадает, у неё свои правила в stocks.css. */
@media(min-width:769px){
  #page-dashboard #dash-insight .so-lede{max-width:none}
  #page-dashboard #dash-insight .so-lede.h-clamp{max-height:none;-webkit-mask-image:none;mask-image:none}
  #page-dashboard #dash-insight .h-more{display:none}
}
