/* Толк — оформление кабинета.
   Токены те же, что в концепции: сливовый акцент, Unbounded на числах,
   Golos Text в тексте, моноширинный на подписях данных. Цвета заданы
   переменными и переопределяются для тёмной темы целиком, чтобы ни один
   цвет не жил только внутри медиазапроса. */

:root{
  --bg:#F5F3F4; --surface:#FFFFFF; --surface-2:#EEEAEC; --surface-3:#E4DEE1;
  --line:#DFD8DC; --line-2:#C9BEC4;
  --ink:#1A151A; --ink-2:#5E5259; --ink-3:#8E8189;
  --accent:#9B2D62; --accent-2:#7A1F4C; --accent-soft:#F7E7EF;
  --good:#1F7A4D; --warn:#A96A0F; --crit:#BE3A2C;
  --good-soft:#E4F2EA; --warn-soft:#F8EEDD; --crit-soft:#FAE7E4;
  --s1:#9B2D62; --s2:#C07715; --s3:#3F4FB5;
  --seq-1:#F3E3EB; --seq-2:#E2BFD2; --seq-3:#CD93B2; --seq-4:#B65C8B; --seq-5:#9B2D62; --seq-6:#6E1743;
  --radius:3px;
  --shadow:0 1px 2px rgba(26,21,26,.05), 0 8px 24px -12px rgba(26,21,26,.14);
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#131013; --surface:#1A161A; --surface-2:#221C22; --surface-3:#2C242C;
    --line:#2E262E; --line-2:#453945;
    --ink:#F1EBEE; --ink-2:#ABA0A6; --ink-3:#7D737A;
    --accent:#E17BAB; --accent-2:#F0A3C6; --accent-soft:#331C29;
    --good:#4FC98C; --warn:#E0A345; --crit:#F0796A;
    --good-soft:#152C22; --warn-soft:#2E2415; --crit-soft:#33191A;
    --s1:#C9548A; --s2:#C08532; --s3:#6B85E0;
    --seq-1:#2E222A; --seq-2:#472B3A; --seq-3:#653950; --seq-4:#84405F; --seq-5:#B04E7C; --seq-6:#D8749F;
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6);
  }
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--ink);
  font-family:"Golos Text","Helvetica Neue",Arial,sans-serif;
  font-size:15px; line-height:1.6; -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{margin:0; line-height:1.2; text-wrap:balance}
p{margin:0}
a{color:var(--accent); text-decoration:none}
a:hover{text-decoration:underline}
:focus-visible{outline:2px solid var(--accent); outline-offset:2px; border-radius:2px}
.mono{font-family:"JetBrains Mono",ui-monospace,Menlo,monospace; font-variant-numeric:tabular-nums}
.num{font-family:"Unbounded",system-ui,sans-serif; font-variant-numeric:tabular-nums; letter-spacing:-.03em}

/* ── каркас ─────────────────────────────────────────────────────────── */
/* minmax(0,1fr), а не 1fr: колонка грида по умолчанию не уже своего
   содержимого, и одна широкая таблица растягивает весь кабинет —
   на телефоне текст уезжает за край экрана. */
.shell{display:grid; grid-template-columns:minmax(0,1fr); min-height:100vh}
@media (min-width:900px){ .shell{grid-template-columns:216px minmax(0,1fr)} }

/* Селектор по элементу здесь был бы миной: любой вложенный <aside>
   на странице (например, список разговоров) унаследовал бы боковую
   панель целиком, вместе с height:100vh. Привязываем к каркасу. */
.shell > aside{
  background:var(--surface); border-right:1px solid var(--line);
  padding:20px 14px; display:flex; flex-direction:column; gap:18px;
}
@media (min-width:900px){ .shell > aside{position:sticky; top:0; height:100vh} }
.brand{
  font-family:"Unbounded",sans-serif; font-weight:800; font-size:24px;
  letter-spacing:-.05em; padding:0 8px; color:var(--ink);
}
.brand em{font-style:normal; color:var(--accent)}
.who{padding:0 8px; font-size:12.5px; color:var(--ink-3); margin-top:-12px}
.who b{display:block; color:var(--ink); font-weight:600; font-size:13.5px}
nav.menu{display:flex; flex-direction:column; gap:1px}
nav.menu a{
  display:block; padding:7px 9px; border-radius:var(--radius); font-size:14px;
  color:var(--ink-2); text-decoration:none;
}
nav.menu a:hover{background:var(--surface-2); color:var(--ink); text-decoration:none}
nav.menu a.on{background:var(--accent-soft); color:var(--accent); font-weight:600}
.shell > aside .foot{margin-top:auto; padding:0 8px; font-size:12.5px; color:var(--ink-3)}

main{padding:26px 22px 70px; min-width:0}
@media (min-width:900px){ main{padding:32px 34px 80px} }
.page-h{display:flex; justify-content:space-between; align-items:flex-end; gap:18px; flex-wrap:wrap; margin-bottom:22px}
.page-h h1{font-size:clamp(23px,3vw,31px); font-weight:600; letter-spacing:-.02em}
.page-h .sub{font-size:13.5px; color:var(--ink-3); margin-top:5px}

/* ── период ─────────────────────────────────────────────────────────── */
.periods{display:flex; gap:2px; background:var(--surface-2); padding:3px; border-radius:5px; flex-wrap:wrap}
.periods a{
  font-size:13px; padding:5px 12px; border-radius:3px; color:var(--ink-2);
  text-decoration:none; white-space:nowrap;
}
.periods a:hover{color:var(--ink); text-decoration:none}
.periods a.on{background:var(--surface); color:var(--ink); font-weight:600; box-shadow:0 1px 2px rgba(0,0,0,.08)}

/* ── плитки ─────────────────────────────────────────────────────────── */
.kpis{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:1px; background:var(--line); border:1px solid var(--line); margin-bottom:20px}
@media (min-width:820px){ .kpis{grid-template-columns:repeat(4,minmax(0,1fr))} }
.kpi{background:var(--surface); padding:15px 16px}
.kpi .k{font-family:"JetBrains Mono",monospace; font-size:9.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--ink-3)}
.kpi .v{font-family:"Unbounded",sans-serif; font-weight:600; font-size:clamp(19px,2.4vw,25px); letter-spacing:-.035em; margin-top:7px; font-variant-numeric:tabular-nums}
.kpi .d{font-size:12px; margin-top:4px; color:var(--ink-3)}
.kpi .d.up{color:var(--good)} .kpi .d.down{color:var(--crit)}
.kpi.hot .v{color:var(--crit)}

/* ── панели ─────────────────────────────────────────────────────────── */
.panel{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); padding:19px 20px 16px; margin-bottom:18px}
.panel-h{display:flex; justify-content:space-between; align-items:baseline; gap:14px; flex-wrap:wrap; margin-bottom:10px}
.panel-h h2{font-size:17px; font-weight:600}
/* Подпись в заголовке панели — просто текст. Отдельный класс, потому что
   .note ниже это блочная сноска с рамкой, и путать их нельзя. */
.panel-h .cap{font-size:12.5px; color:var(--ink-3); text-align:right; max-width:44ch}
.cols{display:grid; gap:18px; grid-template-columns:minmax(0,1fr)}
@media (min-width:1000px){ .cols{grid-template-columns:minmax(0,1fr) minmax(0,1fr)} }

.legend{display:flex; gap:15px; flex-wrap:wrap; margin:8px 0; font-size:12.5px; color:var(--ink-2)}
.legend span{display:inline-flex; align-items:center; gap:6px}
.legend i{width:10px; height:10px; border-radius:2px; display:block; flex:none}
.chartwrap{overflow-x:auto; min-width:0}
svg.chart{display:block; width:100%; height:auto; min-width:480px}
svg.chart text{font-family:"JetBrains Mono",monospace; font-variant-numeric:tabular-nums; font-size:10.5px; fill:var(--ink-3)}
/* Подпись даты под столбиком: три строки в высоту одной обычной,
   поэтому мельче общего шрифта графиков. */
svg.chart .tick{font-size:8.6px}
svg.chart .tick.strong{fill:var(--ink-2)}
svg.chart .grid{stroke:var(--line); stroke-width:1}
svg.chart .ref{stroke:var(--ink-3); stroke-width:1; stroke-dasharray:3 3}

/* ── горизонтальные бары ────────────────────────────────────────────── */
.hbars{display:flex; flex-direction:column; gap:8px}
.hbar{display:grid; grid-template-columns:minmax(90px,1.2fr) minmax(0,3fr) auto; gap:10px; align-items:center; font-size:13.5px}
.hbar .lbl{white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.hbar .track{height:11px; background:var(--surface-2); border-radius:2px; position:relative; overflow:hidden}
.hbar .fill{position:absolute; inset:0 auto 0 0; border-radius:2px; background:var(--tone,var(--accent))}
.hbar .refmark{position:absolute; top:-3px; bottom:-3px; width:1px; background:var(--ink-3)}
.hbar .val{font-family:"JetBrains Mono",monospace; font-size:12.5px; color:var(--ink-2); white-space:nowrap; font-variant-numeric:tabular-nums}

/* ── таблицы ────────────────────────────────────────────────────────── */
.tablewrap{overflow-x:auto; min-width:0; border:1px solid var(--line); border-radius:var(--radius); background:var(--surface)}
table{border-collapse:collapse; width:100%; min-width:560px; font-size:13.5px}
th{
  text-align:left; font-family:"JetBrains Mono",monospace; font-size:9.5px; letter-spacing:.11em;
  text-transform:uppercase; color:var(--ink-3); font-weight:400; padding:10px 13px;
  border-bottom:1px solid var(--line); white-space:nowrap; background:var(--surface-2);
}
td{padding:9px 13px; border-bottom:1px solid var(--line); color:var(--ink-2); vertical-align:top}
tbody tr:last-child td{border-bottom:0}
td:first-child{color:var(--ink); font-weight:500}
td.n{text-align:right; font-family:"JetBrains Mono",monospace; font-variant-numeric:tabular-nums; white-space:nowrap}
/* Заголовок числовой колонки прижимаем туда же, куда и числа: иначе
   подпись стоит слева, а столбец цифр — справа, и глазу приходится
   каждый раз проверять, что над чем. */
th.n{text-align:right}

.chip{display:inline-block; font-family:"JetBrains Mono",monospace; font-size:9.5px; letter-spacing:.05em; padding:2px 7px; border-radius:2px; text-transform:uppercase; white-space:nowrap}
.chip.ok{background:var(--good-soft); color:var(--good)}
.chip.no{background:var(--crit-soft); color:var(--crit)}
.chip.mid{background:var(--warn-soft); color:var(--warn)}

/* ── формы ──────────────────────────────────────────────────────────── */
.field{display:flex; flex-direction:column; gap:5px; margin-bottom:14px}
.field label{font-size:12.5px; color:var(--ink-2); font-weight:500}
.field .hint{font-size:12px; color:var(--ink-3); line-height:1.45}
input[type=text],input[type=password],input[type=email],select,textarea{
  font:inherit; font-size:14px; padding:8px 11px; border:1px solid var(--line-2);
  border-radius:var(--radius); background:var(--surface); color:var(--ink); width:100%;
}
input:focus,select:focus,textarea:focus{border-color:var(--accent); outline:none}
button,.btn{
  font:inherit; font-size:14px; font-weight:600; padding:9px 17px; border:0;
  border-radius:var(--radius); background:var(--accent); color:#fff; cursor:pointer;
  text-decoration:none; display:inline-block;
}
button:hover,.btn:hover{background:var(--accent-2); text-decoration:none}
button.ghost,.btn.ghost{background:var(--surface-2); color:var(--ink)}
button.ghost:hover,.btn.ghost:hover{background:var(--surface-3)}
button:disabled{opacity:.5; cursor:not-allowed}

/* Поле с «глазиком»: кнопка лежит внутри рамки, справа. */
.peek{position:relative; display:block}
.peek input{padding-right:40px}
.peek-btn{
  position:absolute; right:1px; top:1px; bottom:1px; width:36px;
  display:grid; place-items:center; padding:0; border-radius:0 var(--radius) var(--radius) 0;
  background:transparent; color:var(--ink-3); cursor:pointer;
}
.peek-btn:hover{background:var(--surface-2); color:var(--ink-2)}
.peek-btn:focus-visible{outline:2px solid var(--accent); outline-offset:-2px}
.hint.match.ok{color:var(--good)}
.hint.match.no{color:var(--crit)}

.note{padding:12px 15px; border-radius:var(--radius); font-size:13.5px; line-height:1.55; border:1px solid var(--line); border-left:3px solid var(--accent); background:var(--surface); color:var(--ink-2); margin-bottom:16px}
.note.warn{border-left-color:var(--warn); background:var(--warn-soft); color:var(--ink)}
.note.bad{border-left-color:var(--crit); background:var(--crit-soft); color:var(--ink)}
.note.good{border-left-color:var(--good); background:var(--good-soft); color:var(--ink)}
.note b{color:var(--ink)}

/* ── вход ───────────────────────────────────────────────────────────── */
.login{min-height:100vh; display:grid; place-items:center; padding:24px}
.login .card{width:100%; max-width:352px; background:var(--surface); border:1px solid var(--line); border-radius:5px; padding:30px; box-shadow:var(--shadow)}
.login .brand{padding:0; margin-bottom:6px; font-size:32px}
.login .tag{font-size:13.5px; color:var(--ink-3); margin-bottom:22px}

/* ── код подписки ───────────────────────────────────────────────────── */
.code{
  font-family:"JetBrains Mono",monospace; font-size:26px; font-weight:600;
  letter-spacing:.16em; color:var(--accent); background:var(--accent-soft);
  padding:11px 18px; border-radius:var(--radius); display:inline-block;
}

/* Строка доступа в боковой панели. Её нет вовсе, когда доступ открыт и
   срок не близко: говорить не о чем, а постоянный ярлык про оплату
   в рабочем инструменте раздражает. */
.acc{margin:0 8px; font-size:12.5px; line-height:1.4}
.acc a{display:block; padding:7px 9px; border-radius:var(--radius); text-decoration:none}
.acc.off a{background:var(--crit-soft); color:var(--crit)}
.acc.soon a{background:var(--warn-soft); color:var(--warn)}
.acc a:hover{text-decoration:underline}
@media (max-width:899px){ .acc{margin:0; order:4} .acc a{padding:5px 9px; font-size:12px} }

/* ── доступ до оплаты ───────────────────────────────────────────────── */
.lead{font-size:15px; line-height:1.6; color:var(--ink-2); max-width:68ch; margin:-4px 0 20px}
.panel.lock{border-color:var(--accent); border-left:3px solid var(--accent)}
.teaser-loading, .todo-loading{padding:18px 0 4px; color:var(--ink-3); font-size:13.5px}
.teaser{padding:4px 0 6px}
.teaser-n{font-family:"Unbounded",sans-serif; font-size:34px; line-height:1.1; color:var(--ink)}
.teaser-n span{font-family:inherit; font-size:19px; color:var(--ink-2); font-weight:400}
.teaser-m{font-family:"JetBrains Mono",monospace; font-size:17px; color:var(--accent); margin-top:6px}
.teaser-t{font-size:14px; line-height:1.6; color:var(--ink-2); max-width:70ch; margin-top:12px}

.behind{display:grid; gap:14px; padding:4px 0}
@media (min-width:900px){ .behind{grid-template-columns:repeat(2,minmax(0,1fr))} }
.behind article{border:1px solid var(--line); border-radius:var(--radius); padding:14px 16px; background:var(--surface-2)}
.behind h3{font-size:14.5px; line-height:1.45; margin-bottom:7px}
.behind p{font-size:13.5px; line-height:1.6; color:var(--ink-2)}
.behind .who{margin-top:9px; font-size:12.5px; color:var(--ink-3)}
.behind .who span{color:var(--ink-2)}

.phone{
  display:inline-block; font-family:"JetBrains Mono",monospace; font-size:23px;
  font-weight:600; letter-spacing:.02em; color:var(--accent); text-decoration:none;
  padding:9px 15px; border-radius:var(--radius); background:var(--accent-soft);
}
.phone:hover{background:var(--accent); color:#fff; text-decoration:none}
.phone.inline{font-size:15px; padding:1px 6px; background:none; text-decoration:underline}
.phone.inline:hover{background:none; color:var(--accent-2)}

form.access{display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px; padding:4px 0 2px}
form.access label{flex-basis:100%; font-size:12.5px; color:var(--ink-2); font-weight:500}
form.access input{
  width:210px; font-family:"JetBrains Mono",monospace; font-size:16px;
  letter-spacing:.09em; text-transform:uppercase;
}
.code-form .hint, .panel > .hint{font-size:12.5px; color:var(--ink-3); line-height:1.55; max-width:76ch; margin-top:12px}

.empty{padding:34px 20px; text-align:center; color:var(--ink-3); font-size:14px}
@media (prefers-reduced-motion:reduce){*{animation:none!important; transition:none!important}}

/* ── разговор ───────────────────────────────────────────────────────── */
/* Экран-переписка, а не форма: список разговоров справа, лента слева,
   поле ввода прижато к низу. Прокручивается лента, а не страница —
   иначе поле ввода уезжает вверх ровно тогда, когда оно нужнее всего. */
.chat{display:grid; gap:22px; grid-template-columns:minmax(0,1fr); align-items:start}
@media (min-width:1080px){ .chat{grid-template-columns:minmax(0,1fr) 234px} }

.chat-main{display:flex; flex-direction:column; min-width:0;
  height:calc(100vh - 210px); min-height:440px}
.stream{flex:1; overflow-y:auto; padding:2px 4px 8px 2px; display:flex; flex-direction:column}

.msg{display:flex; flex-direction:column; gap:4px; margin-bottom:16px; max-width:min(78%,640px)}
.msg.user{margin-left:auto; align-items:flex-end}
.msg.assistant{max-width:100%}
.bubble{
  white-space:pre-wrap; overflow-wrap:anywhere;
  padding:11px 14px; border-radius:var(--radius); border:1px solid var(--line);
  background:var(--surface); font-size:14.5px; line-height:1.65;
}
.msg.user .bubble{background:var(--accent-soft); border-color:var(--accent-soft)}
.msg.odd .bubble{background:var(--crit-soft); border-left:3px solid var(--crit)}
.msg .trace{font-family:"JetBrains Mono",ui-monospace,Menlo,monospace;
  font-size:11.5px; color:var(--ink-3); padding-left:2px}
.msg .stamp{font-size:11.5px; color:var(--ink-3)}
.msg.thinking .bubble{color:var(--ink-3)}
@media (prefers-reduced-motion: no-preference){
  .msg.thinking .bubble{animation:pulse 1.4s ease-in-out infinite}
}
@keyframes pulse{0%,100%{opacity:1} 50%{opacity:.45}}

.empty{margin-top:auto; padding:6px 2px 18px}
.empty p{color:var(--ink-2); font-size:14.5px; margin-bottom:14px}
/* Не .chip: этим именем выше названы статусные плашки (ok/no/mid),
   и часть их вида — моноширинный шрифт, капитель, разрядка — протекала бы
   сюда через свойства, которых нет в этом правиле. */
.starters{display:flex; flex-wrap:wrap; gap:6px}
.starter{
  background:var(--surface); color:var(--ink-2); border:1px solid var(--line);
  font-size:13px; font-weight:400; padding:6px 11px; text-align:left;
}
.starter:hover{background:var(--surface-2); color:var(--ink); border-color:var(--line-2)}

.composer{display:flex; gap:8px; align-items:flex-end; padding-top:12px;
  border-top:1px solid var(--line)}
.composer textarea{flex:1; resize:none; min-height:44px; max-height:200px; line-height:1.5}
.composer button{flex:none; height:44px}
.chat-main .hint{font-size:11.5px; color:var(--ink-3); padding-top:6px}

.threads{background:var(--surface); border:1px solid var(--line);
  border-radius:var(--radius); padding:14px 12px}
@media (min-width:1080px){ .threads{position:sticky; top:32px; max-height:calc(100vh - 210px); overflow-y:auto} }
.threads .cap{font-size:12px; color:var(--ink-3); text-transform:uppercase;
  letter-spacing:.08em; margin-bottom:9px; padding-left:6px}
.threads ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:1px}
.threads li{display:grid; grid-template-columns:1fr auto; align-items:center;
  gap:2px 6px; padding:6px 7px; border-radius:var(--radius)}
.threads li:hover{background:var(--surface-2)}
.threads li.on{background:var(--accent-soft)}
.threads li a{grid-column:1; font-size:13px; color:var(--ink); line-height:1.35;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden}
.threads li.on a{color:var(--accent); font-weight:600}
.threads li .when{grid-column:1; font-size:11px; color:var(--ink-3)}
.threads li form{grid-column:2; grid-row:1 / span 2}
.threads li button{background:none; color:var(--ink-3); padding:0 4px;
  font-size:17px; line-height:1; height:auto}
.threads li button:hover{background:none; color:var(--crit)}
.threads .none{font-size:12.5px; color:var(--ink-3); padding:0 6px}

.venue{margin-bottom:10px; display:flex; flex-direction:column; gap:4px}
.venue label{font-size:11px; color:var(--ink-3); text-transform:uppercase; letter-spacing:.07em}

/* Ответ приходит лёгким Markdown: жирное на числах, список на
   перечислении. Разбирает его сервер, здесь только вид. */
.bubble p{margin:0 0 9px}
.bubble p:last-child{margin-bottom:0}
.bubble ul{margin:0 0 9px; padding-left:19px}
.bubble ul:last-child{margin-bottom:0}
.bubble li{margin-bottom:3px}
.bubble strong{color:var(--ink); font-weight:600}

/* ── находки и объяснения ───────────────────────────────────────────── */
/* Экран цифр отвечает «как дела». Эти два блока отвечают «и что теперь»:
   объяснение — про показатель вообще, находка — про сегодняшние цифры. */

.why{margin-top:10px; font-size:13px}
.why summary{
  cursor:pointer; color:var(--ink-3); font-size:12.5px; list-style:none;
  display:inline-flex; align-items:center; gap:5px; padding:2px 0;
}
.why summary::-webkit-details-marker{display:none}
.why summary::before{content:"?"; display:inline-grid; place-items:center;
  width:15px; height:15px; border-radius:50%; border:1px solid var(--line-2);
  font-size:10px; font-weight:600; line-height:1}
.why summary:hover{color:var(--ink)}
.why[open] summary{color:var(--ink); margin-bottom:7px}
.why-body{
  border-left:2px solid var(--line); padding:2px 0 2px 13px;
  display:flex; flex-direction:column; gap:6px; max-width:74ch;
  color:var(--ink-2); line-height:1.55;
}
.why-body b{color:var(--ink); font-weight:600}
.why-body .who{color:var(--ink-3); font-size:12.5px}
.why-body .who span{color:var(--accent); font-weight:600}

.todo{padding-bottom:20px}
.finds{display:grid; gap:10px}
@media (min-width:1200px){ .finds{grid-template-columns:repeat(2,minmax(0,1fr))} }
.find{
  border:1px solid var(--line); border-left:3px solid var(--ink-3);
  border-radius:var(--radius); padding:13px 15px; background:var(--surface);
  display:flex; flex-direction:column; gap:6px;
}
.find.crit{border-left-color:var(--crit); background:var(--crit-soft)}
.find.warn{border-left-color:var(--warn); background:var(--warn-soft)}
.find.good{border-left-color:var(--good); background:var(--good-soft)}
.find h3{font-size:15px; font-weight:600; letter-spacing:-.01em}
.find .fact{font-size:13.5px; color:var(--ink-2); line-height:1.55}
.find .do{font-size:13.5px; line-height:1.55}
.find .do b{font-weight:600}
.find .foot{display:flex; justify-content:space-between; align-items:baseline;
  gap:12px; margin-top:2px; font-size:12.5px}
.find .foot .who{
  font-family:"JetBrains Mono",ui-monospace,monospace; font-size:11px;
  text-transform:uppercase; letter-spacing:.06em; color:var(--ink-3);
}
.allclear{font-size:14px; color:var(--ink-2); line-height:1.6}
.allclear b{color:var(--good)}
.todo-loading{font-size:13.5px; color:var(--ink-3)}

.login .card .alt{margin-top:14px; text-align:center; font-size:13px; color:var(--ink-3)}

/* ── подключение и первая выгрузка ──────────────────────────────────── */
.steps{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:20px}
.step{
  display:flex; align-items:center; gap:7px; padding:7px 13px 7px 8px;
  border:1px solid var(--line); border-radius:var(--radius);
  background:var(--surface); font-size:13px; color:var(--ink-3);
}
.step b{
  display:grid; place-items:center; width:19px; height:19px; border-radius:50%;
  background:var(--surface-3); color:var(--ink-3); font-size:11px; font-weight:600;
}
.step.on{border-color:var(--accent); color:var(--ink)}
.step.on b{background:var(--accent); color:#fff}
.step.done{color:var(--ink-2)}
.step.done b{background:var(--good); color:#fff}
.step.done b::after{content:"✓"; font-size:10px}
.step.done b{font-size:0}

.start-cols{align-items:start}
ul.plain{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:11px}
ul.plain li{
  font-size:13.5px; line-height:1.55; color:var(--ink-2);
  padding-left:15px; position:relative; max-width:72ch;
}
ul.plain li::before{content:""; position:absolute; left:0; top:8px;
  width:5px; height:5px; border-radius:50%; background:var(--line-2)}
ul.plain li b{color:var(--ink); font-weight:600}

.loadlist{display:flex; flex-direction:column}
.loadrow{
  display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:center;
  gap:12px; padding:11px 2px; border-bottom:1px solid var(--line);
}
.loadrow:last-child{border-bottom:0}
.loadrow .dot{width:9px; height:9px; border-radius:50%; background:var(--surface-3)}
.loadrow.running .dot{background:var(--accent)}
@media (prefers-reduced-motion: no-preference){
  .loadrow.running .dot{animation:pulse 1.2s ease-in-out infinite}
}
.loadrow.ok .dot{background:var(--good)}
.loadrow.failed .dot{background:var(--crit)}
.loadrow .what b{display:block; font-size:14px; font-weight:600}
.loadrow .what span{font-size:12.5px; color:var(--ink-3)}
.loadrow .state{
  font-family:"JetBrains Mono",ui-monospace,monospace; font-size:12px;
  color:var(--ink-3); text-align:right; max-width:32ch;
}
.loadrow.ok .state{color:var(--good)}
.loadrow.failed .state{color:var(--crit)}
.ready{
  margin-top:16px; padding:14px 16px; border-radius:var(--radius);
  background:var(--good-soft); border:1px solid var(--line);
  font-size:13.5px; line-height:1.6; display:flex; flex-wrap:wrap;
  align-items:center; gap:12px; justify-content:space-between;
}
.ready b{color:var(--good)}

/* Атрибут `hidden` прячет элемент только потому, что браузер даёт ему
   display:none — и любой наш display в классе это молча перебивает.
   Так и вышло: плашка «продажи уже на месте» висела с первой секунды,
   когда не загрузилось ещё ничего. Закрываем весь класс ошибок разом. */
[hidden]{display:none!important}


/* ── команда заведения ──────────────────────────────────────────────── */
.team{display:flex; flex-direction:column; margin-bottom:18px}
.team-row{
  display:flex; flex-wrap:wrap; gap:10px 14px;
  align-items:center; padding:11px 2px; border-bottom:1px solid var(--line);
}
.team-row > div:first-child{margin-right:auto; min-width:0}
.team-row:last-child{border-bottom:0}
.team-row b{display:block; font-size:14px; font-weight:600}
.team-row .mono{font-size:12px; color:var(--ink-3)}
.role-tag{
  font-family:"JetBrains Mono",ui-monospace,monospace; font-size:10.5px;
  letter-spacing:.06em; text-transform:uppercase; padding:3px 8px;
  border-radius:2px; background:var(--surface-2); color:var(--ink-2);
}
.role-tag.owner{background:var(--accent-soft); color:var(--accent)}
.team-row button{padding:5px 11px; font-size:12.5px}
.team-add{display:grid; gap:0 14px; align-items:end;
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.team-add button{margin-bottom:14px}

/* Сводка приходит отдельным запросом. Место под неё держим заранее:
   иначе цифры под ней прыгают вниз ровно в тот момент, когда человек
   начал их читать. */
#todo{min-height:168px}
.todo .more{
  margin-top:12px; font-size:13px; color:var(--ink-3);
  display:flex; flex-wrap:wrap; gap:4px 10px; align-items:baseline;
}
.todo .more a{color:var(--accent)}

/* Куда привела ссылка из находки. Без пометки переход внутри одного
   экрана выглядит так, будто кнопка ничего не сделала. Рамка гаснет
   сама: она нужна на первые пару секунд, а не навсегда. */
.panel:target, .note:target{
  scroll-margin-top:20px; outline:2px solid var(--s1); outline-offset:3px;
  animation:landed 3.2s ease-out forwards;
}
@keyframes landed{ 0%,64%{outline-color:var(--s1)} 100%{outline-color:transparent} }
@media (prefers-reduced-motion:reduce){ .panel:target, .note:target{animation:none} }
.team-add button{max-width:190px}

/* ── узкий экран ────────────────────────────────────────────────────── */
/* Владелец смотрит это с телефона, между двумя делами. Боковая панель
   там занимала весь первый экран: чтобы увидеть хоть одну цифру,
   приходилось пролистать всё меню. Разворачиваем её в верхнюю полосу. */
@media (max-width:899px){
  .shell > aside{
    position:sticky; top:0; z-index:30;
    flex-direction:row; flex-wrap:wrap; align-items:center; gap:8px 12px;
    padding:11px 14px 0; border-right:0; border-bottom:1px solid var(--line);
  }
  .brand{font-size:20px; padding:0}
  .who{margin-top:0; font-size:11.5px; line-height:1.3}
  .who b{display:inline; font-size:12.5px}
  .who b::after{content:" ·"; color:var(--ink-3); font-weight:400}
  .shell > aside .foot{margin:0 0 0 auto; display:flex; align-items:center; gap:10px}
  .venue{margin:0; flex-direction:row; align-items:center; gap:6px}
  .venue label{display:none}
  .venue select{padding:5px 8px; font-size:12.5px}

  nav.menu{
    order:5; flex-basis:100%; flex-direction:row; gap:2px;
    overflow-x:auto; scrollbar-width:none; margin:0 -14px; padding:0 14px 9px;
  }
  nav.menu::-webkit-scrollbar{display:none}
  nav.menu a{white-space:nowrap; padding:6px 11px; font-size:13.5px}

  main{padding:20px 14px 60px}
  /* Верхняя полоса липкая и накрыла бы блок, к которому привёл якорь. */
  .panel:target, .note:target{scroll-margin-top:104px}
  .page-h{margin-bottom:16px}
  .find{padding:12px 13px}
  .find h3{font-size:14.5px}
  #todo{min-height:0}
}

/* Срок находки. У правил он разный — отток сравнивает два окна,
   остатки склада это снимок на дату, — и без подписи цифра читается
   неверно. Поэтому строка обязательная, но тихая: она уточняет
   заголовок, а не спорит с ним. */
.find .span{
  font-family:"JetBrains Mono",ui-monospace,monospace; font-size:11px;
  color:var(--ink-3); letter-spacing:.02em; margin-top:-2px;
}

/* ── коды подписки ──────────────────────────────────────────────────── */
.codes{margin-bottom:16px; display:flex; flex-direction:column; gap:9px}
.code-row{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  padding:9px 11px; border:1px solid var(--line); border-radius:var(--radius);
}
.code-row .code-what{margin-right:auto; min-width:0}
.code-row .code-what b{display:block; font-size:13.5px; font-weight:600}
.code-row .code-what span{font-size:12px; color:var(--ink-3)}
.code-row .btn{font-size:13px; padding:7px 14px; white-space:nowrap}
.codes .hint{font-size:12.5px; color:var(--ink-3); line-height:1.55; max-width:76ch}
.codes .hint a{overflow-wrap:anywhere}
