/* =====================================================================
   «Команда» — компоненты. Требует tokens.css. Только тёмная тема.
   Все интерактивные элементы ≥ 44×44 px. Иконки: .i .i-<name> (icons.css).
   ===================================================================== */
/* u47: icons.css подключается отдельным <link> в index.html (был @import — лишний последовательный запрос) */

/* ---------- База ---------- */
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important}
html{background:var(--bg);-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;min-height:100vh;min-height:100dvh;background:var(--bg);color:var(--text);
  font:var(--fw-body) var(--fs-body)/var(--lh-body) var(--font-sans);
  -webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;padding:0}
a{color:var(--accent);text-decoration:none}
:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--r-sm)}
.num,.tnum{font-variant-numeric:tabular-nums}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- Скролл и защита от горизонтального переполнения (v2.1) ----------
   Причина бага: flex-элементы по умолчанию min-width:auto и не сжимаются уже своего содержимого,
   а длинные строки без пробелов (e-mail, URL, Channel::…, длинные имена) не переносились —
   карточка становилась шире экрана, документ получал scrollWidth > clientWidth, страница «ездила» вбок.
   1) страница скроллится только вертикально; 2) любой flex-ребёнок может сжиматься; 3) длинные слова переносятся. */
html{overflow-x:hidden;height:auto}              /* overflow-x уходит на viewport, вертикальный скролл остаётся */
@supports (overflow:clip){html{overflow-x:clip}}                  /* clip не создаёт скролл-контейнер, sticky не ломается */
body{overflow:visible;height:auto;max-width:100%;overflow-wrap:break-word}  /* никаких height:100vh + overflow:hidden */
.app,.app>*,#screen{min-width:0;max-width:100%}
.card,.list,.banner,.state,.ta-person,.ta-section,.ta-lead,.stack>*,.stack-2>*,.stack-3>*{min-width:0;max-width:100%}
p,h1,h2,h3,li,dd,dt,blockquote,.title,.sub,.lead-msg,.banner b,.banner span{overflow-wrap:anywhere}
a,code,.mono{overflow-wrap:anywhere}
img,video{max-width:100%;height:auto}
pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}
.chip,.badge{max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis}
.wait,.count{flex:none}
.row>*,.row-between>*{min-width:0}
.filters{overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;max-width:none}
.filters>*{scroll-snap-align:start}

/* ---------- Типографика ---------- */
.h1{font-size:var(--fs-h1);line-height:var(--lh-h1);font-weight:var(--fw-h1);margin:0}
.h2{font-size:var(--fs-h2);line-height:var(--lh-h2);font-weight:var(--fw-h2);margin:0}
.body{font-size:var(--fs-body);line-height:var(--lh-body)}
.caption{font-size:var(--fs-caption);line-height:var(--lh-caption)}
.micro{font-size:var(--fs-micro);line-height:var(--lh-micro)}
.display{font-size:var(--fs-display);line-height:var(--lh-display);font-weight:var(--fw-semibold);letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.t2{color:var(--text-2)} .t3{color:var(--text-3)}
.t-success{color:var(--success)} .t-warning{color:var(--warning)} .t-danger{color:var(--danger)} .t-info{color:var(--info)} .t-accent{color:var(--accent)}
.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}

/* ---------- Каркас экрана ---------- */
.app{min-height:100dvh;display:flex;flex-direction:column;
  padding:calc(var(--safe-top) + var(--sp-2)) calc(var(--page-x) + var(--safe-right)) 0 calc(var(--page-x) + var(--safe-left))}
.app.has-tabbar{padding-bottom:calc(var(--tabbar-h) + var(--safe-bottom) + var(--sp-6))}
.page-head{display:flex;align-items:center;gap:var(--sp-3);min-height:var(--tap);margin:var(--sp-2) 0 var(--sp-4)}
.page-head .h1{flex:1;min-width:0}
.section{margin-top:var(--sp-6)}
.section-title{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);
  margin:0 0 var(--sp-2);padding:0 var(--sp-1);color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption);
  font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.04em}
.stack{display:flex;flex-direction:column;gap:var(--sp-2)} .stack-3{display:flex;flex-direction:column;gap:var(--sp-3)}
.row{display:flex;align-items:center;gap:var(--sp-2)} .row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}
.wrap{flex-wrap:wrap} .grow{flex:1;min-width:0}
.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}

/* ---------- Таб-бар (над home-indicator) ---------- */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-tabbar);
  display:flex;justify-content:space-around;align-items:stretch;
  height:calc(var(--tabbar-h) + var(--safe-bottom));
  padding:0 var(--safe-right) var(--safe-bottom) var(--safe-left);
  background:rgb(22 27 34 / .92);border-top:1px solid var(--border);
  -webkit-backdrop-filter:saturate(1.4) blur(16px);backdrop-filter:saturate(1.4) blur(16px)}
.tab{position:relative;flex:1;min-width:var(--tap);min-height:var(--tap);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-medium);transition:color var(--dur) var(--ease)}
.tab[aria-current="page"]{color:var(--accent)}
.tab[aria-current="page"]::before{content:"";position:absolute;top:0;left:30%;right:30%;height:2px;border-radius:0 0 2px 2px;background:var(--accent)}
.tab .count{position:absolute;top:4px;left:calc(50% + 6px)}
.tab:active{color:var(--text)}
[data-role="user"] [data-owner-only],[data-role="lead_c"] [data-owner-only],[data-role="lead_c"] [data-hide-lead-c]{display:none!important}

/* ---------- Карточка ---------- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-4);box-shadow:var(--shadow-1)}
.card.raised{background:var(--surface-2);box-shadow:var(--shadow-2)}
.card.tap{display:block;color:inherit;transition:background var(--dur-fast) var(--ease)}
.card.tap:active{background:var(--surface-2)}
.card-danger{border-color:rgb(240 74 74 / .55);background:linear-gradient(180deg,rgb(240 74 74 / .12),transparent 60%),var(--surface)}
.card-warning{border-color:rgb(245 165 36 / .45)}
.card-hero{background:radial-gradient(120% 140% at 0% 0%,rgb(76 141 255 / .18),transparent 60%),var(--surface);border-radius:var(--r-lg);border:1px solid var(--border);padding:var(--sp-5) var(--sp-4)}
.divider{height:1px;background:var(--border);margin:var(--sp-3) 0;border:0}

/* ---------- Список ---------- */
.list{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.list-item{display:flex;align-items:center;gap:var(--sp-3);min-height:56px;padding:var(--sp-3) var(--sp-4);color:inherit;position:relative;width:100%;text-align:left}
.list-item+.list-item::before{content:"";position:absolute;top:0;left:var(--sp-4);right:0;height:1px;background:var(--border)}
.list-item.has-lead+.list-item::before,.list-item.has-lead::before{left:64px}
a.list-item:active,button.list-item:active{background:var(--surface-2)}
.list-item .main{flex:1;min-width:0}
.list-item .title{font-weight:var(--fw-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-item .sub{color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-item .trail{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex:none;text-align:right}
.chev{color:var(--text-3)}

/* ---------- Аватар / иконка-плитка ---------- */
.avatar{width:40px;height:40px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:var(--surface-2);color:var(--text);font-weight:var(--fw-semibold);font-size:var(--fs-caption);border:1px solid var(--border)}
.avatar.lg{width:48px;height:48px;font-size:var(--fs-body)}
.tile{width:40px;height:40px;flex:none;border-radius:var(--r-md);display:grid;place-items:center;background:var(--surface-2);color:var(--text-2)}
.tile.accent{background:var(--accent-tint);color:var(--accent)} .tile.success{background:var(--success-tint);color:var(--success)}
.tile.warning{background:var(--warning-tint);color:var(--warning)} .tile.danger{background:var(--danger-tint);color:var(--danger)} .tile.info{background:var(--info-tint);color:var(--info)}

/* ---------- Бейджи / чипы ---------- */
.badge{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 6px;border-radius:6px;
  font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold);white-space:nowrap;letter-spacing:.02em;
  background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)}
.badge .i{width:12px;height:12px}
.badge-danger .i{color:var(--danger)}
.badge-team{min-width:22px;justify-content:center;font-weight:700}
.badge-team.e{background:var(--accent-tint);color:var(--accent);border-color:rgb(76 141 255 / .35)}
.badge-team.c{background:var(--info-tint);color:var(--info);border-color:rgb(108 196 255 / .35)}
.badge-ok{background:var(--success-tint);color:var(--success);border-color:rgb(47 191 113 / .35)}
.badge-warning{background:var(--warning-tint);color:var(--warning);border-color:rgb(245 165 36 / .4)}
.badge-danger{background:var(--danger-tint);color:var(--text);border-color:rgb(240 74 74 / .4)}
.badge-info{background:var(--info-tint);color:var(--info);border-color:rgb(108 196 255 / .35)}
.badge-stale{background:var(--warning-tint);color:var(--warning);border-color:rgb(245 165 36 / .4)} /* «устарело» */
.badge-owner{background:transparent;color:var(--text-2)}               /* «только владелец» */
.badge-live{background:var(--success-tint);color:var(--success);border-color:rgb(47 191 113 / .35)}
.badge-test{background:var(--surface-2);color:var(--text-2)}
.count{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border-radius:var(--r-pill);
  background:var(--danger);color:var(--on-accent);font-size:var(--fs-micro);line-height:1;font-weight:700;font-variant-numeric:tabular-nums}
.count.neutral{background:var(--surface-2);color:var(--text)}
.chip{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border-radius:var(--r-pill);
  background:var(--surface-2);border:1px solid var(--border);color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold);letter-spacing:.03em;white-space:nowrap}
.chip .i{width:14px;height:14px}
/* Чип ожидания: <15 нейтрально, 15–60 warning, >60 danger. Всегда с иконкой часов + текстом. */
.wait{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:var(--fw-medium);color:var(--text-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.wait .i{width:14px;height:14px}
.wait.warn{color:var(--warning)} .wait.late{color:var(--danger)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--text-3);flex:none}
.dot.ok{background:var(--success);box-shadow:0 0 0 3px var(--success-tint)} .dot.warn{background:var(--warning);box-shadow:0 0 0 3px var(--warning-tint)} .dot.err{background:var(--danger);box-shadow:0 0 0 3px var(--danger-tint)}

/* ---------- Сегмент-контрол и фильтр-чипы ---------- */
.segmented{display:flex;padding:2px;gap:2px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md)}
.segmented button{flex:1;min-height:40px;border-radius:10px;color:var(--text-2);font-weight:var(--fw-medium);font-size:var(--fs-caption);display:flex;align-items:center;justify-content:center;gap:6px;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}
.segmented button[aria-pressed="true"]{background:var(--surface-2);color:var(--text);box-shadow:var(--shadow-1)}
.segmented{min-height:var(--tap)}
.filters{display:flex;gap:var(--sp-2);overflow-x:auto;scrollbar-width:none;margin:0 calc(-1 * var(--page-x));padding:0 var(--page-x)}
.filters::-webkit-scrollbar{display:none}
.filter{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 14px;border-radius:var(--r-pill);
  border:1px solid var(--border);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);font-weight:var(--fw-medium);position:relative}
.filter::after{content:"";position:absolute;inset:-4px 0}  /* зона нажатия 44px */
.filter[aria-pressed="true"]{background:var(--text);color:var(--bg);border-color:var(--text)}
.filter .count{height:16px;min-width:16px;font-size:10px}
.filter[aria-pressed="true"] .count.neutral{background:var(--bg);color:var(--text)}

/* ---------- Кнопки ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-4);
  border-radius:var(--r-md);font-weight:var(--fw-semibold);font-size:var(--fs-body);line-height:var(--lh-body);white-space:nowrap;
  transition:background var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease),opacity var(--dur-fast)}
.btn:active{transform:scale(.98)}
.btn-block{display:flex;width:100%}
.btn-lg{min-height:48px}
.btn-sm{min-height:var(--tap);padding:0 var(--sp-3);font-size:var(--fs-caption)}   /* визуально меньше, зона нажатия та же */
.btn-primary{background:var(--accent);color:var(--on-accent)}
.btn-primary:active{background:var(--accent-press)}
.btn-secondary{background:var(--surface-2);color:var(--text);border:1px solid var(--border)}
.btn-secondary:active{background:var(--border)}
.btn-danger{background:var(--danger);color:var(--on-accent)}
.btn-danger:active{filter:brightness(.9)}
.btn-ghost{color:var(--accent);padding:0 var(--sp-2)}
.btn-ghost:active{background:var(--accent-tint)}
.btn[disabled],.btn[aria-disabled="true"]{background:var(--surface-2);color:var(--text-3);border-color:transparent;pointer-events:none}
.icon-btn{display:inline-grid;place-items:center;width:var(--tap);height:var(--tap);flex:none;border-radius:var(--r-md);color:var(--text-2);transition:background var(--dur-fast)}
.icon-btn:active{background:var(--surface-2);color:var(--text)}
.btn-row{display:flex;gap:var(--sp-2)} .btn-row>.btn{flex:1}

/* ---------- Поля ввода ---------- */
.field{display:flex;flex-direction:column;gap:6px}
.label{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2);font-weight:var(--fw-medium)}
.input,.textarea,.select{width:100%;min-height:var(--tap);padding:10px 14px;border-radius:var(--r-md);background:var(--surface);
  border:1px solid var(--border);color:var(--text);outline:none;transition:border-color var(--dur-fast),box-shadow var(--dur-fast)}
.textarea{resize:none;min-height:88px;line-height:var(--lh-body)}
.input::placeholder,.textarea::placeholder{color:var(--text-3)}
.input:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint)}
.input.invalid{border-color:var(--danger)}
.hint{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2)}
.hint.error{color:var(--danger)}
.search{position:relative}.search .i{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-2);width:20px;height:20px}
.search .input{padding-left:40px}
.composer{display:flex;align-items:flex-end;gap:var(--sp-2);padding:var(--sp-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg)}
.composer textarea{flex:1;border:0;background:transparent;min-height:var(--tap);max-height:160px;padding:12px 8px;resize:none;outline:none;color:var(--text)}
.composer textarea::placeholder{color:var(--text-3)}
.composer .send{width:var(--tap);height:var(--tap);border-radius:var(--r-md);background:var(--accent);color:var(--on-accent);display:grid;place-items:center;flex:none}

/* ---------- Баннеры (плашки) ---------- */
.banner{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);
  border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:var(--fs-caption);line-height:18px}
.banner .i{width:20px;height:20px;margin-top:-1px}
.banner b{font-weight:var(--fw-semibold)}
.banner .action{margin-left:auto;align-self:center;margin-block:-10px;margin-right:-8px}
.banner-info{background:var(--info-tint);border-color:rgb(108 196 255 / .3)} .banner-info>.i{color:var(--info)}
.banner-warning{background:var(--warning-tint);border-color:rgb(245 165 36 / .35)} .banner-warning>.i{color:var(--warning)}
.banner-danger{background:var(--danger-tint);border-color:rgb(240 74 74 / .4)} .banner-danger>.i{color:var(--danger)}
.banner-success{background:var(--success-tint);border-color:rgb(47 191 113 / .3)} .banner-success>.i{color:var(--success)}
/* «Данные устарели» — прилипает сверху */
.stale-bar{position:sticky;top:calc(var(--safe-top) + var(--sp-2));z-index:var(--z-banner);margin-bottom:var(--sp-3);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:rgb(42 34 20 / .92)}

/* ---------- Подсказка Сейлза (раскрываемая) ---------- */
.hint-sales{margin-top:var(--sp-3);border-radius:var(--r-md);background:linear-gradient(135deg,rgb(76 141 255 / .10),rgb(108 196 255 / .05));border:1px solid rgb(76 141 255 / .28)}
.hint-sales>summary{list-style:none;display:flex;align-items:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-3);cursor:pointer;color:var(--text);font-size:var(--fs-caption);font-weight:var(--fw-semibold)}
.hint-sales>summary::-webkit-details-marker{display:none}
.hint-sales>summary .i-sparkles{color:var(--accent);width:18px;height:18px}
.hint-sales>summary{white-space:nowrap}
.hint-sales>summary .meta{margin-left:auto;overflow:hidden;text-overflow:ellipsis;min-width:0;color:var(--text-2);font-weight:var(--fw-body)}
.hint-sales>summary .i-chevron-down{width:18px;height:18px;color:var(--text-2);transition:transform var(--dur) var(--ease)}
.hint-sales[open]>summary .i-chevron-down{transform:rotate(180deg)}
.hint-sales .content{padding:0 var(--sp-3) var(--sp-3);color:var(--text);font-size:var(--fs-body);line-height:22px}
.hint-sales .content p{margin:0 0 var(--sp-2)}
.hint-sales .src{color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.hint-sales .actions{display:flex;gap:var(--sp-2);margin-top:var(--sp-3)}

/* ---------- Моноширинный блок (адреса / хэши) ---------- */
.mono{font-family:var(--font-mono);font-size:13px;line-height:18px;letter-spacing:0;font-variant-numeric:tabular-nums}
.addr{display:inline-flex;align-items:center;gap:2px;min-height:var(--tap);margin:-10px 0 -10px -6px;padding:0 0 0 6px;border-radius:var(--r-sm);color:var(--text-2);font-family:var(--font-mono);font-size:13px}
.addr .i{width:16px;height:16px}
.addr .copy{display:inline-grid;place-items:center;width:var(--tap);height:var(--tap);color:var(--text-2);border-radius:var(--r-sm)}
.addr .copy:active{background:var(--surface-2);color:var(--text)}
.addr.copied .copy{color:var(--success)}
.codebox{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-3);border-radius:var(--r-md);background:var(--bg);border:1px solid var(--border)}
.codebox code{flex:1;min-width:0;font-family:var(--font-mono);font-size:13px;line-height:20px;color:var(--text);word-break:break-all;user-select:all}
.codebox .copy{margin:-10px -10px -10px 0}

/* Ключ–значение */
.kv{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-2) var(--sp-4);align-items:baseline}
.kv dt{color:var(--text-2);font-size:var(--fs-caption)} .kv dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}
.kv-stack{display:flex;flex-direction:column;gap:var(--sp-3)} .kv-stack>div{display:flex;flex-direction:column;gap:4px}
.kv-stack dt{color:var(--text-2);font-size:var(--fs-caption)} .kv-stack dd{margin:0}

/* ---------- Шит (bottom sheet подтверждения) ---------- */
.sheet-backdrop{position:fixed;inset:0;z-index:var(--z-sheet);background:var(--overlay);display:flex;align-items:flex-end;
  opacity:0;pointer-events:none;transition:opacity var(--dur) var(--ease)}
.sheet-backdrop.open,.sheet-backdrop:target{opacity:1;pointer-events:auto}
.sheet{width:100%;max-height:90dvh;overflow:auto;background:var(--surface-2);border-top-left-radius:20px;border-top-right-radius:20px;
  border:1px solid var(--border);border-bottom:0;box-shadow:var(--shadow-3);
  padding:var(--sp-2) calc(var(--page-x) + var(--safe-right)) calc(var(--sp-4) + var(--safe-bottom)) calc(var(--page-x) + var(--safe-left));
  transform:translateY(24px);transition:transform var(--dur-slow) var(--ease)}
.sheet-backdrop.open .sheet,.sheet-backdrop:target .sheet{transform:none}
.sheet .grabber{width:36px;height:4px;border-radius:2px;background:var(--border);margin:0 auto var(--sp-4)}
.sheet .h2{margin-bottom:var(--sp-2)}
.sheet .actions{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-5)}

/* Полноэкранная карточка (предупреждение о выводе) */
.fullscreen{position:fixed;inset:0;z-index:var(--z-sheet);background:var(--bg);overflow:auto;display:none;
  padding:calc(var(--safe-top) + var(--sp-4)) calc(var(--page-x) + var(--safe-right)) calc(var(--sp-6) + var(--safe-bottom)) calc(var(--page-x) + var(--safe-left))}
.fullscreen:target,.fullscreen.open{display:block}

/* ---------- Тосты ---------- */
.toast-region{position:fixed;left:0;right:0;z-index:var(--z-toast);display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);
  bottom:calc(var(--safe-bottom) + var(--sp-4));padding:0 var(--page-x);pointer-events:none}
.has-tabbar .toast-region,.toast-region.above-tabbar{bottom:calc(var(--tabbar-h) + var(--safe-bottom) + var(--sp-3))}
.toast{pointer-events:auto;display:flex;align-items:center;gap:var(--sp-3);width:100%;max-width:400px;min-height:48px;padding:var(--sp-2) var(--sp-2) var(--sp-2) var(--sp-4);
  border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--border);box-shadow:var(--shadow-3);font-size:var(--fs-caption);line-height:18px;
  animation:toast-in var(--dur-slow) var(--ease)}
.toast .i{width:20px;height:20px}
.toast .grow{padding:6px 0}
.toast.success>.i{color:var(--success)} .toast.danger>.i{color:var(--danger)} .toast.warning>.i{color:var(--warning)} .toast.info>.i{color:var(--info)}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- Скелетон ---------- */
.skel{position:relative;overflow:hidden;background:var(--surface-2);border-radius:var(--r-sm)}
.skel::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,rgb(230 237 243 / .06),transparent);animation:shimmer 1.4s infinite}
.skel-line{height:12px;border-radius:6px} .skel-line.lg{height:16px} .skel-line.xl{height:28px;border-radius:8px}
.skel-circle{width:40px;height:40px;border-radius:50%} .skel-tile{width:40px;height:40px;border-radius:var(--r-md)}
.w-20{width:20%}.w-30{width:30%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-80{width:80%}.w-100{width:100%}
@keyframes shimmer{to{transform:translateX(100%)}}
@media (prefers-reduced-motion: reduce){.skel::after{animation:none}.toast{animation:none}}

/* ---------- Состояния: пусто / ошибка источника / нет доступа ---------- */
.state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--sp-2);padding:var(--sp-10) var(--sp-6)}
.state .glyph{width:72px;height:72px;border-radius:24px;display:grid;place-items:center;margin-bottom:var(--sp-2);background:var(--surface);border:1px solid var(--border);color:var(--text-2)}
.state .glyph .i{width:32px;height:32px}
.state .glyph.success{background:var(--success-tint);border-color:rgb(47 191 113 / .3);color:var(--success)}
.state .glyph.danger{background:var(--danger-tint);border-color:rgb(240 74 74 / .3);color:var(--danger)}
.state .glyph.warning{background:var(--warning-tint);border-color:rgb(245 165 36 / .3);color:var(--warning)}
.state .h2{margin:0}
.state p{margin:0;color:var(--text-2);max-width:300px}
.state .btn{margin-top:var(--sp-3);min-width:160px}
.state-inline{padding:var(--sp-6) var(--sp-4)}  /* ошибка источника внутри секции */
.state.fill{flex:1;justify-content:center}

/* ---------- Чат агентов ---------- */
.agent-picker{display:flex;gap:var(--sp-2);overflow-x:auto;scrollbar-width:none;margin:0 calc(-1 * var(--page-x));padding:0 var(--page-x) var(--sp-1)}
.agent-picker::-webkit-scrollbar{display:none}
.agent{flex:none;display:flex;flex-direction:column;align-items:center;gap:6px;width:72px;min-height:76px;padding:6px 0;border-radius:var(--r-md);color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-medium)}
.agent .avatar{width:48px;height:48px;font-size:var(--fs-body);transition:box-shadow var(--dur)}
.agent[aria-pressed="true"]{color:var(--text)}
.agent[aria-pressed="true"] .avatar{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--accent)}
.thread{display:flex;flex-direction:column;gap:var(--sp-3)}
.msg{max-width:86%;padding:10px 14px;border-radius:18px;font-size:var(--fs-body);line-height:21px}
.msg.out{align-self:flex-end;background:var(--accent-tint);border:1px solid rgb(76 141 255 / .3);border-bottom-right-radius:6px}
.msg.in{align-self:flex-start;background:var(--surface);border:1px solid var(--border);border-bottom-left-radius:6px}
.msg .meta{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2)}
.msg .meta .i{width:14px;height:14px}
.msg.out .meta{justify-content:flex-end}
.msg .who{font-size:var(--fs-caption);font-weight:var(--fw-semibold);color:var(--accent);margin-bottom:2px}
.msg.failed{border-color:rgb(240 74 74 / .45)}
.typing{display:inline-flex;gap:4px;padding:4px 0}
.typing span{width:6px;height:6px;border-radius:50%;background:var(--text-2);animation:blink 1.2s infinite}
.typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,80%,100%{opacity:.3}40%{opacity:1}}
@media (prefers-reduced-motion: reduce){.typing span{animation:none}}
.day-sep{align-self:center;font-size:var(--fs-micro);color:var(--text-2);padding:2px 10px;border-radius:var(--r-pill);background:var(--surface)}
.dock{position:sticky;bottom:calc(var(--tabbar-h) + var(--safe-bottom) + var(--sp-2));margin-top:var(--sp-4);padding-top:var(--sp-2);background:linear-gradient(transparent,var(--bg) 30%)}

/* ---------- Кошельки ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2);margin-top:var(--sp-4)}
.stat{padding:var(--sp-2) var(--sp-3);border-radius:var(--r-md);background:rgb(14 17 22 / .5);border:1px solid var(--border)}
.stat .v{font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums}
.stat .k{font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2);margin-top:2px}
.wallet-card{display:flex;flex-direction:column;gap:var(--sp-2)}
.wallet-card .bal{font-size:var(--fs-h2);line-height:var(--lh-h2);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums}
.group-head{display:flex;align-items:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-1);color:var(--text);font-weight:var(--fw-semibold)}
.group-head .sum{margin-left:auto;color:var(--text-2);font-weight:var(--fw-medium);font-variant-numeric:tabular-nums;font-size:var(--fs-caption)}
details.group>summary{list-style:none;cursor:pointer}
details.group>summary::-webkit-details-marker{display:none}
details.group>summary .i-chevron-down{color:var(--text-2);transition:transform var(--dur)}
details.group:not([open])>summary .i-chevron-down{transform:rotate(-90deg)}
.tx{display:flex;align-items:center;gap:var(--sp-3);min-height:64px;padding:var(--sp-3) var(--sp-4);position:relative;color:inherit;width:100%;text-align:left}
.tx+.tx::before{content:"";position:absolute;top:0;left:68px;right:0;height:1px;background:var(--border)}
.tx.violation{background:linear-gradient(90deg,rgb(240 74 74 / .06),transparent 70%)} /* .06 — чтобы сумма danger была ≥ 4.5:1 */
.tx.violation::after{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--danger)}
.tx .amt{font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;white-space:nowrap}

/* ---------- Файлы ---------- */
.file-ico{width:40px;height:40px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;background:var(--surface-2);color:var(--text-2)}
.file-ico.pdf{color:var(--danger);background:var(--danger-tint)} .file-ico.img{color:var(--info);background:var(--info-tint)}
.file-ico.xls{color:var(--success);background:var(--success-tint)} .file-ico.audio{color:var(--warning);background:var(--warning-tint)}

/* ---------- Админ ботов ---------- */
.bot-grid{display:grid;grid-template-columns:1fr;gap:var(--sp-3)}
@media (min-width:400px){.metric-row{grid-template-columns:repeat(3,1fr)}}
.metric-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2);margin-top:var(--sp-3)}
.metric{padding:var(--sp-2) var(--sp-3);background:var(--bg);border:1px solid var(--border);border-radius:var(--r-sm)}
.metric .v{font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums}
.metric .k{font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2)}
.sparkbar{display:flex;align-items:flex-end;gap:2px;height:28px;margin-top:var(--sp-3)}
.sparkbar span{flex:1;background:var(--border);border-radius:2px;min-height:2px}
.sparkbar span.w{background:var(--warning)} .sparkbar span.e{background:var(--danger)}

/* ---------- Демо-панель прототипов (не для продакшена) ---------- */
.proto-note{margin:var(--sp-8) 0 var(--sp-2);padding:var(--sp-3);border:1px dashed var(--border);border-radius:var(--r-md);color:var(--text-2);font-size:var(--fs-caption);line-height:18px}

/* Масштаб шрифта до 130%: карточки и строки не фиксируют высоту, текст переносится. */
.flip{transform:scaleX(-1)}
/* Нейтральная плашка: «Данные недоступны» для неподключённых источников — без красного */
.banner-neutral{background:var(--surface);border-color:var(--border)} .banner-neutral>.i{color:var(--text-2)}
.list-item.off .title,.list-item.off .sub{color:var(--text-2)} .list-item.off .avatar{opacity:.6}

/* ---------- Форма: префикс, ошибки поля, переключатель, загрузка кнопки (admin-add) ---------- */
.input-group{display:flex;align-items:stretch;min-height:var(--tap);border-radius:var(--r-md);background:var(--surface);border:1px solid var(--border);transition:border-color var(--dur-fast),box-shadow var(--dur-fast)}
.input-group:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint)}
.input-group .prefix{display:flex;align-items:center;padding:0 2px 0 14px;color:var(--text-2);font-family:var(--font-mono);font-size:15px}
.input-group .input{border:0;background:transparent;box-shadow:none;padding-left:4px;min-width:0;flex:1}
.input-group .input:focus{box-shadow:none}
.input-group .status{display:grid;place-items:center;width:var(--tap);flex:none}
.field.invalid .input-group,.field.invalid>.input,.field.invalid .segmented{border-color:var(--danger)}
.field.invalid .input-group:focus-within{box-shadow:0 0 0 3px var(--danger-tint)}
/* Ошибка под полем: текст основным цветом, красная только иконка */
.field-error{display:none;align-items:flex-start;gap:6px;color:var(--text);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.field-error .i{width:16px;height:16px;color:var(--danger);flex:none}
.field.invalid .field-error{display:flex}
.field.invalid .hint.default{display:none}
.field-ok{display:none;align-items:center;gap:6px;color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.field-ok .i{width:16px;height:16px;color:var(--success)}
.field.valid .field-ok{display:flex} .field.valid .hint.default{display:none}
.req{color:var(--text-2);font-weight:var(--fw-body)}
.readonly{display:flex;align-items:center;gap:var(--sp-3);min-height:var(--tap);padding:10px 14px;border-radius:var(--r-md);border:1px dashed var(--border);color:var(--text-2)}
.readonly .i{width:18px;height:18px}
/* Переключатель (role="switch") */
.switch-row{display:flex;align-items:center;gap:var(--sp-3);min-height:56px;padding:var(--sp-2) var(--sp-4);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);cursor:pointer;width:100%;text-align:left}
.switch{position:relative;flex:none;width:51px;height:31px;border-radius:var(--r-pill);background:var(--border);transition:background var(--dur) var(--ease)}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:25px;height:25px;border-radius:50%;background:var(--text);box-shadow:var(--shadow-1);transition:transform var(--dur) var(--ease)}
[aria-checked="true"] .switch{background:var(--accent)}
[aria-checked="true"] .switch::after{transform:translateX(20px);background:var(--bg)}
/* Кнопка в загрузке */
.btn.loading{pointer-events:none;background:var(--accent);color:var(--on-accent)}
.spinner{width:18px;height:18px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .8s linear infinite;flex:none}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.spinner{animation-duration:2.4s}}
fieldset.form{border:0;margin:0;padding:0;min-width:0}
fieldset.form[disabled]{opacity:.6}
.badge-pending{background:var(--info-tint);color:var(--info);border-color:rgb(108 196 255 / .35)}
.list-item.new{background:linear-gradient(90deg,rgb(76 141 255 / .08),transparent 70%)}
.list-item.has-note{flex-wrap:wrap;row-gap:4px}
.list-item .row-note{flex-basis:100%;padding-left:52px;color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.list-item .row-note .i{width:14px;height:14px;vertical-align:-2px;margin-right:4px;color:var(--info)}
/* Режим скриншотов (?shot=1): без переходов, чтобы шиты не снимались на середине анимации */
.no-anim *,.no-anim *::before,.no-anim *::after{transition:none!important}

/* Группа полей «идентификатор»: @username или Telegram ID */
.field-group{display:flex;flex-direction:column;gap:var(--sp-3)}
.field-group .group-banner{margin:0}
.field.invalid.no-msg .field-error{display:none}

/* =====================================================================
   .ta-* — компоненты v2: «Кошельки» по сотрудникам, «Неотвеченные», «Ответы лидам»
   ===================================================================== */
/* Сводка владельца */
.ta-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}
.ta-kpi{padding:var(--sp-3);border-radius:var(--r-md);background:var(--surface);border:1px solid var(--border);min-width:0}
.ta-kpi .v{font-size:var(--fs-h2);line-height:var(--lh-h2);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums}
.ta-kpi .k{font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2);margin-top:2px}
.ta-kpi.na .v{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2);font-weight:var(--fw-medium);padding-top:4px}

/* Карточка сотрудника */
.ta-person{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.ta-person.has-viol{border-color:rgb(240 74 74 / .45)}
.ta-person-head{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-4) 0}
.ta-person-head .name{font-weight:var(--fw-semibold);font-size:var(--fs-body)}
.ta-badges{display:flex;flex-wrap:wrap;gap:6px;padding:var(--sp-2) var(--sp-4) 0}
.ta-chip{display:inline-flex;align-items:center;gap:4px;min-height:24px;padding:2px 8px;border-radius:var(--r-pill);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold);
  background:var(--surface-2);border:1px solid var(--border);color:var(--text-2);white-space:nowrap}
.ta-chip .i{width:14px;height:14px}
.ta-chip.ok{background:var(--success-tint);border-color:rgb(47 191 113 / .35);color:var(--success)}
.ta-chip.bad{background:var(--danger-tint);border-color:rgb(240 74 74 / .45);color:var(--text)} .ta-chip.bad .i{color:var(--danger)}
.ta-chip.salary{background:var(--success-tint);border-color:rgb(47 191 113 / .35);color:var(--success)}
.ta-chip.na{color:var(--text-2)}

/* Адрес: крупно, моно, тап = копировать */
.ta-addr{display:flex;align-items:center;gap:var(--sp-2);width:100%;min-height:var(--tap);margin-top:var(--sp-3);padding:10px 12px;border-radius:var(--r-md);
  background:var(--bg);border:1px solid var(--border);color:var(--text);text-align:left;font-family:var(--font-mono);font-size:13px;line-height:18px;word-break:break-all;transition:border-color var(--dur-fast)}
.ta-addr:active{border-color:var(--accent)}
.ta-addr .net{flex:none;font-family:var(--font-sans)}
.ta-addr .i{flex:none;color:var(--text-2);width:18px;height:18px}
.ta-balance{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;padding:var(--sp-3) var(--sp-4) 0}
.ta-balance .big{font-size:var(--fs-display);line-height:var(--lh-display);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.ta-balance .tok{color:var(--text-2);font-weight:var(--fw-semibold)}
.ta-balance .sub{flex-basis:100%;color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.ta-body{padding:0 var(--sp-4) var(--sp-4)}

/* Серия без нарушений + прогресс */

/* Раскрытие карточки сотрудника (владелец) */
.ta-toggle{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;min-height:var(--tap);border-top:1px solid var(--border);color:var(--accent);font-weight:var(--fw-medium);font-size:var(--fs-caption)}
.ta-toggle .i{width:18px;height:18px;transition:transform var(--dur)}
.ta-person.open .ta-toggle .i{transform:rotate(180deg)}
.ta-person:not(.open) .ta-sections{display:none}

/* Графа (секция) */
.ta-sections{display:flex;flex-direction:column;gap:var(--sp-3);padding:0 var(--sp-3) var(--sp-3)}
.ta-section{border-radius:var(--r-md);background:var(--bg);border:1px solid var(--border);overflow:hidden}
.ta-section-head{display:flex;align-items:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-3);font-weight:var(--fw-semibold);font-size:var(--fs-caption)}
.ta-section-head .i{width:18px;height:18px;color:var(--text-2)}
.ta-section-head .n{margin-left:auto}
.ta-section.salary{border-color:rgb(47 191 113 / .4);background:linear-gradient(180deg,rgb(47 191 113 / .10),transparent 70%),var(--bg)}
.ta-section.salary .ta-section-head .i{color:var(--success)}
.ta-salary-hero{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;padding:0 var(--sp-3) var(--sp-2)}
.ta-salary-hero .amt{font-size:var(--fs-h1);line-height:var(--lh-h1);font-weight:var(--fw-semibold);color:var(--success);font-variant-numeric:tabular-nums}
.ta-salary-hero .when{color:var(--text-2);font-size:var(--fs-caption)}

/* Строка транзакции */
.ta-tx{display:flex;align-items:center;gap:var(--sp-3);width:100%;min-height:56px;padding:var(--sp-2) var(--sp-3);text-align:left;color:inherit;border-top:1px solid var(--border);position:relative}
.ta-tx:active{background:var(--surface)}
.ta-tx .ico{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex:none;background:var(--surface-2);color:var(--text-2)}
.ta-tx .ico .i{width:18px;height:18px}
.ta-tx .ico.in{background:var(--success-tint);color:var(--success)}
.ta-tx .ico.cold{background:var(--accent-tint);color:var(--accent)}
.ta-tx .ico.bad{background:var(--danger-tint);color:var(--danger)}
.ta-tx .mid{flex:1;min-width:0}
.ta-tx .who{font-family:var(--font-mono);font-size:13px;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ta-tx .when{font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2);margin-top:2px}
.ta-tx .end{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex:none}
.ta-tx .amt{font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;white-space:nowrap}
.ta-tx .amt.in{color:var(--success)}
.ta-tx.bad::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--danger)}
.ta-flag{display:inline-flex;align-items:center;gap:3px;font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold);color:var(--text)}
.ta-flag .i{width:12px;height:12px;color:var(--danger)}
.ta-flag.ok{color:var(--text-2)} .ta-flag.ok .i{color:var(--success)}

/* «Показать ещё N» + пагинация внутри графы */
.ta-more{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;min-height:var(--tap);border-top:1px solid var(--border);color:var(--accent);font-size:var(--fs-caption);font-weight:var(--fw-medium)}
.ta-more .i{width:18px;height:18px;transition:transform var(--dur)}
.ta-more[aria-expanded="true"] .i{transform:rotate(180deg)}
.ta-pager{display:flex;align-items:center;justify-content:center;gap:4px;padding:var(--sp-1) var(--sp-2);border-top:1px solid var(--border)}
.ta-pager button{min-width:var(--tap);height:var(--tap);border-radius:var(--r-sm);color:var(--text-2);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums}
.ta-pager button[aria-current="page"]{background:var(--surface-2);color:var(--text);box-shadow:inset 0 0 0 1px var(--border)}
.ta-pager .range{font-size:var(--fs-micro);color:var(--text-2);margin:0 var(--sp-2)}
.ta-empty-row{padding:var(--sp-3);border-top:1px solid var(--border);color:var(--text-2);font-size:var(--fs-caption)}

/* Менеджер на карточке лида */
.ta-manager{display:flex;align-items:center;gap:var(--sp-2);padding:6px 10px 6px 6px;border-radius:var(--r-pill);background:var(--surface-2);border:1px solid var(--border);
  font-size:var(--fs-caption);font-weight:var(--fw-semibold);max-width:100%}
.ta-manager .av{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:10px;font-weight:700;flex:none;color:var(--bg)}
.ta-m1 .av{background:var(--accent)} .ta-m2 .av{background:var(--info)} .ta-m3 .av{background:var(--success)} .ta-m4 .av{background:var(--warning)}
.ta-lead{position:relative;padding-left:calc(var(--sp-4) + 3px)}
.ta-lead::before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:0 3px 3px 0;background:var(--m,var(--border))}
.ta-lead.ta-m1{--m:var(--accent)} .ta-lead.ta-m2{--m:var(--info)} .ta-lead.ta-m3{--m:var(--success)} .ta-lead.ta-m4{--m:var(--warning)}
.ta-group-head{display:flex;align-items:center;gap:var(--sp-2);margin:var(--sp-5) 0 var(--sp-2)}
.ta-group-head .n{margin-left:auto;color:var(--text-2);font-size:var(--fs-caption)}

/* Сообщение: оригинал + перевод */
.ta-msg{margin-top:var(--sp-3);border-radius:var(--r-md);border:1px solid var(--border);overflow:hidden}
.ta-msg .orig,.ta-msg .ru{display:flex;gap:var(--sp-2);padding:var(--sp-3)}
.ta-msg .orig{background:var(--surface-2)}
.ta-msg .ru{background:var(--bg);color:var(--text-2);border-top:1px solid var(--border)}
.ta-msg p{margin:0;font-size:var(--fs-body);line-height:21px;flex:1;min-width:0}
.ta-msg .ru p{font-size:var(--fs-caption);line-height:18px}
.ta-lang{flex:none;align-self:flex-start;min-width:28px;height:20px;padding:0 6px;border-radius:6px;display:grid;place-items:center;
  font-size:10px;line-height:1;font-weight:700;letter-spacing:.04em;background:var(--bg);color:var(--text-2);border:1px solid var(--border)}
.ta-msg .ru .ta-lang{background:var(--surface)}

/* Ответ Сейлза: EN (копируется) + RU */
.ta-reply{margin-top:var(--sp-3);border-radius:var(--r-md);border:1px solid rgb(76 141 255 / .35);background:linear-gradient(135deg,rgb(76 141 255 / .10),rgb(108 196 255 / .04)),var(--surface);overflow:hidden}
.ta-reply-head{display:flex;align-items:center;gap:var(--sp-2);min-height:40px;padding:0 var(--sp-3);font-size:var(--fs-caption);font-weight:var(--fw-semibold)}
.ta-reply-head .i{width:18px;height:18px;color:var(--accent)}
.ta-reply .en{display:flex;gap:var(--sp-2);align-items:flex-start;padding:0 var(--sp-1) var(--sp-2) var(--sp-3)}
.ta-reply .en p{margin:4px 0 0;flex:1;min-width:0;font-size:var(--fs-body);line-height:21px;color:var(--text)}
.ta-reply .ru{display:flex;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3) var(--sp-3);border-top:1px solid rgb(76 141 255 / .2)}
.ta-reply .ru p{margin:0;flex:1;font-size:var(--fs-caption);line-height:18px;color:var(--text-2)}

/* ---------- Лиды: карточки (общие для unanswered / reply-lead) ---------- */
.ta-m5 .av{background:var(--text-2)} .ta-lead.ta-m5{--m:var(--text-2)}
.ta-lead-top{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}
.ta-lead-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:var(--sp-3)}
.ta-lead-name{font-weight:var(--fw-semibold)}
.ta-center{text-align:center}
.ta-btn-40{min-height:40px}
.ta-lang-inline{margin-left:4px;align-self:center}
.ta-push{margin-left:auto}
.ta-skel-plaque{height:36px;width:140px;border-radius:18px}
.ta-skel-msg{height:88px;border-radius:12px}
.ta-skel-btn{height:44px;border-radius:12px}
.ta-group-head .badge{margin-left:2px}
.ta-lead-top>.ta-manager{flex:0 1 auto;min-width:0;max-width:100%}
.ta-lead-name{min-width:0;max-width:100%;overflow-wrap:anywhere}
.ta-msg .orig p,.ta-msg .ru p,.ta-reply .en p,.ta-reply .ru p{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.ta-group-head{min-width:0} .ta-group-head .ta-manager{min-width:0;flex:0 1 auto} .ta-group-head .n,.ta-group-head .badge{flex:none}
.ta-manager{min-width:0;max-width:100%}

/* «Ответ по лиду» прямо на карточке «Неотвеченных» (сворачиваемый, нативный <details> — без JS-анимаций) */
.badge-answer{background:var(--accent-tint);color:var(--accent);border-color:rgb(76 141 255 / .35)}
.ta-answer{border:1px solid rgb(76 141 255 / .35);border-radius:var(--r-md);background:var(--accent-tint);min-width:0}
.ta-answer>summary{list-style:none;cursor:pointer;display:flex;flex-direction:column;gap:2px;min-height:var(--tap);justify-content:center;padding:8px var(--sp-3);border-radius:var(--r-md)}
.ta-answer>summary::-webkit-details-marker{display:none}
.ta-answer>summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ta-answer .ttl{display:flex;align-items:center;gap:6px;font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:var(--fw-semibold);color:var(--text)}
.ta-answer .ttl .i-sparkles{color:var(--accent)}
.ta-answer .chev{margin-left:auto;color:var(--text-2);transition:transform var(--dur) var(--ease)}
.ta-answer[open] .chev{transform:rotate(180deg)}
.ta-answer .prev{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2)}
.ta-answer[open] .prev{display:none}
.ta-answer-in{padding:0 var(--sp-3) var(--sp-3)}
.ta-answer-in .ta-reply{margin-top:0;background:var(--surface)}
.ta-answer-in .ta-reply .en{padding-top:var(--sp-2)}
.ta-answer-note{display:flex;align-items:center;gap:6px;margin:var(--sp-3) 0 0;font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--text-2)}

/* ---------- Шапка списка лидов (общий партиал tools/leads_partial.py): sticky, компактная, без горизонтальной прокрутки ---------- */
[data-lh-page]{padding-top:0}
.app>.lh{max-width:none}
.lh{position:sticky;top:0;z-index:20;margin:0 calc(-1 * (var(--page-x) + var(--safe-right))) var(--sp-3) calc(-1 * (var(--page-x) + var(--safe-left)));
  padding:calc(var(--safe-top) + 6px) calc(var(--page-x) + var(--safe-right)) 4px calc(var(--page-x) + var(--safe-left));
  background:var(--bg);border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.lh-tabs{display:flex;gap:2px;padding:2px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md)}
.lh-tab{flex:1 1 auto;min-width:0;min-height:32px;padding:0 6px;border-radius:10px;display:flex;align-items:center;justify-content:center;gap:4px;
  color:var(--text-2);font-size:var(--fs-caption);line-height:16px;font-weight:var(--fw-medium);position:relative}
.lh-tab::after{content:"";position:absolute;inset:-6px 0}                 /* зона нажатия 44px */
.lh-tabs .lbl{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lh-tab[aria-current="page"]{background:var(--surface-2);color:var(--text);box-shadow:var(--shadow-1)}
.lh-tabs .count{height:16px;min-width:16px;padding:0 4px;font-size:10px}
.lh-tab[aria-current="page"] .count.neutral{background:var(--bg);color:var(--text)}
.lh-filters{display:flex;gap:6px;min-width:0}
.lh-team{flex:none;display:flex;gap:2px;padding:2px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md)}
.lh-team button{min-width:34px;min-height:28px;padding:0 6px;border-radius:8px;color:var(--text-2);font-size:var(--fs-caption);font-weight:var(--fw-semibold);position:relative}
.lh-team button::after{content:"";position:absolute;inset:-8px 0}
.lh-team button[aria-pressed="true"]{background:var(--surface-2);color:var(--text);box-shadow:var(--shadow-1)}
.lh-mgr-btn{flex:1 1 auto;min-width:0;min-height:34px;display:flex;align-items:center;gap:6px;padding:0 10px;border-radius:var(--r-md);
  background:var(--surface);border:1px solid var(--border);color:var(--text-2);font-size:var(--fs-caption);font-weight:var(--fw-medium);position:relative}
.lh-mgr-btn::after{content:"";position:absolute;inset:-5px 0}
.lh-mgr-btn .lbl{flex:1;text-align:left}
.lh-mgr-btn.active{color:var(--text);border-color:var(--accent)}
.lh-mgr-btn .chev{transition:transform var(--dur) var(--ease)}
.lh-mgr-btn[aria-expanded="true"] .chev{transform:rotate(180deg)}
.lh-mgr-list{display:flex;flex-wrap:wrap;gap:6px;padding:2px 0 4px;max-height:45vh;overflow-y:auto;overscroll-behavior:contain}   /* перенос строк, без горизонтального скролла */
.lh-chip{display:inline-flex;align-items:center;gap:6px;min-height:32px;max-width:100%;padding:0 8px 0 4px;border-radius:var(--r-pill);
  border:1px solid var(--border);background:var(--surface);color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold);position:relative}
.lh-chip::after{content:"";position:absolute;inset:-3px 0}
.lh-chip.all{padding-left:10px}
.lh-chip .av{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;flex:none;font-size:9px;font-weight:700;color:var(--bg)}
.lh-chip .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lh-chip .tm{color:var(--text-2);font-weight:var(--fw-medium)}
.lh-chip[aria-pressed="true"]{background:var(--text);color:var(--bg);border-color:var(--text)}
.lh-chip[aria-pressed="true"] .tm{color:var(--bg)}
.lh-chip[aria-pressed="true"] .count.neutral{background:var(--bg);color:var(--text)}
.lh-chip[disabled]{opacity:.5}
.lh-status{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);min-height:26px;min-width:0}
.lh-upd{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro)}
.lh-refresh{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:26px;padding:0 10px;border-radius:var(--r-pill);
  border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:var(--fs-micro);font-weight:var(--fw-semibold);position:relative}
.lh-refresh::after{content:"";position:absolute;inset:-9px 0}
.lh-refresh .spinner{display:none;width:14px;height:14px;border-width:2px;color:var(--accent)}
.lh-refresh.busy .spinner{display:inline-block} .lh-refresh.busy .i-refresh{display:none}
.lh-refresh[disabled]{cursor:progress;color:var(--text-2)}
.lh-list{min-width:0}

/* ---------- Утилиты вместо inline-стилей (CSP: style-src без 'unsafe-inline') ----------
   Генераторы (tools/common.py → STYLE_MAP) заменяют прежние style="" на эти классы. !important повторяет приоритет
   бывшего inline-стиля, чтобы вид не изменился. Динамические величины: data-h="NN" → app.js (CSSOM el.style.height). */
.ta-frame{border:1px dashed var(--border)!important;border-radius:16px!important;padding:12px!important}
.ta-ml-n8{margin-left:-8px!important} .ta-ml-n4{margin-left:-4px!important}
.ta-gap-4{gap:4px!important} .ta-gap-6{gap:6px!important} .ta-gap-8{gap:8px!important} .ta-gap-12{gap:12px!important}
.ta-fs-12{font-size:12px!important} .ta-fw-500{font-weight:500!important} .ta-fw-600{font-weight:600!important} .ta-m-0{margin:0!important}
.ta-sq-48{width:48px!important;height:48px!important} .ta-sq-56{width:56px!important;height:56px!important;border-radius:18px!important}
.ta-skel-48{height:48px!important;border-radius:12px!important} .ta-skel-56{height:56px!important;border-radius:12px!important}
.ta-skel-64{height:64px!important;border-radius:12px!important} .ta-skel-seg{height:40px!important;flex:1!important;border-radius:12px!important}
.ta-skel-bubble-in{height:64px!important;width:80%!important;border-radius:18px!important}
.ta-skel-bubble-out{height:44px!important;width:70%!important;align-self:flex-end!important;border-radius:18px!important}
.ta-h-44{height:44px!important} .ta-h-72{height:72px!important}
.ta-block{display:block!important} .ta-c-text{color:var(--text)!important} .ta-font-sans{font-family:var(--font-sans)!important}
.ta-no-anim{animation:none!important} .ta-minw-0{min-width:0!important} .ta-flex-1{flex:1!important}
.ta-mb-12{margin-bottom:12px!important} .ta-mb-16{margin-bottom:16px!important} .ta-mt-12{margin-top:12px!important} .ta-mt-16{margin-top:16px!important}
.ta-p-0{padding:0!important} .ta-px-8{padding:0 8px!important} .ta-p-16{padding:16px!important}
.ta-left{text-align:left!important} .ta-center{text-align:center!important}
.ta-codebox-320{width:100%!important;max-width:320px!important;align-items:center!important}
.ta-end-up6{justify-content:flex-end!important;margin-top:-6px!important}
.ta-seglink{flex:1!important;min-height:40px!important;border-radius:10px!important;display:flex!important;align-items:center!important;justify-content:center!important;font-size:13px!important;font-weight:500!important;color:var(--text-2)!important}
.ta-seglink.ta-seglink-on{background:var(--surface-2)!important;color:var(--text)!important;box-shadow:var(--shadow-1)!important}
.ta-bg-bg{background:var(--bg)!important} .ta-bg-surface{background:var(--surface)!important} .ta-bg-surface-2{background:var(--surface-2)!important}
.ta-bg-border{background:var(--border)!important} .ta-bg-text{background:var(--text)!important} .ta-bg-text-2{background:var(--text-2)!important}
.ta-bg-text-3{background:var(--text-3)!important} .ta-bg-accent{background:var(--accent)!important} .ta-bg-accent-press{background:var(--accent-press)!important}
.ta-bg-success{background:var(--success)!important} .ta-bg-warning{background:var(--warning)!important} .ta-bg-danger{background:var(--danger)!important}
.ta-bg-info{background:var(--info)!important}
.ta-dyn-h{height:0}   /* высота — из data-h через app.js */
/* Вход: состояние «нет доступа» по :target (было <style> в login-denied.html) */
#denied{display:none} #denied:target{display:flex}
body:has(#denied:target) #checking{display:none}

/* ---------- Агенты: закреплённая плашка агентов + явные состояния отправки (agents.html, agents.js) ---------- */
.ag-bar{position:sticky;top:0;z-index:20;display:flex;flex-wrap:wrap;gap:6px;min-width:0;
  margin:0 calc(-1 * (var(--page-x) + var(--safe-right))) var(--sp-3) calc(-1 * (var(--page-x) + var(--safe-left)));
  padding:calc(var(--safe-top) + 8px) calc(var(--page-x) + var(--safe-right)) 8px calc(var(--page-x) + var(--safe-left));
  background:var(--bg);border-bottom:1px solid var(--border)}          /* перенос строк — все агенты видны, без горизонтальной прокрутки */
.app>.ag-bar{max-width:none}
.ag-chip{position:relative;display:inline-flex;align-items:center;gap:6px;min-height:36px;max-width:100%;padding:0 12px 0 4px;border-radius:var(--r-pill);
  border:1px solid var(--border);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);font-weight:var(--fw-medium);white-space:nowrap}
.ag-chip::after{content:"";position:absolute;inset:-4px 0}              /* зона нажатия ≥ 44 px */
.ag-chip .av{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;flex:none;font-size:10px;font-weight:700;background:var(--surface-2);color:var(--text)}
.ag-chip .nm{min-width:0;overflow:hidden;text-overflow:ellipsis}
.ag-chip[aria-pressed="true"]{background:var(--text);color:var(--bg);border-color:var(--text)}
.ag-chip[aria-pressed="true"] .av{background:var(--accent);color:var(--bg)}
.ag-dock{display:flex;flex-direction:column;gap:var(--sp-2);bottom:calc(var(--tabbar-h) + var(--safe-bottom));z-index:15;
  margin:var(--sp-4) calc(-1 * (var(--page-x) + var(--safe-right))) 0 calc(-1 * (var(--page-x) + var(--safe-left)));
  padding:var(--sp-2) calc(var(--page-x) + var(--safe-right)) var(--sp-2) calc(var(--page-x) + var(--safe-left));
  background:var(--bg);border-top:1px solid var(--border)}               /* сплошной фон: переписка не просвечивает под полем ввода */
.app>.ag-dock{max-width:none}
.ag-topics{display:flex;gap:6px}
.ag-topics button{position:relative;min-height:30px;padding:0 12px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);font-weight:var(--fw-medium)}
.ag-topics button::after{content:"";position:absolute;inset:-7px 0}
.ag-topics button[aria-pressed="true"]{background:var(--surface-2);color:var(--text);border-color:var(--accent)}
.ag-unavail{align-items:center}
.ag-send{flex:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:var(--tap);height:var(--tap);padding:0 14px;border-radius:var(--r-md);
  font-size:var(--fs-caption);font-weight:var(--fw-semibold);transition:background var(--dur-fast),color var(--dur-fast);
  background:var(--accent);color:var(--on-accent);border:1px solid var(--accent)}               /* ready: акцентная */
.ag-send .spinner{display:none;width:16px;height:16px}
.ag-composer[data-state="empty"] .ag-send,.ag-composer[data-state="unavailable"] .ag-send{background:var(--surface-2);color:var(--text-2);border-color:var(--border);cursor:not-allowed}  /* неактивна, но видна и подписана */
.ag-composer[data-state="sending"] .ag-send{background:var(--accent);border-color:var(--accent);color:var(--on-accent);cursor:progress}   /* accent: текст bg на accent-press не проходит AA */
.ag-composer[data-state="sending"] .ag-send .spinner{display:inline-block} .ag-composer[data-state="sending"] .ag-send .i-send{display:none}
.ag-composer[data-state="ready"]{border-color:rgb(76 141 255 / .55)}
.ag-composer[data-state="sending"] textarea{opacity:.7}
.ag-hint{display:flex;justify-content:space-between;gap:var(--sp-2);padding:0 8px;font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2)}
.ag-hint>span:first-child{min-width:0;overflow-wrap:anywhere}
.ag-hint .tnum{flex:none}
.ag-mini-spin{width:12px;height:12px;border-width:2px}

/* ===== u24: перенесено из design/components.css (строки 939–1123: v3 3D-знак, v3 · полировка, Покупки v3) по docs/design-v3.md «Перенос в frontend».
   Единственная правка: кольцо фокуса приведено к var(--focus-ring) (в макете box-shadow с var(--focus-ring) внутри другого box-shadow — невалидно). ===== */
/* ---------- v3: 3D-знак «$» и фон (.ta-logo3d, .ta-bg3d; logo3d.js, logo.html) ---------- */
.ta-logo3d{position:relative;display:inline-block;flex:none;width:168px;height:168px;pointer-events:none}
.ta-logo3d--xl{width:240px;height:240px}
.ta-logo3d--header{width:32px;height:32px;margin-right:-2px}
.ta-logo3d-cv,.ta-bg3d-cv{position:absolute;inset:0;width:100%;height:100%;display:block}
.ta-logo3d>img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.ta-logo3d.is-live>img{display:none}                       /* запасная картинка — пока нет canvas */
.page-head>.ta-logo3d--header{align-self:center}
/* Фон: глубокий градиент + мягкие блики (CSS) + частицы (canvas) */
.ta-bg3d{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0;
  background:
    radial-gradient(60% 38% at 50% 36%,rgb(43 212 127 / .16),transparent 70%),
    radial-gradient(50% 40% at 85% 8%,rgb(76 141 255 / .12),transparent 70%),
    radial-gradient(60% 50% at 8% 92%,rgb(43 212 127 / .07),transparent 70%),
    linear-gradient(180deg,#0B1016 0%,#070A0E 100%)}
.ta-bg3d::after{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 40%,transparent 55%,rgb(0 0 0 / .45))}   /* виньетка */
/* logo.html (демо) */
.ta-lg-page{padding-bottom:var(--sp-10)}
.ta-lg-hero{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);margin:0 calc(-1 * (var(--page-x) + var(--safe-right))) 0 calc(-1 * (var(--page-x) + var(--safe-left)));padding:var(--sp-8) var(--page-x) var(--sp-8);min-height:420px;justify-content:center}
.app>.ta-lg-hero{max-width:none}
.ta-lg-hero>*{position:relative;z-index:1}
.ta-lg-hero>.ta-bg3d{position:absolute;z-index:0}
.ta-lg-title{letter-spacing:-.01em}
.ta-lg-sub{margin:0;color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption);text-align:center}
.ta-lg-demo{display:flex;flex-direction:column;gap:var(--sp-2)}
.ta-lg-frames{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}
.ta-lg-frames canvas{width:100%;height:auto;aspect-ratio:1;border-radius:var(--r-md);background:radial-gradient(70% 60% at 50% 45%,rgb(43 212 127 / .10),transparent 70%),var(--surface);border:1px solid var(--border)}
.ta-lg-fallbacks{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}
.ta-lg-fallbacks figure,.ta-lg-welcome{margin:0;min-width:0}
.ta-lg-fallbacks img,.ta-lg-welcome img{display:block;width:100%;height:auto;border-radius:var(--r-md);border:1px solid var(--border);background:var(--surface)}
.ta-lg-fallbacks figcaption,.ta-lg-welcome figcaption{margin-top:4px;color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);overflow-wrap:anywhere}
.ta-lg-welcome{margin-top:var(--sp-3)}

/* =====================================================================
   v3 · полировка (31.10.2026). Только надстройка поверх v2: имена классов и переменных не менялись.
   Глубже фон, тонкие рамки + внутренний градиент карточек, мягкие тени, переходы 150–250 мс, hover/active/focus.
   ===================================================================== */
body{background:radial-gradient(130% 42% at 50% -8%,rgb(43 212 127 / .055),transparent 62%) no-repeat,var(--bg)}
.h1{letter-spacing:var(--ls-tight)}
.h2{letter-spacing:-.006em}
.section-title{letter-spacing:var(--ls-caps)}
.page-head{gap:var(--sp-2)}
.page-head .h1{margin-left:2px}
/* Карточки и поверхности: тонкая рамка, лёгкий внутренний градиент, мягкая тень */
.card:not(.card-danger):not(.card-hero):not(.raised),.list,.ta-person,.ta-cand,.ta-pu-mgr,.ta-pu-total,.ta-bind{background-image:var(--card-grad);box-shadow:var(--shadow-card)}
.card.raised{box-shadow:var(--shadow-raise)}
.card-hero{background:radial-gradient(120% 140% at 0% 0%,rgb(76 141 255 / .16),transparent 60%),radial-gradient(90% 120% at 100% 100%,rgb(43 212 127 / .08),transparent 60%),var(--surface);box-shadow:var(--shadow-card)}
.card,.list,.ta-person,.ta-pu-mgr{transition:border-color var(--dur) var(--ease),background-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
/* Кнопки */
.btn{transition:background-color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),box-shadow var(--dur) var(--ease),transform var(--dur-fast) var(--ease),opacity var(--dur-fast)}
.btn-primary{background:linear-gradient(180deg,var(--accent-hover),var(--accent));box-shadow:0 1px 0 rgb(255 255 255 / .18) inset,0 4px 14px rgb(76 141 255 / .22)}
.btn-primary:active{background:var(--accent-press);box-shadow:none}
.btn-secondary{background-image:var(--card-grad)}
.btn[disabled],.btn[aria-disabled="true"]{box-shadow:none;background-image:none}
.btn.loading{background:var(--accent)}
.icon-btn{transition:background-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}
/* Поля */
.input,.textarea,.select{transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur) var(--ease),background-color var(--dur-fast)}
/* Таб-бар: глубже, тонкий верхний блик; активная вкладка — точка-индикатор с мягким свечением */
.tabbar{background:rgb(14 18 24 / .9);border-top-color:var(--hairline);box-shadow:0 -10px 30px rgb(0 0 0 / .35)}
.tab[aria-current="page"]::before{box-shadow:0 0 12px rgb(76 141 255 / .6)}
.tab .i{transition:transform var(--dur) var(--ease)}
.tab[aria-current="page"] .i{transform:translateY(-1px)}
/* Сегменты, вкладки шапки */
.segmented,.lh-tabs{background:rgb(255 255 255 / .02);border-color:var(--border)}
.segmented button[aria-pressed="true"],.lh-tab[aria-current="page"]{background:linear-gradient(180deg,#232B37,var(--surface-2));box-shadow:0 1px 0 rgb(255 255 255 / .06) inset,0 2px 8px rgb(0 0 0 / .3)}
.lh{background:rgb(10 13 18 / .94)}
/* Бейджи и тосты */
.toast{box-shadow:var(--shadow-raise)}
.sheet{background-image:var(--card-grad)}
/* Фокус: одно кольцо везде */
.card.tap:focus-visible,.list-item:focus-visible,.ta-pu-mgr>summary:focus-visible,.lh-tab:focus-visible,.tab:focus-visible{outline:none;box-shadow:var(--focus-ring)}
/* Hover — только на устройствах с указателем (в Telegram Desktop / Web) */
@media (hover:hover) and (pointer:fine){
  .btn-primary:hover{background:linear-gradient(180deg,#6FA6FF,var(--accent-hover))}
  .btn-secondary:hover{border-color:var(--border-strong);background-color:#212935}
  .btn-ghost:hover{background:var(--accent-tint)}
  .icon-btn:hover{background:var(--surface-2);color:var(--text)}
  .card.tap:hover,.list-item[href]:hover,a.list-item:hover,.ta-pu-mgr>summary:hover{border-color:var(--border-strong);background-color:#151B24}
  .card.tap:hover{border-color:var(--border-strong)}
  .tab:hover,.lh-tab:hover,.segmented button:hover{color:var(--text)}
  .filter:hover{border-color:var(--border-strong)}
  .input:hover,.textarea:hover{border-color:var(--border-strong)}
}
@media (prefers-reduced-motion: reduce){
  .btn,.card,.list,.ta-person,.ta-pu-mgr,.input,.textarea,.select,.icon-btn,.tab .i{transition:none}
  .btn:active{transform:none}
}

/* ---------- Покупки v3: отдельный раздел меню, выбор дня, период, менеджер, «С начала учёта», ник и «Диалог» (31.10.2026) ---------- */
.ta-pu-since{margin:0 0 var(--sp-4);padding:var(--sp-3) var(--sp-4);border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);background-image:var(--card-grad)}
.ta-pu-since-h{display:flex;align-items:center;gap:6px;margin:0 0 var(--sp-2);font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:var(--fw-semibold);color:var(--text-2);letter-spacing:var(--ls-caps);text-transform:uppercase}
.ta-pu-since-h .t3{color:var(--text-2);font-weight:var(--fw-medium);text-transform:none;letter-spacing:0}
.ta-pu-sgrid{display:flex;flex-direction:column}
.ta-pu-sr{display:flex;align-items:baseline;gap:var(--sp-2);min-height:32px;padding:6px 0;border-top:1px solid var(--hairline)}
.ta-pu-sr:first-child{border-top:0}
.ta-pu-sr .lbl{flex:1;min-width:0;color:var(--text);font-weight:var(--fw-medium)}
.ta-pu-sr .sub{flex:none;color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.ta-pu-sr .ta-pu-amt{min-width:0}
.ta-pu-sr.main{border-top-color:var(--border-strong)}
.ta-pu-sr.main .lbl,.ta-pu-sr.main .v{font-weight:var(--fw-semibold);color:var(--brand)}
.ta-pu-sgrid .ta-pu-sr.main:only-child .lbl{color:var(--text)}

.ta-pu-days{display:flex;gap:var(--sp-2);overflow-x:auto;scrollbar-width:none;overscroll-behavior-x:contain;margin:0 calc(-1 * var(--page-x)) var(--sp-3);padding:2px var(--page-x)}
.ta-pu-days::-webkit-scrollbar{display:none}
.ta-pu-chip{flex:none;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;min-height:var(--tap);min-width:var(--tap);padding:0 14px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:var(--fw-medium);white-space:nowrap;transition:background-color var(--dur) var(--ease),border-color var(--dur) var(--ease),color var(--dur) var(--ease)}
.ta-pu-chip>.i{display:none}
.ta-pu-chip[data-day="cal"]{flex-direction:row;gap:6px}
.ta-pu-chip[data-day="cal"]>.i{display:inline-block}
.ta-pu-chip .nd{font-size:var(--fs-micro);line-height:var(--lh-micro);color:var(--text-2);font-weight:var(--fw-medium)}
.ta-pu-chip.is-nd .l{color:var(--text-2)}
.ta-pu-chip[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.ta-pu-chip[aria-pressed="true"] .l,.ta-pu-chip[aria-pressed="true"] .nd{color:var(--on-accent)}
.ta-pu-chip:focus-visible{outline:none;box-shadow:var(--focus-ring)}
@media (hover:hover){.ta-pu-chip:not([aria-pressed="true"]):hover{border-color:var(--border-strong);background:var(--surface-2)}}

.ta-pu-ctl{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-4)}
.ta-pu-ctl .ta-pu-teams{margin:0}
.ta-pu-ctl[hidden],.ta-pu-mgrbtn[hidden]{display:none}
.ta-pu-mgrbtn{display:flex;align-items:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-3);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-2);font-size:var(--fs-caption);font-weight:var(--fw-medium);text-align:left;transition:border-color var(--dur) var(--ease),color var(--dur) var(--ease)}
.ta-pu-mgrbtn .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.ta-pu-mgrbtn.is-set{border-color:var(--accent);color:var(--accent-hover)}
.ta-pu-mgrbtn:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.ta-pu-mgrlist{display:flex;flex-direction:column;max-height:56vh;overflow-y:auto;margin:var(--sp-2) calc(-1 * var(--sp-2)) 0}
.ta-pu-mopt{display:flex;align-items:center;gap:var(--sp-3);min-height:56px;padding:var(--sp-2);border-radius:var(--r-md);text-align:left;color:var(--text)}
.ta-pu-mopt .avatar{width:32px;height:32px;font-size:12px;flex:none}
.ta-pu-mopt .nm{flex:1;min-width:0;display:flex;flex-direction:column;font-weight:var(--fw-medium);overflow-wrap:anywhere}
.ta-pu-mopt .sub{color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:400}
.ta-pu-mopt[aria-selected="true"]{background:var(--accent-tint);box-shadow:inset 0 0 0 1px var(--accent)}
.ta-pu-mopt:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--accent)}

/* Календарь: 7 колонок по ≥44 px */
.ta-cal-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin:0 calc(-1 * var(--sp-2)) var(--sp-2)}
.ta-cal-head .h2{margin:0}
.ta-cal-head .icon-btn:disabled{opacity:.35}
.ta-cal{display:flex;flex-direction:column;gap:2px}
.ta-cal-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}
.ta-cal-wd span{display:grid;place-items:center;height:24px;color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold)}
.ta-cal-d{position:relative;display:grid;place-items:center;width:100%;min-width:var(--tap);height:var(--tap);border-radius:var(--r-md);color:var(--text);font-variant-numeric:tabular-nums;font-weight:var(--fw-medium);transition:background-color var(--dur-fast) var(--ease)}
.ta-cal-d.empty{min-width:0}
.ta-cal-d.data::after{content:"";position:absolute;bottom:6px;left:50%;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:var(--brand)}
.ta-cal-d.no_data{color:var(--text-2);background:repeating-linear-gradient(135deg,transparent 0 5px,rgb(255 255 255 / .035) 5px 7px)}
.ta-cal-d.today{box-shadow:inset 0 0 0 1px var(--border-strong);color:var(--text-2)}
.ta-cal-d.future,.ta-cal-d.before{color:var(--text-3);opacity:.6}
.ta-cal-d[aria-pressed="true"]{background:var(--accent);color:var(--on-accent)}
.ta-cal-d[aria-pressed="true"]::after{background:var(--on-accent)}
.ta-cal-d:focus-visible{outline:none;box-shadow:var(--focus-ring)}
@media (hover:hover){.ta-cal-d:not(:disabled):not([aria-pressed="true"]):hover{background:var(--surface-2)}}
.ta-cal-legend{display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-4);list-style:none;margin:var(--sp-3) 0 0;padding:0;color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption)}
.ta-cal-legend li{display:inline-flex;align-items:center;gap:6px}
.ta-cal-key{width:14px;height:14px;border-radius:4px;flex:none;position:relative}
.ta-cal-key.data::after{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--brand)}
.ta-cal-key.nodata{background:repeating-linear-gradient(135deg,transparent 0 3px,rgb(255 255 255 / .18) 3px 4px);box-shadow:inset 0 0 0 1px var(--border)}
.ta-cal-key.today{box-shadow:inset 0 0 0 1px var(--border-strong)}
.ta-pu-calsheet .actions{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-4)}

/* Лид: ник моноширинным (копирование), справа сумма и «Диалог» */
.ta-pu-lead .rt{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:4px;max-width:50%}
.ta-pu-nick{position:relative;align-self:flex-start;display:inline-flex;align-items:center;gap:6px;max-width:100%;min-height:28px;margin:-2px 0 0 -6px;padding:2px 6px;border-radius:var(--r-sm);color:var(--text);text-align:left;font-weight:var(--fw-medium);transition:background-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}
.ta-pu-nick::after{content:"";position:absolute;inset:-8px 0}
.ta-pu-nick .nk{min-width:0;overflow-wrap:anywhere;word-break:break-all}
.ta-pu-nick .cp{flex:none;color:var(--text-2)}
.ta-pu-nick:active{background:var(--surface-2)}
.ta-pu-nick:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.ta-pu-nick.is-copied{background:var(--brand-tint);color:var(--brand)}
.ta-pu-nick.is-copied .cp{color:var(--brand)}
@media (hover:hover){.ta-pu-nick:hover{background:var(--surface-2)}}
.ta-pu-dlg{position:relative;display:inline-flex;align-items:center;gap:4px;min-height:28px;padding:0 2px;color:var(--accent-hover);font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:var(--fw-medium);text-decoration:none;border-radius:var(--r-sm)}
.ta-pu-dlg::after{content:"";position:absolute;inset:-8px -6px}
.ta-pu-dlg:focus-visible{outline:none;box-shadow:var(--focus-ring)}
@media (hover:hover){.ta-pu-dlg:hover{text-decoration:underline}}
.ta-pu-dh{padding:var(--sp-3) var(--sp-4) 0;color:var(--text-2);font-size:var(--fs-micro);line-height:var(--lh-micro);font-weight:var(--fw-semibold);letter-spacing:var(--ls-caps);text-transform:uppercase}
.ta-pu-dh+.ta-pu-leads .ta-pu-lead:first-child{padding-top:6px}
/* Пять пунктов меню (Лиды · Покупки · Агенты · Кошельки · Админ): ≥ 72 px на 360 */
.ta-nav5 .tab{min-width:0;padding:0 2px}
.ta-nav5 .tab>span:last-child{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (prefers-reduced-motion: reduce){.ta-pu-chip,.ta-pu-mgrbtn,.ta-cal-d,.ta-pu-nick{transition:none}}
/* Ряд дней: «Сегодня · Вчера · Позавчера» (3 равных) + «Другой день · Весь период» (2 равных) — всё видно на 360 без прокрутки */
.ta-pu-days{flex-direction:column;overflow:visible;margin:0 0 var(--sp-3);padding:0}
.ta-pu-days .r3,.ta-pu-days .r2{display:grid;gap:var(--sp-2)}
.ta-pu-days .r3{grid-template-columns:repeat(3,minmax(0,1fr))}
.ta-pu-days .r2{grid-template-columns:repeat(2,minmax(0,1fr))}
.ta-pu-days .ta-pu-chip{min-width:0;padding:0 8px;border-radius:var(--r-md)}
.ta-pu-days .ta-pu-chip .l{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.ta-pu-meta{margin:0 0 var(--sp-3)}

/* ===== u25b: этап 1 редизайна — перенесено из design/components.css (блок «v3 · Градиент фона экранов»). Откат: снять класс ta-bg-grad с <body>. */
/* ---------- v3 · Градиент фона экранов (31.10.2026, docs/design-v3.md «Градиент фона») ----------
   Включается классом на <body>: .ta-bg-grad (полный, 3 блика + вертикаль) или .ta-bg-grad.ta-bg-lite (один блик — слабые Android).
   Слой — body::before, position:fixed, позади контента (z-index:-1), только статичные градиенты: без blur/filter/backdrop-filter/анимации.
   Высота — 100lvh (большой вьюпорт): при появлении клавиатуры и сворачивании адресной строки слой не пересчитывается и не прыгает. */
body.ta-bg-grad{background:transparent}            /* фон рисует html (--bg) + слой ниже; старый radial на body отключается */
body.ta-bg-grad::before{content:"";position:fixed;left:0;right:0;top:0;height:100vh;height:100lvh;z-index:-1;pointer-events:none;
  background:
    radial-gradient(120% 50% at 50% -12%,rgb(var(--glow-green) / var(--bg-grad-i-top)),transparent 64%),
    radial-gradient(70% 34% at 104% -4%,rgb(var(--glow-blue) / var(--bg-grad-i-cool)),transparent 70%),
    radial-gradient(80% 40% at -10% 104%,rgb(var(--glow-green) / var(--bg-grad-i-side)),transparent 70%),
    linear-gradient(180deg,var(--bg-grad-top) 0%,var(--bg-grad-mid) 46%,var(--bg-grad-bottom) 100%)}
body.ta-bg-grad.ta-bg-lite::before{background:radial-gradient(120% 50% at 50% -12%,rgb(var(--glow-green) / var(--bg-grad-i-lite)),transparent 64%) var(--bg)}
@media print{body.ta-bg-grad::before{display:none}}

/* ===== u27 (v3i): этапы 2–3 редизайна из design/components.css: «Тёмный люкс (этап 2)», строка --danger-text, «этап 3: ключевые экраны».
   «Градиент фона экранов» перенесён в u25b (выше), не дублируется. Откат: удалить всё ниже этой строки (или cp -p components.css.bak-u27). */
/* ---------- v3 · Тёмный люкс (этап 2, 31.10.2026): карточки, типографика, золото итогов, шиммер, меню ----------
   Только добавления поверх существующих классов. Облегчение: .ta-bg-lite (без шиммера и свечений). */
/* Типографика */
.h1{letter-spacing:-.015em}
.h2{letter-spacing:-.01em}
.ta-pu-amt .v,.ta-balance .big,.ta-kpi .v,.amt{font-variant-numeric:tabular-nums lining-nums}
/* Карточки: плотные, тонкий верхний блик + мягкая тень */
.card:not(.card-danger):not(.card-hero):not(.raised),.list,.ta-person,.ta-cand,.ta-pu-mgr,.ta-pu-total,.ta-bind,.ta-pu-since{box-shadow:inset 0 1px 0 var(--hl-top),var(--shadow-card)}
/* Золото: итоги и деньги */
.ta-pu-total{border-color:var(--gold-line)}
.ta-pu-total .lbl{color:var(--gold)}
.ta-pu-total .ta-pu-amt.lg .v{color:var(--gold-hi);font-size:var(--fs-money-xl);line-height:var(--lh-money-xl);font-weight:700;letter-spacing:-.02em}
.ta-pu-total .ta-pu-amt.lg .cur{color:var(--gold)}
.ta-pu-sr.main .lbl,.ta-pu-sr.main .v{color:var(--gold-hi)}
.ta-pu-sr.main .cur{color:var(--gold)}
.ta-pu-since{border-color:var(--gold-line)}
.ta-balance .big{color:var(--gold-hi)}
.ta-person.open{border-color:var(--gold-line)}
/* Шиммер: сдвиг background-position одного слоя. Только 3 места: итог «Покупок», «С начала учёта», баланс первого кошелька.
   Пауза вне экрана — .ta-shim-off (IntersectionObserver в app.js); выкл. при prefers-reduced-motion, .ta-bg-lite и ?shot=1. */
.ta-pu-total{background-color:var(--surface);background-image:linear-gradient(105deg,transparent 42%,var(--shimmer-hi) 50%,transparent 58%),radial-gradient(120% 90% at 100% 0%,var(--gold-tint),transparent 60%),linear-gradient(160deg,var(--surface-2),var(--surface) 70%);background-size:260% 100%,100% 100%,100% 100%;background-repeat:no-repeat}
.ta-pu-since{background-image:linear-gradient(105deg,transparent 42%,var(--shimmer-hi) 50%,transparent 58%),var(--card-grad);background-size:260% 100%,100% 100%;background-repeat:no-repeat;animation-delay:1.8s}
.stack-3>.ta-person:first-child .ta-balance{background-image:linear-gradient(105deg,transparent 42%,var(--shimmer-hi) 50%,transparent 58%);background-size:260% 100%;background-repeat:no-repeat;animation-delay:3.2s}
.ta-pu-total,.ta-pu-since,.stack-3>.ta-person:first-child .ta-balance{background-position:130% 0,0 0,0 0;animation:ta-shim var(--shimmer-dur) ease-in-out infinite}
.ta-pu-since{animation-delay:1.8s}
.stack-3>.ta-person:first-child .ta-balance{animation-delay:3.2s}
@keyframes ta-shim{0%{background-position:130% 0,0 0,0 0}55%,100%{background-position:-30% 0,0 0,0 0}}
.ta-shim-off{animation-play-state:paused!important}
.no-anim :is(.ta-pu-total,.ta-pu-since,.stack-3>.ta-person:first-child .ta-balance),.ta-bg-lite :is(.ta-pu-total,.ta-pu-since,.stack-3>.ta-person:first-child .ta-balance){animation:none}
@media (prefers-reduced-motion: reduce){.ta-pu-total,.ta-pu-since,.stack-3>.ta-person:first-child .ta-balance{animation:none}}
.ta-bg-lite .tab[aria-current="page"]::before{box-shadow:none}
/* Меню: тонкая золотая линия по верхней кромке; активный пункт — синий (действие) */
.tabbar::after{content:"";position:absolute;left:0;right:0;top:-1px;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent 5%,rgb(216 180 106 / .28) 50%,transparent 95%)}
.tab[aria-current="page"]{font-weight:var(--fw-semibold)}
.tab[aria-current="page"]::before{left:32%;right:32%;background:linear-gradient(90deg,var(--accent),var(--accent-hover))}
/* Красный текст светлее (--danger-text): SLA «2 ч 10 мин», .t-danger, ошибки полей. Фоны и иконки остаются на --danger. */
.t-danger,.wait.late,.hint.error{color:var(--danger-text)}

/* ---------- v3 · Тёмный люкс — этап 3: ключевые экраны (31.10.2026) ----------
   Только расширения. Зелёный — подсказки Сейлза и бренд, синий — действия, золото — только деньги/итоги. */
/* Лиды: карточка лида плотнее, менеджер — «стеклянная» пилюля без blur, SLA — плотная красная плашка */
.card.ta-lead{border-color:var(--border);background-color:var(--surface);background-image:linear-gradient(180deg,rgb(255 255 255 / .03),transparent 40%)}
.ta-manager{background:linear-gradient(180deg,#202834,var(--surface-2));box-shadow:inset 0 1px 0 var(--hl-top)}
.wait.late,.wait.warn{padding:3px 8px;border-radius:var(--r-pill)}
.wait.late{background:var(--danger-tint);box-shadow:inset 0 0 0 1px rgb(240 74 74 / .28)}
.wait.warn{background:var(--warning-tint);box-shadow:inset 0 0 0 1px rgb(245 165 36 / .25)}
/* Подсказка Сейлза («Ответ по лиду») и карточка ответа — зелёный бренд вместо синего */
.ta-answer{border-color:rgb(43 212 127 / .30);background:linear-gradient(135deg,rgb(43 212 127 / .10),rgb(43 212 127 / .03) 60%),var(--surface)}
.ta-answer .ttl .i-sparkles,.ta-reply-head .i-sparkles{color:var(--brand)}
.ta-reply{border-color:rgb(43 212 127 / .32);background:linear-gradient(135deg,rgb(43 212 127 / .10),rgb(76 141 255 / .035) 70%),var(--surface);box-shadow:inset 0 1px 0 var(--hl-top),0 6px 18px rgb(0 0 0 / .25)}
/* Агенты: пузыри с верхним бликом, док с плотной подложкой */
.msg.in{background:linear-gradient(180deg,#151B24,var(--surface));box-shadow:inset 0 1px 0 var(--hl-top)}
.dock{background:linear-gradient(rgb(10 13 18 / 0),var(--bg) 28%)}
/* Кошельки: KPI-плитки и зарплатный баланс */
.ta-kpi{background-image:var(--card-grad);box-shadow:inset 0 1px 0 var(--hl-top)}
.ta-salary-hero .ta-balance,.ta-salary-hero .big{color:var(--gold-hi)}
/* Админ: список сотрудников — тонкий верхний блик */
.list{box-shadow:inset 0 1px 0 var(--hl-top),var(--shadow-card)}
/* Загрузка: подпись чуть плотнее */
.ld-label{letter-spacing:.01em}
.ta-bg-lite .ta-reply{box-shadow:inset 0 1px 0 var(--hl-top)}
/* u39 (31.10.2026): «Кошельки» — подпись «Баланс:» перед суммой; подпись и сумма в одной группе без переноса (переносится вся группа) */
.ta-balance .ta-bal-v{display:inline-flex;align-items:baseline;gap:var(--sp-2);white-space:nowrap;min-width:0}
.ta-balance .ta-bal-l{color:var(--text-2);font-size:var(--fs-caption);line-height:var(--lh-caption);font-weight:var(--fw-medium)}
/* >>> u47 v3l: слабый интернет (из design/components.css; откат — удалить блок до маркера <<< u47 v3l) */
/* v3l: «С начала учёта» — строка в две линии: подпись+сумма, под подписью — число покупок (без разрыва «распознан|о» на 360) */
.ta-pu-since .ta-pu-sr{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--sp-2);row-gap:0;align-items:baseline}
.ta-pu-since .ta-pu-sr .lbl{grid-column:1;grid-row:1;overflow-wrap:normal;word-break:normal;hyphens:none}
.ta-pu-since .ta-pu-sr .sub{grid-column:1;grid-row:2}
.ta-pu-since .ta-pu-sr .ta-pu-amt{grid-column:2;grid-row:1}
/* ---------- v3l: слабый интернет (docs/design-v3.md «Слабый интернет»). Только добавления. ---------- */
/* 1) Место под блоки, которые дорисовывает purchases.page.js: пока скрипт не пришёл, вёрстка не прыгает (CLS 0,27 → 0) */
#pu-days:empty{min-height:96px;margin-bottom:var(--sp-3)}
#pu-since:empty{min-height:245px}
#pu-meta-t:empty{display:inline-block;min-height:16px}
/* 2) Облегчённый фон при prefers-reduced-motion — сразу из CSS, не дожидаясь app.js (не было смены фона через 3 с на медленной сети) */
@media (prefers-reduced-motion: reduce){
  body.ta-bg-grad::before{background:radial-gradient(120% 50% at 50% -12%,rgb(var(--glow-green) / var(--bg-grad-i-lite)),transparent 64%) var(--bg)}
  .tab[aria-current="page"]::before{box-shadow:none}
  .ta-reply{box-shadow:inset 0 1px 0 var(--hl-top)}
}
/* 3) Знак: если не пришли ни logo3d.js, ни PNG — вместо рамки «битой картинки» плоский «$» (Chromium рисует ::before/::after у <img> только когда картинка битая) */
.ta-logo3d>img::before{content:"";position:absolute;inset:0;background:var(--bg)}
.ta-logo3d>img::after{content:"";position:absolute;inset:14%;background-color:var(--brand);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222.2%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6%22/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222.2%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6%22/%3E%3C/svg%3E") center/contain no-repeat}
.ta-logo3d>img::before{border-radius:24%;background:var(--surface)}   /* v3l: плитка, а не «дыра» на градиенте */
/* <<< u47 v3l */
