/* v207: мобильная версия без горизонтальных прокруток + качество визуальных эффектов (подключается последним) */
:root{--bd:var(--line)} /* переменная использовалась в документах, но не была задана — отсюда белая рамка в тёмной теме */

/* ---------- эффекты: плавно, коротко, без «дёрганья» ---------- */
@keyframes m7in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes m7pop{from{opacity:0;transform:translateY(6px) scale(.985)}to{opacity:1;transform:none}}
/* fill-mode backwards: после анимации у блока не остаётся эффекта — иначе он становится «корнем фона» и стекло (backdrop-filter) у карточек перестаёт размывать фон */
@keyframes m7sh{0%{background-position:-200% 0}100%{background-position:200% 0}}
#main>*:not(.top):not(.pfbar){animation:m7in .32s cubic-bezier(.2,.75,.2,1) backwards}
#main>*:nth-child(3){animation-delay:.03s}#main>*:nth-child(4){animation-delay:.06s}
.menu{animation:m7pop .16s cubic-bezier(.2,.8,.2,1)}
.btn{transition:background-color .18s,border-color .18s,color .18s,box-shadow .2s,transform .12s}
.btn:active:not(:disabled){transform:scale(.97)}
.btn.pri{box-shadow:0 1px 0 rgba(255,255,255,.12) inset,0 4px 14px -6px color-mix(in srgb,var(--acc) 70%,transparent)}
.btn.pri:hover{box-shadow:0 1px 0 rgba(255,255,255,.14) inset,0 8px 22px -8px color-mix(in srgb,var(--acc) 80%,transparent)}
.inp,select.inp,textarea.inp{transition:border-color .18s,box-shadow .2s,background-color .18s}
.inp:focus,select.inp:focus,textarea.inp:focus{border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in srgb,var(--acc) 22%,transparent);outline:none}
.card,.kcard,.tcard,.kpi{transition:box-shadow .22s,transform .22s,border-color .22s,background-color .22s}
.tbl tbody tr{transition:background-color .15s}
.pill{transition:background-color .18s,color .18s}
@media(hover:hover){
 .card.kpi[onclick]:hover,.kcard:hover{transform:translateY(-2px);box-shadow:var(--sh2,var(--sh))}
 .ptabs a,.seg>button,.sseg a{transition:color .18s,background-color .18s,border-color .18s}
}
.loading,.card.muted:only-child{position:relative;overflow:hidden}
.skel{border-radius:10px;background:linear-gradient(90deg,var(--hover) 25%,color-mix(in srgb,var(--hover) 55%,var(--card)) 50%,var(--hover) 75%);background-size:200% 100%;animation:m7sh 1.3s linear infinite}

/* ---------- списки с ограниченной высотой: прокрутка без полосы, снизу мягкое затухание, пока есть что листать ---------- */
.vscroll{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}
.vscroll::-webkit-scrollbar{display:none;width:0;height:0}
.vscroll.more{-webkit-mask-image:linear-gradient(#000 calc(100% - 44px),transparent);mask-image:linear-gradient(#000 calc(100% - 44px),transparent)}
/* ---------- стекло: плотнее подложка, чтобы текст читался на любой фотографии ---------- */
:root[data-glass]{--glass:color-mix(in srgb,var(--card) 74%,transparent)}
:root[data-glass][data-theme=dark]{--glass:color-mix(in srgb,var(--card) 70%,transparent)}
:root[data-glass] .card,:root[data-glass] .ptabs,:root[data-glass] .tbl{backdrop-filter:blur(26px) saturate(170%)!important;-webkit-backdrop-filter:blur(26px) saturate(170%)!important}
/* ---------- задачи в проекте: форма в две строки, список как операции «Денег» ---------- */
.tform{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.tfrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.tfrow>select{flex:1 1 150px;min-width:150px;width:auto!important}.tfrow>input[type=date]{flex:0 0 140px;min-width:0}.tfrow>.btn{flex:none}
@media(max-width:560px){.tfrow{flex-wrap:wrap}.tfrow>select{flex:1 1 100%}.tfrow>.btn.pri{margin-left:auto}}
a.lmore{display:inline-block;margin-top:8px}
/* ---------- документы (рабочие документы, документы проекта) ---------- */
.dbx-list,.dbx-det{border-color:var(--line)!important;background:color-mix(in srgb,var(--card) 70%,transparent)}
.dbx-list{scrollbar-width:thin}

/* ---------- «Материалы»: фильтр этапов кнопками, как в остальных разделах ---------- */
.fchips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.fchips button{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:0 12px;border-radius:17px;border:1px solid var(--line);background:var(--card);color:var(--tx2);font:inherit;font-size:13px;cursor:pointer;transition:background-color .18s,color .18s,border-color .18s}
.fchips button b{font-weight:600;opacity:.7}
.fchips button.on{background:var(--accbg);border-color:var(--acc);color:var(--acc)}

/* ---------- мобильная версия ---------- */
@media(max-width:820px){
 /* шапка страницы: перенос вместо прокрутки */
 .top{flex-wrap:wrap!important;overflow:visible!important;row-gap:8px}
 .top h1{width:auto!important;flex:1 1 calc(100% - 56px);min-width:0;overflow-wrap:anywhere}
 .top .search{flex:1 1 100%}
 .top>.btn,.top>a.btn{flex:0 1 auto;max-width:100%}
 .top select,.top .inp{max-width:100%}
 /* форма записи: кнопки снизу сеткой, вкладки переносятся */
 .drawer footer{display:grid!important;grid-template-columns:1fr 1fr;gap:8px}
 .drawer footer>.grow{display:none}
 .drawer footer .btn{width:100%;justify-content:center;min-width:0;white-space:normal}
 .drawer footer>.btn.pri:first-child{grid-column:1/-1}
 .drawer .tabs{flex-wrap:wrap;gap:2px 16px;overflow:visible!important}
 .drawer .tabs button{white-space:nowrap}
 select.inp,.inp,select{max-width:100%;min-width:0}
 .dbx-det,.dbx-hint,.dbx-pane{display:none!important}
 .dbx-bar{flex-wrap:wrap}
 .dbx-body{height:auto!important;max-height:60vh}
}
/* v215: телефонные раскладки — только телефон (до 640px). Планшет (641–1024) получает таблицы, ленту канбана, строку вкладок */
@media(max-width:640px){
 /* сегменты и вкладки: перенос строк, без горизонтальной прокрутки */
 .seg{flex-wrap:wrap;height:auto!important;max-width:100%}
 .seg>button,.seg>a{flex:1 1 auto;white-space:nowrap}
 nav.sseg{flex-wrap:wrap!important;overflow:visible!important}
 nav.sseg a,.sseg a{flex:1 1 auto!important;text-align:center}
 nav.ptabs a.on{background:var(--accbg);color:var(--acc)}
 /* карточки заказчика, поставщика, тендера */
 .tcols{grid-template-columns:minmax(0,1fr)!important}
 .tgrid{grid-template-columns:repeat(2,minmax(0,1fr))!important}
 .tcard{overflow:visible!important}
 .tcard>.row{flex-wrap:wrap}
 /* поля и выпадающие списки не шире экрана */
 /* настройка меню */
 .mnI{flex-wrap:wrap}.mnI .inp{flex:1 1 calc(100% - 40px);max-width:none}

 /* канбан: одна колонка на экран + переключатель статусов (без ленты вбок) */
 .kan.m1{display:block!important;overflow:visible!important;padding-right:0!important;min-height:0}
 .kan.m1 .kcol{display:none!important;width:100%;min-width:0!important;max-width:none!important;max-height:none!important}
 .kan.m1 .kcol.cur{display:flex!important;animation:m7in .22s ease backwards}
 .kan.m1 .kcol>header{display:none}
 .kstat{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}
 .kstat button{display:inline-flex;align-items:center;gap:6px;min-height:38px;padding:0 13px;border-radius:19px;border:1px solid var(--line);background:var(--card);color:var(--tx2);font:inherit;font-size:13.5px;cursor:pointer}
 .kstat button b{font-weight:600;opacity:.65}
 .kstat button.on{background:var(--acc);border-color:var(--acc);color:#fff}
 .kstat button.on b{opacity:.85}
 .supk>.fchips{display:none} /* на доске статусы переключаются кнопками над колонкой */
 .khint{font-size:12px;color:var(--tx3,var(--tx2));margin:-4px 0 10px}
 .kcard.mhold{transform:scale(.98);box-shadow:0 0 0 2px var(--acc)}

 /* любые таблицы: строки становятся карточками (подписи из шапки таблицы) */
 .mcwrap{overflow:visible!important;max-height:none!important;background:none!important;box-shadow:none!important;padding:0!important}
 table.mcx{display:block;width:100%!important;min-width:0!important;border:0}
 table.mcx thead{display:none}
 table.mcx tbody,table.mcx tfoot{display:block}
 table.mcx tr{display:block;background:var(--card);border-radius:var(--r,12px);box-shadow:var(--sh);padding:10px 14px;margin-bottom:10px;border:0}
 table.mcx td,table.mcx th{display:block;padding:4px 0!important;border:0!important;text-align:right!important;min-width:0!important;width:auto!important;max-width:none!important;white-space:normal!important;overflow-wrap:anywhere;position:static!important;background:none!important;font-size:14px}
 table.mcx td::before{content:attr(data-l);float:left;margin-right:12px;max-width:45%;text-align:left;font-size:12px;color:var(--tx3,var(--tx2));overflow-wrap:normal}
 table.mcx td[data-l=""]::before{display:none}
 table.mcx td:first-child{display:block;text-align:left!important;font-weight:600;font-size:15px;padding-bottom:6px!important}
 table.mcx td:first-child::before{display:none}
 table.mcx td:empty{display:none}
 table.mcx td.mc-full{text-align:left!important}
 table.mcx td::after{content:'';display:table;clear:both}
 table.mcx td.mc-act{text-align:right;padding-top:8px!important;margin-top:4px;border-top:1px solid var(--line2,var(--line))!important}
 table.mcx td.mc-act::before{display:none}
 table.mcx td.mc-chk{display:none}
 table.mcx .pill{white-space:nowrap}

 /* график Ганта на телефоне — список с полосой выполнения */
 .gm{display:flex;flex-direction:column;gap:8px}
 .gmi{background:var(--card);border-radius:var(--r,12px);box-shadow:var(--sh);padding:11px 14px;cursor:pointer}
 .gmi.l1{margin-left:12px;padding:9px 12px;box-shadow:none;border:1px solid var(--line)}
 .gmi .gt{display:flex;gap:10px;align-items:flex-start}.gmi .gt b{flex:1;min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .gmi .gbar{position:relative;height:8px;border-radius:4px;background:var(--hover);margin:8px 0 6px;overflow:hidden}
 .gmi .gbar i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:var(--acc)}
 .gmi .gbar s{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--tx2);text-decoration:none}
 .gmi .gd{display:flex;justify-content:space-between;gap:8px;font-size:12.5px;color:var(--tx2)}
 .gsec{font-size:12px;color:var(--tx3,var(--tx2));margin:4px 0 0 14px;text-transform:uppercase;letter-spacing:.03em}

 /* календарь: точки в сетке, события дня списком ниже */
 .cal .cev{background:currentColor!important;font-size:0!important;width:8px;height:8px;padding:0!important;border-radius:50%;display:inline-block!important;margin:1px;vertical-align:middle;overflow:hidden}
 .cal>div:not(.dow){cursor:pointer}
 .cal>div.sel{box-shadow:inset 0 0 0 2px var(--acc)}
 .calday{margin-top:12px}
 .calday a.cev{display:block;font-size:14px!important;padding:10px 12px!important;margin:6px 0;border-radius:10px;white-space:normal}

 /* карта доступа: список по ролям */
 .rml .card{margin:0 0 10px}
 .rml summary{cursor:pointer;display:flex;gap:8px;align-items:center;list-style:none}
 .rml summary::-webkit-details-marker{display:none}
 .rml .rl{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-top:1px solid var(--line2,var(--line));font-size:13.5px}
 .rml .rl span:last-child{text-align:right;color:var(--tx2)}
 .rml .rw{color:var(--orange,#d97706);font-size:12.5px;margin:2px 0}
}
@media (prefers-reduced-motion:reduce){#main>*,.menu,.kan.m1 .kcol.cur{animation:none!important}}

/* v211: хлебные крошки — первая строка закреплённой шапки страницы */
.top>.crumbs{flex:1 0 100%;order:-1;display:flex;align-items:center;gap:2px;min-width:0;margin:-6px 0 0;font-size:12.5px;line-height:20px;color:var(--tx2);white-space:nowrap;overflow:hidden}
.crumbs a{color:var(--tx2);text-decoration:none;max-width:240px;overflow:hidden;text-overflow:ellipsis;padding:1px 6px;border-radius:6px;transition:background .15s,color .15s;flex:0 1 auto;min-width:0}
.crumbs a:hover{background:var(--hover);color:var(--acc)}
.crumbs a:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.crumbs .sep{color:var(--tx3);padding:0 1px;flex:none}
.crumbs .cur{color:var(--tx);overflow:hidden;text-overflow:ellipsis;padding:1px 6px;min-width:0;flex:0 1 auto}
.crumbs .cback{display:none}
@media(max-width:820px){.top>.crumbs{margin:-2px 0 2px}.crumbs>a:not(.cback),.crumbs>.sep,.crumbs>.cur{display:none}.crumbs .cback{display:inline-block;max-width:100%;padding:2px 8px 2px 4px;color:var(--acc);font-size:13.5px}}
@media print{.crumbs{display:none!important}}
/* v213: руководство пользователя */
.helpq{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;border:1.5px solid var(--line);color:var(--tx2);font-weight:700;font-size:14px;text-decoration:none;margin-left:-4px;transition:background .15s,color .15s,border-color .15s}
.helpq:hover{color:var(--acc);border-color:var(--acc);background:var(--accbg)}
.gwrap{display:grid;grid-template-columns:270px minmax(0,1fr);gap:18px;align-items:start}
.gnav{position:sticky;top:96px;display:grid;gap:10px;max-height:calc(100vh - 120px);overflow:auto;scrollbar-width:none;padding-bottom:12px}
.gnav::-webkit-scrollbar{display:none}
.ggrp{margin-bottom:6px}.ggt{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tx3);padding:6px 10px 4px}
.gitem{display:block;padding:6px 10px;border-radius:8px;color:var(--tx);text-decoration:none;font-size:13.5px;line-height:1.3;transition:background .15s}
.gitem:hover{background:var(--hover)}.gitem.on{background:var(--accbg);color:var(--acc);font-weight:600}
.gart{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:22px 26px 26px;max-width:900px;min-width:0}
[data-glass] .gart{background:var(--glass,var(--card));backdrop-filter:blur(26px) saturate(160%);-webkit-backdrop-filter:blur(26px) saturate(160%)}
.gkick{font-size:12px;color:var(--tx3);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.gtitle{margin:4px 0 6px;font-size:24px;line-height:1.25}.gintro{color:var(--tx2);margin:0 0 14px;font-size:15px}
.gp{margin:10px 0;line-height:1.55;font-size:15px}.gh{margin:20px 0 6px;font-size:17px}
.gsteps{list-style:none;margin:12px 0;padding:0;display:grid;gap:10px;counter-reset:none}
.gsteps li{display:flex;gap:12px;align-items:flex-start;line-height:1.5;font-size:15px}
.gsteps .gn{flex:none;width:26px;height:26px;border-radius:50%;background:var(--acc);color:#fff;font-weight:700;font-size:13px;display:inline-flex;align-items:center;justify-content:center;margin-top:-1px}
.gnote{margin:12px 0;padding:10px 14px;border-radius:10px;line-height:1.5;font-size:14.5px}
.gnote.tip{background:var(--accbg)}.gnote.warn{background:color-mix(in srgb,var(--orange) 14%,transparent)}
.gshot{margin:14px 0;padding:0}.gshot img{width:100%;display:block;border-radius:10px;border:1px solid var(--line);box-shadow:var(--sh);cursor:zoom-in;background:var(--bg)}
.gshot figcaption{font-size:13px;color:var(--tx2);margin-top:6px;line-height:1.4}
.gpn{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:22px;padding-top:14px;border-top:1px solid var(--line)}
.gcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin-top:6px}
.gcard{border:1px solid var(--line);border-radius:12px;padding:6px}.gcard .gitem{display:grid;gap:2px}
@media(max-width:820px){.gwrap{grid-template-columns:1fr}.gwrap.has .gnav{display:none}.gnav{position:static;max-height:none}.gart{padding:16px 14px 18px}.gtitle{font-size:20px}.gsteps li,.gp{font-size:15px}.helpq{margin-left:0}}

/* v215: аудит UI/UX (3 эксперта: компьютер, планшет, телефон) */
/* суммы в плитках — без переноса «₽»; плитки сами подстраиваются по ширине */
.kpi b,.kp b{white-space:nowrap;font-size:clamp(17px,1.55vw,24px)!important;letter-spacing:-.02em}
.grid.kp{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))!important}
/* канбан на компьютере и планшете: колонки не уже 240px, лента листается вбок; слова не рвутся посередине */
@media(min-width:641px){.kan{overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:thin}.kan>.kcol{min-width:240px!important;scroll-snap-align:start}}
.kan .kcard{overflow-wrap:normal;word-break:normal;hyphens:manual}
.kan .kcol>header{white-space:nowrap}
/* блоки обзора проекта не тянутся до высоты соседа */
.pgrid,.ovgrid,.page .grid.g2{align-items:start}
/* итог таблицы не наезжает на строки */
.tfoot{position:static!important}
@media(max-width:640px){.tbl.mc,.tbl.mcwrap,.mcwrap{max-height:none!important}}
/* кнопка «?» — в строке заголовка, а не отдельной строкой */
@media(max-width:820px){.top h1{flex:1 1 calc(100% - 120px)!important;min-width:0}.top>.helpq{order:0}.top>.crumbs{order:-2}}
/* вкладки проекта: на планшете — строка с прокруткой вбок и прилипанием; на телефоне — одна строка с прокруткой (вместо сетки 4×2) */
@media(max-width:820px){nav.ptabs{display:flex!important;flex-wrap:nowrap!important;overflow-x:auto!important;scrollbar-width:none;position:sticky!important;top:0;z-index:15;grid-template-columns:none!important;gap:2px!important;padding:4px!important}
 nav.ptabs::-webkit-scrollbar{display:none}
 nav.ptabs a{flex:0 0 auto!important;white-space:nowrap!important;min-height:40px;padding:8px 12px!important;font-size:14px!important;display:flex;align-items:center;border-radius:9px}
 nav.ptabs a.on{background:var(--accbg);color:var(--acc)}}
/* цели нажатия для пальца — по способу ввода, а не по ширине */
@media(pointer:coarse){.pdel,.helpq,.mx-chip,.kmore,.btn.sm,.seg>button,.seg>a,.kstat button{min-height:40px;min-width:40px}
 .helpq{width:40px;height:40px}.pin,input.inp{min-height:40px}
 input[type=checkbox],input[type=radio]{width:20px;height:20px}}
/* полоса выполнения в общем графике растягивается */
@media(max-width:1024px){.wbar{width:auto!important;flex:1 1 90px}}
/* справка: на планшете и телефоне оглавление не дублируется карточками */
@media(max-width:820px){.gwrap:not(.has) .gnav-list{display:none}}
.colhide{display:none!important}
@media(max-width:640px){table.mcx .pin,table.mcx td input.inp{width:120px!important;min-height:40px;font-size:16px;text-align:right}table.mcx.kst tr{margin-bottom:10px}}
@media(max-width:640px){.lt-main:has(> .lt-none){display:none}.mx-chip{min-height:36px}}
@media(max-width:640px){.kpi b,.kp b{font-size:clamp(17px,5.2vw,22px)!important}.grid.kp{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))!important}}
@media(max-width:640px){table.mcx.kst td:nth-child(2){font-weight:600;font-size:15px;text-align:left!important;padding-bottom:6px!important}table.mcx.kst td:nth-child(2)::before{display:none}table.mcx.kst td,table.mcx.kst th{text-align:left}table.mcx.kst td.mc-full,table.mcx.kst th{text-align:left!important}}
/* v216: деньги проекта — детали под «Подробнее»; вторичные кнопки шапки видны как кнопки */
.mdet{margin:4px 0 10px;font-size:13px}.mdet summary{cursor:pointer;color:var(--acc);font-size:13px;padding:4px 0;list-style:none}.mdet summary::-webkit-details-marker{display:none}.mdet summary::before{content:'▸ ';}.mdet[open] summary::before{content:'▾ '}.mdet .row{padding:3px 0;font-size:13px}
.top>.btn.ghost:not(.red),.top>a.btn.ghost:not(.red){border:1px solid var(--line);background:var(--card)}
.savebar{position:sticky;bottom:12px;z-index:30;display:flex;gap:10px;align-items:center;margin-top:14px;padding:10px 14px;border-radius:14px;background:var(--card);box-shadow:0 8px 28px rgba(0,0,0,.18);border:1px solid var(--line)}.savebar.hide{display:none}
.rgrp>summary{cursor:pointer;font-weight:600;padding:8px 2px;list-style:none}.rgrp>summary::-webkit-details-marker{display:none}.rgrp>summary::before{content:'▸ ';color:var(--tx3)}.rgrp[open]>summary::before{content:'▾ '}
.pmnav{display:flex;align-items:center;gap:10px;position:sticky;top:0;z-index:12;background:var(--card);border-radius:14px;box-shadow:var(--sh);padding:8px 10px;margin-bottom:10px}.pmnav .btn{min-width:44px;min-height:44px;font-size:20px;justify-content:center}
.pmlist{display:grid;gap:10px}.pmcard{background:var(--card);border-radius:14px;box-shadow:var(--sh);padding:12px 14px;display:grid;gap:6px}.pmt{font-weight:600;color:var(--tx);text-decoration:none;font-size:15px}
.pmrow{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:4px}.pmrow label{display:grid;gap:4px}.pmrow .pin{width:100%!important;min-height:44px;font-size:17px;text-align:center;border-radius:10px}.pmrow b{font-size:17px;min-height:44px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:10px}
/* ===== v216: доводка по второму аудиту (компьютер, планшет, телефон) ===== */
/* таблицы-карточки на планшете — в две колонки */
@media(min-width:641px) and (max-width:900px){table.mcx tbody{display:grid!important;grid-template-columns:1fr 1fr;gap:10px;align-items:start}table.mcx tr{margin:0!important}.tbl.mc tbody{display:grid!important;grid-template-columns:1fr 1fr;gap:10px;align-items:start}.tbl.mc tr{margin:0!important}}
/* пустые колонки канбана — узкая полоса и на компьютере/планшете (лента не тратит 240px на пустоту) */
@media(min-width:641px){.kan>.kcol:has(.list:empty){flex:0 0 46px!important;min-width:46px!important;max-width:46px!important}body.kdrag .kan>.kcol:has(.list:empty){flex:0 0 240px!important;min-width:240px!important;max-width:none!important}}
/* затухание у края ленты, пока её можно листать */
.edr{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 44px),transparent)}
.edl.edr{-webkit-mask-image:linear-gradient(90deg,transparent,#000 36px,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(90deg,transparent,#000 36px,#000 calc(100% - 44px),transparent)}
.edl:not(.edr){-webkit-mask-image:linear-gradient(90deg,transparent,#000 36px);mask-image:linear-gradient(90deg,transparent,#000 36px)}
nav.ptabs a{white-space:nowrap}
/* суммы и числа не переносятся посреди значения */
td.num,td.r,.tbl td.r,.num{white-space:nowrap}
/* кнопки в строках таблиц — по центру строки */
.tbl td:has(> .btn:only-child),.tbl td:has(> button:only-child){vertical-align:middle}
/* телефон: статусы канбана, фильтры-чипы и переключатели — одной строкой с прокруткой */
@media(max-width:640px){.kstat,.fchips{flex-wrap:nowrap!important;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.kstat::-webkit-scrollbar,.fchips::-webkit-scrollbar{display:none}.kstat>button,.fchips>button{flex:none}
  .page .seg,.top .seg,.sseg{display:flex!important;flex-wrap:nowrap!important;overflow-x:auto;scrollbar-width:none;max-width:100%}.page .seg::-webkit-scrollbar,.top .seg::-webkit-scrollbar,.sseg::-webkit-scrollbar{display:none}.page .seg>button,.top .seg>button,.sseg>*{flex:none;white-space:nowrap}
  .projedit span{display:none}.projedit{min-width:40px;justify-content:center}
  .stq{max-width:none!important;width:100%}
  .wrow.whead{flex-wrap:wrap;row-gap:6px}.wrow.whead>.grow{flex:1 1 100%!important}
  .tbl.mc td:first-child:has(> input[type=checkbox]:only-child){display:block;float:left;padding:2px 12px 0 0!important}.tbl.mc td:first-child:has(> input[type=checkbox]:only-child) input{width:22px;height:22px}.tbl.mc td:first-child:has(> input[type=checkbox]:only-child)+td{text-align:left;font-weight:600;font-size:15px;padding-bottom:6px;justify-content:flex-start}
  .warnbar{flex-direction:column;align-items:stretch!important}.warnbar>.btn{align-self:flex-start}}
/* календарь на телефоне: точки событий видны */
@media(max-width:640px){.cal .cev{height:8px!important;min-height:8px!important;flex:none}}
/* календарь на компьютере и планшете: событие крупнее на касание */
@media(min-width:641px) and (max-width:1024px){.cal .cev{font-size:12px}}
/* письма проекта: шапка списка не сжимается */
.lt-lhead{flex-shrink:0}
/* сетка плиток без «сирот»: 4 — по 2 или 4, 6 — по 3 */
@media(min-width:901px){.grid.kp:has(> :nth-child(6):last-child){grid-template-columns:repeat(3,1fr)!important}}
@media(max-width:900px){.grid.kp:has(> :nth-child(4):last-child){grid-template-columns:repeat(2,1fr)!important}.grid.kp:has(> :nth-child(6):last-child){grid-template-columns:repeat(3,1fr)!important}.grid.kp:has(> :nth-child(3):last-child){grid-template-columns:repeat(3,1fr)!important}}
@media(max-width:640px){.grid.kp:has(> :nth-child(6):last-child),.grid.kp:has(> :nth-child(3):last-child){grid-template-columns:repeat(2,1fr)!important}.grid.kp>:last-child:nth-child(odd){grid-column:1/-1}}
/* руководство: карточки разделов не тянутся по высоте */
.gcards{align-items:start}
/* кнопки «на карте» (масштаб, тема) — на подложке */
.geo-ctl,.mapctl{background:var(--card);border-radius:12px;box-shadow:var(--sh)}
@media(max-width:900px){.geotech{display:none!important}}
.geozoom{background:var(--card);border-radius:14px;box-shadow:var(--sh2);padding:4px;gap:2px!important}.geozoom .btn.icon{min-width:40px;min-height:40px;border:0;background:none;font-size:18px}
@media(max-width:1024px){.tpage .tcols{grid-template-columns:minmax(0,1fr)!important}}
/* настройка меню на телефоне: строка пункта — две аккуратные строки, кнопки 40px */
@media(max-width:640px){.mnI{display:flex!important;flex-wrap:wrap;gap:6px}.mnI>.grow,.mnI>.pill{display:none}.mnI>.inp{flex:1 1 calc(100% - 120px)!important;min-width:0}.mnI .btn.icon{min-width:40px;min-height:40px}.mnI>.mnSel{flex:1 1 calc(100% - 100px);margin-left:58px;min-height:40px}}
@media(max-width:900px){.lt-main:has(> .lt-none){display:none}}
@media(min-width:641px) and (max-width:900px){.ksrow{grid-template-columns:minmax(0,1fr) auto!important}.ksrow>div:nth-child(3){text-align:right!important}}
/* ===== v217: Отчёты ===== */
.rp{--s-in:#2a78d6;--s-out:#eb6834;--s-net:var(--tx);--a0:#7fb0ea;--a1:#eda100;--a2:#eb6834;--a3:#d23a2f}
:root[data-theme=dark] .rp,:root[data-theme=dark] .rp-tip{--s-in:#3987e5;--s-out:#d95926;--a0:#2f5f98;--a1:#c98500;--a2:#d95926;--a3:#e5544a}
.rp-head{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between;margin:0 0 14px}
.rp-per{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center}.rp-per .inp{width:auto}
.rp-kp{margin-bottom:12px}
.rp-k small{display:flex;flex-wrap:wrap;gap:2px 6px;align-items:baseline}.rp-k.t-red b{color:var(--red)}.rp-k.t-in{box-shadow:inset 3px 0 0 var(--s-in,#2a78d6),var(--sh)}.rp-k.t-out{box-shadow:inset 3px 0 0 var(--s-out,#eb6834),var(--sh)}
.rp-d{font-size:12px;font-weight:600;color:var(--tx2)}.rp-d.up{color:var(--green)}.rp-d.dn{color:var(--red)}
.rp-c{margin-bottom:12px}.rp-ch{display:flex;gap:10px;align-items:flex-start;margin-bottom:10px}.rp-ch h3{margin:0;font-size:16px}
.rp-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:12px;align-items:start}.rp-2>.rp-c{margin:0}.rp-2{margin-bottom:12px}
.rp-svg{width:100%;height:auto;display:block;overflow:visible}
.rp-grid{stroke:var(--line);stroke-width:1}.rp-base{stroke:var(--tx3,var(--tx2));stroke-width:1}
.rp-ax{fill:var(--tx2);font-size:11px;font-family:inherit}
.rp-in{fill:var(--s-in);background:var(--s-in)}.rp-out{fill:var(--s-out);background:var(--s-out)}.rp-net{background:var(--s-net)}
.rp-netl{fill:none;stroke:var(--s-net);stroke-width:2;stroke-linejoin:round;stroke-linecap:round;opacity:.85}.rp-netd{fill:var(--s-net);stroke:var(--card);stroke-width:2}
.rp-hit{fill:transparent}.rp-g:hover .rp-hit{fill:var(--hover)}
.rp-leg{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:12.5px;color:var(--tx2);margin:0 0 8px}.rp-leg span{display:inline-flex;align-items:center;gap:6px}.rp-legv{margin:10px 0 0}.rp-legv b{color:var(--tx);font-weight:600}
.rp-sw{display:inline-block;width:10px;height:10px;border-radius:3px;flex:none}.rp-sw.rp-net{height:3px;border-radius:2px;width:14px}
.rp-tip{position:fixed;z-index:100;display:none;pointer-events:none;background:var(--card);color:var(--tx);border:1px solid var(--line);box-shadow:var(--sh2);border-radius:10px;padding:8px 12px;font-size:12.5px;line-height:1.55;--s-in:#2a78d6;--s-out:#eb6834;--s-net:var(--tx)}.rp-tip div{display:flex;align-items:center;gap:6px}
.rp-hb{display:grid;gap:8px}.rp-hr{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(60px,1fr) auto;gap:10px;align-items:center;font-size:13.5px;padding:2px 0;border-radius:8px}.rp-hr[style*=pointer]:hover{background:var(--hover)}
.rp-hl{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rp-hl small{display:block;color:var(--tx2);font-size:12px;overflow:hidden;text-overflow:ellipsis}
.rp-ht{height:10px;border-radius:5px;background:var(--hover);overflow:hidden;display:flex;gap:2px}.rp-ht i{display:block;height:100%;border-radius:5px}.rp-hr b{font-size:13px;white-space:nowrap}
.rp-a0{background:var(--a0)}.rp-a1{background:var(--a1)}.rp-a2{background:var(--a2)}.rp-a3{background:var(--a3)}
.rp-s0{background:#2a78d6}.rp-s1{background:#eb6834}.rp-s2{background:#1baf7a}.rp-s3{background:#eda100}.rp-s4{background:#e87ba4}.rp-s5{background:#6250d6}
.rp-st{display:flex;gap:2px;height:16px;border-radius:6px;overflow:hidden}.rp-st i{display:block;height:100%}
.rp-m{display:flex;align-items:center;gap:8px;min-width:130px}.rp-mt{position:relative;flex:1;height:8px;border-radius:4px;background:var(--hover)}.rp-mt i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:var(--s-in)}.rp-mt s{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--tx);opacity:.7;text-decoration:none}.rp-m span{font-size:12.5px;font-weight:600;min-width:36px;text-align:right}
.rp-empty{color:var(--tx2);font-size:13px;padding:18px 4px;text-align:center}
.rp-t td{vertical-align:middle}
@media(max-width:640px){.rp-head{flex-direction:column;align-items:stretch}.rp-2{grid-template-columns:1fr}.rp-hr{grid-template-columns:minmax(0,1fr) auto;row-gap:4px}.rp-hr .rp-ht{grid-column:1/-1;grid-row:2}.rp-per .seg{max-width:100%}}
@media print{.rp-head .rp-tabs,.rp-per .seg{display:none}.rp-c{break-inside:avoid;box-shadow:none;border:1px solid #ddd}}
.grid.kp.rp-kp{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))!important}.rp-cv{width:100%;min-height:200px}@media(max-width:640px){.grid.kp.rp-kp{grid-template-columns:1fr 1fr!important}}
.rp-t td:first-child{min-width:220px}.rp-t th{white-space:nowrap}
.rp-d.nd{font-weight:400}@media(max-width:640px){.rp-print{display:none!important}}

/* v384: плавные переходы — меню статично, меняется только содержимое */
@keyframes m7soft{from{opacity:.0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes m7bar{0%{transform:translateX(-100%)}50%{transform:translateX(-20%)}100%{transform:translateX(100%)}}
#main>*:not(.top):not(.pfbar){animation-duration:.38s}
#main.noanim>*{animation:none!important}
#main.soft>*:not(.top):not(.pfbar){animation:m7soft .2s cubic-bezier(.2,.75,.2,1) backwards}
body.navbusy::before{content:"";position:fixed;left:0;top:0;height:2px;width:100%;z-index:9999;background:linear-gradient(90deg,transparent,var(--acc,#4c8dff),transparent);animation:m7bar 1s ease-in-out infinite;pointer-events:none}
body.navbusy #main{opacity:.78;transition:opacity .25s ease}
#main{transition:opacity .2s ease}
@media (prefers-reduced-motion:reduce){body.navbusy::before{animation:none}#main.soft>*{animation:none!important}}
/* v386: календарь справа не участвует в анимации страницы — анимируется только основная колонка, календарь стоит на месте */
#main>.page.withcal{animation:none!important}
#main>.page.withcal>.pmain{animation:m7in .38s cubic-bezier(.2,.75,.2,1) backwards}
#main.noanim>.page.withcal>.pmain{animation:none!important}
#main.soft>.page.withcal>.pmain{animation:m7soft .2s cubic-bezier(.2,.75,.2,1) backwards}
.calside,.calside *{animation:none!important}
@media (prefers-reduced-motion:reduce){#main>.page.withcal>.pmain,#main.soft>.page.withcal>.pmain{animation:none!important}}

/* v388: появление новой страницы — медленнее и мягче: блоки всплывают каскадом, а от места клика по меню расходится волна */
@property --r{syntax:'<length>';inherits:false;initial-value:0px}
@keyframes m7wave{0%{opacity:0;transform:translateY(18px) scale(.992)}60%{opacity:1}100%{opacity:1;transform:none}}
@keyframes m7ring{0%{--r:0px;opacity:.9}100%{--r:2200px;opacity:0}}
#main>*:not(.top):not(.pfbar):not(.page.withcal){animation:m7wave .75s cubic-bezier(.16,.84,.24,1) backwards}
#main>.page.withcal>.pmain{animation:m7wave .75s cubic-bezier(.16,.84,.24,1) backwards}
#main.wave .pmain>*,#main.wave .page:not(.withcal)>*{animation:m7wave .7s cubic-bezier(.16,.84,.24,1) backwards}
#main.wave .pmain>*:nth-child(2),#main.wave .page:not(.withcal)>*:nth-child(2){animation-delay:.07s}
#main.wave .pmain>*:nth-child(3),#main.wave .page:not(.withcal)>*:nth-child(3){animation-delay:.14s}
#main.wave .pmain>*:nth-child(4),#main.wave .page:not(.withcal)>*:nth-child(4){animation-delay:.21s}
#main.wave .pmain>*:nth-child(5),#main.wave .page:not(.withcal)>*:nth-child(5){animation-delay:.28s}
#main.wave .pmain>*:nth-child(n+6),#main.wave .page:not(.withcal)>*:nth-child(n+6){animation-delay:.35s}
#main.wave .tbl tbody tr{animation:m7wave .55s cubic-bezier(.16,.84,.24,1) backwards}
#main.wave .tbl tbody tr:nth-child(2){animation-delay:.04s}#main.wave .tbl tbody tr:nth-child(3){animation-delay:.08s}#main.wave .tbl tbody tr:nth-child(4){animation-delay:.12s}
#main.wave .tbl tbody tr:nth-child(5){animation-delay:.16s}#main.wave .tbl tbody tr:nth-child(6){animation-delay:.2s}#main.wave .tbl tbody tr:nth-child(7){animation-delay:.24s}
#main.wave .tbl tbody tr:nth-child(8){animation-delay:.28s}#main.wave .tbl tbody tr:nth-child(n+9){animation-delay:.32s}
#main.wave::after{content:"";position:absolute;inset:0;z-index:30;pointer-events:none;
  background:radial-gradient(circle at var(--wx,12%) var(--wy,20%),transparent 0,transparent calc(var(--r) - 140px),color-mix(in srgb,var(--acc,#4c8dff) 16%,transparent) calc(var(--r) - 50px),color-mix(in srgb,var(--acc,#4c8dff) 7%,transparent) calc(var(--r) - 10px),transparent var(--r));
  animation:m7ring 1.5s cubic-bezier(.22,.7,.3,1) forwards}
#main.noanim.wave::after,#main.soft.wave::after{display:none}
@media (prefers-reduced-motion:reduce){#main.wave::after{display:none}#main.wave *{animation:none!important}}
#main.wave .tbl tbody tr:nth-child(n+25){animation:none}

/* v389: вместо волны от клика — плавное появление страницы слева направо от меню */
@property --p{syntax:'<percentage>';inherits:false;initial-value:140%}
@keyframes m7sweep{0%{--p:0%;opacity:.0;transform:translateX(-26px)}25%{opacity:1}100%{--p:140%;opacity:1;transform:none}}
#main.wave::after{display:none!important}
#main.wave .pmain>*,#main.wave .page:not(.withcal)>*,#main.wave .tbl tbody tr{animation:none!important}
#main>*:not(.top):not(.pfbar):not(.page.withcal),#main>.page.withcal>.pmain{animation:m7sweep 1.05s cubic-bezier(.25,.7,.25,1) backwards!important;
  -webkit-mask-image:linear-gradient(90deg,#000 calc(var(--p) - 40%),transparent var(--p));mask-image:linear-gradient(90deg,#000 calc(var(--p) - 40%),transparent var(--p))}
#main.noanim>*,#main.noanim>.page.withcal>.pmain{animation:none!important;-webkit-mask-image:none;mask-image:none}
#main.soft>*:not(.top):not(.pfbar):not(.page.withcal),#main.soft>.page.withcal>.pmain{animation:m7soft .2s cubic-bezier(.2,.75,.2,1) backwards!important;-webkit-mask-image:none;mask-image:none}
@media (prefers-reduced-motion:reduce){#main>*,#main>.page.withcal>.pmain{animation:none!important;-webkit-mask-image:none;mask-image:none}}

/* v390: информация появляется постепенно — блоки, карточки и строки таблицы проявляются по очереди сверху вниз */
@keyframes m7item{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
#main>*:not(.top):not(.pfbar):not(.page.withcal),#main>.page.withcal>.pmain{animation-duration:.7s!important}
#main.wave .pmain>*,#main.wave .page:not(.withcal)>*,#main.wave .tcard,#main.wave .card,#main.wave .kcard,#main.wave .kpi,#main.wave .tgrid>*,#main.wave .tbl tbody tr{animation:m7item .55s cubic-bezier(.2,.75,.2,1) backwards!important}
#main.wave .pmain>*,#main.wave .page:not(.withcal)>*{animation-delay:.12s!important}
#main.wave .pmain>*:nth-child(1),#main.wave .page:not(.withcal)>*:nth-child(1){animation-delay:0.12s!important}
#main.wave .pmain>*:nth-child(2),#main.wave .page:not(.withcal)>*:nth-child(2){animation-delay:0.21s!important}
#main.wave .pmain>*:nth-child(3),#main.wave .page:not(.withcal)>*:nth-child(3){animation-delay:0.30s!important}
#main.wave .pmain>*:nth-child(4),#main.wave .page:not(.withcal)>*:nth-child(4){animation-delay:0.39s!important}
#main.wave .pmain>*:nth-child(5),#main.wave .page:not(.withcal)>*:nth-child(5){animation-delay:0.48s!important}
#main.wave .pmain>*:nth-child(6),#main.wave .page:not(.withcal)>*:nth-child(6){animation-delay:0.57s!important}
#main.wave .pmain>*:nth-child(7),#main.wave .page:not(.withcal)>*:nth-child(7){animation-delay:0.66s!important}
#main.wave .pmain>*:nth-child(8),#main.wave .page:not(.withcal)>*:nth-child(8){animation-delay:0.75s!important}
#main.wave .card:nth-child(1),#main.wave .tcard:nth-child(1),#main.wave .kcard:nth-child(1),#main.wave .kpi:nth-child(1),#main.wave .tgrid>*:nth-child(1){animation-delay:0.25s!important}
#main.wave .card:nth-child(2),#main.wave .tcard:nth-child(2),#main.wave .kcard:nth-child(2),#main.wave .kpi:nth-child(2),#main.wave .tgrid>*:nth-child(2){animation-delay:0.32s!important}
#main.wave .card:nth-child(3),#main.wave .tcard:nth-child(3),#main.wave .kcard:nth-child(3),#main.wave .kpi:nth-child(3),#main.wave .tgrid>*:nth-child(3){animation-delay:0.39s!important}
#main.wave .card:nth-child(4),#main.wave .tcard:nth-child(4),#main.wave .kcard:nth-child(4),#main.wave .kpi:nth-child(4),#main.wave .tgrid>*:nth-child(4){animation-delay:0.46s!important}
#main.wave .card:nth-child(5),#main.wave .tcard:nth-child(5),#main.wave .kcard:nth-child(5),#main.wave .kpi:nth-child(5),#main.wave .tgrid>*:nth-child(5){animation-delay:0.53s!important}
#main.wave .card:nth-child(6),#main.wave .tcard:nth-child(6),#main.wave .kcard:nth-child(6),#main.wave .kpi:nth-child(6),#main.wave .tgrid>*:nth-child(6){animation-delay:0.60s!important}
#main.wave .card:nth-child(7),#main.wave .tcard:nth-child(7),#main.wave .kcard:nth-child(7),#main.wave .kpi:nth-child(7),#main.wave .tgrid>*:nth-child(7){animation-delay:0.67s!important}
#main.wave .card:nth-child(8),#main.wave .tcard:nth-child(8),#main.wave .kcard:nth-child(8),#main.wave .kpi:nth-child(8),#main.wave .tgrid>*:nth-child(8){animation-delay:0.74s!important}
#main.wave .card:nth-child(9),#main.wave .tcard:nth-child(9),#main.wave .kcard:nth-child(9),#main.wave .kpi:nth-child(9),#main.wave .tgrid>*:nth-child(9){animation-delay:0.81s!important}
#main.wave .card:nth-child(10),#main.wave .tcard:nth-child(10),#main.wave .kcard:nth-child(10),#main.wave .kpi:nth-child(10),#main.wave .tgrid>*:nth-child(10){animation-delay:0.88s!important}
#main.wave .card:nth-child(11),#main.wave .tcard:nth-child(11),#main.wave .kcard:nth-child(11),#main.wave .kpi:nth-child(11),#main.wave .tgrid>*:nth-child(11){animation-delay:0.95s!important}
#main.wave .card:nth-child(12),#main.wave .tcard:nth-child(12),#main.wave .kcard:nth-child(12),#main.wave .kpi:nth-child(12),#main.wave .tgrid>*:nth-child(12){animation-delay:1.02s!important}
#main.wave .tbl tbody tr:nth-child(1){animation-delay:0.30s!important}
#main.wave .tbl tbody tr:nth-child(2){animation-delay:0.33s!important}
#main.wave .tbl tbody tr:nth-child(3){animation-delay:0.37s!important}
#main.wave .tbl tbody tr:nth-child(4){animation-delay:0.41s!important}
#main.wave .tbl tbody tr:nth-child(5){animation-delay:0.44s!important}
#main.wave .tbl tbody tr:nth-child(6){animation-delay:0.47s!important}
#main.wave .tbl tbody tr:nth-child(7){animation-delay:0.51s!important}
#main.wave .tbl tbody tr:nth-child(8){animation-delay:0.55s!important}
#main.wave .tbl tbody tr:nth-child(9){animation-delay:0.58s!important}
#main.wave .tbl tbody tr:nth-child(10){animation-delay:0.61s!important}
#main.wave .tbl tbody tr:nth-child(11){animation-delay:0.65s!important}
#main.wave .tbl tbody tr:nth-child(12){animation-delay:0.69s!important}
#main.wave .tbl tbody tr:nth-child(13){animation-delay:0.72s!important}
#main.wave .tbl tbody tr:nth-child(14){animation-delay:0.76s!important}
#main.wave .tbl tbody tr:nth-child(15){animation-delay:0.79s!important}
#main.wave .tbl tbody tr:nth-child(16){animation-delay:0.82s!important}
#main.wave .tbl tbody tr:nth-child(17){animation-delay:0.86s!important}
#main.wave .tbl tbody tr:nth-child(18){animation-delay:0.90s!important}
#main.wave .tbl tbody tr:nth-child(19){animation-delay:0.93s!important}
#main.wave .tbl tbody tr:nth-child(20){animation-delay:0.97s!important}
#main.wave .tbl tbody tr:nth-child(21){animation-delay:1.00s!important}
#main.wave .tbl tbody tr:nth-child(22){animation-delay:1.04s!important}
#main.wave .tbl tbody tr:nth-child(23){animation-delay:1.07s!important}
#main.wave .tbl tbody tr:nth-child(24){animation-delay:1.10s!important}
#main.wave .tbl tbody tr:nth-child(25){animation-delay:1.14s!important}
#main.wave .tbl tbody tr:nth-child(26){animation-delay:1.18s!important}
#main.wave .tbl tbody tr:nth-child(n+27){animation-delay:1.2s!important}
#main.noanim .tbl tbody tr,#main.soft .tbl tbody tr{animation:none!important}
@media (prefers-reduced-motion:reduce){#main.wave *{animation:none!important}}

/* v391: единая прозрачность подложек в стеклянном режиме — одна переменная --gla (настраивается ползунком «Плотность панелей»), одно размытие и одна рамка для всех панелей */
:root[data-glass]{--gla:70%;--glass:color-mix(in srgb,var(--card) var(--gla),transparent);--glassb:rgba(255,255,255,.18);--glassblur:blur(24px) saturate(165%)}
:root[data-glass][data-theme=dark]{--glass:color-mix(in srgb,var(--card) var(--gla),transparent);--glassb:rgba(255,255,255,.12)}
:root[data-glass] .side,:root[data-glass] .top,:root[data-glass] .card,:root[data-glass] .tcard,:root[data-glass] .ccard,:root[data-glass] .tbl,:root[data-glass] .slist,:root[data-glass] .shero,:root[data-glass] .skpi div,:root[data-glass] .sapp,:root[data-glass] .saward,:root[data-glass] .scard,:root[data-glass] .chatmain,:root[data-glass] .rooms,:root[data-glass] .kcol,:root[data-glass] .kcard,:root[data-glass] .sseg,:root[data-glass] .ptabs,:root[data-glass] .look,:root[data-glass] .dcard,:root[data-glass] .pmcard,:root[data-glass] .geocard,:root[data-glass] .fbar,:root[data-glass] .tplbar,:root[data-glass] .pwrap,:root[data-glass] .gantt,:root[data-glass] .lt-tile,:root[data-glass] .choice,:root[data-glass] .mx,:root[data-glass] .srow,:root[data-glass] .tstep,:root[data-glass] .subsec,:root[data-glass] .bsec,:root[data-glass] .drawer,:root[data-glass] .modal,:root[data-glass] .menu,:root[data-glass] .pfbar{background:var(--glass)!important;backdrop-filter:var(--glassblur)!important;-webkit-backdrop-filter:var(--glassblur)!important;border-color:var(--glassb)!important}
:root[data-glass] .top{border-bottom:1px solid var(--glassb)}
:root[data-glass] .side{border-right:1px solid var(--glassb)}
:root[data-glass] .inp,:root[data-glass] select.inp,:root[data-glass] textarea.inp{background:color-mix(in srgb,var(--card) var(--gla),transparent)}

/* v393: убрана общая большая подложка под страницей; остаются единая плотность панелей 82%, приглушение фона за стеклом и светлый текст в тёмной теме */
:root[data-glass]{--gla:82%;--glassblur:blur(26px) saturate(150%) brightness(.82)}
:root[data-glass][data-theme=light]{--glassblur:blur(26px) saturate(150%) brightness(1.08)}
:root[data-glass][data-theme=dark] #main{--tx:#f5f5f7;--tx2:#c7c7cc}
:root[data-glass][data-theme=dark] #main .muted,:root[data-glass][data-theme=dark] #main .small.muted{color:#c7c7cc}
:root[data-glass] #main :is(h1,h2,h3,.small,.muted,.pill){text-shadow:0 1px 6px rgba(0,0,0,.28)}
:root[data-glass][data-theme=light] #main :is(h1,h2,h3,.small,.muted,.pill){text-shadow:0 1px 6px rgba(255,255,255,.5)}

/* v394: исправлено — при фоновом обновлении страницы (noanim) анимация появления не должна проигрываться; прежнее правило проигрывало по специфичности селектора */
#main.noanim>*:not(.top):not(.pfbar):not(.page.withcal),#main.noanim>.page.withcal>.pmain,#main.noanim .tbl tbody tr,#main.noanim .pmain>*,#main.noanim .page>*{animation:none!important;-webkit-mask-image:none!important;mask-image:none!important}
#main.soft>*:not(.top):not(.pfbar):not(.page.withcal){-webkit-mask-image:none!important;mask-image:none!important}

/* v399: доска «Проекты» по замечаниям владельца — скруглённые углы как у календаря справа, панели колонок не выпирают (та же стеклянная плотность и тонкая рамка, без теней), пустые колонки-«щели» убраны (видны только при перетаскивании карточки) */
.kan .kcol .list,.kan .kcol .list:not(:empty){border-radius:20px!important}
.kan .kcard{border-radius:14px!important;box-shadow:none!important;border:1px solid color-mix(in srgb,var(--tx) 8%,transparent)}
.kan .kcard:hover{box-shadow:0 4px 14px rgba(0,0,0,.18)!important}
.kan .kcol header .pill{border-radius:12px}
/* v404: стадии пустых колонок остаются видны узкой полоской с названием (владелец: «пропали стадии»); убрана только пустая рамка-«коробка» под названием, при перетаскивании колонка раскрывается как раньше */
.kan .kcol .list:empty{display:none!important;min-height:0!important;border:0!important;background:none!important}
body.kdrag .kan .kcol .list:empty{display:flex!important;min-height:56px!important}

/* v400: платёжный календарь — метки статусов в стилистике темы (полупрозрачные, как .c-*), а не светлые пастельные плашки */
#main .pc-tag{background:color-mix(in srgb,var(--tx) 10%,transparent);color:var(--tx2);border:1px solid color-mix(in srgb,var(--tx) 10%,transparent)}
#main .pc-tag.g{background:rgba(52,199,89,.16);color:#1c8a3c;border-color:rgba(52,199,89,.28)}
#main .pc-tag.w{background:rgba(255,159,10,.16);color:#b36b00;border-color:rgba(255,159,10,.3)}
#main .pc-tag.r{background:rgba(255,59,48,.14);color:#d42a20;border-color:rgba(255,59,48,.3)}
[data-theme=dark] #main .pc-tag.g{color:#5fdc7f}[data-theme=dark] #main .pc-tag.w{color:#ffbe55}[data-theme=dark] #main .pc-tag.r{color:#ff7a72}

/* v405: доска по ответам владельца — пустые стадии: только название (без плашки и рамки); колонки с проектами: без рамки и общей подложки, остаются только карточки на стекле (как блоки календаря) */
.kan .kcol .list:not(:empty),:root[data-glass] .kan .kcol .list:not(:empty){background:none!important;border:0!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;padding:0!important;gap:10px}
.kan .kcard,:root[data-glass] .kan .kcard{background:var(--glass,var(--card))!important;backdrop-filter:var(--glassblur,blur(22px));-webkit-backdrop-filter:var(--glassblur,blur(22px));border:1px solid var(--glassb,color-mix(in srgb,var(--tx) 8%,transparent))!important;border-radius:16px!important}
.kan .kcol:has(.list:empty) header{padding:8px 2px}
.kan .kcol:has(.list:empty) header .pill{background:none!important;border:0!important;box-shadow:none!important;padding:0!important;font-weight:600;letter-spacing:.2px}
body.kdrag .kan .kcol:has(.list:empty) header .pill{padding:2px 8px!important}

/* v407: скругление всех стеклянных подложек стадий на всех досках (проекты, закупки, задачи и др. — общий класс .kan): колонка, список, шапка, карточки, подсветка при перетаскивании */
.kan .kcol,.kan .kcol .list,.kan .kcol:has(.list:empty),.kan .kcol.over,.kan .kcol .list.over{border-radius:22px!important}
.kan .kcol header{border-radius:16px!important}
.kan .kcard,.kan .kcard.kph{border-radius:16px!important}
.kan .kcol.over,:root[data-glass] .kan .kcol.over{overflow:hidden}
:root[data-glass] .kan .kcol,:root[data-glass] .kan .kcol .list{border-radius:22px!important}
