/* Система оформления сайта (Аня 16.10.2026): ФОРМЫ, КНОПКИ, КАРТОЧКИ, СПИСКИ, МЕНЮ. Значения только из tokens.css.
   Подключается на всех страницах (основные: перед site.css; отдельные: уборщик, Rupuni, приглашение, публичные, вход) ссылкой /static/system.css?v=версия.
   site.css и blocks.css задают только раскладку и частности. */
/* ===== ОСНОВА ОТДЕЛЬНЫХ СТРАНИЦ (Аня 16.10.2026): у страниц без site.css (кабинет уборщика .clpage, анкета кандидата .sfpage, приглашение .invpage,
   публичные страницы и коллекции .pub, протокол для собственников .crpage) у <body> класс solo: шрифт, фон и цвет текста те же, что у основных страниц.
   Их кнопки, поля, карточки и строки - из разделов ниже (селекторы вписаны в списки разделов), в blocks.css у них только раскладка. ===== */
body.solo{margin:0;background:var(--bg);color:var(--ink);font:15px/1.45 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-variant-numeric:tabular-nums}
body.solo *,body.solo *::before,body.solo *::after{box-sizing:border-box}
/* ===== END ОСНОВА ===== */
/* 12.10, Аня: место под полосу прокрутки всегда занято, иначе при раскрытии блока, когда страница становится выше окна, всё съезжает влево на её ширину */
html{scrollbar-gutter:stable}
/* Аня 11.10.2026: один вид ссылок на всём сайте (цвет не от темы пространства, в сером Saint Michel иначе не видно): зелёная полужирная, без подчёркивания, при наведении подчёркнута.
   :where() даёт нулевой вес, поэтому ссылки и кнопки со своими стилями не меняются; ловит только те, что были синими по умолчанию браузера. */
:where(a,a:visited){color:var(--link);font-weight:600;text-decoration:none}:where(a:hover){text-decoration:underline}
/* ===== ФОРМЫ (Аня 16.10.2026): весь вид полей ввода только здесь, размеры и цвета из tokens.css (--field-*, --focus-ring, --check-*, --label-*).
   Поле в одну строку той же высоты, что кнопка (32), в строке списка - как маленькая кнопка (26): при нажатии кнопок рядом ничего не прыгает.
   Тонкая рамка --line2, угол --r, белый фон, без теней.
   1 поля: текст, число, дата, время, адрес, почта, поиск, пароль, выпадающий список; многострочное той же формы, высоту не задаём
   2 наведение, фокус (одно кольцо вместо рамки браузера), выключено, ошибка, подсказка в пустом поле   3 маленькое поле в строке списка
   4 флажки и переключатели   5 подписи полей
   Правила с нулевым весом (:where): поле с особым видом (правка названия прямо в строке, ползунки, выбор цвета, выбор файла) задаёт его своим правилом.
   Новых видов не заводить: в остальных правилах у полей только раскладка (ширина, место, отступ снаружи). Меню слева (.sidenav) - отдельный блок, здесь его нет. ===== */
/* 1 поля */
:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=submit],[type=button],[type=reset],[type=image],[type=hidden]),select:not([multiple],[size]),textarea):where(:not(.sidenav *,.nvprev *)){
  box-sizing:border-box;height:var(--field-h);min-height:var(--field-h);padding:0 var(--field-px);vertical-align:middle;   /* min-height: в столбце flex поле не сжимается */
  font:inherit;font-size:var(--field-fs);font-weight:normal;color:var(--ink);
  background:var(--field-bg);border:var(--bw) solid var(--field-line);border-radius:var(--r);box-shadow:none}
:where(textarea):where(:not(.sidenav *,.nvprev *)){height:auto;min-height:auto;padding:var(--field-py) var(--field-px)}
/* 2 наведение, фокус, выключено, ошибка, подсказка */
:where(input,select,textarea):where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],.sidenav *,.nvprev *)):where(:hover){border-color:var(--field-line-hover)}
:where(input,select,textarea):where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],.sidenav *,.nvprev *)):where(:focus){border-color:var(--field-focus);box-shadow:var(--focus-ring);outline:none}
:where(input,select,textarea):where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],.sidenav *,.nvprev *)):where(:disabled){background:var(--field-off-bg);color:var(--faint);cursor:not-allowed}
:where(input,select,textarea):where(:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],.sidenav *,.nvprev *)):where([aria-invalid=true],:user-invalid){border-color:var(--field-err)}
:where(input,textarea)::placeholder{color:var(--faint);opacity:1}   /* 18.09: контраст подсказки в поле не ниже WCAG AA (было 4.2-4.6, стало 5.3-5.7 : 1) */
/* 3 маленькое поле в строке списка: повтор задачи, роль в окне «Поделиться», раздел документа, канал письма */
.recrow input,.shbox select.shr,.shacc select.shrole,.shspline select,.docsecw select,.msgvia select{height:var(--field-h-s);min-height:var(--field-h-s);padding:0 var(--field-px-s);font-size:var(--field-fs-s)}
/* 4 флажки и переключатели: не меньше 16px (18.09: были 13px в выборе сводок), цвет отметки - цвет пространства */
:where(input[type=checkbox],input[type=radio]){width:var(--check);height:var(--check);min-width:var(--check);min-height:var(--check)}
:where(input[type=checkbox],input[type=radio]):where(:not(.sidenav *,.nvprev *)){accent-color:var(--check-col)}
/* 5 подписи полей (не у флажков: там подпись - обычный текст) */
:where(label:not(:has(input[type=checkbox],input[type=radio]),.btn,.uiact,.newbtn)):where(:not(.sidenav *,.nvprev *)){font-size:var(--label-fs);font-weight:var(--label-fw);color:var(--dim)}
/* на телефоне шрифт в поле 16px: иначе телефон увеличивает страницу при вводе */
@media (pointer:coarse){:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color]),select,textarea):where(:not(.sidenav *,.nvprev *)){font-size:var(--field-fs-touch)}}
/* ===== END ФОРМЫ ===== */

/* ===== КНОПКИ (Аня 15.10.2026): весь вид кнопок только здесь, все значения из tokens.css (--btn-*, --chip-*, --sbtn-*, --ico-*, --add-*).
   Тонкая линия, углы чуть скруглены, пастель, без теней. В остальных правилах у кнопок только раскладка (отступы, место, ширина).
   Новых видов не заводить: новой кнопке дать один из классов ниже (или вписать её селектор в нужный список здесь).
   1 обычная .btn (32)   2 главная .btn.main (32)   3 опасная .btn.del   4 фильтр-переключатель (28), выбранный .on
   5 сегменты «Вид:» (32)   6 маленькая в строке списка (26)   7 значок-действие (квадрат 28, значок 16)   8 круглая «+» (32)   9 кнопка-ссылка
   Меню слева (.sidenav) - раздел «МЕНЮ». ===== */
/* 1 обычная */
.btn,.newbtn:not(:where(.sidenav *,.nvprev *)),.devjrbtn,.cexp,.ftoggle,.syntoast button,#pop .grpnew button,.headeraction,
.dcbar button,.mqfl button,.mqui .mqb,#fbw button,.prcnew button,.shbox .sha button{
  box-sizing:border-box;display:inline-block;text-align:center;vertical-align:middle;
  min-height:var(--btn-h);padding:var(--btn-py) var(--btn-px);margin:0;
  font:inherit;font-size:var(--btn-fs);line-height:var(--btn-lh);font-weight:var(--btn-fw);text-decoration:none;text-shadow:none;
  background:var(--card);border:var(--bw) solid var(--line2);border-radius:var(--btn-r);color:var(--ink);box-shadow:none;filter:none;cursor:pointer}
.btn:hover,.newbtn:not(:where(.sidenav *,.nvprev *)):hover,.devjrbtn:hover,.cexp:hover,.ftoggle:hover,.syntoast button:hover,#pop .grpnew button:hover,.headeraction:hover,
.dcbar button:hover,.mqfl button:hover,.mqui .mqb:hover,#fbw button:hover,.prcnew button:hover,.shbox .sha button:hover{
  background:var(--n2);border-color:var(--n5);color:var(--ink);text-decoration:none}
.btn:focus-visible,.newbtn:focus-visible,.tagbtn:focus-visible,.uiact:focus-visible,.uiadd:focus-visible{outline:var(--bw2) solid var(--gold-line);outline-offset:1px}
/* 2 главная: пастельная заливка выбранного/главного (у пространства своя гамма через --gold-*) */
.btn.main,.newbtn.big:not(:where(.sidenav *,.nvprev *)),.cexp,.syntoast button,#pop .grpnew button,.headeraction,.prcnew button,.shbox .sha button{background:var(--gold-bg);border-color:var(--gold-line);color:var(--gold-ink);font-weight:var(--btn-fw-main)}
.btn.main:hover,.newbtn.big:not(:where(.sidenav *,.nvprev *)):hover,.cexp:hover,.syntoast button:hover,#pop .grpnew button:hover,.headeraction:hover,.prcnew button:hover,.shbox .sha button:hover{background:var(--gold-bg);border-color:var(--n5);color:var(--gold-ink)}
/* 3 опасная (удалить, выйти) */

.btn.del:hover{background:var(--red-1);border-color:var(--red-3);color:var(--hot)}
/* квадратные кнопки со знаком (‹ › ↻ 🎤): та же обычная, ширина = высоте */
.dayarrow,.dayrefresh,.headeraction,.spcbud .btn{display:inline-flex;align-items:center;justify-content:center;width:var(--btn-h);min-width:var(--btn-h);padding:0;font-size:var(--btn-glyph)}
.headeraction svg,.appsharebtn .ico{width:var(--btn-glyph);height:var(--btn-glyph)}
/* 4 фильтр-переключатель; выбранный = пастельная заливка */
.tagbtn,.dvby,.expbar button,.mpbox .mpar,#fbw .fbrow button,.clpage .clcur{
  box-sizing:border-box;display:inline-block;vertical-align:middle;
  min-height:var(--chip-h);padding:var(--chip-py) var(--chip-px);margin:0;
  font:inherit;font-size:var(--chip-fs);line-height:var(--chip-lh);font-weight:400;text-decoration:none;
  background:var(--card);border:var(--bw) solid var(--line2);border-radius:var(--btn-r);color:var(--ink);box-shadow:none;cursor:pointer}
.tagbtn:hover,.dvby:hover,.expbar button:hover,.mpbox .mpar:hover,#fbw .fbrow button:hover,.clpage button.clcur:hover{background:var(--n2);border-color:var(--n5)}
.tagbtn.on,.dvby.on,.mpbox .mpar[aria-expanded=true],.clpage .clcur.on{background:var(--gold-bg);border-color:var(--gold-line);color:var(--gold-ink)}

/* 5 сегменты «Вид:» (вкладки вида, ☰/▦): кнопки вплотную, общая рамка, выбранная пастельная */
.tktabs>a,.dvsec>button,.dvtog button,.mkseg button{
  box-sizing:border-box;display:inline-block;text-align:center;vertical-align:middle;
  min-height:var(--btn-h);padding:var(--btn-py) var(--seg-px);margin:0;
  font:inherit;font-size:var(--seg-fs);line-height:var(--btn-lh);font-weight:var(--btn-fw);text-decoration:none;white-space:nowrap;
  background:var(--card);border:var(--bw) solid var(--line2);border-radius:0;color:var(--dim);box-shadow:none;cursor:pointer}
.tktabs>a+a,.dvsec>button+button,.dvtog button+button,.mkseg button+button{border-left:0}
.tktabs>a:first-of-type,.dvsec>button:first-of-type,.dvtog button:first-of-type,.mkseg button:first-of-type{border-radius:var(--btn-r) 0 0 var(--btn-r)}
.tktabs>a:last-of-type,.dvsec>button:last-of-type,.dvtog button:last-of-type,.mkseg button:last-of-type{border-radius:0 var(--btn-r) var(--btn-r) 0}
.tktabs>a:hover,.dvsec>button:hover,.dvtog button:hover,.mkseg button:hover{background:var(--n2);color:var(--ink);text-decoration:none}
.tktabs>a.on,.dvsec>button.on,.dvtog button.on,.mkseg button.on{background:var(--gold-bg);color:var(--gold-ink);font-weight:var(--btn-fw-main)}
/* 6 маленькая в строке списка */
.newbtn.ics,.dvgrp,.dprb,.fbchip,.dashsec h2 .daynavs a,#aqw .aqh button,.pub .hbtake{
  min-height:var(--sbtn-h);padding:var(--sbtn-py) var(--sbtn-px);font-size:var(--sbtn-fs);line-height:var(--sbtn-lh);font-weight:var(--btn-fw)}
.dvgrp,.dprb,.fbchip,.dashsec h2 .daynavs a,#aqw .aqh button,.pub .hbtake{box-sizing:border-box;display:inline-block;text-align:center;vertical-align:middle;font-family:inherit;
  background:var(--card);border:var(--bw) solid var(--line2);border-radius:var(--btn-r);color:var(--ink);box-shadow:none;cursor:pointer}
.dvgrp:hover,.dprb:hover,.fbchip:hover,.dashsec h2 .daynavs a:hover,#aqw .aqh button:hover,.pub .hbtake:hover{background:var(--n2);border-color:var(--n5)}
.fbchip.on,.pub .hbtake.done{background:var(--gold-bg);border-color:var(--gold-line);color:var(--gold-ink)}
/* 7 значок-действие: квадрат 28 без рамки, значок 16, цвет --ico-col */
.uiact,.uicopy,.dashup,.shline .shacc,.shline .shrej,.undel.tdel,.undel.bgup,.undel.cdelb,.undel.cdel,.mldel,#fbw button.fbx,#aqw .aqh button.aqx,.clpage .clic,.clpage .cldet>summary{
  box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;flex:none;
  width:var(--ico-box);height:var(--ico-box);padding:0;
  font:inherit;font-size:var(--ico);line-height:1;font-weight:400;text-decoration:none;
  background:none;border:0;border-radius:var(--btn-r);color:var(--ico-col);box-shadow:none;cursor:pointer;-webkit-tap-highlight-color:transparent}
.uiact .ico,.uiact .lk,.uicopy .ico{width:var(--ico);height:var(--ico);flex:none}
.uiact:hover,.uicopy:hover,.dashup:hover,.shline .shacc:hover,.shline .shrej:hover,.undel.tdel:hover,.undel.bgup:hover,.undel.cdelb:hover,.undel.cdel:hover,.mldel:hover,#fbw button.fbx:hover,#aqw .aqh button.aqx:hover,.clpage .clic:hover,.clpage .cldet>summary:hover{background:var(--n2);color:var(--ink);text-decoration:none}
.uiact.uidel:hover,.undel.tdel:hover,.undel.cdelb:hover,.undel.cdel:hover,.mldel:hover,.shline .shrej:hover,.clpage .clic.del:hover{background:var(--red-1);color:var(--hot)}
.uiact.ok,.uiact.done,.shline .shacc,.clpage .clic.ok{color:var(--gain,var(--green-5))}
@media (pointer:coarse){.uiact,.uicopy,.clpage .clic,.clpage .cldet>summary{width:var(--ico-box-touch);height:var(--ico-box-touch)}}
/* 8 круглая «+» (добавить): пастельный круг */
.uiaddw .uiadd{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;flex:none;
  width:var(--add-h);height:var(--add-h);margin:0;padding:0;font:inherit;font-size:var(--btn-fs);font-weight:400;
  background:var(--gold-bg);border:var(--bw) solid var(--gold-line);border-radius:var(--r-round);color:var(--gold-ink);box-shadow:var(--shadow-s);cursor:pointer;-webkit-tap-highlight-color:transparent}
.uiaddw .uiadd:hover{background:var(--n3);border-color:var(--n5)}
.uiaddw .uiadd .ico{width:var(--add-ico);height:var(--add-ico);margin:0;color:var(--gold-ink)}
/* 9 кнопка-ссылка: текст без рамки (второстепенное действие в строке) */
.undel.akdeny{font:inherit;font-size:var(--sbtn-fs);background:none;border:0;padding:0;color:var(--dim);text-decoration:underline;cursor:pointer}

/* ===== КАРТОЧКИ (Аня 15.10.2026): весь вид карточек (блоков с рамкой и фоном) только здесь, размеры из tokens.css (--card-*, --pop-pad).
   Белая, тонкая линия --line, угол --r, без тени. Вариант задаётся переменными у самой карточки, а не новым оформлением:
   --k-bg фон, --k-line рамка и линия под шапкой, --k-head-bg фон шапки, --k-row фон строк задач.
   1 вид всех карточек   2 отступ внутри (обычный, пункт списка, большой, меню)   3 шапка и заголовок   4 вложенная (--sub-bg)
   5 выделенная (--gold-*: цвет пространства)   6 квадранты задач (--qN-*) и другие цветные   7 окна и меню (+ --shadow-pop)   8 интервалы между карточками
   Новых видов не заводить: новой карточке вписать её селектор в нужные списки здесь. В остальных правилах у карточек только раскладка.
   Меню слева (.sidenav) - раздел «МЕНЮ»; выпадающим меню (.uiaddm, .fmenu) здесь только форма. ===== */
/* 1 вид всех карточек (у каждой свои значения переменных по умолчанию, чтобы вложенная не брала цвет внешней) */
.cell,.tvq,.tvcol,.tvnd,.tvc,.daysection,.daysetup,.dayprojects,.dashsec,.dashsp,.dayspbox,.crd,details.mpbox,.mpcard,.mpbox .mpgrp,.mpbox .mppan,
details.prbil,.prwrap .prbins,.prow,.prinvl,.dmrbox,.pmtbox,.propage .grp,.login,.login .opt,.nvprev,body .frows .tagbar.fgrp,.tpanel,.linksbox,.synpanel,
.depbox,.setbox,.subblock,.spmvpop,.newdlg .ngrp,.pcatlist>li.catrow,
.thead,.subhead,.chat,.docs,.deplist,.synpicker,.rgcard,.chcard,.clcard,.lcard,.aptcard,.card,.cal,.pfself,.pfest,.prchat,.crtile,.crbox,.gnt,
.mqwrap .mqui,.mqlink,.humeditf,.hshleft,.impdlg .impatt,.clbox,.rules,.mlst,.dmrall,.pnitem,.synrow,.mpbox .mpmoves,.plrow,
.dcsec[data-dv=tiles] .dclist>.dcrow,.dcsec[data-dv=tiles] .dcw,body.fmt .dcsecs>details.dcsec:not(.fmcur),
#pop,.dlg,.newdlg,.status,.syntoast,.impm,#fbw,#aqw,.shpop,.shbox,#mktool,#mkpop,.fmenu,.uiaddm,.upw,.tpayf,.dcbar,.dcmvm,.shlist,.shhbox>div,.mqinfo,#livex .lxw,#livetip,.appsharedlg,
.sfpage main,.sfpage fieldset,.sfpres,.clpage .clhero,.pub .feat,.pub .who,.pub .legal .blk,.pub .band,.pub .hbcard,.pub .hbl,.hbplaces,.crpage main{
  --k-bg:var(--card);--k-line:var(--line);--k-head-bg:transparent;
  box-sizing:border-box;background:var(--k-bg);border:var(--bw) solid var(--k-line);border-radius:var(--r);box-shadow:none}
/* 2 отступ внутри: обычный */
.daysetup,.dayprojects,.dashsec,.dayspbox,.mpbox .mpgrp,.mpbox .mppan,.dmrbox,.pmtbox,.login .opt,.nvprev,.tpanel,.linksbox,.synpanel,.depbox,.setbox,.subblock,.spmvpop,.sfpage fieldset,.sfpres,.clpage .clhero,.pub .hbcard{padding:var(--card-pad)}
/* пункт списка: пространство на главной, задача в ленте и канбане, подрядчик, счёт, категория */
.dashsp,.tvc,.prow,.prinvl,.prwrap a.prbins,.pcatlist>li.catrow{padding:var(--card-pad-s)}
/* большой: окно, форма входа, группа профиля */
.propage .grp,.login,.dlg,.newdlg,#fbw,#aqw,.shbox,.sfpage main,.crpage main{padding:var(--card-pad-lg)}
/* меню */
#pop,.impm,.shpop,#mktool,#mkpop,.uiaddm,.fmenu,.hbplaces{padding:var(--pop-pad)}
/* карточка с шапкой: отступ у шапки и содержимого, у самой карточки нет */
.cell,.tvq,.tvcol,.tvnd,.daysection,details.crd,details.mpbox,details.prbil,.prwrap details.prbins{padding:0}
/* 3 шапка: отступ, фон варианта (обычно нет), линия под шапкой; у свёрнутой линии нет */
.cell>header,.tvq>header,.tvcol>header,.tvnd>summary,.daysection>h2,.daysection>summary,details.crd>summary,details.mpbox>summary,details.prbil>summary,.prwrap details.prbins>summary,.rules>header{
  padding:var(--card-head-pad);background:var(--k-head-bg);border-radius:var(--r) var(--r) 0 0}
.cell:not(.wclosed)>header,.tvq>header,.tvcol>header,.daysection>h2,details.daysection[open]>summary,.tvnd[open]>summary,details.crd[open]>summary,
details.mpbox[open]>summary,details.prbil[open]>summary,.prwrap details.prbins[open]>summary,.rules>header{border-bottom:var(--bw) solid var(--k-line)}
/* заголовок карточки: один размер и вес, цвет текста */
.cell>header .cellname,.tvq>header,.tvcol>header,.tvnd>summary,.daysection>h2,.daysection>summary,.crd>summary .crh,details.mpbox>summary,details.prbil>summary,
.prwrap .prbins .crh,.dash .dashsec>h2,.propage .grp h2,.dlg h2,.newdlg h2,.daysetup>summary,.dayprojects>summary{
  font-size:var(--card-title-fs);font-weight:var(--card-title-fw);color:var(--ink);letter-spacing:0;text-transform:none}
/* 4 вложенная и второстепенная: светлый фон */
.mpcard,.mpbox .mpgrp,.prinvl,.login .opt,.nvprev,.dayspbox,body .frows .tagbar.fgrp,.subblock,.newdlg .ngrp,
.cell.waitcell,.cell.donecell,.cell.dvfixcell,.tvcol.st-paused,.tvcol.st-done{--k-bg:var(--sub-bg)}
/* 5 выделенная: раскрывающиеся блоки (заметки, документы, клиенты, деньги, подрядчики), цвет пространства через --gold-* */
.crd,details.mpbox,details.prbil,.prwrap .prbins,.prow,.pcatlist>li.catrow,.dmrbox,.pmtbox,.depbox,.setbox,.pfest,.pnitem,.synrow,.clpage .clhero,.pub .band{--k-bg:var(--gold-bg);--k-line:var(--gold-line)}
.crd.crfuture,.crd.crnext,.mpbox .mpcard.mpk-own{--k-bg:var(--card)}   /* будущее собрание, ближайшее собрание, свой кошелёк */
.crd.pnote,body.fmt .dcsecs>details.dcsec:not(.fmcur){--k-bg:var(--card);--k-line:var(--line)}   /* заметка; папка-плитка в документах */
.prow.pquote{--k-bg:var(--sub-bg);--k-line:var(--line)}   /* смета, ещё не подрядчик */
/* 6 квадранты задач: рамка, шапка, строки */
.cell.i-high.u-high,.tvq.q1{--k-line:var(--q1-line);--k-head-bg:var(--q1-bg);--k-row:var(--q1-row)}
.cell.i-high.u-low,.tvq.q2{--k-line:var(--q2-line);--k-head-bg:var(--q2-bg);--k-row:var(--q2-row)}
.cell.i-low.u-high,.tvq.q3{--k-line:var(--q3-line);--k-head-bg:var(--q3-bg);--k-row:var(--q3-row)}
.cell.i-low.u-low,.tvq.q4{--k-line:var(--q4-line);--k-head-bg:var(--q4-bg);--k-row:var(--q4-row)}
.cell:is(.i-high,.i-low):is(.u-high,.u-low) li.t:not(.drop-in,:hover){background:var(--k-row)}
.tvq{background:var(--k-row,var(--k-bg))}
/* другие цветные: повторяющиеся задачи, просрочено, срочно, в работе, банковский счёт; ожидаемые деньги пунктиром */
.cell.recurcell{--k-bg:var(--rec-bg);--k-line:var(--rec-line)}
.daysection.overdue{--k-head-bg:var(--hot-bg)}
.daysection.urgent{--k-head-bg:var(--yellow-1)}
.tvcol.st-doing{--k-line:var(--cool);--k-head-bg:var(--cool-bg)}
.mpcard.mpk-bank{--k-bg:var(--cool-bg);--k-line:var(--blue-4)}
.rules{--k-head-bg:var(--gain-bg)}   /* правила: шапка зелёная */
#livetip{--k-bg:var(--yellow-1);--k-line:var(--yellow-3)}   /* подсказка «правка вживую» */
.mpbox .mpcard.mpk-owed,.mpbox .mpcard.plin,.mpbox .mpmoves,.plrow{--k-bg:var(--bg);--k-line:var(--n5);border-style:dashed}
/* 7 окна, всплывающие меню и сообщения: та же карточка + тень */
#pop,.dlg,.newdlg,.status,.syntoast,.impm,#fbw,#aqw,.shpop,.shbox,#mktool,#mkpop,.fmenu,.uiaddm,.upw,.tpayf,.dcbar,.dcmvm,.shlist,.shhbox>div,.mqinfo,#livex .lxw,#livetip,.hbplaces{box-shadow:var(--shadow-pop)}
/* 8 интервалы между карточками: крупные / пункты списка */
.grid,.dashcols,.dashcol,.mpbox .mpcards,.dcsecs,body.fmt .dcsecs{gap:var(--card-gap)}
.dashgrid,.crlist,.unotes .nfsecs,.prlist,.ifl,.tvl,.pgrows,.mpcards,.pcatlist{gap:var(--card-gap-s)}
/* ===== END КАРТОЧКИ ===== */

/* ===== СПИСКИ (Аня 15.10.2026): весь вид строк списков и таблиц только здесь, размеры из tokens.css (--row-*, --fs-*).
   Строка внутри карточки без своей рамки, фона, тени и углов; между строками тонкая линия --line (у первой нет), при наведении фон --row-hover.
   1 строки   2 заголовок строки   3 подпись и мета серым, мелкая подпись, просрочено --hot   4 значки и аватары в строке (--row-mark)
   5 таблицы   6 сообщения чата. Пункты-карточки (пространства на главной, канбан, подрядчики) берут здесь только шрифты.
   Шрифты в списках только из шкалы --fs-xs/s/m/l/xl. Новых видов не заводить: новой строке вписать её селектор в нужные списки здесь.
   В остальных правилах у строк только раскладка; состояния (выбрана, перетаскивается, ждёт, повторяющаяся, срочная полоса слева) остаются там. ===== */
/* 1 строки: задачи и подзадачи, главная, «Сегодня», категории, журнал времени, счета, настройки, история, документы, правила */
li.t,.subl li.sub,.dashlist>li,.dmsp,.shitem,.dayitem,.catlist:not(.pcatlist)>li.catrow,.tlrow,.prinvr,.spcfg li,ul.hist>li,.dcrow:not([data-dv=tiles] *),li.dvgh{
  box-sizing:border-box;padding:var(--row-py) var(--row-px);border:0;border-radius:0;background:none;box-shadow:none;font-size:var(--row-fs)}
li.t+li.t,.subl li.sub+li.sub,.dashlist>li+li,.dmsp+.dmsp,.shitem+.shitem,.dayitem+.dayitem,.catlist:not(.pcatlist)>li.catrow+li.catrow,.tlrow+.tlrow,.prinvr+.prinvr,
.spcfg li+li,ul.hist>li+li,.dcrow:not([data-dv=tiles] *)+.dcrow,.dcw+.dcw>.dcrow:not([data-dv=tiles] *){border-top:var(--bw) solid var(--line)}
li.t:hover,.subl li.sub:hover,.dashlist>li:hover,.dmsp:hover,.shitem:hover,.dayitem:hover,.catlist:not(.pcatlist)>li.catrow:hover,.tlrow:hover,ul.hist>li:hover,.dcrow:not([data-dv=tiles] *):hover{background:var(--row-hover)}
/* пустой список: та же строка, текст как подпись */
.empty,.tvempty{padding:var(--row-py) var(--row-px)}
/* 2 заголовок строки */
li.t>.body .ti,.dashlist>li>a,.dmsp>a,.shti,.dayitem>a,.dct,.dashsp b,.tvt,.prn{font-size:var(--row-title-fs);font-weight:var(--row-title-fw);color:var(--ink)}
/* 3 подпись и мета: серым, меньше; мелкая подпись; просрочено и срочно */
.dashmeta,.dashday,.subn,.tld,.tlu,.tlt small,.dcn,.dcm,.prtr,.pry,.prl2,ul.hist .lt,ul.hist .lc,.mhead,.empty,.tvempty,.catrow small,.dvght{font-size:var(--row-meta-fs);color:var(--dim)}
.dmsp small,.dcm i,.tvchip,.spcdim,.ntf small{font-size:var(--fs-xs);color:var(--dim)}
.dashmeta .over,.subn .sdue.late,.dashsp .over{color:var(--hot)}
/* 4 аватары и значки в строке: один размер */
body :is(li.t,.subl li.sub,.dashlist>li,.dayitem,ul.hist>li,.tvc,.prow) .av:not(.av-l){width:var(--row-mark);height:var(--row-mark);font-size:var(--fs-xs)}
/* 5 таблицы: шапка мелким серым с линией --line2, строки с линией --line, у последней нет */
:is(.spctab,.dashtab,.spmlt,.ntf,.mltab,.otab,.apttable,.jtab,.dtab2,.toktab,.rpltab) :is(th,td){
  padding:var(--row-py) var(--row-px);border:0;border-bottom:var(--bw) solid var(--line);background:none;font-size:var(--row-fs);text-align:left;vertical-align:top}
:is(.spctab,.dashtab,.spmlt,.ntf,.mltab,.otab,.apttable,.jtab,.dtab2,.toktab,.rpltab) :is(thead th,tr:first-child>th){font-size:var(--row-meta-fs);font-weight:600;color:var(--dim);border-bottom-color:var(--line2)}
:is(.spctab,.dashtab,.spmlt,.ntf,.mltab,.otab,.apttable,.jtab,.dtab2,.toktab,.rpltab) tbody th{font-weight:600;color:var(--ink)}
:is(.spctab,.dashtab,.spmlt,.ntf,.mltab,.otab,.apttable,.jtab,.dtab2,.toktab,.rpltab) tr:last-child>:is(td,th){border-bottom:0}
:is(.spctab,.dashtab,.spmlt,.ntf,.mltab,.otab,.apttable,.jtab,.dtab2,.toktab,.rpltab) thead tr:last-child>th{border-bottom:var(--bw) solid var(--line2)}
/* 6 сообщения чата (без пузырей): промежуток, шапка как мета, текст обычный */
.msgs{gap:var(--row-gap)}
.mhead b{font-size:var(--row-meta-fs);font-weight:600;color:var(--ink)}
.mtext{font-size:var(--fs-m)}
/* ===== END СПИСКИ ===== */
/* ===== МЕНЮ (Аня 16.10.2026): весь вид меню и навигации только здесь, размеры из tokens.css (--nav-*).
   Пункт меню: белый, тонкая линия --line, угол --r, шрифт --nav-fs 500, при наведении фон --n1.
   Текущая страница видна рамкой --n7 и фоном --gold-bg, без тёмной заливки (Аня 18.09); рамка той же толщины, поэтому меню не прыгает (Аня 10.10).
   1 меню слева   2 пункт, подпункт, текущий   3 плашка пространства   4 низ меню   5 полоса пространств и закладок сверху
   6 вкладки страниц = сегменты из «КНОПКИ» 5   7 заголовок раздела с пояснением   8 выпадающие меню   9 телефон (до 700px)
   Новых видов не заводить: новому пункту меню дать класс «newbtn big», новой ссылке низа меню - «fbmenu», новому выпадающему меню - вписать его селектор в 8. ===== */
/* 1 меню слева: на компьютере прибито к левому краю, ширина --nav-w, прокрутка без полосы; страница и закладки сдвинуты на --nav-offset */
.sidenav{display:flex;flex-direction:column;gap:var(--nav-gap)}
.sidenav a{text-decoration:none}
.sidenav .srchbox{width:100%}
.sidenav input{font-size:var(--nav-fs)}
.sidenav .who{margin:0 0 4px;align-self:stretch}
body.tagged .sidenav .me{color:var(--dim)}
@media (min-width:701px){
body.hasnav>.sidenav{position:fixed;left:0;top:0;z-index:5;box-sizing:border-box;width:var(--nav-w);height:100vh;padding:var(--nav-pad);overflow-x:hidden;overflow-y:auto;scrollbar-width:none;
  background:var(--sub-bg);border-right:var(--bw) solid var(--line)}
body.hasnav>.sidenav::-webkit-scrollbar{display:none}
body.hasnav>.wrap,body.hasnav>.bmbar{margin-left:var(--nav-offset)}
}
/* 2 пункт меню (и его образец в настройках .nvprev); подпункт с отступом и мельче; текущий - рамка и пастельный фон */
.sidenav .newbtn.big,.nvprev a.newbtn.big{position:relative;display:block;box-sizing:border-box;width:100%;min-height:var(--nav-h);margin:0;padding:var(--nav-py) var(--nav-px);
  font:inherit;font-size:var(--nav-fs);line-height:var(--nav-lh);font-weight:var(--nav-fw);text-align:left;white-space:normal;text-decoration:none;
  background:var(--card);border:var(--bw) solid var(--line);border-radius:var(--r);color:var(--ink);box-shadow:none;cursor:pointer}
.sidenav .newbtn.big:hover{background:var(--n1);border-color:var(--line2);color:var(--ink);text-decoration:none}
.sidenav .newbtn.big.cur,.sidenav .newbtn.big.cur:hover{background:var(--gold-bg);border-color:var(--n7);font-weight:var(--nav-fw-cur)}
.sidenav .newbtn.big.navsub{margin-left:var(--nav-sub-indent);width:calc(100% - var(--nav-sub-indent));font-size:var(--nav-sub-fs)}
.sidenav .newbtn.big .ic,.sidenav .newbtn.big .tn{color:inherit}
.sidenav .newbtn.big>:is(svg,img){max-height:var(--nav-lh)}   /* значок не выше строки: пункты с картинкой той же высоты */
.sidenav .newbtn:not(.big){box-sizing:border-box;padding:var(--nav-foot-py) var(--nav-foot-px);font:inherit;font-size:var(--nav-foot-fs);background:var(--card);border:var(--bw) solid var(--line);border-radius:var(--r);color:var(--ink);cursor:pointer}
.sidenav .newbtn:not(.big):hover{background:var(--n1);border-color:var(--line2)}
.sidenav .newbtn.big.fszbox,.sidenav .newbtn.big.fszbox:hover{background:transparent;border-color:var(--line);cursor:default}   /* размер текста: не ссылка, без заливки */
.sidenav .privmark{position:absolute;right:7px;top:50%;transform:translateY(-50%);margin:0}   /* замок в меню не занимает места: кнопки те же, что в виде пользователя */
.nvprev a.newbtn.big{cursor:default}.nvprev a.newbtn.big.nvtog{padding-right:calc(var(--nav-px) + 22px);cursor:pointer}
/* 3 плашка пространства вверху меню: своя пастельная плашка, кнопка «выше», аватар, ⚙; с аватаром и без одна высота, поэтому пункты ниже стоят на месте */
.sidenav .sidetitle{box-sizing:border-box;display:flex;align-items:center;min-height:var(--nav-title-h);margin:0;padding:var(--nav-title-py) var(--nav-title-px);
  font-size:var(--nav-fs);line-height:var(--nav-lh);font-weight:var(--nav-fw-cur);color:var(--ink);
  background:var(--yellow-1);border:var(--bw) solid var(--yellow-3);border-radius:var(--r);cursor:default;user-select:text}
.sidenav .sidetitle .backbtn,.sidenav .sidetitle .spav{margin:0 6px 0 0}
.sidenav .sidetitle .spgear{margin-left:auto;padding-left:4px;font-size:var(--fs-m);font-weight:400;text-decoration:none;color:var(--dim)}
.sidenav .sidetitle .spgear:hover{color:var(--ink)}
.sidenav .sidepar{margin:-2px 4px 2px;font-size:var(--fs-s);line-height:1.3;color:var(--dim)}.sidenav .sidepar a{color:inherit;font-weight:600}
/* 4 низ меню: прижат вниз и виден при окне от 520 px (Аня 02.10: с закреплёнными делами меню длиннее, «О сайте» пропадал);
   ссылки низа - те же пункты, ниже и мельче; «Задать вопрос» и «Предлагаю улучшение» пастельно-жёлтые (и плавающие, где меню нет) */
.sidenav .sidefoot{margin-top:auto;display:flex;flex-direction:column;gap:var(--nav-foot-gap);padding-top:10px;border-top:var(--bw) solid var(--line);background:var(--sub-bg)}
@media (min-width:701px) and (min-height:520px){.sidenav .sidefoot{position:sticky;bottom:0}}
.fbmenu,.sidenav :is(.sideabout,.sideme){display:flex;align-items:center;gap:8px;box-sizing:border-box;width:100%;min-height:var(--nav-foot-h);margin:0;padding:var(--nav-foot-py) var(--nav-foot-px);
  font-size:var(--nav-foot-fs);line-height:1.25;font-weight:var(--nav-fw);text-decoration:none;
  background:var(--card);border:var(--bw) solid var(--line);border-radius:var(--r);color:var(--ink);cursor:pointer}
.fbmenu:hover,.sidenav :is(.sideabout,.sideme):hover{background:var(--n1);border-color:var(--line2);color:var(--ink);text-decoration:none}
.sidenav :is(.sideabout,.sideme):focus-visible{outline:var(--bw2) solid var(--gold-line);outline-offset:1px}
.sidenav .sideabout[aria-current],.sidenav .sideme.cur{background:var(--gold-bg);border-color:var(--n7);font-weight:var(--nav-fw-cur)}
.sidenav .sideme .av{width:20px;height:20px;font-size:9px;flex:none}
.fbmenu,#fbb.fbfloat,#aqb.fbfloat{background:var(--yellow-1);border:var(--bw) solid var(--yellow-3);color:var(--yellow-6);font-weight:var(--nav-fw)}
.fbmenu:hover,#fbb.fbfloat:hover,#aqb.fbfloat:hover{background:var(--yellow-2);border-color:var(--yellow-4);color:var(--yellow-6)}
#fbb.fbfloat,#aqb.fbfloat{border-radius:var(--r);font-size:var(--nav-foot-fs);box-shadow:var(--shadow-s)}
a.fbmenu.navcfg,a.fbmenu.navcfg:hover{background:var(--gold-bg);border-color:var(--line2);color:var(--ink)}   /* «Настроить меню» */
/* 5 полоса пространств и закладок над страницей: вкладки одного вида (прозрачные, при наведении фон --n1),
   текущее пространство или страница - как текущий пункт меню; цветной квадрат пространства (.tav) берёт цвет из данных (--bgc) */
.bmbar{border-bottom:var(--bw) solid var(--line)}
.bmbar .bm{border:var(--bw) solid transparent;border-radius:var(--r)}
.bmbar .bm a{box-sizing:border-box;min-height:calc(var(--nav-tab-h) - 2 * var(--bw));padding:var(--nav-tab-py) var(--nav-tab-px);font-size:var(--nav-tab-fs);line-height:var(--nav-lh);font-weight:var(--nav-fw);color:var(--ink)}
.bmbar .bm:hover{background:var(--n1);border-color:var(--line)}
.bmbar .bm.on,.bmbar .bm.on:hover{background:var(--gold-bg);border-color:var(--n7)}
.bmbar .bm.on a{font-weight:var(--nav-fw-cur)}
.bmbar .bmx{color:var(--faint)}.bmbar .bmx:hover{color:var(--hot)}
.bmbar .bmhint{font-size:var(--fs-xs);color:var(--faint)}
.tagcfg{box-sizing:border-box;height:var(--nav-tab-h);padding:0 var(--nav-tab-px);font-size:var(--nav-tab-fs);border-radius:var(--r);border:var(--bw) dashed var(--line2);color:var(--dim);text-decoration:none}
.tagcfg:hover{color:var(--ink);background:var(--n1)}
/* 6 вкладки страниц (.tktabs «Вид: Список | Календарь …»): вид задан в «КНОПКИ» 5 (сегменты), здесь только подпись */
.tktabs>.tkvl{font-size:var(--seg-fs);color:var(--dim)}
/* 7 заголовок раздела с пояснением (.xplh) и пояснение под заголовком (.xpl): везде один вид - линия слева, приглушённый текст (Аня 26.09) */
.xpl,.xplh{border-left:var(--bw2) solid var(--yellow-4);padding:1px 0 1px 12px;max-width:62em}
.xpl{margin:3px 0 14px;font-size:var(--fs-s);line-height:1.45;color:var(--dim)}
.xplh{margin:22px 0 12px}.xplh:first-child{margin-top:4px}
.xplh>h1,.xplh>h2,.xplh>h3,.xplh>.dch{margin:0;line-height:1.2}
.xplh>p{margin:3px 0 0;font-size:var(--fs-s);line-height:1.45;color:var(--dim);font-weight:400}
/* 8 выпадающие меню: форма из «КАРТОЧКИ» 7, пункты как строки «СПИСКИ» (без линий между ними), подпись группы мелкая серая */
.uiaddm,.fmenu,.hbplaces{color:var(--ink);font-size:var(--row-fs);line-height:1.3}
.uiaddm button,.fmenu button,.hbplaces button{display:flex;align-items:center;gap:8px;box-sizing:border-box;width:100%;margin:0;padding:var(--row-py) var(--row-px);min-height:var(--btn-h);
  font:inherit;font-size:var(--row-fs);font-weight:400;line-height:1.3;text-align:left;background:none;border:0;border-radius:var(--r);color:var(--ink);cursor:pointer}
.uiaddm button:hover,.uiaddm button:focus-visible,.fmenu button:hover,.fmenu button:focus-visible,.hbplaces button:hover,.hbplaces button:focus-visible{background:var(--row-hover);outline:0}
.uiaddm button .ico{width:var(--ico);height:var(--ico);flex:none;color:var(--dim)}
.uiaddh,.fmenu .fmh,.hbplaces b{padding:4px var(--row-px) 2px;font-size:var(--fs-xs);font-weight:400;color:var(--dim)}
/* 9 телефон: полоса сверху с кнопкой «Меню» (Аня 19.09), меню выезжает слева панелью, внизу ссылки в строку */
.mtopbar,.mscrim{display:none}
@media (max-width:700px){
.desktopaction{display:none}.mtopactions{display:inline-flex;margin-left:auto;flex:none}
html{scroll-padding-top:64px}   /* Аня 27.09: переход по якорю не прячет верх записи под липкой полосой «Меню» */
.mtopbar{display:flex;position:sticky;top:0;z-index:50;align-items:center;gap:12px;min-height:var(--nav-mtop-h);padding:5px 10px;background:var(--card);border-bottom:var(--bw) solid var(--line)}
.mburger{display:inline-flex;align-items:center;gap:8px;min-height:var(--nav-touch-h);padding:0 12px;font:inherit;font-size:var(--nav-fs);font-weight:var(--nav-fw-cur);
  background:var(--card);border:var(--bw) solid var(--line2);border-radius:var(--r);color:var(--ink);cursor:pointer}
.mburger:hover{background:var(--n1)}
.mburger svg{width:24px;height:24px}
.mtopbar .mtitle{min-width:0;font-size:var(--fs-l);font-weight:var(--nav-fw-cur);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mscrim{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:55}
body.menu-open .mscrim{display:block}
body.menu-open{overflow:hidden}
body.hasnav>.sidenav{position:fixed;top:0;left:0;bottom:0;z-index:60;box-sizing:border-box;width:84vw;max-width:340px;margin:0;padding:14px 12px;overflow-y:auto;
  background:var(--sub-bg);border:0;border-right:var(--bw) solid var(--line);box-shadow:var(--shadow-pop);transform:translateX(-108%);transition:transform .2s ease}
body.menu-open>.sidenav{transform:none}
.sidenav .sidefoot{flex-direction:row;flex-wrap:wrap;align-content:flex-start}
.sidenav .sidefoot>.fszbox,.sidenav .sidefoot>.devbox,.sidenav .sidefoot>.fbmenu{flex:1 1 100%}
.sidenav :is(.sideabout,.sideme){flex:1 1 0;width:auto;justify-content:center}
}
/* ===== END МЕНЮ ===== */
/* ===== ЧАТ (Аня 16.10.2026): весь вид сообщений обсуждений (дело, подрядчик, кандидат, клиент, сводка) только здесь, размеры из tokens.css (--msg-*, --row-*, --fs-*).
   Сообщение - пузырь в форме карточки: тонкая линия, угол --r, без тени; чужие белые (--card, --line), свои пастельные (--gold-bg, --gold-line), важное письмо жёлтое (--imp-*).
   Импорт из почты, WhatsApp, Телеграма - обычный пузырь автора, служебная строка «скопировано из…» сверху мелким серым, всегда видна (Аня 18.09); служебное (удалено, статус отправки, пусто) - --sub-bg и --fs-s.
   1 лента и сообщение (аватар --row-mark, промежуток --row-gap)   2 пузырь: чужой, свой, важное письмо, протокол, подсветка при переходе   3 имя и время --fs-s серым, текст --fs-m
   4 цитата и полоса ответа: линия слева --bw2 --line2, фон --sub-bg   5 реакции и «Ответить» под пузырём: маленькие плашки 26 как фильтр из «КНОПКИ» 4
   6 служебное   7 заголовок обсуждения = заголовок карточки, поле ввода = «ФОРМЫ» (здесь только место), над ним линия --line   8 обсуждения подзадач (короткие пузыри)
   Сам блок обсуждения - карточка из «КАРТОЧКИ». Новых видов не заводить: новому сообщению дать классы msg/bubble/mtext. В остальных правилах у чата только раскладка. ===== */
/* 1 лента и сообщение; свои справа без лица (класс mine ставит скрипт страницы) */
.msgs{display:flex;flex-direction:column;gap:var(--row-gap);margin:0 0 var(--row-gap)}
.msg{display:flex;gap:var(--msg-gap);align-items:flex-start}
.msg>.av{width:var(--row-mark);height:var(--row-mark);font-size:var(--fs-xs);flex:none}
.mbody{min-width:0;flex:0 1 auto;max-width:var(--msg-w)}
.msg.mine{flex-direction:row-reverse}
.msg.mine>.av{display:none}
.msg.mine .mbody{display:flex;flex-direction:column;align-items:flex-end}
/* 2 пузырь */
.msg .bubble,.subchats .smsg{display:inline-block;max-width:100%;box-sizing:border-box;padding:var(--msg-py) var(--msg-px);
  font-size:var(--fs-m);color:var(--ink);background:var(--card);border:var(--bw) solid var(--line);border-radius:var(--r);box-shadow:none}
.msg.mine .bubble{background:var(--msg-mine-bg);border-color:var(--msg-mine-line)}
.msg.mimp-on .bubble{background:var(--imp-bg);border-color:var(--imp-line)}   /* важное письмо, сохранённое в «Документы» (Аня 12.10) */
.msg.cr .mbody{padding:var(--msg-py) var(--msg-px);background:var(--gold-bg);border:var(--bw) solid var(--gold-line);border-radius:var(--r)}   /* протокол собрания */
.msg.flash .bubble{box-shadow:0 0 0 var(--bw2) var(--yellow-3)}   /* сообщение, к которому перешли по цитате */
/* 3 имя и время, текст */
.mhead{font-size:var(--fs-s);color:var(--dim)}
.mhead b{margin-right:6px;font-size:var(--fs-s);font-weight:600;color:var(--dim)}
.medited{margin-left:6px;font-style:italic}
.mtext{font-size:var(--fs-m);color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}
/* 4 цитата в пузыре и полоса «ответ на…» над полем ввода */
.mquote,.replybar{display:block;margin:0 0 6px;padding:var(--msg-q-py) var(--msg-px);font-size:var(--fs-s);color:var(--dim);text-decoration:none;
  background:var(--sub-bg);border:0;border-left:var(--bw2) solid var(--line2);border-radius:0 var(--r) var(--r) 0}
.mquote b,.replybar b{margin-right:5px;font-weight:600;color:var(--ink)}
.replybar{display:flex;align-items:center;gap:8px;margin:0}
.replybar[hidden]{display:none}
.replybar .rx{margin-left:auto;padding:0 4px;font-size:var(--fs-m);color:var(--faint);background:none;border:0;cursor:pointer}
.replybar .rx:hover{color:var(--ink)}
/* 5 реакции и «Ответить»: одна высота; невыбранная реакция бледная, с рамкой при наведении; с числом - плашка; своя - пастельная */
.mreact{display:flex;align-items:center;flex-wrap:wrap;gap:var(--msg-re-gap);margin-top:var(--msg-re-gap)}
.mre,.mrsum,.mreply{box-sizing:border-box;display:inline-flex;align-items:center;min-height:var(--msg-re-h);padding:0 var(--msg-re-px);margin:0;
  font:inherit;font-size:var(--msg-re-fs);line-height:1;color:var(--ink);background:none;border:var(--bw) solid transparent;border-radius:var(--btn-r);box-shadow:none;cursor:pointer}
.mre:not(.has),.mrsum{opacity:.4}
.mre:hover,.mrsum:hover,.mreply:hover{opacity:1;background:var(--n2);border-color:var(--n5)}
.mre.has{background:var(--card);border-color:var(--line2)}
.mre.on{background:var(--gold-bg);border-color:var(--gold-line);color:var(--gold-ink)}
.mre b{margin-left:3px;font-size:var(--fs-xs);font-weight:600;color:var(--dim)}
.mre.ro{cursor:default}
.mreply{margin-left:6px;color:var(--faint)}
.mrpick{display:inline-block;position:relative}
.mrpick>summary{list-style:none}.mrpick>summary::-webkit-details-marker{display:none}
.mrall{position:absolute;z-index:20;bottom:calc(var(--msg-re-h) + var(--msg-re-gap));left:0;display:flex;flex-wrap:wrap;gap:var(--msg-re-gap);width:var(--msg-re-pop-w);
  padding:var(--pop-pad);background:var(--card);border:var(--bw) solid var(--line2);border-radius:var(--r);box-shadow:var(--shadow-pop)}
.mrall .mre{opacity:1}
.uicopy.mcopy{margin-left:2px}
body.ro .mre,body.ro .mreply{pointer-events:none}
body.ro .mreply,body.ro .mre:not(.has),body.ro .mrpick{display:none}
/* 6 служебное: строка «скопировано из…» в пузыре, «Откуда сообщения» над лентой, удалённое, статус отправки, пусто, «новые» */
.msrc{margin:0 0 6px;padding:0 0 4px;font-size:var(--fs-s);line-height:1.4;color:var(--dim);border-bottom:var(--bw) solid var(--line)}
.chat>.msrc{margin:0 0 8px;padding-bottom:6px}
.msrc summary{cursor:pointer;list-style:none}.msrc summary::-webkit-details-marker{display:none}
.msrc .msi{margin-right:4px}
.msrc h3{margin:8px 0 4px;font-size:var(--fs-s)}
.msg.mgone .mhead b{color:var(--faint)}
.mgonetxt{display:inline-block;padding:var(--msg-py) var(--msg-px);font-size:var(--fs-s);font-style:italic;color:var(--faint);background:var(--sub-bg);border:var(--bw) solid var(--line);border-radius:var(--r)}
.mext{margin:3px 2px 0;font-size:var(--fs-xs);color:var(--dim)}.mext.ok{color:var(--gain)}.mext.err{color:var(--hot)}
.nochat{margin:0;font-size:var(--fs-s);color:var(--faint)}
.mnew{display:flex;align-items:center;gap:8px;font-size:var(--fs-xs);font-weight:600;color:var(--hot);scroll-margin-top:80px}
.mnew::before,.mnew::after{content:"";flex:1;border-top:var(--bw) solid var(--red-3)}
/* 7 заголовок обсуждения и поле ввода (вид поля - «ФОРМЫ»; .chatform - и формы добавления на других страницах, у них та же линия сверху) */
.chat>h2{display:flex;align-items:center;gap:7px;margin:0 0 8px;line-height:1.3;font-size:var(--card-title-fs);font-weight:var(--card-title-fw);color:var(--ink);letter-spacing:0;text-transform:none}
.chat>h2>.ico{display:none}
.chatform{display:flex;flex-direction:column;gap:8px;padding-top:var(--chatform-pt);border-top:var(--bw) solid var(--line)}
.chatform textarea{width:100%;min-height:70px;resize:vertical;box-sizing:border-box}
.chatform.crmode textarea{border-color:var(--gold-line);background:var(--sub-bg)}   /* пишется протокол */
/* 8 обсуждения подзадач на странице дела: заголовок подзадачи, короткие пузыри (вид - 2), «ещё» */
.subchats .snt{display:block;margin:0 0 4px;font-size:var(--fs-m);font-weight:600;color:var(--ink);text-decoration:none}.subchats .snt:hover{text-decoration:underline}
.subchats .smsg{display:block;margin:0 0 6px}
.subchats .smh{display:flex;gap:8px;align-items:baseline;font-size:var(--fs-s);color:var(--dim)}.subchats .smh b{font-weight:600;color:var(--dim)}
.subchats .smt{white-space:pre-wrap;line-height:1.45}
.subchats .smore>summary{margin:0 0 6px;font-size:var(--fs-s);color:var(--dim);cursor:pointer}
/* ===== END ЧАТ ===== */
/* ===== ТАБЛИЦЫ (Аня 16.10.2026): весь вид сложных таблиц только здесь, размеры из tokens.css (--row-*, --fs-*, --poll-*).
   Те же правила, что таблицы в «СПИСКИ» 5 (они задают и сравнение подрядчиков .bctab, страховки .instab, права .utab - это .dtab2):
   шапка --row-meta-fs 600 --dim с линией --line2, ячейки --row-py/--row-px с линией --line, без фона.
   1 таблицы, которых нет в «СПИСКИ»: опрос .ptab, сетка уборки .pgrid   2 первая колонка - заголовок строки: 600 --ink, фон --sub-bg
   3 строка-группа (раздел сравнения, раздел сетки): --gold-bg, 600 --gold-ink   4 мета в ячейке (дата, подробности, подпись под таблицей) --fs-s серым
   5 выделения пастелью из шкал: лучшая цена и лучший день --green-1/--green-6, «да» --green-2, «нет» --red-2, код APE подходит/нет --gain/--hot
   6 сетка опроса: дни - карточки, ответы - квадраты --poll-cell одного размера
   Новых видов не заводить: новой таблице дать класс dtab2 (или вписать в «СПИСКИ» 5). В остальных правилах у таблиц только раскладка (ширина, выравнивание, перенос). ===== */
/* 1 опрос и сетка уборки: те же ячейки */
.ptab{border-collapse:collapse}
.dtab2 td{color:var(--ink)}   /* текст ячейки чёрный, не цвет карточки пространства */
:is(.ptab,table.pgrid) :is(th,td){padding:var(--row-py) var(--row-px);font-size:var(--row-fs);font-weight:400;color:var(--ink);background:none;vertical-align:top}
.ptab:not(.pgrid) tbody tr+tr>*{border-top:var(--bw) solid var(--line)}
:is(.ptab,table.pgrid) thead th{font-size:var(--row-meta-fs);font-weight:600;color:var(--dim);border-bottom:var(--bw) solid var(--line2)}
table.pgrid:not(.ptab) td{border:var(--bw) solid var(--line)}   /* сетка уборки: клетки для отметок, линии со всех сторон */
.atab td.dsep,.atab th[colspan]{border-left:var(--bw) solid var(--line2)}
/* 2 первая колонка - заголовок строки */
:is(.dtab2,.ptab) tbody th,.dtab2 td.dg{font-weight:600;color:var(--ink);background:var(--sub-bg)}
.ptab.pgrid tbody th{background:none}   /* в сетке опроса слева только время */
/* 3 строка-группа */
.bctab tr.bcgrp th,table.pgrid tr.pgh td{font-size:var(--row-title-fs);font-weight:600;color:var(--gold-ink);background:var(--gold-bg);letter-spacing:0;text-transform:none}
.bctab tr.bcsep th{border-top:var(--bw) solid var(--line2)}
/* 4 мета в ячейке и под таблицей */
.bctab .bcn,.bctab td.bcs,.bctab td.bcm,.insub,.dtab2 td.du,.utab td:nth-child(3),.jtab .jb,.jtab3 .jb,.bcdr b{font-size:var(--fs-s);font-weight:400;color:var(--dim)}
.bctab th.bcx{font-size:var(--fs-s)}
.bcfoot{margin:8px 2px 2px;font-size:var(--fs-s);color:var(--dim)}
.bctab .bct,.jtab .ja,.jtab3 .ja{font-weight:600;color:var(--ink)}
/* 5 выделения */
.bcape{font-size:var(--fs-xs);font-weight:600}.bcape-ok{color:var(--gain)}.bcape-bad{color:var(--hot)}.bcape-na{color:var(--dim);font-weight:400}
.bcnew{display:inline-block;margin-left:6px;padding:0 6px;font-size:var(--fs-xs);font-weight:600;vertical-align:1px;color:var(--green-6);background:var(--green-2);border:var(--bw) solid var(--green-3);border-radius:var(--r)}   /* новые сообщения подрядчика */
.jtab .jr,.jtab3 td.jr{color:var(--green-6)}
/* 6 сетка опроса */
.ptab.pgrid{border-collapse:separate;border-spacing:var(--poll-gap)}
.ptab.pgrid :is(td,th){padding:var(--poll-pad)}
.ptab.pgrid td.pdy{background:var(--card);border:var(--bw) solid var(--line);border-radius:var(--r)}
.ptab.pgrid .pdn,.ptab.pgrid .plab,.ptab.pgrid .pn{font-size:var(--fs-xs);font-weight:400;color:var(--dim)}
.ptab.pgrid .pce{border-radius:var(--r)}
.ptab.pgrid .pce.best{background:var(--green-1)}
.ptab.pgrid .pce.best .pn{font-weight:600;color:var(--green-6)}
.dp{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--poll-cell);height:var(--poll-cell);
  font-size:var(--fs-xs);font-weight:600;color:var(--dim);background:var(--card);border:var(--bw) solid var(--line2);border-radius:var(--r)}
.dp.yes{color:var(--green-6);background:var(--green-2);border-color:var(--green-3)}
.dp.no{color:var(--red-6);background:var(--red-2);border-color:var(--red-3)}
.dp.un{border-style:dashed}
.dp.hab{opacity:.45}
/* ===== END ТАБЛИЦЫ ===== */
