/* Смета план-факт (ui_modules/estimate-plan-fact.js): строки — две строки текста одной высоты,
   колонки фиксированной ширины, ничего не переносится. */
.epf{font-size:13px;color:var(--text,#0F172A)}
.epf [hidden]{display:none!important}
.epf-muted{color:var(--muted,#64748B);font-size:12px}
.epf-red{color:#DC2626!important}
.epf-ok{color:#15803D;font-weight:600;font-size:12.5px}
.epf-empty{font-size:13px;color:var(--muted,#64748B);padding:8px 0}
.epf-note{font-size:12.5px;color:var(--muted,#64748B);margin:8px 2px 0;line-height:1.45}
.epf-sub{display:block;font-size:12px;line-height:16px;color:var(--muted,#64748B);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}
.epf-sub b{color:var(--text,#0F172A);font-weight:600}

.epf-lock{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:#475569;background:#F8FAFC;border:1px solid var(--border,#E2E8F0);border-radius:10px;padding:6px 12px;margin-bottom:10px}
.epf-chip{display:inline-block;border:1px solid var(--border,#E2E8F0);border-radius:6px;padding:0 7px;line-height:19px;background:#fff;cursor:pointer;font-size:12px}
.epf-linkbtn{border:0;background:none;padding:0;font:inherit;font-size:12.5px;color:#15803D;font-weight:600;cursor:pointer;margin-left:auto}
.epf-strip{background:#fff;border:1px solid var(--border,#E2E8F0);border-radius:12px;padding:10px 14px;margin-bottom:10px}
.epf-strip-head{display:flex;align-items:baseline;gap:12px;margin-bottom:6px;font-size:13.5px}
.epf-strip-head .epf-muted{margin-left:auto}
.epf-stack{display:flex;height:8px;border-radius:999px;background:#EEF2F6;overflow:hidden}
.epf-stack i{display:block;height:100%}.epf-stack i.ok{background:#16A34A}.epf-stack i.auto{background:#86EFAC}.epf-stack i.todo{background:#F59E0B}
.epf-stack i.mat{background:#F59E0B}.epf-stack i.work{background:#2563EB}.epf-stack i.mk{background:#16A34A}
.epf-strip-head{white-space:nowrap;min-width:0}
.epf-strip-head>b{overflow:hidden;text-overflow:ellipsis;min-width:0}
.epf-strip-head .epf-muted{flex:0 0 auto}
.epf-dot{display:inline-block;flex:0 0 auto;width:8px;height:8px;border-radius:50%;margin-right:4px;vertical-align:0}
.epf-dot.mat{background:#F59E0B}.epf-dot.work{background:#2563EB}.epf-dot.mk{background:#16A34A}

/* Статьи затрат: материалы, работы, машины и механизмы, накладные, прибыль, НДС, без статьи, не разнесено */
.epf-stack i.mech,.epf-dot.mech,.epf-art-bar i.mech{background:#7C3AED}
.epf-stack i.oh,.epf-dot.oh,.epf-art-bar i.oh{background:#0D9488}
.epf-stack i.vat,.epf-dot.vat,.epf-art-bar i.vat{background:#CBD5E1}
.epf-stack i.other,.epf-dot.other,.epf-art-bar i.other{background:#94A3B8}
.epf-stack i.todo,.epf-dot.todo,.epf-art-bar i.todo{background:#F87171}
.epf-art-bar i.mat{background:#F59E0B}.epf-art-bar i.work{background:#2563EB}.epf-art-bar i.mk{background:#16A34A}.epf-art-bar i.over{background:#DC2626}
.epf-amber{color:#B45309}
.epf-arts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(176px,1fr));gap:8px;margin-top:10px}
.epf-art{border:1px solid #EEF2F6;border-radius:10px;padding:8px 10px;background:#FBFCFE;min-width:0}
.epf-art.is-muted{opacity:.55}
.epf-art-l{display:flex;align-items:center;gap:2px;font-size:12px;color:#475569;font-weight:600;white-space:nowrap;min-width:0}
.epf-art-pct{margin-left:auto;padding-left:6px;font-weight:600;color:#64748B;font-variant-numeric:tabular-nums}
.epf-art-v{font-size:15px;font-weight:700;margin-top:2px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.epf-art-n{font-size:11.5px;color:#64748B;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:16px}
.epf-art-bar{display:block;height:4px;border-radius:999px;background:#EEF2F6;overflow:hidden;margin-top:5px}
.epf-art-bar i{display:block;height:100%;border-radius:999px}
/* Статьи работы — строкой под названием, в обеих вкладках */
.epf-a{white-space:nowrap;margin-right:14px}
.epf-a.is-zero{color:#CBD5E1}.epf-a.is-zero b{color:#CBD5E1}
.epf-a-note{color:#94A3B8;border-bottom:1px dotted #CBD5E1;cursor:help}
/* Статьи раздела столбцом: точка · статья · сумма, строка выше — по верху */
.epf-row.has-list td{height:auto;padding-top:9px;padding-bottom:9px;vertical-align:top}
.epf-namebox{display:flex;align-items:flex-start;gap:20px;min-width:0}
.epf-namemain{flex:1 1 auto;min-width:0}
/* у раздела строка высокая — длинное название переносится, а не обрезается */
.epf-row.has-list .epf-title{white-space:normal;align-items:flex-start}
.epf-row.has-list .epf-title b{white-space:normal;overflow:visible}
@media (max-width:1280px){.epf-list{width:290px}}
/* столбец статей одной ширины у всех разделов — суммы стоят ровной колонкой */
.epf-list{flex:0 0 auto;width:330px;max-width:60%;padding-top:1px;display:grid;grid-template-columns:14px max-content minmax(0,1fr);column-gap:6px;font-size:12px;line-height:19px}
/* строка статьи — ячейки общей сетки столбца: ширина названий статей по самому длинному */
.epf-li{display:contents;color:#64748B}
.epf-li>*{white-space:nowrap}.epf-li>i{align-self:center}
.epf-li>span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.epf-li b{color:var(--text,#0F172A);font-weight:600}
.epf-li.is-zero,.epf-li.is-zero b{color:#CBD5E1}
.epf-li-note{color:#94A3B8;cursor:help}
.epf-li-note>span:first-of-type{display:none}.epf-li-note>span:last-child{grid-column:2/4}
.epf-dot.none{visibility:hidden}

.epf-tools{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.epf-tools .epf-muted{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.epf-tools .btn{white-space:nowrap;flex:0 0 auto}
.epf-tools .epf-fold{margin-left:auto}
.epf-seg{display:inline-flex;flex:0 0 auto;background:#EEF2F6;border-radius:10px;padding:3px}
.epf-seg button{border:0;background:none;padding:5px 16px;border-radius:8px;font:inherit;font-size:13px;font-weight:600;color:#64748B;cursor:pointer;white-space:nowrap}
.epf-seg button.on{background:#fff;color:#0F172A;box-shadow:0 1px 3px rgba(15,23,42,.12)}

.epf-wrap{border:1px solid var(--border,#E2E8F0);border-radius:12px;overflow:hidden;background:#fff}
.epf-table{width:100%;border-collapse:collapse;table-layout:fixed}
.epf-c1{width:128px}.epf-c2{width:150px}
.epf-table th{font-size:11px;text-transform:uppercase;letter-spacing:.02em;color:#64748B;text-align:left;padding:8px 10px;background:#F8FAFC;border-bottom:1px solid var(--border,#E2E8F0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.epf-table th.num{text-align:right}
.epf-row td{height:50px;padding:0 10px;border-bottom:1px solid #F1F4F8;white-space:nowrap;overflow:hidden;vertical-align:middle}
.epf-row td.num{text-align:right;font-variant-numeric:tabular-nums}
.epf-row[onclick]{cursor:pointer}
.epf-row:hover td{background-color:#FAFBFD}
.epf-section td,.epf-srow td{background-color:#FBFCFE}
.epf-row.is-open td{background-color:#F0FDF4}
.epf-sline td{background-color:#fff}
.epf-outside td{background:#FFFBEB}.epf-outside.is-todo td{background:#FEF2F2}
.epf-table tfoot td{height:42px;padding:0 10px;font-weight:700;background:#F8FAFC;border-top:1px solid var(--border,#E2E8F0);white-space:nowrap}
.epf-table tfoot td.num{text-align:right;font-variant-numeric:tabular-nums}
.epf-title{display:flex;align-items:center;gap:6px;min-width:0;white-space:nowrap}
.epf-title b{font-weight:650;overflow:hidden;text-overflow:ellipsis}
.epf-ell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
/* Разворачивание: стрелка — кнопка-квадрат; у открытой строки она зелёная и смотрит вниз, слева
   зелёная полоса; вложенные строки связаны с родителем линиями, как дерево папок. */
.epf-caret{flex:0 0 18px;width:18px;height:18px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;border:1px solid #CBD5E1;border-radius:5px;background:#fff;color:#475569;font-size:9px;line-height:1;transition:transform .15s,background-color .15s,border-color .15s}
.epf-caret.none{visibility:hidden}
/* подпись под названием — с того же места, что и название (после стрелки) */
td.epf-name .epf-sub{padding-left:24px}
.epf-row[onclick]:hover .epf-caret{border-color:#16A34A;color:#15803D}
.epf-row.is-open>td .epf-caret{transform:rotate(90deg);background:#16A34A;border-color:#16A34A;color:#fff}
.epf-row.is-open>td:first-child{box-shadow:inset 3px 0 0 #16A34A}
.epf-work.is-open>td:first-child{box-shadow:inset 3px 0 0 #86EFAC}
.epf-work>td.epf-name,.epf-resource>td.epf-name{background-repeat:no-repeat;background-image:linear-gradient(#CBD5E1,#CBD5E1);background-size:1px 100%;background-position:21px 0}
.epf-resource>td.epf-name{background-image:linear-gradient(#CBD5E1,#CBD5E1),linear-gradient(#CBD5E1,#CBD5E1);background-size:1px 100%,1px 100%;background-position:21px 0,41px 0}
.epf-code{flex:0 0 auto;color:#94A3B8;font-size:12px;font-variant-numeric:tabular-nums}
.epf-type{flex:0 0 auto;font-size:10.5px;font-weight:700;text-transform:uppercase;border-radius:4px;padding:0 4px;line-height:16px;background:#F1F5F9;color:#64748B}
.epf-type.material{background:#FEF3C7;color:#92400E}.epf-type.labor{background:#DBEAFE;color:#1D4ED8}.epf-type.mechanism{background:#EDE9FE;color:#6D28D9}
.epf-link{color:#15803D;font-weight:600;border-bottom:1px dashed #86EFAC;cursor:pointer}
.epf-prog{white-space:nowrap}
.epf-bar{display:inline-block;width:80px;height:6px;border-radius:999px;background:#EEF2F6;overflow:hidden;vertical-align:middle;margin-right:6px}
.epf-bar i{display:block;height:100%;border-radius:999px;background:#16A34A}
.epf-bar.over i{background:#DC2626}
.epf-pct{font-size:12px;font-variant-numeric:tabular-nums;color:#475569}
.epf-ops td{padding:6px 12px 10px 44px;background:#F8FAFC;border-bottom:1px solid var(--border,#E2E8F0);white-space:normal}
.epf-summary{margin-top:12px}
.epf-summary>.epf-wrap{margin:0 12px}
.epf-summary>.epf-note{margin:8px 14px 12px}
@media (max-width:900px){.epf-c1{width:104px}.epf-c2{width:110px}.epf-bar{width:48px}}

/* «График работ» сметы договора: «Отслеживание / Конструктор» (estimate-editor.js) */
.est-gantt-modes{display:flex;align-items:center;gap:14px;margin:4px 0 10px}
.est-gantt-track{background:#fff;border:1px solid var(--border,#E2E8F0);border-radius:12px;padding:12px 14px}

/* «Без привязки к работе»: затраты раздела и выбор работы прямо под строкой раздела */
.epf-rl{display:flex;flex-direction:column;gap:2px}
.epf-rl-head{font-size:12px;color:#475569;margin-bottom:4px}
.epf-rl-line{display:grid;grid-template-columns:76px minmax(0,1fr) 110px 64px minmax(260px,auto);align-items:center;gap:10px;padding:5px 0;border-top:1px dashed #E2E8F0;font-size:12.5px}
.epf-rl-date{color:#64748B;font-variant-numeric:tabular-nums}
.epf-rl-main{display:flex;flex-direction:column;min-width:0}
.epf-rl-what{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.epf-rl-meta{font-size:11.5px;color:#64748B;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.epf-rl-sum{text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
.epf-rl-pick{display:flex;gap:6px;align-items:center}
.epf-rl-pick select{flex:1 1 auto;min-width:0;max-width:320px;height:28px;font:inherit;font-size:12.5px;border:1px solid var(--border,#E2E8F0);border-radius:7px;padding:0 6px;background:#fff}

/* Плашки статей — кнопки: клик открывает под ними расшифровку суммы, повторный — закрывает */
.epf-art.is-click{cursor:pointer;transition:border-color .15s,background-color .15s}
.epf-art.is-click:hover{border-color:#86EFAC;background:#fff}
.epf-art.is-click:focus-visible{outline:2px solid #16A34A;outline-offset:1px}
.epf-art.is-active{border-color:#16A34A;background:#F0FDF4;box-shadow:inset 0 -3px 0 #16A34A}
.epf-art-detail{margin-top:10px;border:1px solid #BBF7D0;border-radius:10px;overflow:hidden;background:#fff}
.epf-art-detail-head{display:flex;align-items:center;gap:12px;padding:8px 12px;background:#F0FDF4;font-size:13px}
.epf-art-close{margin-left:auto;border:0;background:none;font-size:13px;color:#64748B;cursor:pointer;padding:2px 6px;border-radius:6px}
.epf-art-close:hover{background:#DCFCE7;color:#0F172A}
.epf-mini{width:100%;border-collapse:collapse;table-layout:fixed;font-size:12.5px}
.epf-mini th{font-size:11px;text-transform:uppercase;letter-spacing:.02em;color:#64748B;text-align:left;padding:6px 10px;border-bottom:1px solid #E2E8F0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.epf-mini th.num,.epf-mini td.num{text-align:right;font-variant-numeric:tabular-nums}
.epf-mini td{padding:6px 10px;border-bottom:1px solid #F1F4F8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.epf-mini tr.is-click{cursor:pointer}.epf-mini tr.is-click:hover td{background:#FAFBFD}
.epf-mini tfoot td{font-weight:700;background:#F8FAFC;border-bottom:0}
.epf-row.is-flash td{animation:epf-flash 1.6s ease-out}
@keyframes epf-flash{0%,40%{background-color:#FEF9C3}100%{background-color:inherit}}

/* Полоса-индикатор: кусок подсвечивается под курсором, подсказка — у курсора, клик — расшифровка */
.epf-stack{height:10px}
.epf-stack i{transition:filter .12s}
.epf-stack i[data-tip]:hover{filter:brightness(1.12) saturate(1.1)}
.epf-stack i.is-click{cursor:pointer}
.epf-stack i.rest{background:transparent;cursor:help}
.epf-stack i.rest:hover{background:#E2E8F0}
.epf-tip{position:fixed;z-index:10000;pointer-events:none;max-width:300px;background:#0F172A;color:#fff;border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.45;box-shadow:0 6px 18px rgba(15,23,42,.25)}
.epf-tip b{display:block;font-weight:600;margin-bottom:2px}
.epf-tip div{color:#CBD5E1}
.epf-tip .is-hint{color:#86EFAC}
