:root{--ink:#14161a;--ink2:#3a3f47;--mut:#767c86;--line:#e6e8ec;--line2:#eef0f3;--bg:#f6f7f9;--card:#fff;--brand:#ec000e;--brand-ink:#1a1a18;--green:#128a5b;--green-bg:#e5f4ed;--amber:#b9781a;--amber-bg:#fbf0dd;--blue:#1f6fb2;--blue-bg:#e6f0f8;--red:#d13030;--red-bg:#fbe8e8;--gray-bg:#eef0f3;--radius:14px;--shadow:0 1px 2px rgba(20,22,26,.04),0 4px 16px rgba(20,22,26,.04)}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:Inter,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}a{color:inherit;text-decoration:none}button,input,select,textarea{font-family:inherit}.app{display:flex;min-height:100vh}.side{width:240px;background:var(--brand-ink);color:#fff;flex-shrink:0;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{padding:20px 20px 16px;display:flex;align-items:center;gap:10px;border-bottom:1px solid rgba(255,255,255,.08)}.brand .dot{width:26px;height:26px;border-radius:7px;background:var(--brand);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px}.brand b{font-size:16px;font-weight:700}.brand span{display:block;font-size:10.5px;color:#ffffff80;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.nav{padding:12px 10px;flex:1;overflow-y:auto}.nav .lbl{font-size:10px;text-transform:uppercase;letter-spacing:.8px;color:#fff6;padding:12px 12px 6px;font-weight:600}.nav a{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px;color:#ffffffb8;font-size:13.5px;font-weight:500;cursor:pointer}.nav a svg{width:17px;height:17px;flex-shrink:0}.nav a:hover{background:#ffffff0f;color:#fff}.nav a.on{background:var(--brand);color:#fff}.side .me{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:10px}.side .me .av{width:30px;height:30px;border-radius:50%;background:#3a3d42;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.side .me small{display:block;color:#ffffff80;font-size:11px}.side .me .lo{margin-left:auto;color:#ffffff80;cursor:pointer;padding:4px;border-radius:6px}.side .me .lo:hover{background:#ffffff1a;color:#fff}.main{flex:1;min-width:0;display:flex;flex-direction:column}.top{background:var(--card);border-bottom:1px solid var(--line);padding:0 24px;height:60px;display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:20}.top .burger{display:none;background:none;border:none;cursor:pointer;padding:6px}.top .burger svg{width:22px;height:22px;stroke:var(--ink)}.top h1{font-size:17px;font-weight:650}.top .ctx{font-size:12.5px;color:var(--mut)}.wrap{padding:24px 32px;max-width:1700px;width:100%;margin:0 auto}.wrap.wide{max-width:none}.dash-tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:22px;padding:8px;background:#f4f5f7;border-radius:14px}.dash-tab{background:transparent;border:1px solid transparent;padding:9px 18px;font-size:13px;font-weight:600;color:var(--mut);cursor:pointer;border-radius:9px;white-space:nowrap;transition:all .15s ease}.dash-tab:hover{color:var(--ink);background:#fff;box-shadow:0 1px 3px #0000000f}.dash-tab.on{color:#fff;background:var(--brand);box-shadow:0 2px 8px #ec000e40;transform:translateY(-1px)}.dash-tab.on:hover{color:#fff;background:var(--brand)}.panel{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow);margin-bottom:16px}.panel h3{font-size:14px;font-weight:680;display:flex;align-items:center;gap:8px;margin-bottom:2px}.panel h3 .pdot{width:8px;height:8px;border-radius:50%;background:var(--brand)}.panel-note{font-size:11.5px;color:var(--mut);margin-bottom:12px}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:8px}.period-picker{display:inline-flex;background:var(--gray-bg);border-radius:9px;padding:3px;gap:2px}.period-picker button{border:none;background:none;padding:5px 12px;font-size:12px;font-weight:600;color:var(--mut);cursor:pointer;border-radius:7px}.period-picker button:hover{color:var(--ink)}.period-picker button.on{background:var(--card);color:var(--brand);box-shadow:0 1px 3px #00000014}.kpi-hero .kpi{border-top:3px solid transparent}.kpi-hero .kpi:nth-child(1){border-top-color:var(--brand)}.kpi-hero .kpi:nth-child(2){border-top-color:var(--blue)}.kpi-hero .kpi:nth-child(3){border-top-color:var(--green)}.kpi-hero .kpi:nth-child(4){border-top-color:var(--amber)}.kpi-hero .kpi:nth-child(5){border-top-color:var(--teal,#0f8a8a)}.kpi-hero .kpi:nth-child(6){border-top-color:var(--mut)}.kpi .v-unit{font-size:14px;font-weight:600;color:var(--mut);margin-left:2px}.kpi.accent{background:linear-gradient(135deg,#fff,#fbfbfc)}.donut-wrap{display:flex;gap:24px;align-items:center;flex-wrap:wrap}.donut-legend{flex:1;min-width:240px;display:flex;flex-direction:column;gap:7px}.dl-row{display:grid;grid-template-columns:14px 1fr auto auto;gap:10px;align-items:center;font-size:12.5px;padding:4px 0;border-bottom:1px solid var(--line2)}.dl-sw{width:12px;height:12px;border-radius:3px}.dl-name{color:var(--ink2);font-weight:500}.dl-val{font-weight:700;font-variant-numeric:tabular-nums}.dl-pct{color:var(--mut);font-size:11.5px;min-width:44px;text-align:right}.scroll-hint{font-size:10.5px;color:var(--mut);text-align:center;margin-top:2px;font-style:italic}.pbar{height:8px;background:var(--line2);border-radius:5px;overflow:hidden}.pbar span{display:block;height:100%;border-radius:5px}.callout{display:flex;gap:10px;align-items:flex-start;background:#fbf7ec;border:1px solid #ecdcae;border-radius:11px;padding:11px 14px;margin-bottom:16px;font-size:12.5px;color:#6b5a2e;line-height:1.5}.callout span{font-size:15px;line-height:1.2}.heatmap{border-collapse:collapse;font-size:11px}.heatmap th{padding:5px 6px;font-weight:600;color:var(--mut);font-size:10px;text-align:center;white-space:nowrap}.heatmap th.hm-zone{text-align:left;position:sticky;left:0;background:var(--card);z-index:1}.heatmap td.hm-zone{text-align:left;font-weight:600;font-size:11px;white-space:nowrap;position:sticky;left:0;background:var(--card);padding-right:12px;box-shadow:1px 0 0 var(--line2)}.heatmap td.hm-cell{width:34px;height:30px;text-align:center;font-size:9.5px;color:#333;border:1px solid #f4f5f7;font-variant-numeric:tabular-nums}.trash-toggle-row{display:flex;justify-content:flex-end;margin-bottom:10px}.btn.ghost.sm{padding:5px 11px;font-size:12px}.btn.ghost.sm.on{background:var(--brand);color:#fff;border-color:var(--brand)}.trash-box{background:#fbfbfc;border:1px dashed var(--line);border-radius:12px;padding:14px 16px;margin-bottom:16px}.trash-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}.trash-head b{display:flex;align-items:center;gap:6px;font-size:14px}.trash-head b svg{width:15px;height:15px}.trash-sub{font-size:11.5px;color:var(--mut)}.trash-empty{font-size:13px;color:var(--mut);padding:10px 2px}.daysleft{font-size:11.5px;font-weight:600;color:var(--green)}.daysleft.urgent{color:var(--brand)}.import-modal{max-width:640px;width:94vw}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}.modal-head h3{font-size:16px;font-weight:700;padding:0;border:none}.modal-head .x{background:none;border:none;cursor:pointer;color:var(--mut);display:flex;padding:4px}.modal-head .x svg{width:18px;height:18px}.modal-body{padding:18px 20px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.imp-lead{font-size:13px;color:var(--mut);margin:0 0 12px}.imp-drop{display:flex;flex-direction:column;align-items:center;gap:6px;padding:28px;margin-top:14px;border:2px dashed var(--line);border-radius:12px;cursor:pointer;transition:.15s;background:#fbfbfc}.imp-drop:hover{border-color:var(--brand);background:#fff}.imp-drop svg{width:26px;height:26px;color:var(--brand)}.imp-drop span{font-size:14px;font-weight:600}.imp-drop small{font-size:11px;color:var(--mut)}.imp-err{margin-top:12px;padding:10px 12px;background:#fdecec;border:1px solid #f5c2c2;border-radius:8px;color:#a11;font-size:12.5px}.imp-summary{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:14px;margin-bottom:10px}.imp-summary b{font-size:18px}.imp-summary .sub{color:var(--mut);font-weight:400;font-size:12px}.imp-flag{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:20px}.imp-flag.err{background:#fdecec;color:#a11}.imp-flag.warn{background:#fff6e6;color:#9a6b00}.imp-issues{max-height:120px;overflow:auto;margin-bottom:12px;border:1px solid var(--line);border-radius:8px;padding:6px 10px}.imp-issue{font-size:11.5px;padding:2px 0;color:var(--mut)}.imp-issue.err{color:#a11}.imp-issue.warn{color:#9a6b00}.imp-preview{overflow:auto;border:1px solid var(--line);border-radius:8px;margin-bottom:6px}.imp-preview table{font-size:11.5px}.imp-more{font-size:11px;color:var(--mut);padding:6px 2px 12px}.imp-mode{display:flex;flex-direction:column;gap:8px;margin:12px 0}.imp-mode label{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;cursor:pointer}.imp-mode label.on{border-color:var(--brand);background:#fff5f5}.imp-mode label.on.danger{border-color:#c33;background:#fdecec}.imp-mode label input{margin-top:3px}.imp-mode label b{display:block;font-size:13px}.imp-mode label span{font-size:11.5px;color:var(--mut)}.imp-center{text-align:center;padding:26px 0}.imp-center p{font-size:14px;margin-top:12px}.imp-check{width:46px;height:46px;border-radius:50%;background:#e6f7ea;color:#1a8a3a;display:flex;align-items:center;justify-content:center;margin:0 auto}.imp-check svg{width:24px;height:24px}.btn.danger{background:#c33;color:#fff;border-color:#c33}.att-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.att-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.att-month{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;white-space:nowrap}.att-month .btn.sm{padding:2px 10px;font-size:15px;line-height:1}.att-scroll{overflow:auto;margin-top:12px;max-height:640px;border:1px solid var(--line);border-radius:10px}.att-grid{border-collapse:separate;border-spacing:0;font-size:11px;font-variant-numeric:tabular-nums}.att-grid th,.att-grid td{border-bottom:1px solid #eef0f3;border-right:1px solid #f1f2f4;white-space:nowrap}.att-grid thead th{position:sticky;top:0;z-index:3;background:#fff;padding:4px 6px;text-align:center;vertical-align:middle}.att-grid .att-d{font-weight:700;font-size:11px}.att-grid .att-dow{font-size:8.5px;color:var(--mut);font-weight:500}.att-name{position:sticky;left:0;z-index:2;background:#fff;text-align:left;padding:5px 10px;font-size:11px;font-weight:600;min-width:130px;max-width:150px;overflow:hidden;text-overflow:ellipsis;box-shadow:1px 0 #e6e8ec}.att-name .link-btn{color:var(--ink);font-weight:600}.att-name .link-btn:hover{color:var(--brand);text-decoration:underline}.att-corner{z-index:6;left:0;top:0}thead .att-name{z-index:6;top:0}.att-cell{text-align:center;padding:4px 5px;min-width:26px;color:#333}.att-col.weekend,.att-cell.weekend{background:#f6f7f9}.att-col.nowork,.att-cell.nowork{background:#eceef1;color:#b9bdc4}.att-tot{text-align:center;padding:4px 8px;font-weight:700;background:#fafbfc;position:sticky;z-index:1}.att-tot-h{color:var(--brand)}.att-grid tfoot td{position:sticky;bottom:0;z-index:2;background:#f7f8fa;font-weight:700;border-top:2px solid #e6e8ec}.att-grid tfoot .att-name{z-index:4;background:#f7f8fa}.att-coltot{color:#333}.att-grand{color:var(--brand)}.att-empty{font-size:13px;color:var(--mut);padding:20px 2px}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.seg button{border:none;background:#fff;padding:6px 12px;font-size:12px;cursor:pointer;color:var(--mut)}.seg button.on{background:var(--brand);color:#fff;font-weight:600}.link-btn{background:none;border:none;padding:0;color:var(--ink);font:inherit;cursor:pointer;text-align:left;transition:color .12s}.link-btn:hover{color:var(--brand);text-decoration:underline}.filter-row th{padding:6px 8px!important;background:#fafbfc}.filter-row input,.filter-row select{width:100%;border:1px solid var(--line);border-radius:6px;padding:5px 8px;font-size:12px;background:#fff;color:var(--ink)}.filter-row input:focus,.filter-row select:focus{outline:none;border-color:var(--brand)}.section-divider{display:flex;align-items:center;gap:12px;margin:26px 0 16px;color:var(--mut)}.section-divider:before,.section-divider:after{content:"";height:1px;background:var(--line);flex:1}.section-divider span{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--brand)}.boq-done{display:flex;align-items:center;gap:8px}.boq-done .pbar{flex:1;min-width:50px}.boq-done-n{font-size:11px;font-variant-numeric:tabular-nums;color:var(--mut);min-width:42px;text-align:right}.worker-pop{max-width:560px;width:94vw}.wp-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px}.wp-kpi{background:#fafbfc;border:1px solid var(--line);border-radius:10px;padding:12px;text-align:center}.wp-kpi span{display:block;font-size:18px;font-weight:700}.wp-kpi label{font-size:10.5px;color:var(--mut);text-transform:uppercase;letter-spacing:.3px}.wp-sub{font-size:12px;font-weight:600;color:var(--mut);margin-bottom:8px}.wp-code{display:inline-block;font-size:10px;font-weight:700;background:#eef0f3;color:#555;padding:1px 5px;border-radius:4px;margin-right:4px}@media (max-width:560px){.wp-kpis{grid-template-columns:repeat(2,1fr)}}.pulse-load{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;background:#f7f8fa;z-index:200}.pulse-wrap{position:relative;width:240px;height:80px}.pulse-svg{width:240px;height:80px;overflow:visible}.pulse-base{stroke:#e6e8ec;stroke-width:1}.pulse-line{fill:none;stroke:var(--brand);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:600;stroke-dashoffset:600;animation:pulse-draw 1.4s cubic-bezier(.6,0,.4,1) infinite}.pulse-dot{position:absolute;top:-4px;left:-4px;width:9px;height:9px;border-radius:50%;background:var(--brand);box-shadow:0 0 10px 2px #ec000e80;opacity:0;animation:pulse-dot 1.4s cubic-bezier(.6,0,.4,1) infinite}.pulse-label{font-size:15px;font-weight:800;letter-spacing:1px;color:var(--brand);text-transform:uppercase;animation:pulse-fade 1.4s ease-in-out infinite}@keyframes pulse-draw{0%{stroke-dashoffset:600}70%{stroke-dashoffset:0}to{stroke-dashoffset:0}}@keyframes pulse-dot{0%{opacity:0;transform:translateY(40px)}28%{opacity:1;transform:translate(72px,40px)}32%{transform:translate(80px,18px)}36%{transform:translate(92px,64px)}40%{transform:translate(104px,28px)}52%{transform:translate(150px,40px)}56%{opacity:1;transform:translate(158px,22px)}60%{transform:translate(168px,58px)}70%{transform:translate(200px,40px)}90%{opacity:1;transform:translate(240px,40px)}to{opacity:0;transform:translate(240px,40px)}}@keyframes pulse-fade{0%,to{opacity:.55}50%{opacity:1}}.mfa-qr{display:flex;justify-content:center;margin:14px 0}.mfa-qr img{width:180px;height:180px;border:1px solid var(--line);border-radius:10px;padding:6px;background:#fff}.mfa-secret{font-size:11.5px;color:var(--mut);text-align:center;margin-bottom:6px;line-height:1.5}.mfa-secret code{display:inline-block;margin-top:3px;font-size:12px;background:#f4f5f7;padding:3px 8px;border-radius:5px;letter-spacing:1px;color:var(--ink);word-break:break-all}.rowact.del{color:#c33}.rowact.del:disabled{color:#ccc;cursor:not-allowed}.you-tag{display:inline-block;margin-left:6px;font-size:9.5px;font-weight:700;background:#eef4fa;color:#3a6ea5;padding:1px 6px;border-radius:10px;text-transform:uppercase;letter-spacing:.5px;vertical-align:middle}.role-hint{font-size:11.5px;color:var(--mut);margin:6px 0 0;line-height:1.5}.auth-ok{background:#e6f7ea;border:1px solid #b7e4c4;color:#1a7a3a;padding:11px 13px;border-radius:9px;font-size:13px;line-height:1.5;margin-bottom:12px}.link-inline{background:none;border:none;color:var(--brand);font-size:13px;cursor:pointer;margin-top:10px;padding:4px;width:100%}.link-inline:hover{text-decoration:underline}.perm-table td,.perm-table th{vertical-align:middle}.perm-col{text-align:center;width:120px}.perm-yes{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#e6f7ea;color:#1a8a3a}.perm-yes svg{width:13px;height:13px}.perm-no{color:#c9ccd1}.perm-notes{margin-top:22px;background:#fafbfc;border:1px solid var(--line);border-radius:12px;padding:18px 20px}.perm-notes h3{font-size:13px;font-weight:700;margin:14px 0 8px}.perm-notes h3:first-child{margin-top:0}.perm-notes ul{margin:0;padding-left:18px}.perm-notes li{font-size:13px;line-height:1.7;margin-bottom:4px}.plan-inputs{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:18px}.plan-field{display:flex;flex-direction:column;gap:5px;min-width:180px}.plan-field label{font-size:12px;font-weight:600;color:var(--mut)}.plan-field input{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;font-variant-numeric:tabular-nums}.plan-field input:focus{outline:none;border-color:var(--brand)}.plan-hint{font-size:11px;color:var(--mut)}.plan-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}.plan-kpi{background:#fafbfc;border:1px solid var(--line);border-radius:12px;padding:14px 16px;text-align:center}.plan-kpi span{display:block;font-size:24px;font-weight:800;color:var(--ink)}.plan-kpi label{font-size:11px;color:var(--mut);text-transform:uppercase;letter-spacing:.4px}@media (max-width:640px){.plan-kpis{grid-template-columns:repeat(2,1fr)}}.mini-input{width:70px;border:1px solid var(--line);border-radius:6px;padding:4px 6px;font-size:12px;text-align:right}.mini-input:focus{outline:none;border-color:var(--brand)}.pf{max-width:1320px}.pf-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding:26px 28px;border-radius:18px;margin-bottom:18px;background:radial-gradient(120% 160% at 100% 0%,rgba(236,0,14,.22),transparent 55%),linear-gradient(135deg,#1a1a18,#232320 60%,#1a1a18);color:#fff;box-shadow:0 12px 32px #14161a2e;position:relative;overflow:hidden}.pf-hero:after{content:"";position:absolute;right:-40px;top:-60px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(236,0,14,.28),transparent 70%);pointer-events:none}.pf-eyebrow{font-size:11px;letter-spacing:2.5px;text-transform:uppercase;color:#ffffff8c;font-weight:600}.pf-title{font-size:30px;font-weight:800;letter-spacing:-.8px;margin:6px 0 4px;line-height:1.05}.pf-sub{font-size:13.5px;color:#ffffffb3}.pf-add{position:relative;z-index:1;box-shadow:0 6px 18px #ec000e59}.pf-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:22px}.pf-kpi{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:15px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden;transition:transform .15s ease,box-shadow .15s ease}.pf-kpi:hover{transform:translateY(-2px);box-shadow:0 8px 22px #14161a14}.pf-kpi:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--line)}.pf-kpi.accent-red:before{background:var(--brand)}.pf-kpi.accent-green:before{background:var(--green)}.pf-kpi.accent-blue:before{background:var(--blue)}.pf-kpi.accent-gray:before{background:var(--mut)}.pf-kpi-top{display:flex;align-items:center;justify-content:space-between;color:var(--mut)}.pf-kpi-top svg{width:15px;height:15px;opacity:.6}.pf-kpi-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px}.pf-kpi-val{font-size:27px;font-weight:800;letter-spacing:-1px;margin-top:6px;color:var(--ink)}.pf-kpi-unit{font-size:14px;font-weight:700;color:var(--mut)}.pf-kpi-sub{font-size:11px;color:var(--mut);margin-top:1px}.pf-dot{width:8px;height:8px;border-radius:50%}.pf-dot.g{background:var(--green)}.pf-dot.b{background:var(--blue)}.pf-dot.k{background:var(--mut)}.pf-bar{display:flex;align-items:center;justify-content:space-between;margin:0 2px 14px}.pf-grid{display:flex;flex-direction:column;gap:14px}.pf-card{position:relative;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 20px 16px 24px;box-shadow:var(--shadow);cursor:pointer;overflow:hidden;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}.pf-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;border-radius:16px 0 0 16px}.pf-card.spine-g:before{background:linear-gradient(var(--green),#0e6e49)}.pf-card.spine-b:before{background:linear-gradient(var(--blue),#17537f)}.pf-card.spine-k:before{background:linear-gradient(#3a3d42,#1a1a18)}.pf-card:hover{transform:translateY(-3px);box-shadow:0 14px 34px #14161a1f;border-color:#dcdfe4}.pf-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.pf-card-name{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.pf-card-name b{font-size:17px;font-weight:730;letter-spacing:-.3px}.pf-card-open{font-size:13px;font-weight:700;color:var(--brand);white-space:nowrap;display:flex;align-items:center;gap:5px}.pf-card-open span{transition:transform .16s ease;display:inline-block}.pf-card:hover .pf-card-open span{transform:translate(4px)}.pf-card-meta{font-size:12.5px;color:var(--mut);margin-top:4px;display:flex;gap:6px;flex-wrap:wrap}.pf-code{font-family:SF Mono,ui-monospace,monospace;font-size:11px;font-weight:700;color:var(--brand);background:var(--brand-red-bg,#fdecec);padding:2px 8px;border-radius:6px}.pf-timeline{margin:16px 0 14px}.pf-timeline-head{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--mut);margin-bottom:6px;font-weight:500}.pf-timeline-mid{font-weight:700;color:var(--ink2)}.pf-track{height:8px;background:var(--line2);border-radius:6px;overflow:hidden}.pf-track i{display:block;height:100%;border-radius:6px;transition:width .5s ease}.pf-track i.health-g{background:linear-gradient(90deg,#16a06a,var(--green))}.pf-track i.health-b{background:linear-gradient(90deg,#2f86cc,var(--blue))}.pf-track i.health-k{background:linear-gradient(90deg,#4a4d52,#1a1a18)}.pf-timeline-empty .pf-nodate{font-size:11px;color:var(--mut);font-style:italic;margin-top:6px;display:inline-block}.pf-card-foot{display:flex;gap:26px;padding-top:14px;border-top:1px solid var(--line2)}.pf-stat{display:flex;flex-direction:column;gap:1px}.pf-stat-l{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--mut);font-weight:600}.pf-stat-v{font-size:13.5px;font-weight:700;color:var(--ink)}@media (max-width:900px){.pf-kpis{grid-template-columns:1fr 1fr 1fr}.pf-hero{flex-direction:column;align-items:flex-start;gap:14px}.pf-title{font-size:24px}}@media (max-width:560px){.pf-kpis{grid-template-columns:1fr 1fr}.pf-card-foot{gap:16px;flex-wrap:wrap}}.kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:20px}.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.kpi .k{font-size:11.5px;color:var(--mut);font-weight:600}.kpi .v{font-size:23px;font-weight:750;letter-spacing:-.6px;margin-top:3px}.kpi .s{font-size:11px;color:var(--mut);margin-top:1px}.kpi .v.pos{color:var(--green)}.kpi .v.neg{color:var(--red)}.sec{display:flex;align-items:center;justify-content:space-between;margin:22px 2px 12px;gap:10px;flex-wrap:wrap}.sec h2{font-size:15px;font-weight:680}.filters{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.chip{font-size:12px;font-weight:600;padding:6px 12px;border-radius:20px;border:1px solid var(--line);background:var(--card);color:var(--ink2);cursor:pointer}.chip.on{background:var(--brand-ink);color:#fff;border-color:var(--brand-ink)}.btn{border:none;border-radius:9px;padding:8px 14px;font-size:13px;font-weight:650;cursor:pointer;display:inline-flex;align-items:center;gap:7px}.btn svg{width:15px;height:15px}.btn.primary{background:var(--brand);color:#fff}.btn.ghost{background:var(--card);color:var(--ink);border:1px solid var(--line)}.btn.sm{padding:6px 10px;font-size:12px}.btn:disabled{opacity:.5;cursor:default}.rows{display:flex;flex-direction:column;gap:10px}.prow{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--line);border-radius:var(--radius);padding:14px 16px;display:grid;grid-template-columns:2.1fr 1fr .8fr .8fr 1.1fr .9fr 1fr;gap:14px;align-items:center;box-shadow:var(--shadow);cursor:pointer}.prow.h-green{border-left-color:var(--green)}.prow.h-amber{border-left-color:var(--amber)}.prow.h-red{border-left-color:var(--red)}.prow.h-blue{border-left-color:var(--blue)}.pname b{font-size:13.5px;font-weight:670}.pname small{font-size:11.5px;color:var(--mut);display:block}.cell .top-v{font-size:13.5px;font-weight:680}.cell .sub{font-size:10.5px;color:var(--mut)}.cell.r{text-align:right}.cell.c{text-align:center}.idx{font-size:14px;font-weight:730}.idx.good{color:var(--green)}.idx.warn{color:var(--amber)}.idx.bad{color:var(--red)}.idx small{display:block;font-size:9.5px;color:var(--mut);font-weight:600}.bar{height:6px;background:var(--line2);border-radius:4px;overflow:hidden;margin-top:5px}.bar i{display:block;height:100%;border-radius:4px}.pct{font-size:11.5px;color:var(--ink2);font-weight:600}.status{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:3px 9px;border-radius:20px}.status .sd{width:6px;height:6px;border-radius:50%}.st-ongoing{background:var(--green-bg);color:var(--green)}.st-ongoing .sd{background:var(--green)}.st-planning{background:var(--blue-bg);color:var(--blue)}.st-planning .sd{background:var(--blue)}.st-finished{background:var(--gray-bg);color:var(--mut)}.st-finished .sd{background:var(--mut)}.toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center}.rpp{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--mut)}.rpp select{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:13px;font-weight:600;color:var(--ink);background:var(--card);cursor:pointer}.tablewrap{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto}table.dt{width:100%;border-collapse:collapse;font-size:13.5px;min-width:860px}table.dt th,table.dt td{border:1px solid var(--line)}table.dt.compact{min-width:0;font-size:12.5px;table-layout:fixed}table.dt.compact thead th{padding:9px 8px;letter-spacing:.2px}table.dt.compact tbody td{padding:8px;overflow:hidden;text-overflow:ellipsis}table.dt.compact .filterrow th{padding:5px 6px}table.dt.compact .filterrow input,table.dt.compact .filterrow select{padding:5px 6px;min-width:0;font-size:11.5px}table.dt thead th{background:#fbfbfc;text-align:left;padding:11px 16px;font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--mut);font-weight:650;border-bottom:2px solid #d9dde2;white-space:nowrap}table.dt thead th.num{text-align:right}.filterrow th{background:#fff;padding:6px 10px}.filterrow input,.filterrow select{width:100%;border:1px solid var(--line);border-radius:6px;padding:6px 9px;font-size:12px;color:var(--ink);background:#fbfbfc;outline:none;min-width:70px}.filterrow input:focus,.filterrow select:focus{border-color:var(--brand);background:#fff}table.dt tbody td{padding:11px 16px;white-space:nowrap}table.dt tbody td.num{text-align:right;font-variant-numeric:tabular-nums}table.dt tbody tr:nth-child(2n){background:#fcfcfd}table.dt tbody tr:hover{background:#f4f8fb}.sno{font-family:SF Mono,ui-monospace,monospace;font-size:11.5px;color:var(--brand);font-weight:600}.na{font-size:10.5px;font-weight:700;color:var(--mut);background:var(--gray-bg);padding:2px 7px;border-radius:5px}.eff{font-weight:700}.eff.good{color:var(--green)}.eff.bad{color:var(--red)}tfoot td{padding:11px 16px;font-weight:750;font-size:12.5px;background:#f4f9f6;border:1px solid #c9e4d7;border-top:2px solid var(--green);color:var(--brand-ink);white-space:nowrap}tfoot td.num{text-align:right;font-variant-numeric:tabular-nums}tfoot td.lbl{color:var(--green);text-transform:uppercase;font-size:10.5px;letter-spacing:.5px}thead tr.grandtotal td{background:#eef7f2;border:1px solid #c9e4d7;border-bottom:2px solid var(--green);padding:10px 16px;font-weight:750;font-size:12.5px;color:var(--brand-ink);white-space:nowrap}thead tr.grandtotal td.num{text-align:right;font-variant-numeric:tabular-nums}thead tr.grandtotal td.lbl{color:var(--green);text-transform:uppercase;font-size:10px;letter-spacing:.5px}.rowact{border:none;background:none;cursor:pointer;padding:5px;border-radius:6px;color:var(--mut)}.rowact svg{width:15px;height:15px;display:block}.rowact.edit:hover{background:var(--blue-bg);color:var(--blue)}.rowact.del:hover{background:#fbe8e8;color:var(--red)}.pager{display:flex;align-items:center;justify-content:space-between;padding:10px 4px;font-size:12.5px;color:var(--mut);flex-wrap:wrap;gap:8px}.pager .pg{display:flex;gap:4px}.pager .pg button{border:1px solid var(--line);background:var(--card);border-radius:7px;padding:5px 10px;font-size:12.5px;cursor:pointer;font-weight:600;color:var(--ink2)}.pager .pg button.on{background:var(--brand-ink);color:#fff;border-color:var(--brand-ink)}.pager .pg button:disabled{opacity:.4;cursor:default}.hint{font-size:11.5px;color:var(--mut);margin:10px 2px 0}.cardlist{display:none;flex-direction:column;gap:10px}.dcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px;box-shadow:var(--shadow)}.dcard .dc-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:6px}.dcard .dc-desc{font-size:13.5px;font-weight:640;line-height:1.35}.dcard .dc-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;margin-top:8px;padding-top:8px;border-top:1px solid var(--line2)}.dcard .dc-grid .f{font-size:12px}.dcard .dc-grid .f b{font-size:10px;color:var(--mut);font-weight:600;text-transform:uppercase;letter-spacing:.3px;display:block}.mtotal{background:#eef7f2;border:1px solid var(--green);border-radius:12px;padding:12px 14px;font-size:12.5px;font-weight:700;color:var(--brand-ink)}.mtotal .mt-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin-top:6px}.mtotal .mt-grid span{color:var(--green);font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;display:block}.modal-scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#14161a73;z-index:60;display:flex;align-items:center;justify-content:center;padding:20px}.modal{background:var(--card);border-radius:16px;box-shadow:0 20px 60px #00000040;width:100%;max-width:560px;max-height:90vh;overflow-y:auto}.modal h3{font-size:16px;font-weight:700;padding:18px 20px;border-bottom:1px solid var(--line)}.modal .body{padding:18px 20px}.modal .foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}.field{margin-bottom:14px}.field label{display:block;font-size:12px;font-weight:600;color:var(--ink2);margin-bottom:5px}.field input,.field select,.field textarea{width:100%;border:1px solid var(--line);border-radius:9px;padding:9px 11px;font-size:13.5px;color:var(--ink);background:#fff;outline:none}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--brand)}.field .ro{background:#f4f5f7;color:var(--mut)}.frow{display:grid;grid-template-columns:1fr 1fr;gap:12px}.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--brand-ink);padding:20px}.auth-card{background:var(--card);border-radius:18px;box-shadow:0 20px 60px #0000004d;width:100%;max-width:400px;padding:32px}.auth-card .brand{border:none;padding:0 0 20px;justify-content:center}.auth-card h2{font-size:18px;font-weight:700;text-align:center;margin-bottom:4px}.auth-card p.sub{font-size:13px;color:var(--mut);text-align:center;margin-bottom:22px}.auth-card .field input{padding:11px 13px}.auth-card .btn{width:100%;justify-content:center;padding:11px;margin-top:6px}.auth-err{background:var(--red-bg);color:#7a1f1f;font-size:12.5px;padding:10px 12px;border-radius:9px;margin-bottom:14px}.auth-note{font-size:12px;color:var(--mut);text-align:center;margin-top:16px}.empty{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:44px 24px;text-align:center;box-shadow:var(--shadow)}.empty b{font-size:16px}.empty p{color:var(--mut);margin-top:8px;font-size:13px}.spinner{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite;margin:40px auto}@keyframes spin{to{transform:rotate(360deg)}}.center-load{display:flex;align-items:center;justify-content:center;min-height:60vh}.scrim{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:40}@media (max-width:900px){.side{display:none;position:fixed;z-index:50}.side.open{display:flex}.top .burger,.scrim.show{display:block}.kpis{grid-template-columns:1fr 1fr 1fr}.prow{grid-template-columns:1fr;gap:8px}.tablewrap{border:none;background:none;box-shadow:none;overflow:visible}table.dt{display:none}.cardlist{display:flex}.frow{grid-template-columns:1fr}}@media (max-width:560px){.kpis{grid-template-columns:1fr 1fr}.wrap{padding:16px}}
