/* ============ АНАЛИТИКА: KPI-плитки и три графика ============
   Цвета марок — это фирменные цвета партий, то есть идентичность, а не
   произвольная палитра. Такая палитра не проходит проверку на различимость
   (два синих, два красных), поэтому цвет здесь нигде не единственный код:
   у каждой марки есть прямая подпись или строка легенды с названием и
   числом. Зазор в 2px цветом полотна отделяет соседние заливки. ============ */

/* ---------- KPI-плитки ---------- */
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:18px;}
.stat{position:relative;padding:14px 16px;border-radius:var(--radius-sm);
  background:linear-gradient(168deg,
    var(--card-a) 0%,
    color-mix(in srgb,var(--card-a) 55%, var(--card-b)) 52%,
    var(--card-b) 100%);
  border:1px solid var(--stroke);box-shadow:var(--shadow);overflow:hidden;}
.stat::after{content:"";position:absolute;inset:auto 0 0 0;height:2px;
  background:linear-gradient(90deg,
    var(--accent) 0%,
    color-mix(in srgb,var(--accent) 55%, transparent) 34%,
    color-mix(in srgb,var(--accent) 18%, transparent) 62%,
    transparent 100%);
  opacity:.5;}
.stat .k{font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted-2);}
.stat .v{font-family:var(--font-display);font-size:clamp(20px,2.4vw,28px);font-weight:750;letter-spacing:-.03em;
  line-height:1.1;margin-top:6px;}
.stat .v small{font-size:12px;font-weight:500;color:var(--muted-2);letter-spacing:0;}
.stat .d{font-size:11px;color:var(--muted);margin-top:3px;line-height:1.35;}
.stat-dual{display:flex;flex-direction:column;gap:3px;margin-top:7px;}
.stat-dual > div{display:flex;align-items:baseline;justify-content:space-between;gap:10px;}
.stat-dual .lbl{font-size:9.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted-2);white-space:nowrap;}
.stat-dual .num{font-family:var(--font-display);font-size:clamp(15px,1.7vw,18px);font-weight:750;letter-spacing:-.02em;white-space:nowrap;}

/* ---------- сетка карточек ---------- */
.charts{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:20px;align-items:start;}
.chart-card{padding:18px;position:relative;min-width:0;}
.chart-card.wide{grid-column:1 / -1;}
.chart-head{margin-bottom:14px;}
.chart-head h3{font-family:var(--font-display);font-size:14.5px;font-weight:700;letter-spacing:-.015em;}
.chart-head p{font-size:11.5px;color:var(--muted-2);margin-top:4px;line-height:1.45;}
.chart-body{position:relative;}
.chart-body svg{display:block;width:100%;height:auto;overflow:visible;}

/* ---------- общая подсказка графиков ---------- */
.c-tip{position:absolute;left:0;top:0;z-index:20;min-width:150px;max-width:240px;padding:10px 12px;
  background:var(--tip-bg);border:1px solid var(--stroke-2);border-radius:11px;box-shadow:var(--shadow);
  backdrop-filter:blur(14px);pointer-events:none;opacity:0;transform:translate(-50%,-115%) scale(.95);
  transition:opacity .15s ease,transform .2s cubic-bezier(.3,1.3,.4,1);}
.c-tip.show{opacity:1;transform:translate(-50%,-115%) scale(1);}
.c-tip .t{font-size:12px;font-weight:650;line-height:1.3;margin-bottom:6px;}
.c-tip .r{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--muted);line-height:1.6;}
.c-tip .r i{width:8px;height:8px;border-radius:2px;flex:none;display:block;}
.c-tip .r b{margin-left:auto;color:var(--text);font-weight:650;}

/* ---------- парламентская диаграмма ---------- */
.hemi-wrap{position:relative;}
.hemi-center{position:absolute;left:50%;bottom:4px;transform:translateX(-50%);text-align:center;
  pointer-events:none;width:min(62%,260px);}
.hemi-center .big{font-family:var(--font-display);font-size:clamp(24px,3.6vw,34px);font-weight:750;
  letter-spacing:-.035em;line-height:1;}
.hemi-center .sub{font-size:11px;color:var(--muted);margin-top:5px;line-height:1.35;}
.seat{transition:opacity .2s ease,transform .2s ease;transform-box:fill-box;transform-origin:center;}
.seat.dim{opacity:.2;}
.hemi-legend{display:flex;flex-direction:column;gap:2px;margin-top:8px;}
.hleg{display:flex;align-items:center;gap:10px;width:100%;padding:7px 9px;border-radius:10px;cursor:pointer;
  background:transparent;border:1px solid transparent;color:inherit;font:inherit;text-align:left;
  transition:background .15s,border-color .15s;}
.hleg:hover{background:var(--surface);border-color:var(--stroke);}
.hleg.active{background:var(--accent-soft);border-color:var(--accent-line);}
.hleg i{width:10px;height:10px;border-radius:3px;flex:none;}
.hleg .n{font-size:12px;font-weight:550;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hleg .s{font-size:12px;font-weight:650;flex:none;}
.hleg .p{font-size:10.5px;color:var(--muted-2);flex:none;width:44px;text-align:right;}
.hleg:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
.hleg.static{cursor:default;}
.hleg.static:hover{background:transparent;border-color:transparent;}

/* ---------- динамика мандатов ---------- */
.trend-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:12px;}
.tleg{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);
  background:none;border:0;padding:2px;cursor:pointer;font-family:inherit;}
.tleg i{width:14px;height:3px;border-radius:2px;flex:none;}
.tleg:hover{color:var(--text);}
.tleg.off{opacity:.4;}
.tleg:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px;}

/* ---------- идеологический спектр (диверг. полосы, чистый HTML) ---------- */
.spectrum{display:grid;grid-template-columns:1fr 1fr;gap:22px 26px;}
.spec-col h4{font-size:10px;text-transform:uppercase;letter-spacing:.14em;color:var(--accent);
  font-weight:650;margin-bottom:4px;}
.spec-col .poles{display:flex;justify-content:space-between;font-size:10px;color:var(--muted-2);margin-bottom:10px;}
.srow{display:grid;grid-template-columns:1fr;gap:3px;margin-bottom:9px;}
.srow .lab{display:flex;align-items:baseline;gap:8px;font-size:11.5px;color:var(--body);}
.srow .lab b{margin-left:auto;font-weight:650;color:var(--text);font-size:11.5px;}
.srow .track{position:relative;height:12px;border-radius:6px;background:var(--surface);
  border:1px solid var(--stroke);overflow:hidden;}
.srow .track::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;
  background:var(--chart-axis);z-index:2;}
.srow .fill{position:absolute;top:2px;bottom:2px;border-radius:5px;width:0;
  transition:width .8s cubic-bezier(.2,.9,.3,1),left .8s cubic-bezier(.2,.9,.3,1);}
.srow.hi .track{border-color:var(--accent-line);}
.spec-scale{display:flex;justify-content:space-between;font-size:9.5px;color:var(--muted-2);
  margin-top:2px;padding-top:6px;border-top:1px solid var(--stroke);}

/* ---------- история мандатов в карточке партии ---------- */
.hist{display:flex;align-items:flex-end;gap:6px;height:76px;margin-top:10px;}
.hist .col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;height:100%;}
.hist .bar-v{width:100%;border-radius:4px 4px 2px 2px;min-height:2px;height:0;
  transition:height .8s cubic-bezier(.2,.9,.3,1);}
.hist .bar-v.none{background:var(--chart-empty)!important;}
.hist .num{font-size:10px;font-weight:650;color:var(--text);}
.hist .lbl{font-size:9px;color:var(--muted-2);letter-spacing:.04em;}
.hist-note{font-size:10.5px;color:var(--muted-2);margin-top:8px;}

/* ---------- таблица данных (доступная альтернатива цвету) ---------- */
.data-toggle{margin-top:12px;font-size:11px;color:var(--muted);background:var(--surface);
  border:1px solid var(--stroke);border-radius:999px;padding:5px 12px;cursor:pointer;font-family:inherit;}
.data-toggle:hover{color:var(--text);border-color:var(--stroke-2);}
.data-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.data-table{width:100%;border-collapse:collapse;margin-top:10px;font-size:11.5px;}
.data-table th,.data-table td{padding:6px 8px;text-align:right;border-bottom:1px solid var(--stroke);}
.data-table th:first-child,.data-table td:first-child{text-align:left;}
.data-table th{color:var(--muted-2);font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.08em;}
.data-table td{color:var(--body);}
.data-wrap{overflow-x:auto;}
.data-wrap[hidden]{display:none;}

/* ============ МОБИЛЬНАЯ АДАПТАЦИЯ ============ */
@media(max-width:1050px){
  /* см. комментарий про minmax в css/layout.css: с обычным 1fr карточка
     графика на узком экране расширялась по содержимому легенды */
  .charts{grid-template-columns:minmax(0,1fr);gap:16px;}
  .stats{gap:10px;}
}
@media(max-width:720px){
  .stats{grid-template-columns:repeat(2,minmax(0,1fr));}
  .chart-card{padding:14px;}
  .spectrum{grid-template-columns:1fr;gap:22px;}
  .hemi-center{width:min(72%,220px);}
  .hleg .n{font-size:11.5px;}
  .hleg .p{width:40px;}
}
@media(max-width:420px){
  .stat{padding:12px 13px;}
  .stat .d{display:none;}
}

/* ---------- переключатель шкалы графика ---------- */
.chart-toolbar{display:flex;gap:5px;margin:-4px 0 12px;}
.trend-mode{font:inherit;font-size:11.5px;font-weight:550;padding:5px 12px;border-radius:999px;cursor:pointer;
  background:var(--surface);border:1px solid var(--stroke);color:var(--muted);transition:all .16s ease;}
.trend-mode:hover{color:var(--text);border-color:var(--stroke-2);}
.trend-mode[aria-pressed="true"]{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent);}
.trend-mode:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}

/* ---------- динамика: серии и подсказка ---------- */
.trend-series{transition:opacity .2s ease;}
.trend-series.faded{opacity:.26;}
.trend-dot,.trend-line{transition:r .2s ease,stroke-width .2s ease;}
.c-tip .r.on{color:var(--text);background:var(--surface);border-radius:6px;
  margin:0 -4px;padding:0 4px;}
.c-tip .r u{margin-left:8px;font-size:9.5px;text-decoration:none;font-variant-numeric:tabular-nums;flex:none;}
.c-tip .r u.up{color:#3fb950;}
.c-tip .r u.down{color:#f85149;}
.c-tip .r u.flat,.c-tip .r u.new{color:var(--muted-2);}
.c-tip .f{margin-top:7px;padding-top:6px;border-top:1px solid var(--stroke);
  font-size:9.5px;color:var(--muted-2);}
.tleg b{margin-left:5px;color:var(--text);font-weight:650;font-variant-numeric:tabular-nums;}
.tleg.off b{color:inherit;}

/* приглушение всей фракции на диаграмме состава палаты */
.seat-group{transition:opacity .2s ease;}
.dim-group{opacity:.55;}
