/* «Обзор» — сетка виджетов и тепловая карта сделок (оператор, 06.10).
   Палитра — токены консоли; акцент — синий PayPage (`--pay-accent*`), заведён здесь, потому что
   runtime.css PayPage консоль не грузит. Стили только классами: прод отдаёт CSP без unsafe-inline. */
:root{--ov-accent:#8f9bff;--ov-accent-fill:#4f5dff;--ov-accent-soft:#1c2150;--ov-lift-shadow:0 22px 48px -12px rgb(0 0 0/.7),0 8px 18px -6px rgb(0 0 0/.55)}
:root[data-theme=light]{--ov-accent:#3645d1;--ov-accent-fill:#3f4fe6;--ov-accent-soft:#eceeff;--ov-lift-shadow:0 22px 44px -14px rgb(23 32 52/.32),0 8px 16px -8px rgb(23 32 52/.22)}

.wg{margin-top:4px}
.wg-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px}
.wg-hint{margin:0;font-size:var(--admin-type-caption);color:var(--admin-quiet)}
.wg-reset{flex-shrink:0;min-height:32px;padding:0 12px;border-radius:8px;border:1px solid var(--admin-line);background:transparent;color:var(--admin-secondary);font:inherit;font-size:var(--admin-type-caption);cursor:pointer}
.wg-reset:hover{background:var(--admin-hover);color:var(--admin-text)}
.wg-reset:focus-visible,.wg-size:focus-visible{outline:2px solid var(--ov-accent);outline-offset:2px}

.wg-grid{--wg-cols:4;--wg-row:215px;list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(var(--wg-cols),minmax(0,1fr));grid-auto-rows:var(--wg-row);gap:12px;position:relative}
.wg-item{position:relative;min-width:0;min-height:0;border-radius:14px;background:var(--admin-surface);border:1px solid var(--admin-line-soft);box-shadow:0 1px 0 rgb(255 255 255/.02) inset;cursor:grab;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:auto;outline:none;transition:box-shadow .2s ease,border-color .2s ease}
:root[data-theme=light] .wg-item{box-shadow:0 1px 2px rgb(23 32 52/.05)}
.wg-item:hover{border-color:var(--admin-line)}
.wg-item:focus-visible{border-color:var(--ov-accent);box-shadow:0 0 0 2px var(--ov-accent)}
.wg-body{position:absolute;inset:0;padding:14px 16px;display:flex;flex-direction:column;gap:8px;overflow:hidden;container-type:size;container-name:widget}
.wg-item.is-lifted{z-index:20;cursor:grabbing;box-shadow:var(--ov-lift-shadow);border-color:var(--admin-line-strong);transition:none}
.wg-item.is-settling{z-index:19}
.wg-item.is-dropped{animation:wg-drop .9s ease-out}
.wg.is-dragging .wg-item:not(.is-lifted){cursor:grabbing}
.wg.is-dragging a{pointer-events:none}
@keyframes wg-drop{0%{box-shadow:0 0 0 2px var(--ov-accent)}100%{box-shadow:0 0 0 2px transparent}}
.wg-size{position:absolute;right:8px;bottom:8px;width:28px;height:28px;display:grid;place-items:center;border-radius:8px;border:1px solid var(--admin-line);background:var(--admin-raised);color:var(--admin-muted);cursor:pointer;opacity:0;transition:opacity .15s ease}
.wg-size svg{width:14px;height:14px}
.wg-item:hover .wg-size,.wg-item:focus-within .wg-size{opacity:1}
.wg-size:hover{color:var(--admin-text)}
/* Касание (аудит 07.10, третий проход): кнопка размера жила в правом нижнем углу поверх чисел («98.3%», «+0.68 USDT»).
   Теперь — в строке заголовка, рядом со ссылкой раздела; обе цели 44 px, числа ничего не перекрывает. */
@media (hover:none),(pointer:coarse){
 .wg-size{opacity:.85;width:44px;height:44px;top:4px;right:4px;bottom:auto}
 .wg-reset{min-height:44px}
 .wg-item .ov-head{padding-right:40px;min-height:44px;margin-top:-6px}
 .wg-item .ov-head a{min-width:44px;min-height:44px}
 .wg-item .ov-metric,.wg-item .ov-line,.wg-item .hm-foot{padding-right:0}
}
/* Телефон: две узкие колонки — размер виджета там почти ничего не меняет, а кнопка в заголовке ломала названия
   («Систем|а»). Раскладка остаётся перетаскиванием и «Сбросить раскладку»; размер меняют на планшете и десктопе. */
@media (hover:none) and (max-width:600px),(pointer:coarse) and (max-width:600px){.wg-size{display:none}.wg-item .ov-head{padding-right:0}}
@media (prefers-reduced-motion:reduce){.wg-item,.wg-size{transition:none}.wg-item.is-dropped{animation:none;box-shadow:0 0 0 2px var(--ov-accent)}}

/* Голова виджета: значок + название слева, ссылка раздела справа. */
.ov-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}
.ov-head h2{display:flex;align-items:center;gap:8px;margin:0;min-width:0;font-size:var(--admin-type-small);font-weight:600;color:var(--admin-secondary);letter-spacing:0}
/* Название не режется многоточием («Количество …», «Торговые ак…» на телефоне): до двух строк. */
.ov-head{align-items:flex-start}
.ov-head h2 span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.3;overflow-wrap:break-word}
.ov-head h2 svg{margin-top:1px}
.ov-head svg{width:16px;height:16px;flex-shrink:0;color:var(--admin-muted)}
.wg-item .ov-head a{flex-shrink:0;min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:flex-end;font-size:var(--admin-type-caption);color:var(--admin-quiet);text-decoration:none;white-space:nowrap}
.ov-head a:hover{color:var(--admin-text);text-decoration:underline}
.ov-head a:focus-visible{outline:2px solid var(--ov-accent);outline-offset:2px;border-radius:4px}

/* Значение — под заголовком, а не прижато к низу: пустоты в 100 px между названием и числом нет. */
.ov-metric{margin-top:6px;display:flex;flex-direction:column;gap:4px;min-width:0;padding-right:28px}
.ov-value{display:block;font-size:clamp(20px,13cqi,var(--admin-type-metric));line-height:1.1;font-weight:650;letter-spacing:-.01em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;color:var(--admin-text)}
.ov-value.good{color:var(--admin-good)}.ov-value.bad{color:var(--admin-bad)}.ov-value.warn{color:var(--admin-warn)}
.ov-caption{display:block;font-size:var(--admin-type-caption);line-height:1.4;color:var(--admin-meta)}
.ov-growth{font-size:var(--admin-type-caption);color:var(--admin-secondary);font-variant-numeric:tabular-nums}
.ov-footnote{margin:14px 0 0;font-size:var(--admin-type-caption);color:var(--admin-quiet)}

.ov-system{display:flex;flex-direction:column;gap:6px;min-height:0;flex:1}
.ov-system>.ov-eyebrow{margin-top:8px}
.ov-eyebrow{font-size:var(--admin-type-caption);color:var(--admin-muted)}
.ov-state{display:flex;align-items:center;gap:10px;min-width:0;margin-bottom:6px}
.ov-state strong{font-size:clamp(15px,8cqi,var(--admin-type-heading));line-height:1.2;font-weight:650;overflow-wrap:break-word;hyphens:auto}
.ov-state strong.neutral{color:var(--admin-text)}.ov-state strong.good{color:var(--admin-good)}.ov-state strong.warn{color:var(--admin-warn)}.ov-state strong.bad{color:var(--admin-bad)}
.ov-line span{min-width:0;flex:1 1 9em;hyphens:auto}
.ov-line{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 8px;padding-top:6px;border-top:1px solid var(--admin-line-soft);font-size:var(--admin-type-caption);color:var(--admin-muted);padding-right:30px}
.ov-line b{font-weight:600;font-variant-numeric:tabular-nums;color:var(--admin-text);white-space:nowrap}
.ov-line b.good{color:var(--admin-good)}.ov-line b.bad{color:var(--admin-bad)}.ov-line b.warn{color:var(--admin-warn)}
.ov-note{display:none;margin:4px 0 0;font-size:var(--admin-type-caption);line-height:1.5;color:var(--admin-quiet)}
@container widget (min-height:300px){.wg-item .ov-system .ov-note{display:block}.wg-item .ov-system>.ov-eyebrow{margin-top:12px}}
@container widget (max-height:175px){.wg-item .ov-eyebrow{display:none}.wg-item .ov-state{margin-bottom:2px}}
@container widget (max-width:220px){.wg-item .ov-link-text{display:none}}
@container widget (max-width:200px){.wg-item .ov-head h2>svg{display:none}.wg-item .ov-line{padding-right:0}.wg-item .ov-state strong{font-size:15px}.wg-item .ov-state{gap:7px;margin-bottom:0}}

/* Тепловая карта: 5 суток × 32 интервала, уровни 0–4 — доли синего PayPage. */
.wg-item[data-wg-id=heatmap]{--hm-0:var(--admin-line-soft);--hm-1:color-mix(in oklab,var(--ov-accent) 24%,var(--admin-surface));--hm-2:color-mix(in oklab,var(--ov-accent) 46%,var(--admin-surface));--hm-3:color-mix(in oklab,var(--ov-accent) 70%,var(--admin-surface));--hm-4:var(--ov-accent)}
.hm-top{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;min-width:0}
.hm-top .ov-value{font-size:clamp(20px,7cqi,var(--admin-type-metric))}
.hm-today{font-size:var(--admin-type-caption);color:var(--admin-muted)}
.hm-delta{font-size:var(--admin-type-caption);color:var(--admin-meta);font-variant-numeric:tabular-nums}
.hm-delta b{font-weight:650}.hm-delta b.good{color:var(--admin-good)}.hm-delta b.bad{color:var(--admin-bad)}.hm-delta b.neutral{color:var(--admin-text)}
.hm-map{flex:1;min-height:0;display:flex;flex-direction:column}
.hm-grid{flex:1;min-height:0;display:grid;grid-template-columns:0 repeat(32,minmax(0,1fr));grid-template-rows:repeat(5,minmax(4px,1fr)) 0;column-gap:2px;row-gap:3px}
.hm-cell{display:block;border-radius:2px;background:var(--hm-0);min-width:0;min-height:0}
.hm-cell[data-level="1"]{background:var(--hm-1)}.hm-cell[data-level="2"]{background:var(--hm-2)}.hm-cell[data-level="3"]{background:var(--hm-3)}.hm-cell[data-level="4"]{background:var(--hm-4)}
.hm-cell.is-future{background:transparent;box-shadow:inset 0 0 0 1px var(--admin-line-soft);opacity:.55}
.hm-cell.is-now{box-shadow:0 0 0 1.5px var(--ov-accent);position:relative;z-index:1}
.hm-day,.hm-hour{display:block;visibility:hidden;min-width:0;overflow:visible;white-space:nowrap;font-size:12px;line-height:1;color:var(--admin-quiet);font-variant-numeric:tabular-nums}
.hm-day{align-self:center}
.hm-day.is-today{color:var(--ov-accent);font-weight:600}
.hm-hour{align-self:end}
.hm-foot{display:none;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-right:30px}
.hm-legend{display:flex;align-items:center;gap:3px;font-size:12px;color:var(--admin-quiet)}
.hm-legend .hm-cell{width:10px;height:10px}
.hm-legend span:first-child{margin-right:4px}.hm-legend span:last-child{margin-left:4px}
@container widget (min-width:300px){.hm-grid{grid-template-rows:repeat(5,minmax(4px,1fr)) 14px}.hm-hour{visibility:visible}}
/* Подписи дней видны и на телефоне (аудит 07.10): без них пять рядов — загадка. */
@container widget (min-width:300px){.hm-grid{grid-template-columns:56px repeat(32,minmax(0,1fr))}.hm-day{visibility:visible}}
@container widget (min-height:260px){.hm-foot{display:flex}}
@container widget (min-height:300px){.hm-grid{row-gap:4px;column-gap:3px}}
@container widget (max-height:175px){.wg-item .hm-today{display:none}}

@media (max-width:600px){.wg-bar{align-items:flex-start;flex-direction:column}.wg-body{padding:12px}}
.hm-sep{margin:0 5px;color:var(--admin-quiet)}
