:root{
  --green:#16a34a; --green-d:#15803d; --ink:#0f172a; --mut:#64748b;
  --line:#e5e7eb; --bg:#f6f8fb; --card:#fff; --gold:#d4a017;
  --red:#e11d48; --amber:#f59e0b;
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,Segoe UI,Roboto,Inter,Arial,sans-serif;
  color:var(--ink);background:var(--bg);font-size:14px}
.app{display:grid;grid-template-columns:230px 1fr;min-height:100vh}

/* sidebar */
.side{background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;padding:16px 12px}
.brand{display:flex;gap:10px;align-items:center;padding:6px 8px 16px}
.brand-ico{font-size:22px}
.brand small{display:block;color:var(--mut);font-size:11px}
nav{display:flex;flex-direction:column;gap:2px;margin-top:8px}
.nav{padding:10px 12px;border-radius:9px;color:#334155;cursor:pointer;text-decoration:none;font-weight:500}
.nav:hover{background:#f1f5f9}
.nav.on{background:var(--ink);color:#fff}
.side-foot{margin-top:auto;background:#f1f5f9;border-radius:12px;padding:14px;color:#475569;font-size:12px;line-height:1.5}

/* main */
.main{padding:18px 24px 40px;min-width:0}
.top{display:flex;gap:16px;align-items:center;margin-bottom:18px}
.search{flex:1;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:#fff}
.top-right{display:flex;gap:14px;align-items:center}
.asof,.fresh{color:var(--mut);font-size:12px;text-align:right;line-height:1.3}
.btn{background:#fff;border:1px solid var(--green);color:var(--green-d);border-radius:10px;
  padding:9px 14px;font-weight:600;cursor:pointer}
.btn:hover{background:#f0fdf4}
.btn:disabled{opacity:.6;cursor:wait}
.user{font-weight:600}.user small{display:block;color:var(--mut);font-weight:400;font-size:11px}

.h1row{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:16px}
h1{margin:0;font-size:30px}
.sub{margin:4px 0 0;color:var(--mut)}
.norms{color:var(--mut);font-size:12px}

/* kpi */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px}
.kpi .lbl{color:var(--mut);font-size:12px;display:flex;gap:8px;align-items:center}
.kpi .val{font-size:24px;font-weight:700;margin-top:6px}
.kpi .note{font-size:12px;color:var(--mut);margin-top:4px}
.kpi .up{color:var(--green)}
.chip{display:inline-block;background:#dcfce7;color:var(--green-d);border-radius:20px;padding:2px 8px;font-size:11px;font-weight:600}

/* cards */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px}
.card.gold{background:linear-gradient(180deg,#fffdf5,#fff)}
.card-h{font-weight:600;margin-bottom:12px;display:flex;gap:8px;align-items:center}
/* фикс-высота контейнера графика: canvas абсолютно заполняет бокс, высоту задаёт бокс,
   а не canvas — иначе responsive Chart.js уходит в бесконечный рост высоты */
.chart-box{position:relative;width:100%}
.chart-box>canvas{position:absolute;inset:0;width:100%!important;height:100%!important}
.badge{background:#eef2ff;color:#4338ca;border-radius:20px;padding:1px 8px;font-size:11px}
.badge.red{background:#ffe4e6;color:var(--red)}
.badge.green{background:#dcfce7;color:var(--green-d)}
.bar{height:12px;background:#eef2f7;border-radius:20px;overflow:hidden}
.bar-fill{height:100%;background:var(--green);border-radius:20px;width:0;transition:width .6s}
.bar-fill.gold{background:var(--gold)}
.bar-cap{display:flex;justify-content:space-between;color:var(--mut);font-size:12px;margin-top:6px}
.year{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.year b{font-size:26px}

/* list */
.list{display:flex;flex-direction:column;gap:10px}
.row{display:flex;justify-content:space-between;gap:10px;align-items:center;
  padding:10px;border:1px solid var(--line);border-radius:10px}
.row .who{font-weight:600}.row .meta{color:var(--mut);font-size:12px}
.row .sum{font-weight:700;white-space:nowrap}
.tag{font-size:11px;border-radius:20px;padding:2px 8px}
.tag.warn{background:#fff7ed;color:var(--amber)}
.tag.red{background:#ffe4e6;color:var(--red)}

/* table */
.tbl{width:100%;border-collapse:collapse}
.tbl th,.tbl td{text-align:left;padding:9px 8px;border-bottom:1px solid var(--line);font-size:13px}
.tbl th{color:var(--mut);font-weight:500}
.tbl td.num,.tbl th.num{text-align:right}
.mini{height:8px;background:#eef2f7;border-radius:20px;overflow:hidden;min-width:70px}
.mini>i{display:block;height:100%;background:var(--green);border-radius:20px}
.place{display:inline-flex;width:22px;height:22px;border-radius:50%;align-items:center;justify-content:center;
  font-size:12px;font-weight:700;background:#f1f5f9}
.place.p1{background:#fef9c3}.place.p2{background:#e2e8f0}.place.p3{background:#ffedd5}

.hidden{display:none}
.stub{background:#fff;border:1px dashed var(--line);border-radius:14px;padding:40px;text-align:center;color:var(--mut)}

@media(max-width:900px){
  .app{grid-template-columns:1fr}.side{display:none}
  .kpis{grid-template-columns:repeat(2,1fr)}.grid2{grid-template-columns:1fr}
}

/* ---- доп-экраны ---- */
.pcell{display:flex;gap:8px;align-items:center}
#screens.full{margin:-4px}
.note-line{background:#f8fafc;border:1px solid var(--line);border-radius:10px;padding:12px 14px;color:var(--mut);margin-top:6px}
.neg{color:var(--red)} .up{color:var(--green)}
.tag.advance{background:#dcfce7;color:var(--green-d)}
.tag.escrow{background:#fff7ed;color:var(--amber)}
.tag.full{background:#eef2ff;color:#4338ca}

/* менеджер / воронка */
.mgr-pick{background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 14px;margin-bottom:14px}
.mgr-pick select{padding:6px 10px;border:1px solid var(--line);border-radius:8px}
tr.me{background:#f0fdf4;font-weight:600}
.funnel-inline{display:flex;align-items:stretch;gap:6px;flex-wrap:wrap}
.fstep{flex:1;min-width:110px;background:#f8fafc;border:1px solid var(--line);border-radius:10px;padding:12px;text-align:center}
.fstep.big{background:#eff6ff}
.ft-t{font-size:12px;color:var(--mut)} .ft-n{font-size:22px;font-weight:700;margin:2px 0}
.ft-c{font-size:12px;color:var(--green-d)} .ft-a{font-size:11px;color:var(--mut);margin-top:2px}
.fsep{align-self:center;color:#cbd5e1;font-size:20px}

/* матрица */
.tbl.matrix td.cell{font-weight:600;border-radius:4px}
.cell.g{background:#dcfce7;color:var(--green-d)} .cell.y{background:#fef9c3;color:#92610a} .cell.r{background:#ffe4e6;color:var(--red)}
td.mut{color:#cbd5e1}
.mini.wide{min-width:180px;flex:1}
.agerow{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line)}
.agerow .mini{flex:1;margin:0 10px}

/* платежи / расхождение */
.disc .drow,.drow{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line)}
.drow.red b{color:var(--red)} .drow span{color:var(--mut)}
.ul{margin:6px 0 0;padding-left:18px;color:#475569} .ul li{margin:3px 0}

/* награды */
.noms{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.nom{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff}
.nom-h{font-weight:600;font-size:13px;display:flex;gap:6px;align-items:center}
.nom-w{margin-top:6px;color:#334155} .nom-v{font-size:20px;font-weight:700;color:var(--green-d);margin:2px 0}
.nom-m{font-size:11px;color:var(--mut)}
.demo{font-size:9px;background:#f1f5f9;color:#94a3b8;border-radius:6px;padding:1px 5px;margin-left:auto}

/* ТВ-табло */
.tv{background:#0b1220;color:#e5edff;border-radius:14px;padding:22px;min-height:80vh}
.tv-top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #1e2b45;padding-bottom:12px}
.tv-logo{font-weight:800;color:#d4a017;letter-spacing:1px} .tv-title{font-size:26px;font-weight:800}
.tv-date{color:#8ea3c9}
.tv-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:18px 0}
.tvk{background:#111c33;border:1px solid #1e2b45;border-radius:12px;padding:16px}
.tvk span{color:#8ea3c9;font-size:13px} .tvk b{display:block;font-size:34px;margin:6px 0} .tvk small{color:#8ea3c9}
.tvk .bar{background:#1e2b45;margin-top:10px}
.tvk b.g{color:#4ade80} .tvk b.y{color:#facc15}
.tv-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:16px}
.tvbox{background:#111c33;border:1px solid #1e2b45;border-radius:12px;padding:16px}
.tvbox h3{margin:0 0 10px;font-size:15px;color:#cbd8f5}
.tvtbl{width:100%;border-collapse:collapse} .tvtbl th{color:#8ea3c9;text-align:left;font-weight:500;font-size:12px;padding:4px}
.tvtbl td{padding:6px 4px;border-top:1px solid #1e2b45} .tvtbl .num{text-align:right}
.tvtbl .g{color:#4ade80} .tvtbl .y{color:#facc15}
.tvfun{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e2b45;font-size:16px}
.tvfun b{color:#4ade80} .tvfeed{padding:8px 0;border-bottom:1px solid #1e2b45;color:#cbd8f5}
.tv-foot{color:#8ea3c9;text-align:center;margin-top:16px;font-size:13px}
@media(max-width:900px){.noms{grid-template-columns:1fr}.tv-kpis,.tv-grid{grid-template-columns:1fr}}

/* ── Опережающие метрики: статистики + матрица баллов по дням ── */
.lead-sum{font-size:13px;margin-bottom:10px;line-height:1.7}
.lead-grid{display:grid;grid-template-columns:minmax(340px,1fr) minmax(360px,1.3fr);gap:14px;align-items:start}
@media(max-width:1100px){.lead-grid{grid-template-columns:1fr}}
.tbl.stat td,.tbl.stat th{padding:5px 8px;font-size:13px}
.tbl.stat .k{color:#8a94a6;font-size:11px}
.mtx-scroll{overflow-x:auto}
.tbl.mtx{border-collapse:collapse;font-size:12px;white-space:nowrap}
.tbl.mtx th,.tbl.mtx td{padding:4px 6px;border-bottom:1px solid #eef1f5}
.tbl.mtx th.d{min-width:22px;color:#8a94a6;font-weight:600}
.tbl.mtx td.hc{text-align:center;color:#0d3b25;font-weight:600;min-width:22px;border-radius:3px}
.tbl.mtx td.hc.z{color:#cfd6e0}
.tr{font-size:11px}.tr.up{color:#1f9d57}.tr.dn{color:#d9482b}.tr.fl{color:#9aa3b2}
.cond{display:inline-block;padding:1px 8px;border-radius:11px;font-size:11px;font-weight:600;white-space:nowrap}
.cond.c-blue{background:#e5efff;color:#1f5fd0}
.cond.c-green{background:#e6f6ec;color:#1f9d57}
.cond.c-warn{background:#fff4e0;color:#c47d0a}
.cond.c-red{background:#fde8e4;color:#d9482b}
.neg{color:#d9482b}

/* ── «Просмотр как» (скоуп видимости) ── */
.view-as{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--mut)}
.view-as select{padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:#fff;font-weight:600;color:var(--ink);max-width:220px}

/* ── Метрики (все): контролы + грид ── */
.mctl{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.chip-btn{border:0;background:#fff;padding:8px 14px;font-weight:600;color:#475569;cursor:pointer;border-right:1px solid var(--line)}
.chip-btn:last-child{border-right:0}
.chip-btn:hover{background:#f1f5f9}
.chip-btn.on{background:var(--ink);color:#fff}
.mscope select{padding:7px 10px;border:1px solid var(--line);border-radius:9px}
.lg{display:inline-block;border-radius:6px;padding:1px 7px;font-size:11px;margin-left:2px}
.lg.g{background:#dcfce7;color:var(--green-d)} .lg.y{background:#fef9c3;color:#92610a} .lg.r{background:#ffe4e6;color:var(--red)}
.tbl.mgrid{border-collapse:collapse;font-size:12px;white-space:nowrap}
.tbl.mgrid th,.tbl.mgrid td{padding:5px 8px;border-bottom:1px solid #eef1f5}
.tbl.mgrid th.d{min-width:52px;color:#8a94a6;text-align:right}
.tbl.mgrid td.mfix,.tbl.mgrid th.mfix{position:sticky;left:0;background:#fff;text-align:left;min-width:230px;z-index:1}
.tbl.mgrid tr.tot td{font-weight:700;background:#f0f7ff}
.tbl.mgrid tr.tot td.mfix{background:#f0f7ff}
.tbl.mgrid tr.lead td.mfix{padding-left:8px}
.tbl.mgrid .mn{display:inline-block;width:16px;color:#94a3b8;font-size:11px}
.tbl.mgrid tr.grp td{background:#f8fafc;color:#475569;font-weight:600;font-size:12px}
.tbl.mgrid td.cell{font-weight:600;border-radius:4px;text-align:right}

/* ── Качество и процесс (п.3) ── */
.ptiles{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
.ptile{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff}
.ptile .pt-l{font-size:12px;color:var(--mut)} .ptile .pt-v{font-size:22px;font-weight:700;margin:4px 0}
.ptile.g{border-color:#bbf7d0;background:#f0fdf4} .ptile.y{border-color:#fde68a;background:#fffbeb} .ptile.r{border-color:#fecdd3;background:#fff1f2}
@media(max-width:900px){.ptiles{grid-template-columns:repeat(2,1fr)}}

/* ── Зарплата ── */
.tbl.salary tr.srow{cursor:pointer} .tbl.salary tr.srow:hover{background:#f8fafc}
.tbl.salary tr.srow.lk{background:#fbfdfb}
.tbl.salary .brk{background:#f8fafc;border-radius:10px;padding:8px 14px;margin:4px 0}
.tbl.salary td.pay-ok{color:#334155;font-weight:600}
.tbl.salary td.pay-pr{color:var(--green-d);font-weight:600}
.brk .drow.tr-ok,.brk .drow.tr-pr{border-top:1px dashed var(--line);margin-top:4px;padding-top:6px}
.brk .drow.tr-pr b{color:var(--green-d)}
.mut{color:#94a3b8}
.note-line.warn{background:#fff7ed;border-color:#fed7aa;color:#9a3412}

/* график выплат + утверждение ЗП */
.appr-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 16px;margin-bottom:14px}
.appr-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.period-sel{padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:13px;font-weight:600}
.st-badge{border-radius:20px;padding:3px 12px;font-size:12px;font-weight:600}
.st-badge.draft{background:#eef2f7;color:#475569}
.st-badge.wait{background:#fff7ed;color:var(--amber)}
.st-badge.ok{background:#dcfce7;color:var(--green-d)}
.fixed{color:var(--green-d);font-size:12px;font-weight:600}
.btn-appr{background:var(--ink);color:#fff;border:0;border-radius:10px;padding:9px 16px;font-weight:600;cursor:pointer}
.btn-appr:hover{opacity:.9}
.btn-appr.ok{background:var(--green)}

/* --- вход / сессия --- */
.who-chip{font-size:12px;color:var(--mut);font-weight:600;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.btn.ghost{border-color:var(--line);color:var(--mut)}
.btn.ghost:hover{background:#f8fafc}
body.locked .app{filter:blur(3px);pointer-events:none;user-select:none}
#login-overlay{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;
  background:rgba(15,23,42,.45);backdrop-filter:blur(2px)}
.login-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:28px 26px;width:320px;
  display:flex;flex-direction:column;gap:12px;box-shadow:0 20px 60px rgba(15,23,42,.25)}
.login-brand{font-size:26px;font-weight:800;text-align:center}
.login-sub{color:var(--mut);font-size:12px;text-align:center;margin-bottom:6px}
.login-card input{padding:11px 13px;border:1px solid var(--line);border-radius:10px;font-size:14px}
.login-card input:focus{outline:none;border-color:var(--green)}
.login-card button{background:var(--green);color:#fff;border:0;border-radius:10px;padding:11px;font-weight:700;cursor:pointer}
.login-card button:hover{background:var(--green-d)}
.login-err{color:var(--red);font-size:12px;min-height:16px;text-align:center}
