/* «Сегодня» по макету (упаковка Attio, решения Кирилла 19.10): страница по центру — заголовок с днём, справа «Моё / Команда»;
   ряд плиток сводки; блоки «значок · название · число · подсказка» со строками в рамке (.blk, .lbox, .lrow, .qline — общие
   с «Требуют разбора», sections.css). Пояснения записи — серой плашкой под строкой, по «почему?» или шеврону вопроса. */
.today { display: flex; flex-direction: column; gap: 22px; width: 100%; max-width: 1080px; margin: 0 auto; padding: 24px 24px 56px; }
.today > .hint, .today > .notice { margin: 0; }

/* Заголовок страницы: день команды и «N пунктов — …» со ссылкой «Как сюда попадают»; справа — «Моё N / Команда». */
.today-head { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 16px; }
.today-head-main { min-width: 0; }
.today-head h1 { font-size: 22px; font-weight: 600; letter-spacing: -.01em; line-height: 1.25; }
.today-head p { margin: 4px 0 0; color: var(--color-text-muted); font-size: 13px; line-height: 1.45; }
.today-head .today-rules-toggle { font-size: 13px; color: var(--color-text-muted); }
.today-head-right { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; max-width: 100%; margin-left: auto; }

/* Правила попадания — по ссылке в заголовке. */
.today-rules { display: grid; gap: 12px; padding: 12px 14px; border: 1px solid var(--color-border-soft); border-radius: var(--radius-card);
  background: var(--color-table-hover-bg); }
.today-rule-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; }
.today-rule { padding: 10px 12px; border: 1px solid var(--color-border-soft); border-radius: var(--radius-control); background: var(--color-bg-panel);
  font-size: 13px; }
.today-not-here { padding-top: 12px; border-top: 1px solid var(--color-line); }
.today-not-here p { margin: 6px 0 0; }

/* Сводка: кнопки «Просрочено N · Сегодня N · Ждёт ответа N · Встречи N» — к своему блоку. */
.today-summary { display: flex; flex-wrap: wrap; gap: 6px; }
.today-tile-n { font: 500 11px/1 var(--font-mono); color: var(--color-text-muted); font-feature-settings: var(--font-mono-features); }
.today-tile-overdue .today-tile-n { color: var(--color-status-danger); }

/* Блоки: заголовок — цель плитки (фокус с клавиатуры, отступ сверху при прокрутке). */
.today .blk { gap: 10px; }
.today .blk-title { scroll-margin-top: 16px; }
.today .blk-title:focus { outline: none; }
.today .blk-title:focus-visible { outline: 2px solid var(--color-focus-ring); outline-offset: 2px; border-radius: 4px; }
.today .lrow:hover { background: transparent; }
.today .lmeta { gap: 4px 6px; margin-top: 1px; }
.today .lmeta .badge { white-space: normal; overflow-wrap: anywhere; }
.today .today-sep { color: var(--color-text-muted); }
.today .link-button.today-why-toggle { margin-left: 2px; color: var(--color-text-muted); font-size: 12px; }
.today .ttl.hidden-title { font-style: italic; }
.today .lrow .right .primary, .today .lrow .right .secondary, .today .lrow .right .quiet,
.today .qacts .primary, .today .qacts .secondary, .today .qacts .quiet { min-height: 24px; padding: 0 8px; font-size: 12px; }
.today .lrow .right select { min-height: 28px; max-width: 260px; }

/* Сделка: плитка с инициалами компании и подчёркнутое название. */
.today-deal { display: inline-flex; align-items: center; gap: 7px; min-width: 0; max-width: 100%; }
.today-deal .record-logo.small { width: 16px; height: 16px; border-radius: 4px; font-size: 7.5px; }
.today-deal .deal-link { color: var(--color-text-primary); font-size: 13px; font-weight: 500; text-align: left; overflow-wrap: anywhere;
  text-decoration-color: var(--color-border-strong); }
.today-deal .deal-link:hover { text-decoration-color: var(--color-text-primary); }

/* Лид строки: кружок «выполнено», день встречи. */
.tcheck { display: grid; place-items: center; flex: none; width: 18px; height: 18px; padding: 0; border: 1.5px solid var(--color-border-strong);
  border-radius: 50%; background: var(--color-bg-panel); color: transparent; }
.tcheck .icon { width: 11px; height: 11px; stroke-width: 3; }
.tcheck:hover:not(:disabled), .tcheck:focus-visible { border-color: var(--color-status-success); color: var(--color-status-success); }
.datebadge { display: grid; place-items: center; align-content: center; gap: 3px; flex: none; width: 34px; height: 38px;
  border: 1px solid var(--color-border-soft); border-radius: 8px; background: var(--color-bg-panel); }
.datebadge small { color: var(--color-blue-ink); font: 600 9.5px/1 var(--font-mono); letter-spacing: .06em; font-feature-settings: var(--font-mono-features); }
.datebadge b { font-size: 15px; font-weight: 600; line-height: 1; }
/* Встреча календаря: плитка «день над временем» фиксированной ширины с запасом на «СЕГОДНЯ» и «09:00» (у шага это просто число дня):
   текст не вылезает из плитки и не налезает на название; название и пометки — своей колонкой, переносятся, а не растягивают строку. */
.cal-row .datebadge { box-sizing: border-box; width: 64px; height: 40px; padding: 0 4px; gap: 4px; }
.cal-row .datebadge small, .cal-row .datebadge b { max-width: 100%; white-space: nowrap; overflow: hidden; }
.cal-row .datebadge b { font-variant-numeric: tabular-nums; }
.cal-row .who { flex: 1 1 200px; }
.cal-row .lmeta > .link-button { flex: none; white-space: nowrap; }
/* Ручная встреча («Добавить прошедшую встречу»): итог и пометка «со слов» переносятся, вопрос о дубле — своей плашкой под названием. */
.manual-row .manual-summary, .manual-row .manual-mark { white-space: normal; overflow-wrap: anywhere; }
.manual-row .manual-dup { margin-top: 6px; font-size: 12.5px; line-height: 1.45; overflow-wrap: anywhere; }
.manual-row .right { flex-wrap: wrap; justify-content: flex-end; }

/* Срок справа: просрочен — красный, сегодня — жёлтый, позже и без срока — подписью. */
.today-due { display: inline-flex; align-items: center; gap: 4px; flex: none; color: var(--color-text-muted); font-size: 12.5px; white-space: nowrap; }
.today-due.over, .today-due.due-today { height: 20px; padding: 0 6px; border-radius: 5px; font-weight: 500; }
.today-due.over { background: var(--color-status-danger-bg); color: var(--color-status-danger); }
.today-due.due-today { background: var(--color-status-warning-bg); color: var(--color-status-warning); }
.today-due .icon { width: 11px; height: 11px; }

/* Ответственный в «Команде» — пилюля с инициалами и именем. */
.today-owner { display: inline-flex; align-items: center; gap: 6px; height: 24px; max-width: 100%; padding: 0 8px 0 2px; border: 1px solid var(--color-border-soft);
  border-radius: 999px; background: var(--color-bg-panel); color: var(--color-text-primary); font-size: 12.5px; font-weight: 500; white-space: nowrap; }
.today-owner .record-logo.small { width: 20px; height: 20px; font-size: 8.5px; }
/* Пункт другого участника, который администратор выполняет за него («за Имя»). */
.today-owner.on-behalf { border-color: var(--color-blue-ink); color: var(--color-blue-ink); }

/* Чипы вопросов по тону макета; «в Telegram» — малый. */
.today .badge.blue { border-color: var(--color-blue-border); background: var(--color-blue-bg); color: var(--color-blue-ink); }
.today .qline > .badge { flex: none; min-height: 20px; padding: 0 6px; font-size: 11.5px; }

/* Вопрос системы: строка с шевроном (раскрывает пояснения); текст вопроса и предложения шага — целиком (замечание Антона 26.10:
   где буквы не влезают, не прочитать, что выбираешь), без обрезки до двух строк. */
.today .qline { gap: 6px 10px; min-height: 48px; padding: 6px 12px 6px 6px; }
.today .qtoggle .badge { flex: none; }
.today .qtext { display: block; font-weight: 400; white-space: normal; overflow: visible; overflow-wrap: anywhere; line-height: 1.4; }
.today .qdeal { display: flex; min-width: 0; max-width: 280px; font-size: 13px; }
.today .qdeal .deal-link { white-space: normal; overflow-wrap: anywhere; }
/* Кнопки ответа не сжимаются и не обрезаются: подпись видна целиком, при нехватке места кнопки переходят на следующую строку. */
.today .qacts > *, .today .lrow .right > button, .today .lrow .right > a { flex: none; max-width: none; overflow: visible; text-overflow: clip; }
.today .qacts { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; min-width: 0; max-width: 100%; margin-left: auto; }
/* Раскладка вопроса без JS-замеров. Текст — гибкая колонка не уже порога (--today-text-min): если рядом не остаётся места для кнопок,
   они переносятся строкой ниже, а не сжимают текст в узкий столбец (замечание Кирилла 27.10 к PR #510). «Низ» строки (.qfoot:
   пометка «в Telegram», сделка, кнопки) в коротком вопросе прозрачен для раскладки — всё в одной строке, как раньше. */
.today { --today-text-min: 360px; --today-lead-indent: 38px; }
.today .qtoggle { flex: 1 1 var(--today-text-min); min-width: min(100%, var(--today-text-min)); }
.today .qfoot { display: contents; }
/* Длинный вопрос: сетка «текст | чип за Имя» сверху, под текстом — отдельная строка «сделка, кнопки», выровненная по тексту. */
.today .qline.qline-long { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; }
.today .qline-long > .qtoggle { grid-column: 1; grid-row: 1; align-items: flex-start; min-width: 0; }
.today .qline-long > .today-owner { grid-column: 2; grid-row: 1; margin-top: 5px; }
.today .qline-long > .qfoot { display: flex; flex-wrap: wrap; align-items: center; grid-column: 1 / -1; gap: 6px 10px; min-width: 0;
  padding-left: calc(var(--today-lead-indent) - 10px); }
.today .qline-long .qacts { justify-content: flex-start; margin-left: 0; }
/* Длинная строка пункта («Предлагаем закрыть», «Подтвердить», «Решить сегодня»): кнопки и срок — отдельной строкой под текстом,
   выровнены по тексту; чип «за Имя» прижат вправо в этой строке. */
.today .lrow.today-long > .right { flex: 1 1 100%; justify-content: flex-start; margin-left: var(--today-lead-indent); }
.today .lrow.today-long > .right > .today-owner { margin-left: auto; }

/* Пояснения: серая плашка под строкой; у вопроса — метка AI у основания, «попало сюда», поле ответа и комментарий. */
.today-why { display: grid; gap: 6px; flex-basis: 100%; min-width: 0; margin: 0 0 2px 38px; padding: 8px 10px; border-radius: 8px;
  background: var(--color-table-hover-bg); color: var(--color-text-secondary); font-size: 13px; }
.today-why[hidden] { display: none; }
.today .qmore.today-why { margin: 0 12px 10px 36px; }
.today-why p { margin: 0; line-height: 1.45; }
.today-why .pre { white-space: pre-line; overflow-wrap: anywhere; }
.today-why-ai { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }
.today-why-ai > div { display: grid; gap: 4px; min-width: 0; }
.today-origin { display: inline-flex; align-items: center; flex: none; height: 18px; padding: 0 5px; border-radius: 4px; background: var(--color-signal-soft);
  color: var(--color-signal-ink); font: 500 10.5px/1 var(--font-mono); letter-spacing: .04em; text-transform: uppercase; white-space: nowrap; font-feature-settings: var(--font-mono-features); }
.today .today-reply { margin: 0; }
.today .today-reply textarea { min-height: 72px; background: var(--color-bg-panel); }
.today-comment > summary { width: fit-content; cursor: pointer; list-style: none; font-size: 12.5px; }
.today-comment > summary::-webkit-details-marker { display: none; }
.today-comment[open] > summary { margin-bottom: 8px; }
.today-comment .actions { margin-top: 8px; }

/* Свёрнутые блоки: «Незапланировано», «Источники без сделки», «Остальное», вопросы за пределом дня. */
.today-fold > summary { cursor: pointer; list-style: none; }
.today-fold > summary::-webkit-details-marker { display: none; }
.today-fold > summary .qchev { color: var(--color-text-muted); transition: transform .15s; }
.today-fold[open] > summary .qchev { transform: rotate(90deg); }
.today-fold[open] > summary { margin-bottom: 10px; }
.today-more { display: flex; align-items: center; gap: 12px; margin-top: 8px; }
.today .empty { margin: 0; }

@media (max-width: 768px) {
  /* Поля страницы — 16 px, как у остальных разделов на телефоне (макет). */
  .today { padding: 16px max(16px, env(safe-area-inset-right, 0px)) 40px max(16px, env(safe-area-inset-left, 0px)); }
  /* Телефон: шеврон и чип — строкой, текст вопроса — во всю ширину под ними (до четырёх строк, раскрытый — целиком). */
  .today .qtoggle { flex-basis: 100%; flex-wrap: wrap; row-gap: 4px; }
  .today .qtext { flex: 1 1 100%; padding-left: 22px; }
  .today .qdeal { flex: 1 1 auto; }
  .today .qmore.today-why { margin-left: 12px; }
  .today-why, .today-promises { margin-left: 0; }
  /* Разделитель «·» между сделкой и пометками на узком экране оставался бы один на строке при переносе. */
  .today .lmeta .today-sep { display: none; }
  /* Кнопки и срок — справа, как в макете (общее правило узкого экрана прижимает их влево). */
  .today .lrow .right { justify-content: flex-end; margin-left: auto; }
}
/* Узкий телефон (≤420 px): кнопки ответа — во всю ширину под текстом и сделкой, переносятся, а не сжимают текст. */
@media (max-width: 420px) {
  .today .qacts { flex: 1 1 100%; justify-content: flex-start; margin-left: 0; }
  .today .qline-long > .qfoot { padding-left: 0; }
  .today .lrow > .right, .today .lrow.today-long > .right { flex: 1 1 100%; justify-content: flex-start; margin-left: 0; }
}
/* Обещания сделки пометкой на строке шага (решение Кирилла 20.10): кнопка-пометка, раскрытый список под строкой. */
.today-promise-mark { display: inline-flex; align-items: center; gap: 5px; min-height: 20px; max-width: 100%; padding: 0 6px;
  border: 1px solid var(--color-status-warning-border); border-radius: var(--radius-chip); background: var(--color-status-warning-bg);
  color: var(--color-status-warning); font-size: 11.5px; font-weight: 500; text-align: left; cursor: pointer; }
.today-promise-mark > span { min-width: 0; overflow-wrap: anywhere; }
.today-promise-mark b { font-weight: 600; }
.today-promise-mark.over { border-color: var(--color-status-danger-border); background: var(--color-status-danger-bg); color: var(--color-status-danger); }
.today-promise-mark .qchev { transition: transform .15s; }
.today-promise-mark[aria-expanded="true"] .qchev { transform: rotate(90deg); }
.today-promise-mark:focus-visible { outline: 2px solid var(--color-focus-ring); outline-offset: 1px; }
.today-promises { display: grid; flex-basis: 100%; min-width: 0; margin: 0 0 2px 38px; padding: 0; list-style: none;
  border: 1px solid var(--color-border-soft); border-radius: 8px; }
.today-promises[hidden] { display: none; }
.today-promise { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; min-width: 0; padding: 8px 10px; font-size: 13px; }
.today-promise + .today-promise { border-top: 1px solid var(--color-line); }
.today-promise > .icon { flex: none; color: var(--color-text-muted); }
.today-promise .who { display: grid; gap: 1px; flex: 1 1 200px; min-width: 0; overflow-wrap: anywhere; }
.today-promise .right { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 6px; margin-left: auto; }
.today-promise .right .secondary, .today-promise .right .quiet { min-height: 24px; padding: 0 8px; font-size: 12px; }

/* «Ждут нашего ответа»: слова клиента — строкой, сколько ждёт — жёлтым. */
.today-awaiting-row .today-quote { white-space: normal; overflow-wrap: anywhere; }
.today-wait { color: var(--color-status-warning); font-size: 12.5px; font-weight: 500; }
.today .today-awaiting-row .right .secondary { display: inline-flex; align-items: center; gap: 5px; text-decoration: none; }

/* Обсуждения команды «к какой сделке?»: выбор другой сделки в пояснении (today-rows.ts, teamQuestion). */
.today-team-other { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }
.today-team-other select { min-width: 0; max-width: 100%; }

/* Вид предложения «Предлагаем закрыть» (замечание Антона 26.10): значок и цвет по исходу — отказ, нет ответа, не сделка. */
.today .ev-ic.closing-lost { background: var(--color-status-danger-bg); color: var(--color-status-danger); }
.today .ev-ic.closing-no_response { background: var(--color-status-warning-bg); color: var(--color-status-warning); }
.today .ev-ic.closing-not_a_deal { background: var(--color-blue-bg); color: var(--color-blue-ink); }
.today .today-closing-row .ttl { overflow-wrap: anywhere; }

/* Предложение значения поля: название поля и значение — целиком, под ним — что в карточке сейчас. */
.today .today-state-title { white-space: normal; overflow-wrap: anywhere; }
.today .today-state-who, .today .today-state-now, .today .today-state-effect, .today .today-state-refuted { max-width: 100%; color: var(--color-text-muted); font-size: 12.5px; overflow-wrap: anywhere; }

.today .today-state-refuted { color: var(--color-status-warning); }

/* «Фоллоуапы аутрича»: свёрнутый раздел, число и подсказка в заголовке. */
.today .today-followups > summary .blk-hint { overflow-wrap: anywhere; }
