/* aether-web — css/mobile.css — EXOS mobile app layer.
   ВСЁ под @media(max-width:768px). Десктоп >768px не трогается (правило §1.1).
   Токены — глобальные из variables.css (bg/surface/elevated/blue/up/dn/amber…). Ничего не переопределяем.
   Мобильная хромота (таббар/шит) по умолчанию скрыта → на десктопе её нет. */

/* base: mobile-only chrome/blocks hidden until the mobile breakpoint bites (десктоп их не видит) */
.m-tabbar,.m-sheet,.m-sheet-backdrop,.m-subhead,.m-pg-head,.ch-ema,.ch-foot,.dash-more,.mfg,.iv-ovl,.iv-expand-hint,.so-mk-dot,.so-vlbl,.sd-mnav,.sd-tabs-m,.prices-more{display:none}
.sd-stats-m{display:contents}
.dash-wallet{display:none}   /* T18-A: десктоп скрыт (грид дашборда byte-identical); мобилка — @media ниже, order:0 */   /* десктоп: обёртка прозрачна → 4 sd-scard остаются грид-детьми .sd-mgrid (байт-в-байт). Мобилка: 2×2 (ниже в @media) */
@keyframes liqLiveM{0%,100%{opacity:1}50%{opacity:.35}}   /* liq LIVE — красный пульс по прозрачности (эталон mobile-liq .pg-live), только мобилка */

@media(max-width:768px){
  :root{--tabbar-h:56px;--m-header-h:58px;   /* T22-fix: бар чуть меньше (было 62). «Сужение» — через боковой padding дока, не высоту. Клиренс над баром = padding − высота */
    /* ── Эталонная сетка (GRID.md) — единственный источник горизонтали на мобилке ── */
    --gutter:16px;   /* край экрана → карточка / лейбл секции */
    --pad:16px;      /* внутренний паддинг карточки */
    --pad-in:12px;   /* паддинг вложенной карточки */
    --gap:12px;      /* между карточками */
    --sec:24px;      /* между секциями (вертикальный ритм) */
  }

  /* ── убираем десктопный левый рельс ── */
  .nav{display:none!important}

  /* горизонтальный барьер: ничто не уезжает за край вьюпорта (§1.3) */
  html,body{overflow-x:hidden}
  .app,.main,.content{overflow-x:hidden;max-width:100vw;min-width:0}
  .app{width:100vw}

  /* ── мобильная шапка = рестайл существующего .header (без дубля DOM) ──
     ОДНА строка 58px, как во всех макетах: бренд ······ [Crypto/Stocks] + avatar.
     Поиск/Ask AI НЕ в шапке — они живут в контенте секции (дашборд-subhead, stocks so-search). */
  .header{height:var(--m-header-h);min-height:var(--m-header-h);display:flex;flex-wrap:nowrap;
          align-items:center;justify-content:space-between;gap:10px;padding:0 16px;position:relative;z-index:10}
  .hdr-brand{order:0;justify-self:auto}
  .hdr-center{display:none}   /* глобальный поиск + Ask AI прячем; секции рисуют свой поиск в контенте */
  .hdr-right{order:1;margin-left:auto;justify-self:auto;gap:10px}
  /* десктоп-только элементы шапки прячем на мобиле */
  #lang-seg,.hdr-bell,.hdr-clock,.header .hdr-sep{display:none!important}
  /* мобильная шапка = SVG-вордмарк (h35 реальных глифов после обрезки viewBox); текст «ExosTrade» скрыт */
  .hdr-wordmark{display:none}
  .hdr-wordmark-img{display:block;height:23px}
  .seg-ctrl{border-radius:20px;flex-shrink:1;min-width:0}
  .mode-btn{padding:6px 13px;font-size:11px;font-weight:700}
  /* auth-слот компактно (иначе гостевые «Войти»+«Регистрация» + сегмент не влезают в 390) */
  .hdr-right .auth-signup-btn{display:none}                 /* гость: один «Войти» (в модалке всё равно обе вкладки) */
  .hdr-right .auth-login-btn{padding:7px 14px;font-size:12px;font-weight:600;white-space:nowrap;flex-shrink:0}
  .hdr-right .auth-chip{padding:0;background:none;border:none;gap:0}
  .hdr-right .auth-chip .auth-chip-info,.hdr-right .auth-chip .chev{display:none}   /* залогинен: только аватар, как в макете */
  .hdr-right .auth-chip .auth-av{width:34px;height:34px;border-radius:50%;font-size:14px;font-weight:800;flex-shrink:0}

  /* ── заголовок раздела: отдельный блок под шапкой (pg-head) — рисует каждая секция ── */
  .m-pg-head{display:flex;align-items:center;gap:10px;padding:14px 16px 4px}
  .m-pg-head h1{font-size:24px;font-weight:800;letter-spacing:-.02em;color:var(--text);margin:0}
  .m-pg-head .st{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;
                 color:var(--muted);margin-left:auto}
  .m-pg-head .st .d{width:6px;height:6px;border-radius:50%;background:var(--up)}

  /* ── дашборд-subhead: поиск + Ask AI (скроллится, как в mobile-dashboard-v2) ── */
  .m-subhead{display:flex;align-items:center;gap:10px;padding:12px 16px 6px}
  .m-search{flex:1;display:flex;align-items:center;gap:8px;background:var(--elevated);
            border:1px solid var(--border);border-radius:11px;padding:10px 13px;color:var(--dim);
            font-size:12.5px;font-weight:500;cursor:text}
  .m-search svg{width:16px;height:16px;flex-shrink:0}
  .m-askai{display:flex;align-items:center;gap:5px;padding:10px 15px;background:var(--blue);color:#fff;
           border:none;border-radius:11px;font-size:12.5px;font-weight:700;white-space:nowrap;
           font-family:var(--font);box-shadow:0 2px 14px rgba(91,141,255,.35);cursor:pointer}
  .m-search:active,.m-askai:active{transform:scale(.97)}

  /* N5: контент проскроллен, низ НЕ удваивается (было tabbar+16 у .page И у .dashboard = ~150px пустоты).
     Единый низ здесь = tabbar + 24 → 24px от последнего блока до таббара. .dashboard padding-bottom = 0. */
  .page,.page-full{padding-bottom:calc(var(--tabbar-h) + 44px + env(safe-area-inset-bottom,0px))}   /* Kamron 22.07: низ чистит БАР (не весь плавающий круг) — иначе большой чёрный пробел; FAB-круг стандартно нависает над правым нижним углом контента */

  /* ── нижний таб-бар (5 вкладок) ── */
  /* ═══ НАВБАР по референсу nav-bar.html (Kamron): dock = бар-пилюля + AI-круг в ОДНОМ ряду.
     Материал «glass» = сплошной градиент #14181f→#0e1219 + глянцевая безель-кромка (::before mask) + верхний блик
     (::after) — НЕ backdrop-blur. Активный таб = цвет --accent (без капсулы). Иконки-плейсхолдеры. FAB несёт liquid-metal поверх стекла. */
  .m-dock{position:fixed;left:0;right:0;bottom:calc(env(safe-area-inset-bottom,0px) + 20px);display:flex;align-items:center;justify-content:center;gap:0;padding:0 38px;max-width:440px;margin:0 auto;z-index:120;pointer-events:none}   /* Kamron 22.07 (по мокапу): бар с боковыми отступами (не впритык), чуть шире; FAB плавает над правым краем */
  .m-dock>*{pointer-events:auto}
  .m-tabbar,.m-fab{position:relative;background:linear-gradient(180deg,#14181f 0%,#0e1219 100%);box-shadow:0 18px 40px -14px rgba(0,0,0,.75),0 2px 6px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.06),inset 0 -10px 22px rgba(0,0,0,.35);isolation:isolate}
  .m-tabbar::before,.m-fab::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.4px;background:linear-gradient(180deg,rgba(255,255,255,.65) 0%,rgba(255,255,255,.10) 30%,rgba(255,255,255,0) 52%,rgba(255,255,255,.28) 100%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;z-index:4}
  .m-tabbar::after{display:none}   /* верхний стеклянный блик убран (Kamron: без эффекта стекла) */
  .m-tabbar::before{opacity:.7}   /* обводка бара на 30% менее заметна (Kamron; только бар — .m-fab::before не трогаем) */
  /* бар = плоский наш цвет --surface (без градиента-стекла), но ОБВОДКА (безель-кромка ::before) сохранена — Kamron: «убрать только градиент, обводку оставить» */
  .m-tabbar{flex:1;display:block;position:relative;height:var(--tabbar-h);border-radius:999px;background:var(--surface);box-shadow:0 16px 36px -14px rgba(0,0,0,.7),0 2px 6px rgba(0,0,0,.5)}   /* display обязателен: базовое правило (стр.7) прячет .m-tabbar display:none */
  /* вкладки во внутреннем слое → _render перестраивает только их, металл-хост (сосед) переживает пересборку */
  .m-tabbar-tabs{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:0 18px}
  /* liquid-metal = ОБВОДКА бара (Component.pdf: металл виден только тонкой кромкой ~2px, заливка тёмная #202020→#000).
     Канвас на весь шейп (z0) → тёмная заливка .m-tabbar-fill поверх (z1, inset 2px) оставляет металл только по краю.
     Страж перфа в bar-metal.js: FPS<18 → уничтожить+вернуть стекло. Прямая просьба Kamron'а (переопределяет запрет WebGL на баре). */
  .m-tabbar-metal{position:absolute;inset:0;border-radius:inherit;overflow:hidden;z-index:0}
  .m-tabbar-metal canvas{width:100%!important;height:100%!important;display:block;position:absolute;top:0;left:0;border-radius:inherit}
  .m-tabbar-fill{position:absolute;inset:2px;border-radius:999px;z-index:1;display:none;background:linear-gradient(180deg,var(--elevated) 0%,var(--surface) 100%);box-shadow:inset 0 1px 0 rgba(255,255,255,.05),inset 0 -8px 18px rgba(0,0,0,.35)}   /* заливка = тёмно-синий блок (как карточки: elevated→surface) */
  .m-tabbar-metal-on .m-tabbar-fill{display:block}   /* тёмная заливка → металл остаётся только ~2px кромкой (референс) */
  /* НЕПРЕРЫВНАЯ металл-обводка: безель (::before) перекрашен в полупрозрачный серебристый градиент поверх шейдер-кромки.
     Серебро есть ВЕЗДЕ (тёмные зоны шейдера не «обрезают» обводку), а живой шиммер бьёт сквозь полупрозрачные стопы. */
  .m-tabbar-metal-on::before{padding:2px;z-index:2;background:linear-gradient(135deg,rgba(236,240,247,.66) 0%,rgba(176,185,200,.34) 26%,rgba(120,129,145,.30) 50%,rgba(176,185,200,.34) 74%,rgba(236,240,247,.66) 100%)}
  .m-tabbar-metal-on::after{display:none}   /* верхний белый блик убран — обводка сама даёт металл */
  .m-tab{position:relative;z-index:3;display:flex;align-items:center;justify-content:center;width:46px;height:46px;flex:0 0 auto;border:0;background:transparent;cursor:pointer;color:#8f9aab;border-radius:14px;font-family:var(--font);transition:color .18s ease,transform .12s ease;-webkit-tap-highlight-color:transparent}
  .m-tab svg{width:24px;height:24px;stroke-width:1.8;display:block}
  .m-tab .tl{display:none}   /* icon-only — подпись в aria-label */
  .m-tab.active{color:var(--blue)}
  .m-tab:active{transform:scale(.92)}
  /* AI-FAB — круг, стекло-база + liquid-metal поверх (когда WebGL). Знак EXOS сверху. */
  /* Kamron 22.07 (по мокапу): FAB плавает НАД правым краем бара (absolute, вне ряда), с лёгким свесом наружу. */
  .m-fab{position:absolute;right:30px;bottom:calc(var(--tabbar-h) + 13px);display:flex;align-items:center;justify-content:center;width:var(--tabbar-h);height:var(--tabbar-h);border-radius:50%;border:0;padding:0;cursor:pointer;z-index:6;color:#dfe7f3;transition:transform .15s ease;-webkit-tap-highlight-color:transparent}
  .m-fab:active{transform:scale(.94)}
  .m-fab.m-fab-off,.m-fab.m-fab-kbd{display:none}
  .m-fab-ring{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0deg,#38bdf8 55deg,#2E5BD0 125deg,transparent 205deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px));animation:m-fab-spin 7s linear infinite;z-index:1}
  .m-fab-mark{width:46%;height:46%;position:relative;z-index:3;display:block;filter:drop-shadow(0 0 6px rgba(122,167,255,.5))}
  .m-fab-metal{position:absolute;inset:0;border-radius:50%;overflow:hidden;z-index:0}
  .m-fab-metal canvas{width:100%!important;height:100%!important;display:block;position:absolute;top:0;left:0;border-radius:50%}
  .m-fab-fill{position:absolute;inset:2px;border-radius:50%;z-index:1;display:none;background:linear-gradient(180deg,var(--elevated) 0%,var(--surface) 100%);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}   /* заливка круга = тёмно-синий блок; металл только ~2px кромкой */
  .m-fab-metal-on .m-fab-fill{display:block}
  .m-fab-metal-on::before{padding:2px;z-index:2;background:linear-gradient(135deg,rgba(236,240,247,.66) 0%,rgba(176,185,200,.34) 26%,rgba(120,129,145,.30) 50%,rgba(176,185,200,.34) 74%,rgba(236,240,247,.66) 100%)}   /* непрерывная металл-обводка круга (как у бара) */
  .m-fab-metal-on .m-fab-ring{display:none}
  .m-fab-ripple{position:absolute;width:20px;height:20px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:5;background:radial-gradient(circle,rgba(255,255,255,.4) 0%,rgba(255,255,255,0) 70%);animation:m-fab-ripple .6s ease-out}
  @keyframes m-fab-ripple{0%{transform:translate(-50%,-50%) scale(0);opacity:.6}100%{transform:translate(-50%,-50%) scale(4);opacity:0}}

  /* ── лист «Ещё» (bottom sheet) ── */
  .m-sheet-backdrop{display:block;position:fixed;inset:0;background:rgba(5,7,10,.6);
                    z-index:130;opacity:0;pointer-events:none;transition:opacity .2s ease}
  .m-sheet-backdrop.open{opacity:1;pointer-events:auto}
  .m-sheet{display:block;position:fixed;left:0;right:0;bottom:0;z-index:140;background:var(--bg);
           border-top:1px solid var(--border);border-radius:18px 18px 0 0;
           padding:8px 12px calc(18px + env(safe-area-inset-bottom,0));
           transform:translateY(102%);transition:transform .24s cubic-bezier(.4,0,.2,1)}
  .m-sheet.open{transform:none}
  .m-sheet-grip{width:38px;height:4px;border-radius:2px;background:var(--border2);margin:6px auto 14px}
  /* T22: eyebrow «ЕЩЁ · N разделов» (референс) */
  .m-sheet-eyebrow{display:flex;align-items:baseline;gap:10px;padding:0 4px 12px}
  .m-sheet-eyebrow .m-eb-h{font-size:12px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
  .m-sheet-eyebrow .m-eb-count{margin-left:auto;font-size:11px;font-weight:600;letter-spacing:.03em;color:var(--muted)}
  /* T22: bento-сетка 4 колонки (референс more-section.html, токены продукта) */
  .m-sheet-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:78px;gap:8px}
  /* B1: переключатель языка RU/EN в листе «Ещё» (десктопный #lang-seg скрыт < 768) */
  .m-sheet-lang{display:flex;align-items:center;justify-content:space-between;padding:16px 4px 4px;margin-top:14px;border-top:1px solid var(--border)}
  .m-sheet-lang > span{font-size:13px;color:var(--muted);font-weight:600}
  .m-lang-seg{display:flex;background:var(--elevated);border-radius:10px;padding:3px}
  .m-lang-seg button{border:none;background:none;color:var(--dim);font-size:12px;font-weight:700;padding:7px 16px;border-radius:8px;position:relative}
  .m-lang-seg button.on{background:var(--blue);color:#fff}
  .m-lang-seg button::after{content:"";position:absolute;inset:-8px}
  /* ── T22: bento-плитки листа «Ещё» ── */
  .m-tile{position:relative;grid-column:span 2;display:flex;flex-direction:column;align-items:center;justify-content:center;
          text-align:center;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:16px;   /* как карточки сайта (--surface на тёмном фоне листа), не синий --elevated */
          color:var(--text);cursor:pointer;padding:10px;font-family:var(--font);-webkit-tap-highlight-color:transparent;
          transition:transform .16s ease,border-color .18s ease,background .18s ease}
  .m-tile .m-tile-ic{display:flex;color:var(--muted);transition:color .18s ease}
  .m-tile .m-tile-ic svg{width:24px;height:24px;stroke-width:1.7;display:block}
  .m-tile .m-tile-lbl{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text);line-height:1}
  .m-tile:active{transform:scale(.98);border-color:var(--blue)}   /* тач: hover→press (референс) */
  .m-tile.active{border-color:var(--blue);background:var(--blue-dim)}
  .m-tile.active .m-tile-ic,.m-tile.active .m-tile-lbl{color:var(--blue)}
  /* AI/New микро-бейдж (угол; не у featured) */
  .m-tile-sub{position:absolute;top:8px;right:9px;font-size:9.5px;font-weight:700;letter-spacing:.02em;padding:2px 6px;border-radius:6px;line-height:1}
  .m-tile-sub.ai{color:var(--blue);background:var(--blue-dim)}
  .m-tile-sub.new{color:#38c6ff;background:rgba(56,198,255,.14)}
  .m-tile-sub.soon{color:var(--muted);border:1px solid var(--border)}
  /* featured — 2×2, лево-низ, иконка сверху + описание */
  .m-tile.feat{grid-column:span 2;grid-row:span 2;align-items:flex-start;justify-content:flex-end;text-align:left;gap:6px;padding:14px;
               background:var(--surface);border-color:var(--border2)}
  .m-tile.feat .m-tile-ic{color:var(--blue);align-self:flex-start}
  .m-tile.feat .m-tile-ic svg{width:28px;height:28px}
  .m-tile.feat .m-tile-sp{flex:1}
  .m-tile.feat .m-tile-lbl{font-size:15px;letter-spacing:.01em;text-transform:none}
  .m-tile.feat .m-tile-desc{font-size:11px;font-weight:500;color:var(--muted);line-height:1.35}
  /* featured = ПОДПИСКА «Премиум» (референс): синий акцент-радиал + gold-бейдж PRO */
  .m-tile.feat.prem{background:linear-gradient(155deg,rgba(77,139,255,.28) 0%,rgba(77,139,255,.07) 52%,transparent 100%),var(--surface)}   /* Премиум чуть градиентно-синий — выделяется среди тёмных плиток (Kamron) */
  .m-tile.feat.prem .m-tile-ic{color:var(--blue)}
  .m-tile-badge{position:absolute;top:12px;right:12px;z-index:1;font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:4px 8px;border-radius:99px;background:linear-gradient(90deg,#ffd36b,#f2a33c);color:#241a08}
  /* wide — span-4, ряд (чинит нечёт без дыры) */
  .m-tile.wide{grid-column:span 4;flex-direction:row;justify-content:center;gap:10px}
  .m-tile.wide .m-tile-ic svg{width:22px;height:22px}
  /* coming-soon — МЁРТВЫЙ класс: сейчас «скоро»-разделов нет; активируется, если появятся (opacity+не кликается) */
  .m-tile.coming{opacity:.6;cursor:default;pointer-events:none}
  @media (prefers-reduced-motion:reduce){.m-tile{transition:none}}
}

/* ═══════════ M3 · ДАШБОРД (эталон mobile-dashboard-v2.html) ═══════════
   Десктоп-грид .dashboard (290/1fr/350) → одна прокручиваемая колонка карточек.
   Порядок макета получаем через display:contents (уплощаем вложенность) + flex order.
   DOM не трогаем → десктоп-грид цел (весь блок под @media). */
@media(max-width:768px){
  .m-subhead{display:flex}

  /* страница дашборда скроллится колонкой */
  :is(#page-dashboard,#page-screeners-alts).page-full{overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:calc(var(--tabbar-h) + 44px + env(safe-area-inset-bottom,0px))}   /* низ чистит бар; FAB-круг нависает над правым нижним углом */
  :is(#page-dashboard,#page-screeners-alts) .dashboard{display:flex;flex-wrap:wrap;flex-direction:row;grid-template-columns:none;
    row-gap:24px;column-gap:14px;padding:8px 16px 0;height:auto;
    flex:0 0 auto;overflow:visible;box-sizing:border-box}
  /* уплощаем контейнеры-обёртки — их дети становятся flex-элементами .dashboard */
  :is(#page-dashboard,#page-screeners-alts) .dash-center,:is(#page-dashboard,#page-screeners-alts) .dash-right,:is(#page-dashboard,#page-screeners-alts) .dash-bottom{display:contents}

  /* ширины v3: всё во всю ширину (F&G и Лонг/Шорт теперь тоже full-width) */
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices),:is(#page-dashboard,#page-screeners-alts) .pc,
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget,:is(#page-dashboard,#page-screeners-alts) :is(#w-orderbook,#alts-ob-widget),
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget{flex:1 1 100%;width:100%;min-width:0}

  /* порядок макета v4 (T18-A, Kamron 20.07): chart → prices → MARKET → F&G → L/S → orderbook → insider → news.
     Market-блок уехал вниз (между рельсом и F&G); кошелёк-блок встаёт наверх (order:0, только дашборд). ALTS-зеркало тем же :is. */
  :is(#page-dashboard,#page-screeners-alts) .pc{order:1}                                 /* Чарт — наверх */
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices){order:2}       /* Активы (рельс Топ-100) */
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget:nth-child(1){order:3}    /* Обзор рынка (Market) — ВНИЗ, между рельсом и F&G */
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget:nth-child(1){order:4}   /* Fear & Greed */
  /* T18-A кошелёк-блок «Общие активы» (канон mockup-wallet-card, вердикт Kamron 20.07) — ТОЛЬКО #page-dashboard, order:0. min-height по состоянию A → №15 без прыжка */
  #page-dashboard .dash-wallet{display:block;order:0;margin-top:16px;width:100%}   /* ширина: width:100% заполняет колонку (рёбра как chart). Зазоры (#3): margin-top:16 + dashboard padding-top:8 = 24 (шапка→карточка); margin-bottom убран → flex row-gap:24 (карточка→график) — оба ==--sec, один токен */
  #page-dashboard .dw-card{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:18px;cursor:default;min-height:112px}
  #page-dashboard .dw-cta-card{cursor:default}
  #page-dashboard .dw-main{flex:1;min-width:0}
  #page-dashboard .dw-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
  #page-dashboard .dw-lbl{font-size:12px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--dim)}
  #page-dashboard .dw-addr{font-size:11px;color:var(--dim2,#67768a);white-space:nowrap;font-family:var(--mono)}
  #page-dashboard .dw-val{margin-top:8px;font-size:32px;font-weight:700;letter-spacing:-.01em;color:var(--text);line-height:1;font-family:var(--mono);font-variant-numeric:tabular-nums}
  #page-dashboard .dw-pnl{margin-top:6px;display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--dim)}
  #page-dashboard .dw-pnl.up{color:var(--up)}#page-dashboard .dw-pnl.dn{color:var(--dn)}
  #page-dashboard .dw-pnl .cap{font-weight:400;color:var(--dim)}
  #page-dashboard .dw-spark{flex:none;width:84px;height:40px}
  #page-dashboard .dw-spark polyline{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
  #page-dashboard .dw-spark.up polyline{stroke:var(--up)}#page-dashboard .dw-spark.dn polyline{stroke:var(--dn)}
  #page-dashboard .dw-chev{flex:none;color:var(--dim);font-size:18px;line-height:1}
  #page-dashboard .dw-cta-btn{flex:none;background:var(--blue);color:#fff;border:0;border-radius:10px;padding:9px 14px;font-size:13px;font-weight:600;font-family:var(--font);cursor:pointer}
  #page-dashboard .dw-pf-link{position:relative;margin-top:10px;align-self:flex-start;background:none;border:0;color:var(--blue);font-size:13px;font-weight:600;font-family:var(--font);cursor:pointer;padding:0}
  #page-dashboard .dw-pf-link::after{content:"";position:absolute;inset:-10px}   /* тап-зона ≥40 */
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget:nth-child(2){order:5}   /* Long / Short */
  :is(#page-dashboard,#page-screeners-alts) :is(#w-orderbook,#alts-ob-widget){order:6}                        /* Order Book */
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget:nth-child(3){order:7}   /* Insider */
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget:nth-child(3){order:8}    /* News */

  /* ── Обзор рынка (наверх, без заголовка, 3 колонки, 21px/800 mono, center) ── */
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget:nth-child(1) .widget-head{display:none}   /* без заголовка/иконки (эталон) */
  :is(#page-dashboard,#page-screeners-alts) .widget-head{border-bottom:none}   /* §4: шапки виджетов на мобилке без линии — отделяются паддингом (F&G/L-S/OrderBook/Market) */
  /* N16: маркет-ячейка дословно по авторитетной копии макета (16px 8px · center · 21px/800).
     text-align:center — колонки равны 1fr(119px), значения разной длины: при left остаток вываливается
     вправо (дыра у края посл. колонки на скрине), при center делится поровну → делители по третям. */
  :is(#page-dashboard,#page-screeners-alts) .market-grid{display:grid;grid-template-columns:1fr 1fr 1fr}   /* три равные 1fr, БЕЗ gap */
  :is(#page-dashboard,#page-screeners-alts) .market-cell{padding:16px 8px;border-right:1px solid var(--border);min-width:0;text-align:center}
  :is(#page-dashboard,#page-screeners-alts) .market-cell:last-child{border-right:none}
  :is(#page-dashboard,#page-screeners-alts) .market-cell .k{font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:.07em;font-weight:700;margin-bottom:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  :is(#page-dashboard,#page-screeners-alts) .market-cell .v{font-size:21px;font-weight:800;font-family:var(--mono);letter-spacing:-.8px;line-height:1.05}
  :is(#page-dashboard,#page-screeners-alts) .market-cell .v span{display:block;font-size:11px;color:var(--up);font-weight:700;margin-top:5px;letter-spacing:0}

  /* ── Инсайдеры + Новости = второй план (.flat): без рамки и фона ── */
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget:nth-child(3),
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget:nth-child(3){background:none;border:none;border-radius:0}
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget:nth-child(3) .widget-head,
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget:nth-child(3) .widget-head{padding-left:16px;padding-right:16px;min-height:0;border-bottom:none}

  /* ── §7 файл-независимые правки дашборда ── */
  /* 1. #chart-chg — гарантированно скрыт (id-селектор поверх .ct-chg, на случай спор специфичности) */
  :is(#page-dashboard,#page-screeners-alts) #chart-chg{display:none}
  /* 2. прайс-рельс: убрать шапку таблицы, пиннед-группу «ОСНОВНЫЕ», пейджер «4 assets» */
  :is(#page-dashboard,#page-screeners-alts) .prices-cols,:is(#page-dashboard,#page-screeners-alts) #prices-pin,:is(#page-dashboard,#page-screeners-alts) .prices-pager{display:none}
  /* 3. рельс → 6 строк */
  :is(#page-dashboard,#page-screeners-alts) #prices-rail .rail-row:nth-child(n+7){display:none}
  /* N4: «Все криптовалюты ›» внизу карточки активов */
  /* .prices-more удалён из DOM (решение §3): «Все криптовалюты» — раздела/роута нет, врущий контрол убран */
  /* N14: у #w-prices своя рамка-карточка → внутренние рамки .rail-frame (0.5px) дают 2px. Убираем; делитель = один border-bottom тулбара */
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices) .rail-frame{border:none;background:none;border-radius:0}
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices) .prices-toolbar{border-bottom:1px solid var(--border)}
  :is(#page-dashboard,#page-screeners-alts) #prices-rail .rail-row{border-top:none;border-bottom:1px solid var(--border)}   /* §4: делители рельса как в макете — 1px/7% (было 0.5px/.04 из layout.css) */
  :is(#page-dashboard,#page-screeners-alts) #prices-rail .rail-row:nth-child(6),:is(#page-dashboard,#page-screeners-alts) #prices-rail .rail-row:last-child{border-bottom:none}   /* под последним видимым рядом линии нет */
  /* 5. новости: заголовок в 2 строки, не многоточие (§4-обрезка) */
  :is(#page-dashboard,#page-screeners-alts) .news-title{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  /* 7 + N11: инсайдеры — без фиол.полосы, волосяные разделители, увеличенные зазоры (было 11/16 gap5 → 14/16 gap7) */
  /* N13: обнуляем свои padding у #insider и #news (иначе .inr складывается с ними → уезжает вправо).
     Инвариант макета = 33px (16 row-padding + 6 точка + 11 gap). Инсайдер без точки → текст сразу на 33px,
     новость: точка на 16, текст на 33 (см. .news-item/.news-bar выше). Оба текстовых ребра совпадают.
  :is(#page-dashboard,#page-screeners-alts) #insider,:is(#page-dashboard,#page-screeners-alts) #news{padding:0}
  :is(#page-dashboard,#page-screeners-alts) .inr{display:flex;flex-direction:column;gap:10px;padding:14px 16px 14px 33px;border-left:none;border-bottom:1px solid rgba(255,255,255,.045)}   /* §4: линия СНИЗУ (было сверху) — единый паттерн с .news-item; gap 10 */
  :is(#page-dashboard,#page-screeners-alts) .inr:nth-child(4),:is(#page-dashboard,#page-screeners-alts) .inr:last-child{border-bottom:none}   /* под последним видимым рядом линии нет */
  :is(#page-dashboard,#page-screeners-alts) .inr .m{display:flex;align-items:center;gap:8px}
  :is(#page-dashboard,#page-screeners-alts) .inr .t{font-size:11.5px;line-height:1.45;font-weight:500;color:var(--text)}   /* N13: белый как заголовок новости; приглушены только мета */
  /* 4,6 + N12: единый вид «Все ›» / «1Ч ›» = .card-more (muted 11px/600, глиф ›, gap 3, справа) */
  :is(#page-dashboard,#page-screeners-alts) .dash-more{display:inline-flex;align-items:center;gap:3px;margin-left:auto;font-size:11px;font-weight:600;color:var(--muted)}
  :is(#page-dashboard,#page-screeners-alts) .dash-more::after{content:"\203A"}   /* N12: шеврон › у «1Ч» (news «Все» имеет свой › в тексте) */
  /* N11: L/S-бар (дашборд, мобилка) — сегменты полупрозрачные, текст ЦВЕТНОЙ, зазор 2px (канон v2; десктоп-база .lsbar не тронута) */
  :is(#page-dashboard,#page-screeners-alts) .lsbar{gap:2px}
  :is(#page-dashboard,#page-screeners-alts) .lsbar-lo{background:rgba(61,220,151,.20);color:var(--up);text-shadow:none}
  :is(#page-dashboard,#page-screeners-alts) .lsbar-sh{background:rgba(248,113,113,.20);color:var(--dn);text-shadow:none}
  :is(#page-dashboard,#page-screeners-alts) .ob-st-ok{color:var(--dim)}   /* N14: «X сек назад» на мобилке --dim (десктоп остаётся зелёным) */
  /* N19/20: Insider тег↔чип — на проде поменялись местами. Канон: .tag синий на blue-dim пилле, .chip серый --elevated mono. Мобилко-скоуп. */
  :is(#page-dashboard,#page-screeners-alts) .inr .tag{background:rgba(91,141,255,.14);color:var(--blue);padding:1px 6px;border-radius:5px;font-weight:700}
  :is(#page-dashboard,#page-screeners-alts) .inr .chip{background:var(--elevated);color:var(--muted);font-family:var(--mono)}
  :is(#page-dashboard,#page-screeners-alts) .news-meta .news-time::before{content:"· "}   /* N23: middot-разделитель источник·время (The Block · 2ч); дашборд-news = .news-meta/.news-time */
  :is(#page-dashboard,#page-screeners-alts) .widget-head [data-arg="news"]{color:var(--muted)!important}   /* N25: «Все ›» синий→--muted (перебиваем inline) */
  /* N12: новостная ссылка была синей 10px ↗ → приводим к тому же виду (inline-стиль перебиваем !important) */
  :is(#page-dashboard,#page-screeners-alts) .dash-right>.widget:nth-child(3) .widget-head a{color:var(--muted)!important;font-size:11px!important;font-weight:600!important}

  /* ── 8. F&G ПОРТ (эталон .fng-top/.fng-line/.fng-track/.fng-hist), значения из спеки getComputedStyle ── */
  :is(#page-dashboard,#page-screeners-alts) .fng-body,:is(#page-dashboard,#page-screeners-alts) .fng-ends{display:none}   /* десктопный F&G скрыт на мобиле */
  :is(#page-dashboard,#page-screeners-alts) .mfg{display:block}
  :is(#page-dashboard,#page-screeners-alts) .mfg-top{display:flex;align-items:center;gap:16px;padding:14px 15px}
  :is(#page-dashboard,#page-screeners-alts) .mfg-gauge{flex-shrink:0}
  :is(#page-dashboard,#page-screeners-alts) .mfg-nums{flex:1;min-width:0}
  :is(#page-dashboard,#page-screeners-alts) .mfg-line{display:flex;align-items:center;gap:9px}
  :is(#page-dashboard,#page-screeners-alts) .mfg-big{font-size:34px;font-weight:800;font-family:var(--mono);letter-spacing:-1px;line-height:1;color:var(--amber);flex-shrink:0}
  :is(#page-dashboard,#page-screeners-alts) .mfg-pill2{font-size:12px;font-weight:800;color:var(--amber);background:rgba(247,185,85,.13);border:1px solid rgba(247,185,85,.3);padding:4px 10px;border-radius:7px;white-space:nowrap}
  :is(#page-dashboard,#page-screeners-alts) .mfg-pill2.ef{color:var(--dn);background:rgba(248,113,113,.13);border-color:rgba(248,113,113,.3)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-pill2.g,:is(#page-dashboard,#page-screeners-alts) .mfg-pill2.eg{color:var(--up);background:rgba(61,220,151,.13);border-color:rgba(61,220,151,.3)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-pill2.n{color:var(--muted);background:rgba(255,255,255,.06);border-color:var(--border)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-d{font-size:11px;font-weight:700;font-family:var(--mono);margin-left:auto;white-space:nowrap}
  /* .mfg-track/.mfg-knob удалены (решение §2): дуга+число+концы уже кодируют F&G; полоса-ползунок — третий повтор */
  :is(#page-dashboard,#page-screeners-alts) .mfg-scale{font-size:11px;color:var(--dim);font-family:var(--mono);margin-top:7px}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hist{border-top:1px solid var(--border)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-h{display:flex;align-items:center;gap:10px;padding:9px 15px;border-bottom:1px solid var(--border)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-h:last-child{border-bottom:none}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hk{font-size:12px;font-weight:600;color:var(--muted);flex:1;min-width:0}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hd{font-size:11px;color:var(--dim);font-family:var(--mono);flex-shrink:0}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hb{font-size:11px;font-weight:700;padding:3px 8px;border-radius:5px;white-space:nowrap;flex-shrink:0}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hb.ef{color:var(--dn);background:var(--dn-dim)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hb.eg{color:var(--up);background:var(--up-dim)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hb.n{color:var(--muted);background:rgba(255,255,255,.06)}
  :is(#page-dashboard,#page-screeners-alts) .mfg-hv{font-size:12px;font-weight:800;font-family:var(--mono);width:22px;text-align:right;flex-shrink:0}

  /* ── §2.1 P0: убрать ПЛАВАЮЩИЙ форекс-чип с мобилки (закрывал логотип). Статичный .evt под чартом — отдельно ── */
  .forex-chip,.forex-led-bell{display:none!important}
  /* §2.2 подсветка события: статичная янтарная рамка + мягкое свечение (гасим пульс-анимацию, не саму метку) */
  :is(#page-dashboard,#page-screeners-alts) .pc.led-soft,:is(#page-dashboard,#page-screeners-alts) .pc.led-amber,:is(#page-dashboard,#page-screeners-alts) .pc.led-hot,:is(#page-dashboard,#page-screeners-alts) .pc.led-flash{animation:none!important;border-color:rgba(247,185,85,.30);box-shadow:0 0 18px rgba(247,185,85,.085)}
  /* §2.5 лимиты: инсайдеры 4 строки, новости 4 строки */
  :is(#page-dashboard,#page-screeners-alts) #insider .inr:nth-child(n+5){display:none}
  :is(#page-dashboard,#page-screeners-alts) #news .news-item:nth-child(n+5){display:none}
  /* §2.7 новости: маркер = точка .news-dot (не цветная вертикальная полоса); тон сохраняем цветом точки */
  /* N13/N6 макет-инвариант (.flat-r.news-row спека): row padding 14×16, точка на 16, текст на 33 (16+6+11 gap).
     Паддинг ряда — на .news-item (общий верх для точки и текста), .news-content обнулён. */
  :is(#page-dashboard,#page-screeners-alts) .news-item{padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.045)}   /* §4: унифицировано с .inr — линия снизу, .045 */
  :is(#page-dashboard,#page-screeners-alts) #news .news-item:nth-child(4),:is(#page-dashboard,#page-screeners-alts) #news .news-item:last-child{border-bottom:none}
  :is(#page-dashboard,#page-screeners-alts) .news-content{padding:0}
  /* точка отцентрована по ПЕРВОЙ строке заголовка: line-height 17.5 → (17.5-6)/2 ≈ 6px сверху */
  :is(#page-dashboard,#page-screeners-alts) .news-bar{width:6px;height:6px;border-radius:50%;align-self:flex-start;margin:6px 11px 0 0;background:var(--blue)}   /* N6: один цвет — тональность несёт стрелка, не точка */
  :is(#page-dashboard,#page-screeners-alts) .news-title{font-size:12.5px;font-weight:500;line-height:1.4;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}   /* спека .news-txt 12.5/500; десктоп режет в 1 строку — на мобиле 2 */
  :is(#page-dashboard,#page-screeners-alts) .news-meta{font-size:11px;font-family:var(--mono);color:var(--dim);letter-spacing:.02em;margin-top:4px;text-transform:uppercase}   /* N6: мета — mono/dim/uppercase */
  :is(#page-dashboard,#page-screeners-alts) .news-meta .news-source-ico,:is(#page-dashboard,#page-screeners-alts) .news-meta img{display:none}   /* N6: favicon источника скрыт */

  /* карточки — общий вид (радиус/бордер уже в .widget); высоты сбрасываем на авто */
  :is(#page-dashboard,#page-screeners-alts) .widget{height:auto;min-height:0;border-radius:14px}

  /* ── CHART карточка (эталон mobile-dashboard-v2 v2: .ch-bar — пилюля пары + TF; БЕЗ прайс-героя и ICT) ──
     Прайс-героя (.ct-price/.ct-chg), ICT-тогглов и Teach на мобиле НЕТ. Свечи+объём+priceLine чарт уже
     рисует. EMA-строка / foot / иконки пилюли — новый DOM, ждут решения (см. чекпоинт). */
  /* N9: карточка чарта = фон полотна графика (--bg #090D12, чарт layout=transparent). Один цвет на всю карточку */
  :is(#page-dashboard,#page-screeners-alts) .pc{height:auto;background:var(--bg)}
  :is(#page-dashboard,#page-screeners-alts) .pc-head{flex-direction:row;align-items:center;justify-content:space-between;gap:8px;padding:12px 12px 0;min-height:0;height:auto;overflow:visible;border-bottom:none;background:transparent}
  /* N10: внутри карточки чарта — НИ ОДНОЙ внутренней границы (ряды делят паддинги, карточку держит рамка) */
  :is(#page-dashboard,#page-screeners-alts) .ch-ema,:is(#page-dashboard,#page-screeners-alts) .pc-body,:is(#page-dashboard,#page-screeners-alts) .pc-chart{border:none}
  :is(#page-dashboard,#page-screeners-alts) .ct-left{flex:0 0 auto;gap:0}
  :is(#page-dashboard,#page-screeners-alts) .ct-price,:is(#page-dashboard,#page-screeners-alts) .ct-chg{display:none}   /* прайс-герой убран — цена читается с оси */
  :is(#page-dashboard,#page-screeners-alts) .ct-pair{display:inline-flex;align-items:center;gap:7px;background:var(--elevated);border:1px solid var(--border);border-radius:9px;padding:8px 10px;font-size:12px;font-weight:700;color:var(--text);white-space:nowrap;text-transform:none;letter-spacing:0}
  :is(#page-dashboard,#page-screeners-alts) .ct-center{display:none}   /* ICT-тогглы (OB/FVG/KZ/LIQ/Setups) + Teach — вне мобилки */
  :is(#page-dashboard,#page-screeners-alts) .ct-right{flex:1;display:flex;justify-content:flex-end}
  :is(#page-dashboard,#page-screeners-alts) .ct-right .switcher{background:none;padding:0;gap:2px}
  :is(#page-dashboard,#page-screeners-alts) .tf-btn{padding:8px 11px;border-radius:8px;font-size:11px;font-weight:700;position:relative}
  :is(#page-dashboard,#page-screeners-alts) .tf-btn::after{content:"";position:absolute;inset:-8px}   /* §4: hit-area ≥44px, визуал не меняется */
  :is(#page-dashboard,#page-screeners-alts) .pc-body{display:block;flex:none;height:250px;min-height:0}
  :is(#page-dashboard,#page-screeners-alts) .pc-chart{width:100%;height:250px;min-width:0}
  :is(#page-dashboard,#page-screeners-alts) #main-chart{width:100%;height:250px}
  :is(#page-dashboard,#page-screeners-alts) .chart-legend{display:none}       /* OHLC-легенда lightweight-charts — в эталоне её нет */
  :is(#page-dashboard,#page-screeners-alts) .setup-explained{display:none}    /* Setup-Explained сайдбар — вне мобилки */
  /* N3: Core PPI event bar (.evt) — сразу под чартом (order:2, после .pc). margin-top:-14 при row-gap:24 → 10px до чарта */
  /* N15: .evt — брат карточки, во всю ширину (был content-width → обрезался справа). Своих width/margin-x нет */
  :is(#page-dashboard,#page-screeners-alts) .evt{order:2;flex:1 1 100%;width:100%;min-width:0;margin:-14px 0 0;display:flex;align-items:center;gap:9px;background:var(--surface);border:1px solid var(--border);border-left:2px solid var(--amber);border-radius:11px;padding:10px 12px}
  :is(#page-dashboard,#page-screeners-alts) .evt-dot{width:6px;height:6px;border-radius:50%;background:var(--amber);flex-shrink:0}
  :is(#page-dashboard,#page-screeners-alts) .evt-b{flex:1;min-width:0}
  :is(#page-dashboard,#page-screeners-alts) .evt-n{font-size:12px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  :is(#page-dashboard,#page-screeners-alts) .evt-m{font-size:11px;color:var(--dim);font-family:var(--mono);margin-top:2px}
  :is(#page-dashboard,#page-screeners-alts) .evt-btn{position:relative;font-size:11px;font-weight:700;color:var(--muted);background:var(--elevated);border:1px solid var(--border);border-radius:20px;padding:5px 10px;flex-shrink:0;white-space:nowrap;font-family:var(--font)}
  :is(#page-dashboard,#page-screeners-alts) .evt-btn::after{content:"";position:absolute;inset:-10px}
  /* N1: пилюля пары — иконка поиска 13×13 + шеврон 11×11 как SVG (не глиф → шеврон центрируется по строке) */
  :is(#page-dashboard,#page-screeners-alts) .ct-pair{cursor:pointer;align-items:center}
  :is(#page-dashboard,#page-screeners-alts) .ct-pair::before{content:"";width:13px;height:13px;flex-shrink:0;margin-right:1px;background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238A99AC' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.5-3.5'/%3E%3C/svg%3E")}
  /* .ct-pair::after (шеврон ⌄) убран (решение §3): обещал дропдаун выбора пары, тап лишь скроллит к поиску — оставлена лупа ::before */
  /* T14: лупа .ct-pair::before СНЯТА на ДАШБОРДЕ (пресеты BTC·ETH·SOL заменяют свободный выбор; ALTS сохраняет свою лупу — общий компонент задет только тут); ряд ct-right (пресеты+таймфреймы) переносится на @360 без вылета (№1) */
  #page-dashboard .ct-pair::before{content:none;width:0;margin:0}
  #page-screeners-alts .ct-pair::before{content:none;width:0;margin:0}   /* Kamron 22.07: убрать иконку поиска (лупу) из кнопки пары BNB/USDT в альтах */
  #page-screeners-alts .ct-left{gap:7px}   /* %-изменение вплотную к кнопке пары (в притык), но читаемо */
  #page-dashboard .ct-right{flex-wrap:wrap;justify-content:flex-end;gap:6px 8px}
  /* T14 (ТОЛЬКО мобилка): пилюля дашборда = триггер дропдауна пары. Десктоп статичен (layout.css). Утечка откатана 19.07. */
  #page-dashboard button.ct-pair{cursor:pointer;min-height:40px}
  #page-dashboard .ct-sym-chev{display:inline-block;transition:transform .2s ease;flex-shrink:0;opacity:.7}
  #page-dashboard .ct-sym-dd.open .ct-sym-chev{transform:rotate(180deg)}
  #page-dashboard .ct-sym-dd.open button.ct-pair{box-shadow:inset 0 0 0 1.5px var(--blue)}
  #page-dashboard .ct-sym-menu{display:block;position:absolute;top:calc(100% + 6px);left:0;min-width:150px;background:var(--surface);box-shadow:inset 0 0 0 1px rgba(255,255,255,.13),0 12px 32px rgba(0,0,0,.45);border-radius:12px;padding:6px;z-index:60;opacity:0;transform:translateY(-6px) scale(.97);pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.22,.61,.36,1)}
  #page-dashboard .ct-sym-dd.open .ct-sym-menu{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}
  #page-dashboard .ct-sym-menu button{display:flex;align-items:center;width:100%;min-height:40px;padding:8px 12px;background:none;border:0;color:var(--text);font:600 13px var(--font);text-align:left;border-radius:8px;cursor:pointer;transition:background .12s}
  #page-dashboard .ct-sym-menu button:hover{background:rgba(91,141,255,.12)}
  #page-dashboard .ct-sym-menu button.active{background:rgba(91,141,255,.10);color:var(--blue)}
  /* N2: TF-кнопки по вертикали в центр ряда */
  :is(#page-dashboard,#page-screeners-alts) .ct-right,:is(#page-dashboard,#page-screeners-alts) .ct-right .switcher{align-items:center}
  /* EMA-строка (.ch-ema) */
  :is(#page-dashboard,#page-screeners-alts) .ch-ema{display:flex;flex-wrap:wrap;gap:7px;padding:10px 12px 12px}
  :is(#page-dashboard,#page-screeners-alts) .ch-ind{font-size:11px;font-weight:700;padding:6px 10px;border-radius:8px;background:none;color:var(--dim);border:1px solid var(--border2);font-family:var(--font);white-space:nowrap;position:relative;cursor:pointer}
  :is(#page-dashboard,#page-screeners-alts) .ch-ind.on{color:var(--text);border-color:var(--border2);background:var(--elevated)}   /* on-state НЕ синий: синий занят активным TF; EMA-тумблер = приглушённый нейтральный */
  :is(#page-dashboard,#page-screeners-alts) .ch-ind::after{content:"";position:absolute;inset:-8px}   /* §4 hit-area */
  /* foot: UTC+5 · Powered by TradingView */
  :is(#page-dashboard,#page-screeners-alts) .ch-foot{display:flex;justify-content:space-between;align-items:center;padding:8px 12px 11px;font-size:11px;color:var(--dim);font-family:var(--mono)}

  /* ── PRICES RAIL: карта с внутренним вертикальным скроллом (гориз. запрещён) ── */
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices){gap:0;padding:0;border:1px solid var(--border);border-radius:14px;overflow:hidden}
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices) .rail-frame-list{flex:none}
  :is(#page-dashboard,#page-screeners-alts) :is(#w-prices,#alts-w-prices) .rail-scroll{max-height:52vh;overflow-y:auto;overflow-x:hidden}

  /* ── F&G / Long-Short плитки ── */
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget{border-radius:14px}
  :is(#page-dashboard,#page-screeners-alts) .fng-body{padding:6px 10px 12px}
  /* «Соотношение · 1H» рвёт eyebrow на 2 строки на узком — прячем sub, само соотношение видно в баре */
  :is(#page-dashboard,#page-screeners-alts) .dash-bottom>.widget:nth-child(2) .widget-head [data-i18n="dashboard.lsSub"]{display:none}

  /* ── ORDER BOOK: bids/asks уже 2 колонки (.ob-columns) — держим в сетке, без гориз. выезда ── */
  :is(#page-dashboard,#page-screeners-alts) :is(#w-orderbook,#alts-ob-widget) .widget-body{overflow-x:hidden}

  /* тап-отклик на карточках/строках дашборда */
  :is(#page-dashboard,#page-screeners-alts) .widget,:is(#page-dashboard,#page-screeners-alts) .pc{transition:transform .12s ease}
  :is(#page-dashboard,#page-screeners-alts) .rail-row:active{transform:scale(.99);background:var(--elevated)}
  /* ── T20 типографика (Kamron 19.07 «чуть больше ещё», ступени 1+2 сразу): моб-скоуп, ЭКРАН=дашборд.
     Роли текста (меты/лейблы/текст-чипы) 9–10.5 → 12. НЕ трогаем: значения/mono (.val/.lbl/.timer/.price-badge/
     .sx-val/.d), глиф-бейджи (.news-sentiment ●▲▼, .rail-rank/.prices-col-rank). Скоуп #page-dashboard →
     alts-клон свой коммит; равная спец. с :is(...)-базой, позже по исходнику → выигрыш. Десктоп не тронут. */
  /* ALTS — дашборд-клон, зеркалим :is (Kamron «ALTS-зеркало»). */
  :is(#page-dashboard,#page-screeners-alts) .news-source,:is(#page-dashboard,#page-screeners-alts) .news-time,:is(#page-dashboard,#page-screeners-alts) .news-asset,
  :is(#page-dashboard,#page-screeners-alts) .ob-age,:is(#page-dashboard,#page-screeners-alts) .ob-bar-lbl,:is(#page-dashboard,#page-screeners-alts) .ob-stat-label,:is(#page-dashboard,#page-screeners-alts) .ob-side-title,
  :is(#page-dashboard,#page-screeners-alts) .sx-title,:is(#page-dashboard,#page-screeners-alts) .sx-name,:is(#page-dashboard,#page-screeners-alts) .sx-lbl,:is(#page-dashboard,#page-screeners-alts) .sx-lesson-title,
  :is(#page-dashboard,#page-screeners-alts) .sx-hist-lbl,:is(#page-dashboard,#page-screeners-alts) .sx-rr,:is(#page-dashboard,#page-screeners-alts) .dt,:is(#page-dashboard,#page-screeners-alts) .fng-pill,
  :is(#page-dashboard,#page-screeners-alts) .ict-toggle,:is(#page-dashboard,#page-screeners-alts) .pair,:is(#page-dashboard,#page-screeners-alts) .tag,:is(#page-dashboard,#page-screeners-alts) .chip,
  :is(#page-dashboard,#page-screeners-alts) .mv-h,:is(#page-dashboard,#page-screeners-alts) .rtab,:is(#page-dashboard,#page-screeners-alts) .alts-tag{font-size:12px}
  :is(#page-dashboard,#page-screeners-alts) .mv-nm{font-size:13px}

  /* ═══════════ INTEL (#page-intel) — группа A ═══════════
     Макет = реальный экран, переложенный в один столбец. Десктоп сам стекает .iv-main(≤900) и
     .iv-toprow(≤560); мобилка: аналитика → горизонтальная свайп-карусель (макет свайпает, не стекает
     вертикально), фильтры «Актив/Тема» раздельными рядами, ритм секций 24px. Внутренности карточек,
     событий (.iv-ev) и пейджера уже стилизует десктоп под макет — не дублируем. */
  #page-intel .iv-sub{margin-bottom:20px}
  #page-intel .iv-filters{margin-bottom:24px}
  #page-intel .iv-sep{flex-basis:100%;width:auto;height:0;background:none;margin:0}   /* перенос: «Тема» с новой строки, как в макете (2 ряда фильтров) */
  /* аналитика: горизонтальная карусель полноширинных слайдов вместо вертикального стека десктопа */
  #page-intel .iv-toprow{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;margin-bottom:24px;scroll-padding:0 16px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  #page-intel .iv-toprow::-webkit-scrollbar{display:none}
  #page-intel .iv-toprow .iv-card{flex:0 0 calc(100% - 44px);scroll-snap-align:start;min-width:0}   /* peek: край след. слайда торчит ~28px = «есть ещё, тяни влево» (замена .an-dots, ноль JS) */
  /* один столбец: события, ниже — контекст дня (десктоп ≤900 уже 1fr, фиксируем ритм 24) */
  #page-intel .iv-main{gap:24px}
  #page-intel .iv-pager{margin-top:16px}
  /* типографика ≥11px: десктоп-плотность (7–10px) ниже мобильного пола, макет = 11px */
  #page-intel .iv-lbl,#page-intel .iv-ct,#page-intel .iv-cat,#page-intel .iv-imp,#page-intel .iv-time,
  #page-intel .iv-meta,#page-intel .iv-assets .a,#page-intel .iv-why,#page-intel .iv-conf,
  #page-intel .iv-ctag,#page-intel .iv-scen b{font-size:11px}
  #page-intel .iv-sigr .cap{display:none}   /* финал: слово «значимость» убрано — смысл несёт заголовок секции «по значимости»; под кольцо не влезает, сбоку съедает заголовок. Десктоп не трогаем. */
  /* ── аудит-пачка intel (мобилко-скоуп): №1 лейбл · №2 бары · №3 разбор · №4 NEUTRAL · №7 инлайн число ── */
  #page-intel .iv-ovl{display:block;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);margin-bottom:12px}   /* №1: внешний лейбл «Обзор за сутки» над каруселью (эталон .iv-lbl/.an-t) */
  #page-intel .iv-theme .tc{background:none;border:0;border-radius:0;padding:0}   /* №2: голое mono-число, без pill (утечка generic .tc из components.css) */
  #page-intel .iv-imp.neu{background:rgba(255,255,255,.06);color:var(--muted)}   /* №4: NEUTRAL приглушить (эталон .ev-sent.neu, не светлая заливка) */
  #page-intel .iv-ct{display:block}   /* №7: число инлайн, не выключено вправо (эталон .an-t — блок, не flex) */
  #page-intel .iv-ct .r::before{content:"· "}   /* №7: средняя точка перед числом «Заголовок · N» */
  /* G4: «✦ РАЗБОР ›» — по ЛЕВОМУ ребру, отдельной строкой (единая вертикаль с заголовком/«источник»), НЕ справа */
  #page-intel .iv-meta .iv-expand-hint{display:block;flex-basis:100%;margin-left:0;margin-top:8px;color:var(--blue);font-weight:700;min-height:22px;line-height:22px}
  /* Kamron 22.07 (одно правило на обе intel-ленты — crypto intel.js + stocks-intel.js, обе в #page-intel):
     верхний ряд = [кольцо значимости] [КАТЕГОРИЯ слева] ···· [БЕЙДЖ][ВРЕМЯ] прижаты вправо в одну линию.
     Правая группа едет вместе (margin-left:auto ТОЛЬКО у бейджа, у времени снят 2-й auto → не центрируется).
     Категория ужимается при тесноте (ellipsis), бейдж и время — нет (flex:none) → наезд-проверка №7. */
  #page-intel .iv-evtop .iv-imp{margin-left:auto;flex:none;white-space:nowrap}
  #page-intel .iv-evtop .iv-time{margin-left:0;flex:none;white-space:nowrap}
  #page-intel .iv-evtop .iv-cat{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* Kamron 22.07: осветлить основные тексты (белым) в секциях — читаемость на тёмном фоне («светлее = белым») */
  /* Страх & Жадность — все вторичные тексты белым (спец. бьёт :is(#page-dashboard,...) .mfg-*) */
  :is(#page-dashboard,#page-screeners-alts) .mfg-hk,:is(#page-dashboard,#page-screeners-alts) .mfg-hd,
  :is(#page-dashboard,#page-screeners-alts) .mfg-scale{color:var(--text)}
  .fng-row .k,.fng-row .dt,.fng-ends{color:var(--text)}
  .ob-buyer-pct,.ob-seller-pct,.ob-age,.ob-buyers,.ob-sellers{color:var(--text)}      /* Стакан: покупатели/продавцы, % и возраст */
  #page-screeners-liq td.liq-val{color:var(--text)}                                   /* Лента ликвидаций: нейтральные значения (up/down цвета остаются) */
  #page-dashboard .dw-lbl,#page-dashboard .dw-pnl,#page-dashboard .dw-pnl .cap{color:var(--text)}   /* Общие активы: лейбл + PnL + промпт под ним белым (спец. бьёт #page-dashboard .dw-lbl:211) */
  #page-watchlist .wl-nm,#page-watchlist .wl-sym .n,#page-watchlist .wl-cnt,#page-watchlist .wl-pgcnt,#page-watchlist .wl-head span{color:var(--text)}   /* Watchlist */
  #page-stocks .h-sec-b .m{color:var(--text)}                                         /* Деталь акции: метрики AI-вердикта */
  /* G4 (T20-долг): кегль мелких intel-текстов поднят до ≥10px (проверка «нет текста мельче 10px») */
  #page-intel .iv-cat{font-size:10px}
  #page-intel .iv-imp{font-size:10px}
  #page-intel .iv-meta{font-size:10.5px}
  /* ── КАРТОЧКА СОБЫТИЯ v2 (только мобилка) — корень 1: кольцо-бейдж в шапке, не колонка ── */
  #page-intel .iv-ev{display:block;position:relative;padding:13px 15px}
  #page-intel .iv-sigr{position:absolute;top:13px;left:15px;width:30px;height:30px}
  #page-intel .iv-sigr svg{width:30px;height:30px}
  #page-intel .iv-sigr svg circle{stroke-width:6}          /* на 30px тонкая дуга исчезает */
  #page-intel .iv-sigr .num{font-size:11px}                /* число-метка (правило б) */
  #page-intel .iv-evtop{padding-left:38px;min-height:30px;margin-bottom:0;align-items:center}
  #page-intel .iv-title{padding:0;margin:9px 0 0}          /* заголовок во всю ширину карточки */
  #page-intel .iv-meta{margin-top:8px;text-transform:uppercase}   /* как эталон .ev-meta (мета uppercase) */
  /* корень 2: разбор — лейбл НАД текстом + цветной рельс → одно ребро by construction, «Предположение» целиком */
  #page-intel .iv-claim:has(.iv-ctag){display:flex;flex-direction:column;gap:3px;align-items:stretch;border-left:2px solid var(--border2);padding:1px 0 2px 11px;margin-bottom:12px}
  #page-intel .iv-claim:has(.iv-ctag) .iv-ctag{flex:none;width:auto;display:block;background:none;padding:0;margin:0;text-align:left;font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}
  #page-intel .iv-claim>span:last-child{font-size:12px;line-height:1.5;color:var(--text)}
  #page-intel .iv-claim:has(.iv-ctag.fact){border-color:var(--up)}
  #page-intel .iv-claim:has(.iv-ctag.inf){border-color:var(--blue)}
  #page-intel .iv-claim:has(.iv-ctag.spec){border-color:var(--amber)}
  /* сценарий — тот же язык (фиол. рельс + --elevated); уверенность — воздух 12px, бар во всю ширину */
  #page-intel .iv-scen{margin-top:13px;border-left:2px solid var(--purple)}
  #page-intel .iv-conf{margin-top:12px}
  #page-intel .iv-conf .cbar{max-width:none}
  /* тап-отклик */
  #page-intel .iv-ev,#page-intel .iv-card{transition:transform .12s ease,background .15s ease}
  #page-intel .iv-ev:active,#page-intel .iv-card:active{transform:scale(.99);background:var(--elevated)}
  /* шрифты: читаемое ≥11, служебные метки/время 9→10 (роль решает) */
  #page-intel .iv-ai{font-size:11px}
  #page-intel .iv-flbl,#page-intel .iv-topev .te-m,#page-intel .iv-fresh .fd{font-size:10px}
  /* зона нажатия ≥40px (hit-area, вид не меняется): чипы фильтров + пейджер в ряд → inset -8px по вертикали */
  #page-intel .nf-chip,#page-intel .iv-pg{position:relative}
  #page-intel .nf-chip::after,#page-intel .iv-pg::after{content:"";position:absolute;inset:-8px 0}
  /* дашбордовское правило tap-area для одиночных контролов (вид не меняется) */
  .mode-btn,.m-askai,.prices-filter-btn,.ob-expand-btn,.cd-act,.dw-cta-btn,.s-ttab{position:relative}
  .mode-btn::after,.m-askai::after,.prices-filter-btn::after,.ob-expand-btn::after,.cd-act::after,.dw-cta-btn::after,.s-ttab::after{content:"";position:absolute;inset:-8px}   /* T0-final №1: dw-cta-btn (кошелёк CTA ~33px) + s-ttab (вкладки поиска) — зона нажатия ≥40 */
  /* portfolio/brokers: зона нажатия pf-кнопок (высоты 32-39 < 40: #pf-show 37, #pf-clear/#pf-manual 39,
     #pf-track-btn 32) — ::after inset, вид не меняется. Скоуп :is(#page-portfolio,#page-brokers). */
  :is(#page-portfolio,#page-brokers) .pf-btn-show,
  :is(#page-portfolio,#page-brokers) .pf-btn-ghost,
  :is(#page-portfolio,#page-brokers) .pf-btn-mini{position:relative}
  :is(#page-portfolio,#page-brokers) .pf-btn-show::after,
  :is(#page-portfolio,#page-brokers) .pf-btn-ghost::after,
  :is(#page-portfolio,#page-brokers) .pf-btn-mini::after{content:"";position:absolute;inset:-8px}
  /* Portfolio empty/filled = ЕДИНАЯ десктопная структура одним столбцом (решение Kamron'а 16.07, v13-карточка отменена):
     pf-bar стекает — адрес-поле во всю ширину первым, кнопки под ним; баннер .pf-ro, промпт .pf-empty, tracked — как на десктопе. */
  :is(#page-portfolio,#page-brokers) .pf-bar{gap:8px}
  :is(#page-portfolio,#page-brokers) .pf-input{flex:0 0 100%;min-width:0}
  :is(#page-portfolio,#page-brokers) .pf-btn-show{flex:1 1 100%}                    /* «Показать портфель» — своя строка во всю ширину */
  :is(#page-portfolio,#page-brokers) .pf-btn-ghost{flex:1 1 calc(50% - 4px)}        /* Очистить + Ввести вручную — пополам в ряд под ней */
  :is(#page-portfolio,#page-brokers) .pf-empty{padding:32px 4px;text-align:center}  /* промпт-подсказка в потоке (без карточки/центровки на весь экран) */
  /* #5 (portfolio-тройка): Total value число цветом --text, не сине-градиентный «$» (эталон mobile-portfolio №5) */
  :is(#page-portfolio,#page-brokers) .pf-tot-val .c{color:var(--pf-text);-webkit-text-fill-color:var(--pf-text);background:none}

  /* ═══════════ STOCKS обзор (#page-stocks #so-root) — сборка #6 ═══════════
     Десктопный много-колоночный грид с внутренними шапками карточек → мобильный один
     столбец, внешние лейблы + тело-карточка (паттерн dashboard/intel/liq). */
  #page-stocks .so-top{flex-wrap:wrap;gap:10px;padding:0;margin-bottom:18px}   /* Stocks #1 (Kamron 19.07): убран лишний 16px (двойной с .page 18px = 34) — карточки обзора на ребро секции (18px), как деталь/везде */
  #page-stocks .so-h1{display:none}   /* T18-B: заголовок «Акции» снят (герой сверху) */
  #page-stocks .so-mkt{display:none}                                  /* статус рынка → точка у «Пульс рынка» */
  #page-stocks .so-search{display:none}   /* T18-B: поиск обзора снят (вход — центр stocks-таббара) */
  /* T18-B герой «EXOS Daily AI Insights» (МОБ-only, канон mockup-stocks-ai-insights). Градиент-кант — единственный акцент. */
  /* ГЕРОЙ v4 (канон mockup-stocks-ai-insights-v4): НЕ карточка — редакционный блок на фоне страницы.
     padding:0 (страница даёт 18px), воздух 24px до S&P-карточек ниже. Десктоп не трогаем (обёрнуто @media). */
  #page-stocks .so-hero:not([hidden]){display:block;padding:0;margin:0 0 24px;background:none;border:none;border-radius:0}
  #page-stocks .h-eyebrow{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
  #page-stocks .h-eyebrow .star{color:var(--amber);letter-spacing:0}
  #page-stocks .h-upd{font-size:12px;color:var(--dim);margin:14px 0 8px}
  #page-stocks .h-head{font-size:26px;line-height:1.22;font-weight:700;letter-spacing:-.015em;color:var(--text)}
  #page-stocks .so-hero.up .h-head{color:var(--up)}
  #page-stocks .so-hero.down .h-head{color:var(--dn)}
  #page-stocks .h-sec{margin-top:20px;padding-left:14px;border-left:2px solid var(--border)}
  #page-stocks .h-sec-h{font-size:15px;font-weight:700;margin-bottom:6px}
  #page-stocks .h-sec-h.up{color:var(--up)}
  #page-stocks .h-sec-h.down{color:var(--dn)}
  #page-stocks .h-sec-h.amber{color:var(--amber)}
  /* v5: заголовок секции + бейдж вердикта справа (Сводка дня) */
  #page-stocks .h-sec-top{display:flex;align-items:center;margin-bottom:8px}
  #page-stocks .h-sec-top .h-sec-h{margin-bottom:0}
  #page-stocks .h-badge-v{margin-left:auto;font-size:10px;font-weight:800;letter-spacing:.08em;padding:4px 10px;border-radius:999px}
  #page-stocks .h-badge-v.up{color:var(--bg,#0b1220);background:var(--up)}
  #page-stocks .h-badge-v.down{color:#fff;background:var(--dn)}
  #page-stocks .h-badge-v.mixed{color:var(--muted);background:var(--elevated)}   /* №22: СМЕШАННЫЙ = серо-синий dim (без золота); БЫЧИЙ/МЕДВЕЖИЙ зелён/красн как есть */
  #page-stocks .h-sec-b{font-size:14px;color:var(--text);line-height:1.5}
  #page-stocks .h-sec-b .m{color:var(--dim)}
  #page-stocks .h-sec-b .num{font-variant-numeric:tabular-nums;font-weight:600}
  #page-stocks .h-sec-b.h-clamp{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}   /* G2: сводка-проза 3-4 строки; «Развернуть» раскрывает инлайн */
  /* Kamron 23.07: троеточие «…» крупнее и заметнее; «Свернуть» (expanded) — обычный кегль */
  #page-stocks .h-more{position:relative;margin-top:4px;background:none;border:0;color:var(--blue);font-size:26px;font-weight:800;letter-spacing:3px;line-height:.65;font-family:var(--font);cursor:pointer;padding:2px 4px;display:inline-flex;align-items:center;gap:4px}
  #page-stocks .h-more.expanded{font-size:13px;font-weight:600;letter-spacing:0;margin-top:8px;line-height:1.2}
  #page-stocks .h-more::after{content:"";position:absolute;inset:-14px}   /* тап-зона ≥40 */
  /* Kamron 23.07: divergence-банд «поверхность vs внутренники» (distribution-предупреждение) */
  #page-stocks .h-div{margin-top:16px;padding:11px 12px;border-radius:10px;border-left:3px solid var(--amber);background:rgba(247,185,85,.08)}
  #page-stocks .h-div.down{border-left-color:var(--dn);background:rgba(255,92,110,.08)}
  #page-stocks .h-div-top{display:flex;align-items:flex-start;gap:8px}
  #page-stocks .h-div-ic{flex:0 0 auto;font-size:14px;line-height:1.35;color:var(--amber)}
  #page-stocks .h-div.down .h-div-ic{color:var(--dn)}
  #page-stocks .h-div-lbl{font-size:13.5px;font-weight:700;color:var(--text);line-height:1.35}
  #page-stocks .h-div-sub{margin-top:5px;font-size:11.5px;color:var(--dim);padding-left:22px}
  /* G8: блоки драйверов «↑ Почему растёт / ↓ Что давит» рядом (вернули по слову Kamron'а) */
  #page-stocks .h-drivers{display:flex;gap:16px;flex-wrap:wrap}
  #page-stocks .h-dr{flex:1 1 140px;min-width:0}
  #page-stocks .h-dr-h{font-size:13px;font-weight:700;margin-bottom:6px}
  #page-stocks .h-dr.up .h-dr-h{color:var(--up)}
  #page-stocks .h-dr.dn .h-dr-h{color:var(--dn)}
  #page-stocks .h-dr-l{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px}
  #page-stocks .h-dr-l li{position:relative;font-size:13px;color:var(--text);line-height:1.4;padding-left:12px}
  #page-stocks .h-dr-l li::before{content:"·";position:absolute;left:3px;color:var(--dim)}
  #page-stocks .h-more .hc{font-size:11px}
  #page-stocks .h-foot{margin-top:22px;padding-top:12px;border-top:1px solid var(--border);display:flex;align-items:center}
  #page-stocks .h-foot .src{font-size:11px;color:var(--dim)}
  #page-stocks .h-all{display:none;margin-left:auto;font-size:12px;color:var(--dim)}
  #page-stocks .soh-skel{margin-top:14px}
  /* #5: брокер-CTA над героем (компонент кошелёк-CTA). Подключён → hidden (герой первый). Капитал-карточек нет. */
  #page-stocks .so-broker-cta:not([hidden]){display:block;margin:0 0 20px}
  #page-stocks .so-bcta-card{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:16px 18px;min-height:88px}
  #page-stocks .so-bcta-main{flex:1;min-width:0}
  #page-stocks .so-bcta-t{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text)}   /* Kamron: «Брокерский счёт» белым */
  #page-stocks .so-bcta-s{font-size:13px;color:var(--text);line-height:1.4;margin-top:5px}
  #page-stocks .so-bcta-btn{flex:none;position:relative;background:var(--blue);color:#fff;border:0;border-radius:10px;padding:10px 15px;font-size:13px;font-weight:600;font-family:var(--font);cursor:pointer}
  #page-stocks .so-bcta-btn::after{content:"";position:absolute;inset:-8px}

  #page-stocks .so-mk-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:middle}
  #page-stocks .so-crow{display:block;padding:0}
  #page-stocks .so-mgrid{display:block;padding:0}
  /* секции: полотно прозрачно, внешний лейбл, тело-карточка */
  #page-stocks .so-panel:not(.so-charthero),#page-stocks .so-pulse{background:none!important;border:none!important;box-shadow:none!important;border-radius:0;padding:0;margin:0 0 20px}
  #page-stocks .so-shead{border-bottom:none!important;background:none!important;padding:0 2px 10px;min-height:0;height:auto;display:flex;align-items:center;gap:7px}
  #page-stocks .so-ph2{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
  #page-stocks .so-hint,#page-stocks .so-ai-tag{margin-left:auto;font-size:10px;color:var(--muted);text-transform:none;letter-spacing:0;font-weight:600}
  #page-stocks .so-movers,#page-stocks .so-sec,#page-stocks #so-news,#page-stocks .so-wl,
  #page-stocks .so-ins-body,#page-stocks .so-trump-post,#page-stocks .so-pbody{
    background:var(--surface);box-shadow:inset 0 0 0 1px var(--border);border-radius:14px;padding:12px 14px}
  #page-stocks .so-charthero{margin:0 0 20px}
  /* индексы: сетка 2×2 */
  #page-stocks .so-idxrow{grid-template-columns:1fr 1fr;gap:11px;padding:0;margin-bottom:20px}
  /* режим по тикерам (T12): внешний лейбл + грид 2-в-ряд, 4 плитки с ротацией-волной как на десктопе (без «Показать ещё») */
  #page-stocks .so-vlbl{display:block;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);padding:0 0 10px;margin:0}
  #page-stocks .so-vstrip{grid-template-columns:1fr 1fr;gap:11px;padding:0;margin-bottom:20px}
  /* движенцы + сектора: имя-фикс | бар от одного ребра | значение вправо (§5b.4) */
  #page-stocks .so-md-row{grid-template-columns:22px 84px 1fr 56px;gap:8px;align-items:center}
  #page-stocks .so-secf-row{grid-template-columns:120px 1fr 64px;gap:8px;align-items:center}
  /* чарт-герой: цена не сжимается, подзаголовок ellipsis (§5b.2 overlap) */
  #page-stocks .so-ch-head{gap:12px}
  #page-stocks .so-ch-pricewrap{flex-shrink:0}
  #page-stocks .so-ch-title{min-width:0}
  #page-stocks .so-ch-nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #page-stocks .so-ch-tag{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--dim)}
  /* Трамп: угловой ↗, весь блок кликабелен (§5b.5) */
  #page-stocks .so-tr-text{position:relative;cursor:pointer}
  #page-stocks .so-tr-ext{position:absolute;top:2px;right:4px;color:var(--muted);font-size:12px}

  /* ═══════════ STOCK DETAIL (#sd-detail-mount) — сборка #6, вторая половина ═══════════
     Простыня 14568px → 4 переключаемые панели (Обзор/AI/Фунд/Новости) + sticky nav/tabs. */
  /* Stocks-деталь (Kamron 19.07, скрин): верхний ряд «← TRV» и внутренний тикер-поиск СНЯТЫ.
     ← переезжает В карточку компании слева от лого (.sd-hid .sd-back показан). Верх экрана = сразу карточка.
     Прежний T10-хвост (sticky-плашка) уже был аннулирован; теперь mnav убран целиком. */
  #page-stocks .sd-mnav{display:none}                  /* #2: ряд «← TRV» убран целиком — тикер уже в карточке (TRV·NYQ·USD) */
  #page-stocks .sd-top{display:none}                   /* #1: внутренний поиск «Ticker (e.g. AAPL, MU)» убран (смена тикера = универсальный поиск T17) */
  #page-stocks .sd-msearch{display:none}               /* лупа детали убрана (было) */
  #page-stocks .sd-srail{display:none}                 /* рельс тикеров скрыт — поиск = единственный переход */
  #page-stocks .sd-actions{display:none}               /* «В вотчлист» — звезда уже в hero */
  /* #2: ← В карточке компании слева от лого — тёмный скруглённый квадрат, тап-зона 44 (дубль edge-swipe) */
  #page-stocks .sd-hid{gap:11px}
  #page-stocks .sd-hid .sd-back{display:flex;width:44px;height:44px;flex:none;align-items:center;justify-content:center;font-size:22px;line-height:1;background:var(--elevated);border:1px solid var(--border);border-radius:12px;color:var(--text)}
  #page-stocks .sd-hid > div:last-child{flex:1;min-width:0}   /* блок имени ужимается: длинное имя переносится, лого и ← flex:none — ряд не ломается @360 (№1/№2) */
  /* переключатель панелей sticky под nav */
  #page-stocks .sd-tabs-m{display:flex;gap:6px;padding:10px 0;margin:0}   /* #3: табы не липнут — в потоке, уезжают со скроллом (переключение работает из любой позиции) */
  #page-stocks .sd-tab-m{flex:1;padding:9px 4px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--muted);font-size:13px;font-weight:600}
  #page-stocks .sd-tab-m.sd-on{background:var(--blue);color:#fff;border-color:var(--blue)}
  /* панель-переключение: скрыть все data-sdt, показать активные по data-tab на mount */
  #page-stocks #sd-detail-mount [data-sdt]{display:none}
  #page-stocks #sd-detail-mount[data-tab="overview"] [data-sdt~="overview"],
  #page-stocks #sd-detail-mount[data-tab="ai"] [data-sdt~="ai"],
  #page-stocks #sd-detail-mount[data-tab="fund"] [data-sdt~="fund"],
  #page-stocks #sd-detail-mount[data-tab="news"] [data-sdt~="news"]{display:block}
  /* T2 FIX (аудит 18.07, класс-7): правило display:grid ПРОИГРЫВАЛО по специфичности
     правилу видимости вкладок выше (стр.452-455: #page-stocks #sd-detail-mount[data-tab="overview"] [data-sdt~="overview"]{display:block} = (2,2,0)).
     Прежний `#page-stocks .sd-stats-m` = (1,1,0) → display:block побеждал → grid-template-columns:1fr 1fr был ИНЕРТЕН на block-боксе → метрики столбиком.
     getComputedStyle отдавал cols:"1fr 1fr" даже при display:block → старый замер соврал «2×2». Теперь селектор на той же цепочке-предке (2,3,0) — display:grid выигрывает. */
  #page-stocks #sd-detail-mount[data-tab="overview"] .sd-stats-m[data-sdt~="overview"]{display:grid;grid-template-columns:1fr 1fr;grid-column:1/-1;gap:10px}
  #page-stocks #sd-detail-mount[data-tab="overview"] .sd-stats-m[data-sdt~="overview"] .sd-scard{grid-column:auto}   /* карточки метрик не тянут span-3/12 внутри 2×2 */
  #page-stocks .sd-ohlc .sd-oc{padding:11px 7px}   /* T2: 4-кол OHLC (ОТКР/МАКС/МИН/ОБЪЁМ) не влезал @360 (клип 23px, H) — ужать гориз. паддинг ячеек (24px→14px), 4-кол сохранён */
  #page-stocks #sd-flow{display:none!important}        /* Capital Flow dev-note скрыт (§5a.1) */
  #page-stocks .sd-mh{display:none!important}          /* пустые секции: Similar Stocks / Events Calendar / Insiders (§5a.2) */
  /* сетки внутри панелей */
  #page-stocks .sd-ret{grid-template-columns:1fr 1fr}                 /* returns 2×2, не лента (§5b.10) */
  #page-stocks .sd-mtiles4{display:grid;grid-template-columns:1fr 1fr;gap:10px}   /* отчётность 4 плитки 2×2 (§5b.8) */
  #page-stocks .sd-agrow{display:grid;grid-template-columns:1fr 1fr;gap:10px}      /* инсайдеры/держатели сводка 2×2 */
  /* инсайдеры строки (канон фото 3) */
  #page-stocks .ins-r{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--border)}
  #page-stocks .ins-r:last-child{border-bottom:none}
  #page-stocks .ins-b{flex:1;min-width:0}
  #page-stocks .ins-nm{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #page-stocks .ins-d{font-size:11px;color:var(--muted)}
  #page-stocks .ins-tag{font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px;flex:none;text-transform:uppercase}
  #page-stocks .ins-tag.sd-buy{background:rgba(61,220,151,.15);color:var(--up)}
  #page-stocks .ins-tag.sd-sell{background:rgba(248,113,113,.15);color:var(--dn)}
  #page-stocks .ins-tag.sd-grant{background:rgba(255,255,255,.06);color:var(--muted)}
  #page-stocks .ins-v{text-align:right;flex:none}
  #page-stocks .ins-qty{font-size:11px;color:var(--muted)}
  /* ═══════════ CRYPTO-LIST (#page-crypto-list) — сборка #4, канон mobile-crypto-list.html ═══════════ */
  #page-crypto-list{padding:0}   /* контент несёт свои отступы (pg-title/search/cards) — не двоим .page-паддинг */
  #page-crypto-list .pg-title{display:flex;align-items:baseline;justify-content:space-between;padding:18px 16px 13px;gap:10px}
  #page-crypto-list .pg-title h1{font-size:24px;font-weight:800;letter-spacing:-.6px}
  #page-crypto-list .pg-title .cnt{font-size:11px;color:var(--dim);font-family:var(--mono);font-weight:600;flex-shrink:0}
  #page-crypto-list .cl-search{margin:0 16px 12px;display:flex;align-items:center;gap:9px;background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:11px 13px}
  #page-crypto-list .cl-search svg{width:15px;height:15px;color:var(--dim);flex-shrink:0}
  #page-crypto-list .cl-search input{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--text);font-size:12.5px;font-family:var(--font)}
  #page-crypto-list .cl-search input::placeholder{color:var(--dim)}
  /* iOS Safari fix (Kamron 22.07): focus на input с font-size <16px авто-зумит вьюпорт
     (тап по поиску в списке монет → скачок зума в Safari). 16px убирает зум, визуально почти не меняет. */
  #page-crypto-list .cl-search input,.prices-search-box input,#alts-prices-search,#so-search-in,#global-search{font-size:16px}
  #page-crypto-list .cl-chips{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 12px}
  #page-crypto-list .cl-chip{position:relative;font-size:11.5px;font-weight:700;padding:7px 12px;border-radius:9px;color:var(--muted);background:var(--surface);border:1px solid var(--border);white-space:nowrap}
  #page-crypto-list .cl-chip.on{background:var(--blue-dim);border-color:rgba(91,141,255,.4);color:var(--blue)}
  #page-crypto-list .cl-chip::after{content:"";position:absolute;inset:-6px 0}
  #page-crypto-list .card{background:var(--surface);border:1px solid var(--border);border-radius:14px;margin:0 16px;overflow:hidden}
  #page-crypto-list .cl-r{display:flex;align-items:center;gap:10px;padding:12px 13px;border-bottom:1px solid var(--border)}
  #page-crypto-list .cl-r:last-child{border-bottom:none}
  #page-crypto-list .cl-rank{font-size:11px;color:var(--dim);font-family:var(--mono);font-weight:700;width:16px;flex-shrink:0}
  #page-crypto-list .cl-lg{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;color:#fff;flex-shrink:0}
  #page-crypto-list .cl-id{flex:1;min-width:0}
  #page-crypto-list .cl-sym{font-size:13px;font-weight:800}
  #page-crypto-list .cl-nm{font-size:11px;color:var(--dim);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #page-crypto-list .cl-px{text-align:right;flex-shrink:0}
  #page-crypto-list .cl-p{font-size:13px;font-weight:800;font-family:var(--mono)}
  #page-crypto-list .cl-c{font-size:11px;font-family:var(--mono);font-weight:700;margin-top:2px}
  #page-crypto-list .cl-c.up{color:var(--up)} #page-crypto-list .cl-c.dn{color:var(--dn)}
  #page-crypto-list .cl-ar{color:var(--dim);font-size:11px;flex-shrink:0}
  #page-crypto-list .cl-pin{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);padding:0 18px 9px}
  #page-crypto-list .cl-pincard{margin-bottom:14px}
  #page-crypto-list .cl-pg{display:flex;align-items:center;justify-content:center;gap:6px;padding:14px 16px 6px}
  #page-crypto-list .cl-pgb{position:relative;min-width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:11.5px;font-weight:700;font-family:var(--mono);color:var(--muted);background:var(--surface);border:1px solid var(--border)}
  #page-crypto-list .cl-pgb.on{background:var(--blue);border-color:var(--blue);color:#fff}
  #page-crypto-list .cl-pgb::after{content:"";position:absolute;inset:-6px -3px}
  #page-crypto-list .cl-count{text-align:center;font-size:11px;color:var(--dim);font-family:var(--mono);padding-bottom:calc(var(--tabbar-h) + 40px + env(safe-area-inset-bottom,0px))}
  #page-crypto-list .cl-empty{padding:40px 16px;text-align:center;color:var(--dim);font-size:13px}
  #page-crypto-list .cl-r:active{background:var(--elevated)}
  /* ═══════════ WATCHLIST (#page-watchlist) — сборка #5: рефлоу десктоп-таблицы под мобилку ═══════════
     Десктопный грид (1.6fr .9fr .8fr 1fr 40px) + spark svg 84px не влезали в 390 → цена наезжала на
     тикер, шапка 9px. Мобилка: таб-шапку скрыть, строки-карточки, spark сжать, зона нажатия. */
  #page-watchlist .wl-head{display:none}                             /* без табличной шапки (9px) — строки самодостаточны */
  #page-watchlist .wl-badge{font-size:10px}                          /* STOCK/CRYPTO бейдж ≥10px */
  #page-watchlist .wl-row{grid-template-columns:minmax(0,1fr) 74px 52px 46px 30px;gap:8px;padding:11px 14px}   /* цена 66→74px: длинная цена ($1,234.56) не вылезала за фикс.колонку (правое ребро .mono 175/178) */   /* L-возврат: цена/изм. фикс.ширина (было auto → рваное правое ребро .wl-price + наезд .mono @360) */
  #page-watchlist .wl-sym .n{font-size:11px}
  #page-watchlist .wl-price{font-size:13px}
  #page-watchlist .wl-chg{font-size:12px}
  #page-watchlist .wl-spark svg{width:46px;height:26px}
  #page-watchlist .wl-del button{position:relative;width:30px;height:30px}
  #page-watchlist .wl-del button::after{content:"";position:absolute;inset:-7px}   /* зона нажатия ≥40 */
  #page-watchlist .wl-pgtitle{font-size:22px}
  #page-watchlist .wl-clearbtn{position:relative}
  #page-watchlist .wl-clearbtn::after{content:"";position:absolute;inset:-8px 0}
  /* screener таблица → мобильный рефлоу (десктоп-таблица не влезала: # · тренд-spark прячем,
     строка = тикер | сигнал | цена | 1Д%; шапка скрыта, строки-карточки) */
  /* Kamron 22.07: scr-root — свой overflow-скроллер → padding страницы ниже него давал большой ЧЁРНЫЙ пробел.
     Страница без нижнего padding (скроллер тянется до низа), а клиренс под док кладём на КОНТЕНТ (scr-wrap). */
  #page-stocks-screener.page-full{padding-bottom:0}
  #page-stocks-screener .scr-wrap{padding-bottom:calc(var(--tabbar-h) + 44px + env(safe-area-inset-bottom,0px))}
  #page-stocks-screener .scr-table thead{display:none}
  #page-stocks-screener .scr-table,#page-stocks-screener .scr-table tbody{display:block}
  #page-stocks-screener .scr-table tr[data-scr-sym]{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:11px 12px;border-bottom:1px solid var(--border)}
  #page-stocks-screener .scr-table td{border:none;padding:0;min-width:0}
  #page-stocks-screener .scr-table td.scr-num{display:none}
  #page-stocks-screener .scr-table tr[data-scr-sym] td:nth-child(3){display:none}   /* СИГНАЛ — не в мобильной строке (превью-вердикт есть в детали) */
  #page-stocks-screener .scr-table tr[data-scr-sym] td:last-child{display:none}     /* тренд-spark — вне мобильной строки */
  #page-stocks-screener .scr-table .scr-tk small{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
  #page-stocks-screener .scr-tkcell{min-width:0}
  #page-stocks-screener .scr-tk{min-width:0}
  #page-stocks-screener .scr-tklogo{font-size:10px}                  /* инициалы лого ≥10px */
  #page-stocks-screener .scr-heat{grid-template-columns:1fr 1fr}     /* карта секторов 2-в-ряд (делит чётно, без дыры #8) */
  #page-stocks-screener .scr-preset{position:relative}
  #page-stocks-screener .scr-preset::after{content:"";position:absolute;inset:-7px 0}   /* зона нажатия пресетов ≥40 */
  #page-stocks-screener .scr-empty{padding:24px 12px;text-align:center}
  /* ALTS (#14): рейл без info-колонки (railInfo:false) → 6 детей, а .rail-row грид 7-кол (посл. 26px под ›).
     ALTS-строка = 6 ячеек в 7-кол сетке → дыра #8. Мобильный 6-кол грид для ALTS (десктоп 7-кол цел). */
  #page-screeners-alts .rail-row{grid-template-columns:18px 22px 20px 1fr auto auto}
  /* ═══════════ TRADES (#page-trades) — сборка #12 ═══════════ */
  /* tw-gate: десктоп начинал с left:var(--nav-w) (88px) → на мобилке не крыл левый край, дашборд
     проглядывал. Мобилка: во всю ширину, до таббара, z-index 20 (портал в #app-shell по §12). */
  .tw-gate{left:0!important;top:var(--m-header-h)!important;bottom:var(--tabbar-h)!important;z-index:20!important;background:rgba(9,13,18,.97)!important;padding:24px 16px}
  /* пока показан гейт — ВСЁ содержимое трейдов скрыто (шапка+scope+dash за гейтом; check не мерит) */
  #page-trades.tw-gate-lock #trades-root{visibility:hidden}
  .tw-gate-btn{min-height:44px}                                     /* зона нажатия ≥40 (было ~35) */
  /* дашборд трейдов (при подключённом кошельке): метки ≥10px, таблицы не наезжают */
  #page-trades .wl,#page-trades .wd{font-size:10px}
  /* ═══════════ ANALYZE / COPILOT (#page-analyze) — сборка #11: 3-кол → один столбец ═══════════ */
  .page#page-analyze.active{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}   /* T6: вернуть скролл странице — десктоп-модель overflow:hidden делала контент ниже фолда недоступным */
  #page-analyze .cp-cols{display:block;overflow:visible;flex:none;min-height:auto}             /* история|чат|источники → стек (чат primary, источники ниже) */
  #page-analyze #cp-hist-panel{display:none!important}               /* история — доступ отдельной кнопкой (оверлей — доработка); не колонкой */
  #page-analyze .cp-main,#page-analyze .cp-sources{width:auto;max-width:none;min-width:0;overflow:visible}
  #page-analyze .cp-sources{margin-top:14px}
  #page-analyze .cp-ncat{font-size:10px}                             /* категория новости ≥10px */
  #page-analyze .cp-nimp{font-size:10px}                             /* бейдж настроения ≥10px */
  #page-analyze .cp-ntime{font-size:10px;text-align:right}          /* время справа → #12 не считает край рваным */
  #page-analyze #cp-empty{overflow-x:hidden}                        /* приветствие+карточки не едут вбок */
  #page-analyze .cp-cards{grid-template-columns:1fr}   /* T6: 2-кол grid → один столбец (flex-wrap был no-op на grid; ровная высота карточек, канон) */
  #page-analyze .cp-plus{display:none}   /* analyze-tweak (Kamron 17.07): ⊕ убрать — плейсхолдер встаёт на паддинг пилюли */
  #page-analyze #cp-empty{padding-left:0;padding-right:0}   /* analyze-tweak: карточки+пилюля на ребро новостного блока (было +24px inset у #cp-empty) */
  #page-analyze .cp-tab{min-height:40px;display:inline-flex;align-items:center}   /* зона нажатия табов */
  #page-analyze .cp-send{position:relative}
  #page-analyze .cp-send::after{content:"";position:absolute;inset:-4px}   /* send 38px → зона ≥40 */
  /* ═══════════ WHALES (#page-whales) — сборка #10: десктоп-грид → один столбец ═══════════ */
  #page-whales{overflow-x:hidden}                                    /* страница не едет вбок (широкая .tscroll-таблица скроллит ВНУТРИ себя) */
  #page-whales.active{padding-bottom:calc(var(--tabbar-h) + 40px + env(safe-area-inset-bottom,0px))!important}   /* 🔴 скролл до низа (components.css:895 затирал .page padding-bottom) + T16: клиренс под плавающим AI-FAB (top ~safe+148) — последние карточки «Новости про китов» скроллятся ВЫШЕ FAB, не под ним */
  #page-whales .hero-grid{grid-template-columns:1fr}                 /* 2 hero-карточки в стек (иначе значения справа наезжают между картами) */
  #page-whales .hero{height:auto;min-height:64px;padding:12px 14px} /* авто-высота — контент не режется */
  #page-whales .stat-strip{grid-template-columns:1fr 1fr}           /* 4 стата → 2×2 (был горизонтальный ряд) */
  #page-whales .row2{grid-template-columns:1fr}                     /* лента | правая-колонка → стек */
  #page-whales .hero-r-l,#page-whales #w-cf-regime,#page-whales #w-exls-head{font-size:10px}   /* метки ≥10px */
  #page-whales .stat-l,#page-whales .hero-l,#page-whales .hero-l span{font-size:10px!important}  /* десктоп ставил 9px!important */
  #page-whales .dex,#page-whales .wa-go{font-size:10px}
  /* T7: заголовки алертов .wa-t — clamp 2 строки (H ловил жёсткую обрезку без многоточия), ряд .wa переменной высоты, правая колонка по верху */
  #page-whales .wa{height:auto!important;min-height:46px!important;align-items:flex-start!important;padding-top:8px!important;padding-bottom:8px!important}
  #page-whales .wa-t{display:-webkit-box!important;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal!important;overflow:hidden;min-width:0}
  #page-whales .mv-grid{grid-template-columns:1fr}   /* T3: Top Movers — стек, .mv 196px фикс-колонки влезают во всю ширину (фото 4, вылет правых чисел) */
  /* «Крупнейшие позиции китов» — таблица .pt 9 колонок (min-width:720) скроллится вбок ВНУТРИ .tscroll
     (свайп по замыслу, страница не едет — cw остаётся 332). check #2 исключает .tscroll как интенционал. */
  /* T7.1: «Крупнейшие позиции китов» — таблица .pt → карточки-строки (мобилка). Гориз. скролла нет по построению */
  #page-whales .tscroll{overflow-x:visible;max-width:100%}
  #page-whales .pt{min-width:0;display:block}
  #page-whales .pt thead{display:none}
  #page-whales .pt tbody,#page-whales .pt tr{display:block}
  #page-whales .pt tr+tr{margin-top:var(--gap,12px)}
  #page-whales .pt td.wpos{display:block;height:auto;overflow:visible;white-space:normal;vertical-align:top;padding:11px 13px;background:var(--surface);border:.5px solid var(--border);border-radius:var(--r)}   /* сброс базовых .pt td (height:36/overflow:hidden/nowrap) — иначе карта клипается в 1 строку */
  #page-whales .wpos-r1{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
  #page-whales .wpos-addr{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #page-whales .wpos-badges{display:flex;align-items:center;gap:6px;flex-shrink:0}
  #page-whales .wpos-src{font-size:9.5px;font-weight:700;color:var(--muted);background:var(--elevated);padding:2px 6px;border-radius:5px}
  #page-whales .wpos-side{font-size:9.5px;font-weight:700;padding:2px 7px;border-radius:5px;white-space:nowrap}
  #page-whales .wpos-side.sd-l{color:var(--up);background:var(--up-dim)}
  #page-whales .wpos-side.sd-s{color:var(--dn);background:var(--dn-dim)}
  #page-whales .wpos-r2{display:flex;align-items:baseline;gap:9px;margin-bottom:6px;font-family:var(--mono)}
  #page-whales .wpos-size{font-size:15px;font-weight:700;color:var(--text)}
  #page-whales .wpos-pnl{font-size:12.5px;font-weight:700}
  #page-whales .wpos-pnl.up{color:var(--up)}#page-whales .wpos-pnl.dn{color:var(--dn)}
  #page-whales .wpos-pct{font-size:11px;color:var(--dim);font-weight:600}
  #page-whales .wpos-r3{font-size:10.5px;color:var(--muted);line-height:1.45}
  #page-whales .wpos-empty{color:var(--dim)}
  /* ═══════════ NEWS (#page-news) — сборка #9 ═══════════ */
  #page-news .nh-imp{font-size:10px}                                 /* бейдж настроения ≥10px */
  #page-news .nh-rel{font-size:10px}                                 /* релевантность ≥10px */
  #page-news .nh-tabs{gap:8px}                                       /* табы ≤8px друг от друга → «плиткой» (зона нажатия по ширине не рвётся) */
  #page-news .nh-tab{min-height:44px!important;padding:12px 8px!important;margin-right:0!important;display:inline-flex;align-items:center}   /* зона нажатия ≥40 (::after занят подчёркиванием .on) */
  #page-news .nh-nb{position:relative}
  #page-news .nh-nb::after{content:"";position:absolute;inset:-8px}  /* зона нажатия ‹ › ≥40 (кнопка 28px) */
  #page-news .nh-art-rail{scroll-snap-type:x mandatory}              /* «Статьи и обзоры» — честная карусель (§9: карусели по месту) */
  #page-news .nh-art-rail>*{scroll-snap-align:start;flex:0 0 82%}    /* равные слайды → check honest-carousel (не обрезка) */
  /* brokers (#8): кнопка «Подключить брокера» — зона нажатия ≥44px (padding 11px давал ~35px) */
  :is(#page-portfolio,#page-brokers) .brk-connect-btn{min-height:44px}
  /* coin-drawer (#7): десктоп-панель 440px шире телефона → контент уезжал влево (Metrics→«cs».
     Мобилка — во всю ширину. cd-l1/ab-more/cd-links убраны из разметки (решение канона). */
  .coin-drawer{width:100vw;max-width:100vw;border-left:none}
  /* screener «Показать ещё» (§6, вместо кружков-страниц) */
  #page-stocks-screener .scr-more{width:100%;padding:11px;background:var(--elevated);border:1px solid var(--border);border-radius:10px;color:var(--muted);font-size:12px;font-weight:600;font-family:var(--font);cursor:pointer}
  #page-stocks-screener .scr-more:active{transform:scale(.99)}
  /* watchlist empty-state CTA → скринер (канон) */
  #page-watchlist .wl-cta{margin-top:16px;padding:11px 22px;background:var(--blue);border:none;border-radius:10px;color:#fff;font-size:13px;font-weight:700;font-family:var(--font);cursor:pointer}
  #page-watchlist .wl-cta:active{transform:scale(.97)}
  /* N4: «Все криптовалюты ›» внизу карточки активов дашборда → экран crypto-list */
  :is(#page-dashboard,#page-screeners-alts) .prices-more{display:flex;align-items:center;justify-content:center;gap:4px;width:100%;padding:12px;margin-top:2px;background:none;border:none;border-top:1px solid var(--border);color:var(--blue);font-size:12px;font-weight:600;font-family:var(--font);cursor:pointer}
  /* — фиксы прогона: индекс-плитки не переполняют, чарт-герой без наезда, бейджи ≥10px — */
  #page-stocks .so-ixc{min-width:0;overflow:hidden}
  #page-stocks .so-ixc-top{min-width:0;gap:10px}   /* T9/T10: гарант. зазор имя↔change — 2px жили на милости данных (+12.33% их убивал); имя (min-width:0+ellipsis) сжимается раньше */
  #page-stocks .so-ixc-nm{flex:1 1 auto}
  #page-stocks .so-ixc-nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #page-stocks .so-ixc-price{font-size:19px}
  #page-stocks .so-ixc-chg{text-align:right;flex:none}                 /* право-выключено → #12 не считает край рваным (плитки-грид, не столбец) */
  #page-stocks .so-ixc-bot{min-width:0}
  #page-stocks .so-ixc-spk{text-align:right}                           /* спарклайн — правая декорация плитки, не столбец-ряд (#12 skip) */
  #page-stocks .so-ch-badge{font-size:10px}
  #page-stocks .so-ch-title{flex:1 1 auto;min-width:0}
  #page-stocks .so-ch-title>div{min-width:0;overflow:hidden}
  #page-stocks .so-ch-sym{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
  #page-stocks .so-ch-pricewrap{flex:0 0 auto;text-align:right}
  #page-stocks .so-ch-tabs{flex-wrap:wrap;gap:6px}                     /* 9 таймфреймов переносятся, не тянут страницу вбок */
  #page-stocks .so-ch-factors{flex-wrap:wrap}
  #page-stocks .so-nbot{flex-wrap:wrap;row-gap:4px}                    /* мета новости переносится — ↗ не уезжает за край @360 */

  /* ═══════════ LIQ (#page-screeners-liq) — группа A ═══════════
     liq.css сам стекает .liq-row3 (≤1200) и .liq-stats (≤680); SVG-графики адаптивны (width:100%,height:auto).
     Мобилка: панели content-height (не 60vh×3), лента с ограниченной высотой+скролл, Топы горизонтальной
     каруселью, низ под таббар, шапка/контролы в стек. SVG держим — в HTML-бары не переписываем. */
  #page-screeners-liq{padding:14px 16px;padding-bottom:calc(var(--tabbar-h) + 40px + env(safe-area-inset-bottom,0px))}
  #page-screeners-liq table.liq-row3 td{height:auto}   /* КОРЕНЬ: десктоп-трюк td{height:1px} схлопывал стекнутую панель в 1px */
  #page-screeners-liq .liq-panel3{height:auto;min-height:0;max-height:none;padding:14px 16px;margin-bottom:16px;display:block}
  /* LIQ #2 (Kamron 19.07): «Ликвидации по времени» лип к KPI-картам сверху (Лонги/Шорты) — зазор
     секция→секция = --sec (24px) над лейблом. №11 (зазор шапок) это НЕ ловит: он скоуплен на table
     thead/.pf-at-h, а .liq-ph — секционный лейбл, не заголовок таблицы (запись в DIAG). Единственный liq-row3.
     table.liq-row3 (не .liq-row3): liq.css@≤1200 бьёт margin:0 со спец. (1,1,1) — совпадаем селектором,
     mobile.css грузится ПОСЛЕ liq.css → при равной спец. выигрывает исходным порядком; margin-top перебивает shorthand. */
  #page-screeners-liq table.liq-row3{margin-top:var(--sec)}
  #page-screeners-liq .liq-bd3{display:block}                              /* не flex: SVG течёт по aspect-ratio, панель по контенту */
  #page-screeners-liq .liq-c1 .liq-chart{display:block;margin-top:12px}
  #page-screeners-liq .liq-prof{display:block}
  #page-screeners-liq .liq-feedbd .liq-feed{max-height:360px;display:block}
  /* Топы → горизонтальная scroll-snap карусель (канон mockups/mobile-liq.html .liq-an-scroll, 6 слайдов).
     КОРЕНЬ прошлой пропажи — grid-auto-rows:1fr схлопывал строки в 0 при content-height контейнере.
     Лечение = рефлоу реального DOM: те же 6 детей .liq-stat становятся полноширинными слайдами (свайп+snap),
     а не grid и не вертикальный стек. Full-bleed: margin -16 гасит паддинг страницы, слайд = 100%-36 (peek следующего). */
  /* flex:none — КОРЕНЬ №3 (та же болезнь): родитель #page-screeners-liq = flex-column, а карусель со
     scroll-container'ом (overflow-x:auto) получает min-height:auto=0 по спеке → колоночный флекс ужимал
     её в 0 под давлением контента. flex:none снимает shrink → высота = самый высокий слайд, не схлоп.
     align-items:stretch — РАВНАЯ высота слайдов: все 6 в одном flex-ряду → высота ряда = max контент
     (NATR, 8 строк, ~283px), короткие карточки тянутся до неё, низ карусели РОВНЫЙ (не прыгает на свайпе).
     НЕ 1fr и НЕ height:100% (последнее вернуло бы схлоп-вариант №3): stretch тянет от контента ряда. */
  #page-screeners-liq .liq-stats{
    display:flex;flex:none;flex-wrap:nowrap;align-items:stretch;gap:12px;
    margin:16px -16px 0;padding:0 16px;
    overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-padding-left:16px;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;-ms-overflow-style:none}
  #page-screeners-liq .liq-stats::-webkit-scrollbar{display:none}
  /* display:block — КОРЕНЬ №2: как flex-row-элемент карточка (сама flex-column c flex:1-телом +
     .liq-card{overflow:hidden}) резолвит cross-height только по шапке (~67px), flex:1-тело схлопывается
     в 0 и клипается → блок Топов невидим. block = тело по контенту (шапка+таблица), высота = контент. */
  #page-screeners-liq .liq-stat{
    display:block;
    flex:0 0 calc(100% - 36px);width:calc(100% - 36px);box-sizing:border-box;
    margin:0;height:auto;min-height:0;
    scroll-snap-align:start;scroll-snap-stop:always}   /* peek ~40px следующего слайда — affordance «есть ещё» (как Intel) */
  #page-screeners-liq .liq-stat .liq-stat-load{flex:none}
  /* KPI «Статистика · 24ч» 2×2 (между фильтрами и графиком; показ флагом .liq-kpi-on при готовности
     /api/liq/stats24h). Значения mono, подписи dim, лонги --up / шорты --dn — по mockups/mobile-liq.html. */
  #page-screeners-liq .liq-kpi-sec.liq-kpi-on{display:block;margin-top:16px}
  #page-screeners-liq .liq-kpi-lbl{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--dim);margin-bottom:12px}
  #page-screeners-liq .liq-kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
  #page-screeners-liq .liq-kpi-cell{background:var(--surface);box-shadow:inset 0 0 0 1px var(--border);border-radius:12px;padding:14px}
  #page-screeners-liq .liq-kpi-k{font-size:11px;font-weight:600;color:var(--dim);text-transform:uppercase;letter-spacing:.04em;margin-bottom:7px}
  #page-screeners-liq .liq-kpi-v{font-size:19px;font-weight:800;font-family:var(--mono);letter-spacing:-.4px}
  #page-screeners-liq .liq-kpi-v.up{color:var(--up)} #page-screeners-liq .liq-kpi-v.dn{color:var(--dn)}
  #page-screeners-liq .liq-kpi-sub{font-size:11px;color:var(--muted);font-weight:600;margin-top:4px}
  /* ── аудит-пачка liq (мобилко-скоуп): №3 LIVE красный в шапке · №7 точка amber · №6 лейбл+точка наружу, без ▌ ── */
  /* шапка: заголовок и LIVE на первой строке (order), контролы во всю ширину ниже (order:2) */
  #page-screeners-liq .liq-head{gap:10px}
  #page-screeners-liq .liq-title{order:0}
  #page-screeners-liq .liq-ctl{order:2;margin-left:0;flex-wrap:wrap;width:100%}
  /* T11+ (Kamron 18.07): 3 фильтра liq в ОДИН ряд (грид 1.4/0.8/1fr), STATISTICS·24Ч снят на мобилке, контент поднят снятием высоты лейбла (не отрицательные маржины) */
  #page-screeners-liq .liq-ctl{display:grid;grid-template-columns:1.4fr 0.8fr 1fr;gap:8px;align-items:center}   /* фильтры (dropdown/min/ticker) в один ряд; .liq-head держит title/ctl/live как было */
  #page-screeners-liq .liq-dd,#page-screeners-liq .liq-fld{min-width:0}
  #page-screeners-liq .liq-dd__trigger{min-width:0;width:100%;height:40px}
  #page-screeners-liq .liq-fld{height:40px;display:flex;align-items:center}
  #page-screeners-liq .liq-fld .numf,#page-screeners-liq .liq-fld .tk{min-width:0;width:100%;flex:1}
  #page-screeners-liq .liq-kpi-lbl{display:none}   /* STATISTICS·24Ч снят (моб): период читается из «за 24 часа» внутри первой карточки (осознанно, вернётся одним коммитом) */
  #page-screeners-liq .liq-live{order:1;margin-left:auto;width:auto;color:var(--up)}   /* T5: LIVE зелёный (Kamron отменил прежний красный №3); в шапке справа, не под фильтрами */
  #page-screeners-liq .liq-live b{background:var(--up);box-shadow:none;animation:liqLiveM 1.5s infinite}
  /* №6: заголовки секций НАРУЖУ — панель-полотно прозрачна, карточка переезжает на тело (лейбл на --bg над карточкой, как KPI-лейбл над гридом) */
  #page-screeners-liq .liq-panel3{background:transparent;box-shadow:none;border-radius:0;overflow:visible;padding:0;margin-bottom:var(--sec)}   /* T0-final №13: 20px → --sec (24), ритм секций liq (GRID.md: liq — известный «--sec не применён») */
  #page-screeners-liq .liq-panel3 .liq-bd3{background:var(--surface);box-shadow:inset 0 0 0 1px var(--border);border-radius:12px;padding:14px 16px;overflow:hidden}
  #page-screeners-liq .liq-panel3 .liq-ph{padding:0 2px 10px;box-shadow:none;height:auto}
  /* ▌-полоса → круглая точка, цвет по секции (эталон .iv-lbl .dot): время=amber, профиль=blue(деф.), лента=red(инлайн) */
  #page-screeners-liq .liq-ph .t i{width:7px;height:7px;border-radius:50%}
  #page-screeners-liq .liq-c1 .liq-ph .t i{background:var(--amber)}   /* №7: «Ликвидации по времени» — точка amber (была синяя полоса) */
  /* служебные метки 9→10 (лого биржи, сторона) */
  #page-screeners-liq .liq-fr .ex,#page-screeners-liq .liq-fr .side,#page-screeners-liq .liq-bd{font-size:10px}
  /* зона нажатия дропдауна биржи (38px < 40) */
  #page-screeners-liq .liq-dd__trigger{position:relative}
  #page-screeners-liq .liq-dd__trigger::after{content:"";position:absolute;inset:-4px 0}

  /* ═══════════ T20 типографика — раскатка экран=коммит (Kamron 19.07). Меты/лейблы/текст-чипы → 12,
     имя-контент (2я строка) → 13. НЕ трогаем: значения/$/%/mono, глиф-бейджи. Скоуп по странице. ═══════════ */
  /* WHALES */
  #page-whales .mv-h,#page-whales .rh-a,#page-whales .live,#page-whales .wa-flow,#page-whales .wpos-src,
  #page-whales .wpos-side,#page-whales .hero-sub,#page-whales .hero-r-l,#page-whales .w-h-pill,#page-whales .stat-l,
  #page-whales .stat-sub,#page-whales .wa-src,#page-whales .rgb,#page-whales .exh,#page-whales .dex,#page-whales .chip,
  #page-whales .rtab,#page-whales .tc-s,#page-whales .ctitle,#page-whales .exn,#page-whales .wpos-r3,
  #page-whales .tc-im,#page-whales .tc-c,#page-whales .cf-sym{font-size:12px}
  #page-whales .mv-nm{font-size:13px}   /* имя монеты — вторая строка контента */
  /* биржи L/S: на мобиле шрифт .exn=12px → "Hyperliquid"+бейдж DEX не влезали в 92px и заслоняли полосу. Шире имя-колонку. */
  #page-whales .exr{grid-template-columns:112px 1fr 62px}
  #page-whales .dex{margin-left:4px;padding:1px 3px}
  /* LIQ (перебивает явные 10px строки .liq-fr выше — тот же селектор, позже по исходнику) */
  #page-screeners-liq .liq-fr .ex,#page-screeners-liq .liq-fr .side,#page-screeners-liq .r,#page-screeners-liq .meta{font-size:12px}
}

/* доступность: на мобиле с reduced-motion гасим переходы (десктоп не трогаем) */
@media(max-width:768px) and (prefers-reduced-motion:reduce){
  *{transition:none!important;animation:none!important}
}
