/* ============ ТОКЕНЫ ============ */
:root{
  --bg:#f2f4fa;--surf:#f8f9fd;--surf2:#eceff9;--line:#c8d0e3;--line2:#dce2ef;
  --ink:#2b2e3a;--ink2:#454a5c;--mut:#596176;--mut2:#778197;
  --acc:#5568c9;--acch:#4457b8;--accsoft:#e7eafb;--accfg:#fff;
  --track:#dfe3f2;--dash:#bcc2da;
  --ok:#16815a;--warn:#b45a1f;--dang:#b23a5c;--sky:#3f6fa8;
  --okbg:#dcf0e6;--warnbg:#f6e5d3;--dangbg:#f6dee6;--skybg:#dde8f4;
  --okft:#a8dcc0;--warnft:#e8c39c;--dangft:#e8a8bb;
  --sh:0 1px 2px rgba(43,46,58,.08),0 1px 1px rgba(43,46,58,.04);--sh2:0 2px 4px rgba(43,46,58,.08),0 14px 30px -14px rgba(43,46,58,.22);
  --font:'IBM Plex Sans',-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;
  --ease:cubic-bezier(.2,.8,.3,1);
}
:root[data-theme="dark"]{
  --bg:#0a0b0e;--surf:#16181c;--surf2:#1c1f25;--line:#2f333b;--line2:#25282f;
  --ink:#f4f4f5;--ink2:#d4d4d8;--mut:#a1a1aa;--mut2:#71717a;
  --acc:#5a6dd9;--acch:#7686e3;--accsoft:rgba(90,109,217,.16);--accfg:#fff;
  --track:#26262a;--dash:#3f3f46;
  --ok:#34d399;--warn:#fb923c;--dang:#fb7185;--sky:#38bdf8;
  --okbg:rgba(52,211,153,.14);--warnbg:rgba(251,146,60,.14);--dangbg:rgba(251,113,133,.14);--skybg:rgba(56,189,248,.14);
  --okft:rgba(52,211,153,.35);--warnft:rgba(251,146,60,.35);--dangft:rgba(251,113,133,.35);
  --sh:0 1px 2px rgba(0,0,0,.4);--sh2:0 1px 2px rgba(0,0,0,.4),0 10px 24px -12px rgba(0,0,0,.7);
}
/* ============ БАЗА ============ */
*{box-sizing:border-box}
/* min-height, а не height: на десктопе .main всё равно закреплён к 100vh со своим внутренним
   скроллом (см. .view{overflow:auto}), а вот на мобильной раскладке (.main{height:auto}) контент
   растёт естественным потоком — если здесь стоит фиксированная height:100%, то html/body
   обрезаются ровно по высоте экрана и страница перестаёт прокручиваться, как только контент
   (например, карточка проекта) выше одного экрана */
html,body{min-height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;font-size:14.5px}
a{color:var(--acc);text-decoration:none}a:hover{color:var(--acch)}
button,input,select,textarea{font:inherit;color:inherit}
::selection{background:var(--accsoft)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
input[type="number"],input[data-money="1"],input[data-date-input="1"]{font-family:var(--mono)!important;font-weight:500!important;font-variant-numeric:tabular-nums}
.sc::-webkit-scrollbar{width:10px;height:10px}
.sc::-webkit-scrollbar-thumb{background:var(--dash);border-radius:99px;border:3px solid transparent;background-clip:content-box}
@keyframes kIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(8px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
@keyframes kFill{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes kMenu{from{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:none}}
.anim{animation:kIn .26s var(--ease) both}
@keyframes kwPop{0%{opacity:0;transform:scale(.4)}60%{opacity:1;transform:scale(1.06)}100%{opacity:1;transform:scale(1)}}
@keyframes kwLogoReveal{0%{opacity:0;transform:scale(.62) rotate(-10deg)}48%{opacity:1;transform:scale(1.08) rotate(2deg)}72%{transform:scale(.97) rotate(-.6deg)}100%{opacity:1;transform:scale(1) rotate(0)}}
@keyframes kwPulse{0%{transform:scale(.8);opacity:.32}100%{transform:scale(1.7);opacity:0}}
@keyframes kwOut{to{opacity:0;transform:scale(.97)}}
.kw-welcome{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg)}
.kw-welcome.out{animation:kwOut .3s var(--ease) both}
.kw-wm-ring{position:relative;width:96px;height:96px;margin:0 auto 22px;display:flex;align-items:center;justify-content:center}
.kw-wm-pulse{position:absolute;inset:0;border-radius:99px;background:var(--acc);opacity:.3;animation:kwPulse 1.8s ease-out infinite}
.kw-wm-pulse.d2{animation-delay:.6s}
.brand img,.kw-logo-mark,.kw-wm-logo{filter:url(#kw-logo-no-white)}
.kw-wm-logo{position:relative;width:72px;height:72px;display:block;object-fit:contain;animation:kwLogoReveal 1.45s var(--ease) both;will-change:transform,opacity}
.kw-wm-text{font-size:19px;font-weight:700;letter-spacing:-.02em;opacity:0;animation:kIn .5s var(--ease) .35s both}
.kw-wm-sub{font-size:13.5px;color:var(--mut);margin-top:6px;opacity:0;animation:kIn .5s var(--ease) .55s both}
.fill{transform-origin:left}
.pop{animation:kMenu .15s var(--ease) both;transform-origin:top right}
@media (prefers-reduced-motion:reduce){.anim,.fill,.pop,.kw-wm-logo,.kw-wm-pulse{animation:none}*{transition-duration:.01ms!important}}
/* ============ ОБОЛОЧКА ============ */
.shell{display:flex;min-height:100%}
.side{width:216px;flex-shrink:0;background:var(--surf2);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:16px 12px;position:sticky;top:0;height:100vh;z-index:10}
.brand{display:flex;align-items:center;gap:11px;padding:4px 6px 16px;cursor:pointer}
.brand img{width:34px;height:34px;display:block;object-fit:contain;flex-shrink:0}
.brand b{font-size:18px;font-weight:700;letter-spacing:-.02em;display:block}
.kbd{font-family:var(--mono);font-size:11.5px;border:1px solid var(--line);border-radius:4px;padding:1px 4px;color:var(--mut2);background:var(--surf)}
.navgrp{font-size:11.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--mut2);padding:0 8px 6px}
.nav{display:flex;flex-direction:column;gap:2px}
.nav a{display:flex;align-items:center;gap:10px;height:38px;padding:0 10px;border-radius:8px;font-size:14.5px;font-weight:500;color:var(--ink2);cursor:pointer;transition:background .16s,color .16s}
.nav a:hover{background:var(--bg);color:var(--ink)}
.nav a.on{background:var(--acc);color:var(--accfg);font-weight:600}
.nav a.on:hover{background:var(--acch);color:var(--accfg)}
.me{display:flex;align-items:center;gap:9px;padding:10px 8px 2px;margin-top:auto;border:0;border-top:1px solid var(--line);background:transparent;text-align:left;cursor:default}
.main{flex:1;min-width:0;display:flex;flex-direction:column;height:100vh;overflow:hidden}
.top{height:62px;flex-shrink:0;display:flex;align-items:center;gap:10px;padding:0 24px;background:var(--surf);border-bottom:1px solid var(--line)}
.top h1{margin:0;flex:0 0 auto;font-size:18.5px;font-weight:600;letter-spacing:-.02em;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.view{flex:1;overflow:auto;padding:18px 24px 40px}
.card.project-summary{position:sticky;top:0;z-index:20;isolation:isolate;box-shadow:var(--sh2);border-top:2px solid var(--mut2)}
.project-summary::before{content:"";position:absolute;z-index:0;pointer-events:none;left:-2px;right:-2px;top:-28px;height:26px;background:var(--bg)}
.project-summary>*{position:relative;z-index:1}
.project-summary-layout{display:flex;flex-wrap:wrap;gap:16px;align-items:start;justify-content:space-between}
.project-summary-info{min-width:0}
.project-summary-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.project-summary-bottom{display:flex;align-items:center;gap:12px;min-width:0;margin-top:10px}
.project-deadline-badge{flex:0 0 auto}
.btn.project-summary-action{width:211px;height:44px;justify-content:center;font-size:13.5px}
.project-summary .project-actions>.btn.ico{width:44px;height:44px}
.project-summary .project-actions{margin-left:auto;flex-wrap:wrap;max-width:100%}
.project-card-view #per>.ph{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}
.project-card-view #per>.ph>.pt{min-width:0}
.project-card-view #per .periodic-controls{margin-left:0!important;flex-wrap:nowrap;justify-content:flex-end}
.project-card-view #per .periodic-toggle{flex:0 0 auto}
.project-card-view #per .periodic-toggle button{flex:0 0 auto;min-width:100px;overflow:visible;text-overflow:clip}
.wrap{max-width:1720px}
/* ============ КОМПОНЕНТЫ ============ */
.btn{height:38px;padding:0 14px;border:1px solid var(--line);border-radius:8px;background:var(--surf);color:var(--ink2);font-size:14px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap;transition:background .16s,color .16s,border-color .16s}
.btn:hover{background:var(--surf2);color:var(--ink)}
.btn.pri{border:0;background:var(--acc);color:var(--accfg);font-weight:600}
.btn.pri:hover{background:var(--acch)}
.btn.option{height:40px;border:1px solid var(--acc);background:var(--acc);color:var(--accfg);font-weight:600}
.btn.option:hover{background:var(--acch);border-color:var(--acch);color:var(--accfg)}
.btn.dan{border:0;background:var(--dang);color:#fff;font-weight:600}
.btn.ico{width:38px;padding:0;justify-content:center;border-color:transparent;background:var(--surf2);color:var(--ink2)}
.btn.ico:hover{background:var(--line);color:var(--ink)}
.btn.ico.dan{background:var(--dangbg);color:var(--dang)}
.btn.ico.dan:hover{background:var(--dang);color:#fff}
.btn.ico.act{background:var(--accsoft);color:var(--acc)}
.btn.ico.act:hover{background:var(--acc);color:#fff}
.btn.sm{height:34px;font-size:13.5px;padding:0 12px}.btn.sm.ico{width:34px}
.date-quick{display:flex;gap:6px;margin-top:6px}
.date-quick .btn{height:30px;padding:0 10px;font-size:12.5px}
.btn.sm.urgent{border-color:var(--warnft);background:var(--warnbg);color:var(--warn);font-weight:600}
.btn.sm.urgent:hover{background:var(--warn);border-color:var(--warn);color:#fff}
.btn.action-btn{width:34px;flex:0 0 34px;padding:0;gap:0;justify-content:center;font-weight:600}
.btn.action-btn svg{flex-shrink:0}
.btn.action-btn.primary{border:0;background:var(--acc);color:var(--accfg)}
.btn.action-btn.primary:hover{background:var(--acch)}
.btn.action-btn.urgent{border-color:var(--warnft);background:var(--warnbg);color:var(--warn)}
.btn.action-btn.urgent:hover{background:var(--warn);border-color:var(--warn);color:#fff}
.btn.action-btn.danger{border-color:var(--line);background:var(--surf);color:var(--mut);font-weight:600}
.btn.action-btn.danger:hover{border-color:var(--dangft);background:var(--dangbg);color:var(--dang)}
button:focus-visible,a:focus-visible{outline:2px solid var(--acc);outline-offset:3px}
.menu.file-menu{position:fixed;width:220px}
.lnk{font-size:13.5px;font-weight:600;color:var(--acc);cursor:pointer;background:none;border:0;padding:0;white-space:nowrap}
.card{background:var(--surf);border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh)}
.card.pad{padding:16px 20px}
.panel{background:var(--surf);border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh)}
.docs-device-list{overflow:hidden}
.panel>.thead:first-child{border-radius:11px 11px 0 0}
.panel>*:last-child{border-radius:0 0 11px 11px}
.overview-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
.overview-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:14px;margin-bottom:14px;align-items:start}
.overview-value{display:flex;align-items:center;gap:8px;font-size:22px;font-weight:650;letter-spacing:-.03em;margin-top:10px}
.muted{display:block;color:var(--mut);font-size:12.5px;line-height:1.4}
.overview-project{padding:13px 18px;border-bottom:1px solid var(--line2)}
.overview-project:last-child{border-bottom:0}
.overview-row{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--line2)}
.overview-row:last-child{border-bottom:0}
.overview-row b{display:block;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.overview-row .muted{margin-top:3px}
.overview-section-label{padding:10px 18px 5px;color:var(--mut);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.overview-section-label.dan{color:var(--dang)}
.overview-empty{padding:18px;color:var(--mut2);font-size:13.5px;text-align:center}
.overview-meta{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:9px 14px;padding:15px 18px;font-size:13px}
.overview-meta span{color:var(--mut)}
.overview-meta b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;text-align:right}
.overview-log{display:grid;grid-template-columns:150px auto minmax(0,1fr);align-items:center;gap:8px;padding:9px 14px;border-bottom:1px solid var(--line2);font-size:12px}
.overview-log:last-child{border-bottom:0}
.overview-add{display:flex;align-items:center;gap:8px;width:100%;padding:13px 18px;border:0;border-top:1px solid var(--line2);background:var(--surf2);color:var(--acc);font:600 14px var(--font);cursor:pointer;text-align:left}
.overview-add:hover{background:var(--accsoft)}
.link-row .acts{flex-shrink:0}
.ph{display:flex;align-items:center;gap:10px;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--line2);flex-wrap:wrap}
.pt{font-size:15px;font-weight:600;letter-spacing:-.01em}
.cap{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mut)}
.empty{border:1px dashed var(--dash);border-radius:10px;padding:20px;text-align:center;color:var(--mut2);font-size:14px;background:var(--surf2)}
.search{height:36px;border:1px solid var(--line);border-radius:8px;background:var(--surf);display:flex;align-items:center;gap:8px;padding:0 11px;color:var(--mut2);min-width:0}
.search input{border:0;outline:0;background:transparent;flex:1;font-size:14px;color:var(--ink);min-width:0}
select.sel{height:36px;max-width:100%;min-width:0;border:1px solid var(--line);border-radius:8px;background:var(--surf);font-size:14px;padding:0 10px;outline:0;cursor:pointer}
.lbl{font-size:12.5px;font-weight:600;color:var(--mut);margin-bottom:5px;display:block}
.lbl.req{color:var(--dang);font-weight:600}
.fld{height:40px;width:100%;min-width:0;border:1px solid var(--line);border-radius:8px;background:var(--surf2);padding:0 11px;font-family:var(--mono);font-size:14px;outline:0;display:flex;align-items:center;gap:8px;transition:border-color .16s,box-shadow .16s}
input.fld{font-family:var(--mono)}
input.fld[type=date]{min-width:0;padding-right:6px}
input[type=date]::-webkit-calendar-picker-indicator{margin-left:2px;cursor:pointer;opacity:.6}
input[type=date]::-webkit-calendar-picker-indicator:hover{opacity:1}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
input[type=number]{-moz-appearance:textfield}
.fld:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--accsoft);background:var(--surf)}
.fld.dashed{border-style:dashed;border-color:var(--dash);color:var(--mut2);background:transparent;font-family:var(--font);font-size:13.5px}
.off{opacity:.45;filter:grayscale(1);pointer-events:none}
.tgl{height:40px;display:flex;gap:6px}
.tgl button{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 6px;border:1px solid var(--line);border-radius:8px;background:var(--surf);font-size:13.5px;font-weight:500;color:var(--ink2);cursor:pointer;transition:background .16s,border-color .16s,color .16s}
.tgl button:hover{background:var(--surf2)}
.tgl button.on{border:1.5px solid var(--acc);background:var(--acc);color:var(--accfg);font-weight:600}
.periodic-name{font-size:14.5px;font-weight:600;line-height:1.35;overflow-wrap:anywhere;word-break:break-word}
.seg{display:inline-flex;padding:2px;border-radius:8px;background:var(--bg);border:1px solid var(--line)}
.seg button{height:32px;padding:0 13px;border:0;border-radius:6px;background:none;font-size:13.5px;font-weight:500;color:var(--mut);cursor:pointer}
.seg button.on{background:var(--surf);color:var(--ink);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.06)}
.chk{width:18px;height:18px;padding:0;border-radius:4px;border:1.5px solid var(--dash);flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;background:transparent}
.chk.on{background:var(--acc);border-color:var(--acc);color:var(--accfg)}
.tsel{width:16px;height:16px;padding:0;border-radius:99px;border:1.5px solid var(--dash);flex-shrink:0;cursor:pointer;background:transparent;margin-left:auto}
.tsel.on{background:var(--acc);border-color:var(--acc);box-shadow:0 0 0 3px var(--accsoft)}
.bdg{font-family:var(--mono);font-size:12px;font-weight:600;padding:3px 8px;border-radius:6px;white-space:nowrap;display:inline-flex;align-items:center;gap:6px;color:var(--mut);background:var(--bg)}
.bdg.ok{color:var(--ok);background:var(--okbg)}.bdg.warn{color:var(--warn);background:var(--warnbg)}.bdg.dan{color:var(--dang);background:var(--dangbg)}.bdg.sky{color:var(--sky);background:var(--skybg)}
.chip{height:32px;display:inline-flex;align-items:center;gap:7px;padding:0 12px;border-radius:8px;border:1px solid var(--line);background:var(--surf);color:var(--ink2);font-size:13.5px;font-weight:500;cursor:pointer;white-space:nowrap}
.chip.on{background:var(--acc);border-color:var(--acc);color:var(--accfg);font-weight:600}
.dot{width:7px;height:7px;border-radius:99px;flex-shrink:0}
.ext{width:32px;height:32px;border-radius:7px;color:#fff;font-family:var(--mono);font-size:10.5px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.tag{font-size:13px;font-weight:500;padding:4px 9px;border-radius:6px;background:var(--bg);color:var(--ink2);display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
button.tag{border:0;cursor:pointer;font:inherit}
.me:focus-visible,.chk:focus-visible,.tsel:focus-visible,.tag:focus-visible{outline:3px solid var(--accsoft);outline-offset:2px}
.bar{height:6px;border-radius:99px;background:var(--track);overflow:hidden;display:block}
.bar.md{height:6px;border-radius:99px}
.bar>i{display:block;height:100%;border-radius:inherit;transition:width .28s var(--ease)}
.wizard-ready{display:grid;grid-template-columns:max-content minmax(132px,220px) 52px minmax(0,1fr);align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--surf2)}
.wizard-ready .bar{width:100%;min-width:0}
.wizard-ready #m_rtxt{white-space:nowrap;text-align:right}
.wizard-ready #m_rmiss{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--mut);text-align:right}
.thead>div{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.thead{background:var(--surf2);border-bottom:1px solid var(--line);height:38px;padding:0 16px;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mut);align-items:center}
.tr{padding:0 16px;border-bottom:1px solid var(--line2);position:relative;transition:background .16s;cursor:pointer}
.tr:hover{background:var(--surf2)}
.tone{position:absolute;left:0;top:8px;bottom:8px;width:2px;border-radius:0 2px 2px 0}
.acts{display:flex;align-items:center;gap:5px;justify-content:flex-end;flex-wrap:wrap}
.file-actions{flex-shrink:0}
.file-actions,.periodic-actions,.periodic-row-actions{flex-wrap:nowrap}
.device-actions{flex-shrink:0}
.lift{transition:transform .16s,box-shadow .16s,border-color .16s}
.lift:hover{transform:translateY(-2px);box-shadow:var(--sh2)}
.task-tile{padding:9px 12px}
.task-title-row{display:flex;align-items:flex-start;gap:9px}
.task-title{flex:1;min-width:0;color:var(--ink);font-size:16px;font-weight:700;line-height:1.25;overflow-wrap:anywhere}
.task-title.done{color:var(--mut);text-decoration:line-through}
.task-meta{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.task-footer{display:flex;align-items:center;justify-content:space-between;margin-top:7px;padding-top:6px;border-top:1px solid var(--line2)}
.menu{position:absolute;z-index:60;min-width:206px;background:var(--surf);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh2);padding:4px}
.menu div,.menu button.menu-item{display:flex;align-items:center;gap:9px;width:100%;padding:8px 9px;border:0;border-radius:7px;background:transparent;color:inherit;font:inherit;font-size:14px;font-weight:500;text-align:left;cursor:pointer}
.menu div:hover,.menu button.menu-item:hover{background:var(--surf2)}
.menu div.dan,.menu button.menu-item.dan{color:var(--dang)}
.menu hr{border:0;border-top:1px solid var(--line2);margin:4px 6px}
.settings-anchor{position:relative;flex-shrink:0}
.settings-trigger{border-color:var(--line)!important}
.settings-pop{right:0;top:44px;width:280px;padding:8px}
.settings-heading{padding:6px 8px 8px;color:var(--mut);font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}
.settings-pop .settings-row{width:100%;min-height:38px;display:flex;align-items:center;gap:9px;padding:8px 9px;border:0;border-radius:7px;background:transparent;color:var(--ink2);font:inherit;font-size:14px;font-weight:500;text-align:left;cursor:pointer}
.settings-pop .settings-row:hover{background:var(--surf2);color:var(--ink)}
.settings-pop .settings-row.dan{color:var(--dang)}
.settings-value{margin-left:auto;color:var(--mut2);font-size:12.5px}
.settings-push{padding:4px!important;cursor:default!important}
.settings-push:hover{background:transparent!important}
.settings-push-button{width:100%;justify-content:flex-start}
.ship{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.ship b{font-family:var(--mono);font-size:14px;font-weight:600;text-align:center;line-height:1.2;display:block}
.g2{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:14px;align-items:start}
.project-workspace{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto auto auto;align-items:stretch}
.project-workspace-column{display:flex;flex-direction:column;gap:14px;min-width:0;align-items:stretch}
.project-workspace-column>.card,.project-workspace-column>.panel{height:auto;box-sizing:border-box}
.project-workspace-right>.project-documents{min-height:159px}
.project-feedback{display:flex;flex-direction:column;gap:14px;min-width:0}
.project-workspace-left>.project-tasks{order:1}
.project-workspace-left>#per{order:2}
.project-card-view .periodic-content{min-height:0}
.project-card-view .task-card-list{min-height:0}
@media (min-width:1041px){
  .project-workspace{grid-template-rows:390px 340px;align-items:stretch}
  .project-workspace-column{display:contents}
  .project-workspace-left>.project-tasks{grid-column:1;grid-row:1;display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}
  .project-workspace-left>#per{grid-column:1;grid-row:2;height:100%;min-height:0;overflow:hidden}
  .project-workspace-left>.project-tasks>.task-card-list{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding-right:4px}
  .project-workspace-right>.project-documents{grid-column:2;grid-row:1;display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden;contain:size}
  .project-workspace-right>.project-documents>div:last-child{flex:1;min-height:0;overflow-y:auto}
  .project-workspace-right>.project-feedback{grid-column:2;grid-row:2;align-self:stretch;height:100%;min-height:0;overflow:hidden}
  .project-workspace-right>.project-feedback>.card{flex:1 1 0;min-height:0;overflow:hidden}
  .project-workspace-left>#per>.periodic-content{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden}
  .project-card-view #per .periodic-list{height:auto;overflow:visible;padding-right:0}
}
.project-upload-status{overflow:hidden}
.project-upload-status .upload-progress{border-bottom:0!important}
.g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px}
.project-fields-panels{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,477px);gap:16px;align-items:stretch}
.project-fields-card{min-width:0}
.project-special-heading{font-size:15px;font-weight:600;letter-spacing:-.01em}
.project-main-fields{min-width:0}
.project-fields-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);grid-auto-rows:auto;gap:8px 12px}
.project-fields-grid>div,.project-special-grid>div{min-width:0;display:grid;grid-template-rows:auto 44px minmax(0,auto)}
.project-fields-grid>div>.fld,.project-fields-grid>div>.tgl,.project-special-grid>div>.fld,.project-special-grid>div>.tgl{height:44px;min-height:44px;align-self:stretch}
.project-fields-grid>.full,.project-special-grid>.full{grid-column:1/-1}
.project-fields-grid .tgl{max-width:460px;gap:6px}
.project-special-grid .tgl{max-width:460px;gap:12px}
.project-special-fields{min-width:0}
.project-special-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:auto;gap:8px 12px;max-width:460px}
.project-special-grid .fld,.project-special-grid select.fld{max-width:460px}
.project-select-wrap{position:relative;max-width:460px}
.project-select-wrap select.fld{height:44px;min-height:44px;max-width:none;padding-right:40px;appearance:none}
.project-select-chevron{position:absolute;right:14px;top:50%;display:flex;align-items:center;transform:translateY(-50%);pointer-events:none;color:var(--mut2)}
.project-special-grid>.special-half{grid-column:span 1}
.project-special-grid>.special-date-field{grid-column:span 1}
.project-special-grid>div:has(>.tgl){grid-column:1/-1}
.project-special-grid .tgl{overflow:visible}
.project-special-grid .tgl button{overflow:visible;text-overflow:clip}
.completion-progress-field{gap:12px;padding-left:11px;padding-right:11px}
.completion-progress-bar{flex:1;min-width:0}
.completion-progress-value{display:inline-flex;align-items:baseline;justify-content:flex-end;gap:2px;flex:0 0 54px;min-width:54px}
.completion-progress-input{width:34px;min-width:34px;padding:0;border:0;outline:0;background:transparent;font-family:var(--mono);font-size:14px;font-weight:600;text-align:right}
.completion-progress-unit{font-family:var(--mono);font-size:13px;font-weight:600;line-height:1;color:var(--mut2)}
.project-comment{display:flex;flex-direction:column}
.project-comment>textarea{height:96px;min-height:96px;flex:0 0 auto}
.project-card-view #per{display:flex;flex-direction:column}
.project-card-view #per .periodic-list{height:312px;overflow-y:auto;padding-right:4px}
.project-card-view #per .periodic-card-row:last-child{margin-bottom:0!important}
.fld.contract-number-input{height:44px;min-height:44px;max-height:44px;padding:11px;resize:none;display:block;line-height:20px;white-space:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;font-family:var(--mono);font-size:14px;font-weight:500}
.fld.contract-number-input::-webkit-scrollbar{display:none}
.employee-phone{font-size:26px;gap:9px;line-height:1}
.employee-phone svg{width:19px;height:19px}
.g4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.gdoc{display:grid;grid-template-columns:300px minmax(0,1fr);gap:12px;align-items:start}
.ptab{display:grid;padding-right:44px;grid-template-columns:minmax(290px,3.1fr) minmax(180px,1.3fr) minmax(125px,.9fr) minmax(135px,1.05fr) minmax(110px,.8fr)}
.ptab.thead>div{text-align:center!important;padding-left:10px!important;padding-right:10px!important}
.copy-success{color:var(--ok)!important;animation:copyDone .5s var(--ease) both}
@keyframes copyDone{0%{transform:scale(.82)}55%{transform:scale(1.12)}100%{transform:scale(1)}}
.docs-status button.docs-submitted.on{border-color:var(--ok);background:var(--ok);color:#fff}
.docs-status button.docs-missing.on{border-color:var(--dang);background:var(--dang);color:#fff}
.project-fields-grid .docs-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;max-width:none}
.project-fields-grid .docs-status button{width:100%;min-width:0}
.pertab{display:grid;grid-template-columns:minmax(230px,2.2fr) minmax(110px,1fr) 230px minmax(190px,1.6fr) 118px;column-gap:14px}
.ftab{display:grid;grid-template-columns:minmax(210px,1fr) 90px 110px 118px}
.dltab{display:grid;grid-template-columns:minmax(220px,2fr) 260px minmax(150px,1fr) minmax(130px,.9fr);gap:16px}
.mob{display:none}
.tabbar{display:none}
/* ============ АДАПТИВ ============ */
@media (max-width:1440px){.gdoc{grid-template-columns:280px minmax(0,1fr)}}
@media (max-width:1180px){.hlink-lbl{display:none}}
@media (max-width:1400px){.ptab{grid-template-columns:minmax(0,2.3fr) minmax(180px,1.45fr) minmax(100px,.85fr) minmax(120px,1.1fr) minmax(90px,.8fr)}}
@media (max-width:1480px){.pertab{grid-template-columns:minmax(190px,2.2fr) minmax(170px,1.4fr) minmax(160px,1.2fr) 118px}.c-grp{display:none}}
@media (max-width:1240px){.gdoc{grid-template-columns:260px minmax(0,1fr)}.c-prev{display:none}.pertab{grid-template-columns:minmax(180px,2.2fr) minmax(170px,1.4fr) 118px}.c-grp{display:none}}
@media (max-width:1160px){.gdoc{grid-template-columns:240px minmax(0,1fr)}.c-date{display:none}.ftab{grid-template-columns:minmax(120px,1fr) 104px 118px}}
@media (max-width:1080px){.c-size{display:none}.ftab{grid-template-columns:minmax(110px,1fr) 118px}
  .pertab{grid-template-columns:minmax(170px,2fr) 190px 118px}.c-proj{display:none!important}}
@media (max-width:1040px){.g2{grid-template-columns:1fr}.project-fields-panels{grid-template-columns:1fr;gap:16px}.project-special-fields{border:0;padding:0}.project-special-grid{max-width:460px}.project-workspace{grid-template-rows:none}}
@media (max-width:920px){.c-ship{display:none}.ptab{grid-template-columns:minmax(0,1.7fr) minmax(180px,1.55fr) minmax(100px,.9fr) minmax(90px,.8fr)}}
@media (max-width:940px){.gdoc{grid-template-columns:1fr}.pertab{grid-template-columns:minmax(150px,2fr) 170px 118px}}
@media (max-width:820px){
  html,body{width:100%;max-width:100%;overflow-x:hidden}
  #app{width:100vw;max-width:100vw;min-width:0}
  .shell,.main,.view{width:100vw!important;max-width:100vw!important;min-width:0}
  .side{display:none}
  .main{height:auto;overflow:visible}
  .desk{display:none!important}
  .mob{display:block}
  .view{padding:4px 12px calc(94px + env(safe-area-inset-bottom));overflow:visible}
  .wrap{width:calc(100vw - 24px)!important;max-width:calc(100vw - 24px)!important;min-width:0}
  .wrap>*,.g2>*,.g3>*,.g4>*,.gdoc>*{min-width:0;max-width:100%}
  .top{width:100vw;max-width:100vw;padding:0 10px;gap:6px;position:sticky;top:0;z-index:30;overflow:hidden}
  .top h1{flex:1;font-size:16px}
  .project-summary{top:62px}
  .project-summary-layout{display:flex;flex-wrap:wrap}
  .project-summary-info{display:flex;flex:1 1 100%;flex-wrap:wrap;align-items:center;gap:8px}
  .project-summary-meta{display:contents}
  .project-summary-bottom{margin:0 0 0 auto;justify-content:flex-end;gap:8px;flex-wrap:wrap}
  .project-card-view #per>.ph{display:flex}
  .top-spacer{display:none}
  .top-create{width:44px;flex:0 0 44px;padding:0;justify-content:center}
  .top-create-label{display:none}
  .hidem{display:none!important}
  .g2,.g3,.g4,.gdoc,.project-fields-grid,.project-special-grid{grid-template-columns:1fr!important}
  .project-special-grid{max-width:100%}
  .overview-cards,.overview-grid{grid-template-columns:1fr!important}
  .overview-log{grid-template-columns:1fr auto;gap:5px}
  .overview-log>span:last-child{grid-column:1 / -1}
  .overview-meta{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr)}
  .link-row{align-items:flex-start;flex-wrap:wrap}
  .link-row>div:first-child{max-width:100%}
  .link-row .muted{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .link-row .acts{width:100%;justify-content:flex-end}
  .btn.action-btn{width:34px!important;height:34px!important;min-height:34px!important;flex:0 0 34px!important;padding:0!important}
  .pertab,.dltab{grid-template-columns:minmax(0,1fr)!important;row-gap:10px}
  .pertab.thead{display:none}
  .pertab>div,.dltab>div{text-align:left!important}
  .btn,.chip,.tgl button{min-height:44px}
  .fld{height:44px;font-size:16px}
  .card.pad{padding:14px}
.project-card-view{width:calc(100vw - 24px)!important;max-width:calc(100vw - 24px)!important;min-width:0}
  .project-card-view>*{width:100%!important;max-width:100%!important;min-width:0}
  .project-title{font-size:20px!important;overflow-wrap:anywhere;word-break:break-word}
  input[type="number"],input[data-money="1"],input[data-date-input="1"]{font-size:16px!important;font-weight:600!important;color:var(--ink)!important}
  .project-date-value{font-size:16px!important;font-weight:600!important;color:var(--ink)!important;letter-spacing:-.01em}
  .project-actions{max-width:100%;flex:1 1 100%!important;flex-wrap:wrap}
  .project-summary .project-actions{margin-right:0}
  /* На узком экране действия карточки всегда образуют ровную сетку: первые
     две кнопки сверху, «Производство» и меню — снизу. */
  .project-summary .project-actions{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;width:100%}
  .project-summary .project-actions .project-summary-action{width:auto;min-width:0}
  .project-summary .project-actions>.btn.ico{width:44px;min-width:44px;justify-self:end}
  .project-card-view .bdg{max-width:100%;white-space:normal;overflow-wrap:anywhere}
  .project-card-view .mono{max-width:100%;overflow-wrap:anywhere}
  .project-card-view .ph>*{min-width:0}
  .project-card-view #per .periodic-controls{width:100%;margin-left:0!important;display:grid!important;grid-template-columns:minmax(0,1fr);gap:8px}
  .project-card-view #per .periodic-controls .periodic-toggle{width:100%;height:44px;min-width:0;flex:1 1 auto}
  .project-card-view #per .periodic-controls .periodic-toggle button{flex:1 1 0;min-width:0}
  .project-card-view #per .periodic-controls>.btn{width:100%;justify-content:center}
  .pertab>.periodic-row-actions{width:100%;box-sizing:border-box;justify-content:flex-end!important}
  .periodic-card-row,.task-card-row{flex-wrap:wrap;max-width:100%;box-sizing:border-box}
  .periodic-info{flex:1 1 calc(100% - 22px)!important}
  .periodic-info>div{white-space:normal!important;overflow-wrap:anywhere}
  .periodic-card-row>.bdg,.periodic-card-row>.btn,.periodic-card-row>.periodic-actions{margin-left:19px}
  .task-card-row>div{overflow-wrap:anywhere}
  .task-card-row>.acts{flex:0 0 auto;flex-wrap:nowrap}
  .task-notify-btn{flex:1 1 100%;justify-content:center;white-space:nowrap}
  .task-toolbar{display:grid!important;grid-template-columns:minmax(0,1fr);align-items:stretch!important;gap:10px!important}
  .task-toolbar>*{width:100%!important;max-width:100%;min-width:0}
  .task-toolbar>span{display:none}
  .task-toolbar .search,.task-toolbar .sel,.task-toolbar .task-notify-btn,.task-toolbar>[data-act="hide-done"]{flex:none!important}
  .task-toolbar .sel{height:44px}
  .task-toolbar>[data-act="hide-done"]{justify-content:center}
  .file-row{align-items:flex-start!important;flex-wrap:wrap;max-width:100%;box-sizing:border-box;overflow:hidden}
  .file-row>div{flex:1 1 calc(100% - 44px);max-width:calc(100% - 44px);min-width:0}
  .file-row .file-actions{width:calc(100% - 44px);max-width:calc(100% - 44px);justify-content:flex-end;margin-left:44px;box-sizing:border-box}
  /* мобильная карточка проекта: меньше воздуха, действия файла остаются в одной строке */
  .project-card-view{gap:8px!important}
  .project-card-view .project-fields-card{margin-top:8px}
  .project-card-view .project-summary{padding:10px 12px}
  .project-workspace{gap:8px!important}
  .project-workspace-column{gap:8px}
  .project-card-view .task-card-list{max-height:312px;overflow-y:auto;overflow-x:hidden;padding-right:4px}
  .project-card-view .ph{padding-bottom:8px;margin-bottom:8px}
  .file-row{align-items:center!important;flex-wrap:nowrap!important;gap:8px!important;padding:8px!important}
  .file-row>div{flex:1 1 auto!important;max-width:none!important;min-width:0!important}
  .file-row .file-actions{width:auto!important;max-width:none!important;flex:0 0 auto!important;justify-content:flex-end!important;margin-left:auto!important;gap:4px!important}
  .file-row .file-actions .action-btn{width:32px!important;height:32px!important;min-height:32px!important;flex:0 0 32px!important}
  .file-row .ext{width:30px;height:30px;font-size:10px}
  .ftab:not(.thead){grid-template-columns:minmax(0,1fr)!important}
  .ftab .file-actions{width:100%;justify-content:flex-start}
  .device-actions{width:100%;justify-content:flex-start;gap:6px}
  .device-actions .action-btn.danger{margin-left:0;padding:0;border-left:0;border-radius:8px}
  .dlg .bd>div[style*="grid-template-columns"]{grid-template-columns:1fr!important}
.step-bar{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .wizard-ready{grid-template-columns:max-content minmax(80px,1fr) max-content;gap:8px;padding:10px 12px}
  .wizard-ready #m_rmiss{grid-column:1/-1;text-align:left}
  .tabbar{display:flex;position:fixed;left:0;right:auto;width:100vw;max-width:100vw;bottom:0;z-index:50;height:calc(74px + env(safe-area-inset-bottom));padding:8px 6px calc(8px + env(safe-area-inset-bottom));background:color-mix(in srgb,var(--surf) 92%,transparent);backdrop-filter:blur(12px);border-top:1px solid var(--line);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .tabbar::-webkit-scrollbar{display:none}
  .tabbar a{flex:1 0 62px;min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;color:var(--mut2);font-size:11.5px;font-weight:600;position:relative;padding-top:2px;scroll-snap-align:start}
  .tabbar a svg{flex-shrink:0;width:20px;height:20px}
  .tabbar a span{min-width:0;max-width:100%;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.15}
  .tabbar a.on{color:var(--acc)}
  /* всплывающие панели — по ширине экрана, не уезжают за край */
  .alerts-pop{position:fixed!important;left:10px!important;right:10px!important;top:66px!important;width:auto!important;max-height:calc(100vh - 160px)!important}
  .menu.pop{position:fixed!important;left:10px!important;right:10px!important;top:auto!important;bottom:calc(88px + env(safe-area-inset-bottom))!important;width:auto!important;max-width:none!important}
  .settings-pop{left:auto!important;right:10px!important;top:66px!important;bottom:auto!important;width:min(300px,calc(100vw - 20px))!important}
}
@media (min-width:821px){
  /* На desktop все текстовые действия карточки имеют одинаковую ширину.
     Для длинной подписи уменьшаем только внутренние поля, сохраняя размер
     самой кнопки и не затрагивая мобильную раскладку. */
  .project-summary .project-production-action{padding-left:8px;padding-right:8px;gap:4px}
  .panel:has(> .ptab),.panel:has(> .pertab),.panel:has(> .ftab){overflow-x:auto}
  .panel:has(> .ptab)>.ptab{min-width:860px}
  .panel:has(> .pertab)>.pertab{min-width:760px}
  .panel:has(> .ftab)>.ftab{min-width:620px}
}
/* ============ ДИАЛОГИ ============ */
.ovl{position:fixed;inset:0;z-index:90;background:rgba(30,32,46,.46);display:flex;align-items:flex-start;justify-content:center;padding:52px 16px;overflow:auto}
:root[data-theme="dark"] .ovl{background:rgba(0,0,0,.62)}
.dlg{width:100%;background:var(--surf);border:1px solid var(--line);border-radius:14px;box-shadow:var(--sh2);animation:kIn .2s var(--ease) both}
.dlg .hd{display:flex;align-items:center;gap:10px;padding:15px 18px;border-bottom:1px solid var(--line2)}
.dlg .hd b{font-size:16px;font-weight:600;letter-spacing:-.02em}
.dlg .bd{padding:16px 18px}
.dlg .ft{display:flex;align-items:center;gap:8px;padding:13px 18px;border-top:1px solid var(--line2);background:var(--surf2);border-radius:0 0 13px 13px}
select.fld{font-family:var(--font);width:100%;cursor:pointer}
textarea.fld{font-family:var(--font);height:auto;min-height:74px;padding:9px 11px;resize:vertical;display:block;line-height:1.45}
.full{grid-column:1/-1}
.err{font-size:13.5px;font-weight:600;color:var(--dang)}
.toast{transition:opacity .2s var(--ease),transform .2s var(--ease);position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(0);z-index:120;background:var(--ink);color:var(--bg);font-size:14px;font-weight:600;padding:11px 17px;border-radius:10px;box-shadow:var(--sh2);animation:toastIn .2s var(--ease) both;max-width:80vw}
.drop{border-color:var(--acc)!important;background:var(--accsoft)!important;color:var(--acc)!important}
@media (max-width:820px){
  .toast{bottom:calc(88px + env(safe-area-inset-bottom))}
  .ovl{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;padding:10px;overflow:hidden}
  .dlg{width:100%!important;max-width:calc(100vw - 20px)!important;min-width:0;max-height:calc(100dvh - 20px);display:flex;flex-direction:column;overflow:hidden}
  .dlg .hd,.dlg .ft{flex-shrink:0}
  .dlg .bd{min-width:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .dlg .bd>div,.dlg .bd>div[style*="grid-template-columns"]>*{min-width:0;max-width:100%}
  .dlg .fld{display:block;width:100%;min-width:0;max-width:100%;font-size:16px}
  .dlg input[type="date"]{-webkit-appearance:none;appearance:none}
  .dlg .ft{flex-wrap:wrap}
}
