:root{--bg:#f4f7fb;--panel:#fff;--text:#1f2937;--muted:#667085;--line:#d9e0ea;--nav:#102a52;--primary:#155eef;--success:#067647;--danger:#b42318;--warning:#b54708;--purple:#6941c6}
*{box-sizing:border-box}body{margin:0;font-family:Arial,"Segoe UI",sans-serif;background:var(--bg);color:var(--text);font-size:14px}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.topbar{background:var(--nav);color:#fff;padding:12px 22px;display:flex;justify-content:space-between;align-items:center;gap:18px;position:sticky;top:0;z-index:20}.brand{font-weight:800;color:#fff;letter-spacing:.3px}.brand:hover{text-decoration:none}.version{font-size:11px;background:#29466f;border-radius:12px;padding:3px 8px;margin-left:7px}.topbar nav{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.topbar nav a{color:#fff}.identity{opacity:.88;border-left:1px solid #ffffff38;padding-left:14px}.container{max-width:1450px;margin:24px auto;padding:0 20px;min-height:calc(100vh - 130px)}.auth-container{display:flex;justify-content:center;align-items:center;min-height:calc(100vh - 60px)}footer{text-align:center;color:var(--muted);padding:18px}h1{font-size:26px;margin:0 0 5px}h2{font-size:18px;margin:0 0 15px}h3{font-size:15px;margin:0 0 10px}.muted{color:var(--muted);margin:4px 0}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:15px;margin-bottom:17px}.actions,.form-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.panel,.card,.module,.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 1px 2px #00000008}.panel{padding:19px;margin-bottom:17px}.auth-card{width:min(480px,100%);padding:28px}.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin-bottom:17px}.card{padding:17px}.card b.big{display:block;font-size:27px;color:var(--primary);margin-bottom:5px}.module-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin-bottom:17px}.module{padding:20px;color:var(--text);display:flex;flex-direction:column;gap:7px}.module:hover{text-decoration:none;border-color:#9eb8ee;transform:translateY(-1px)}.module b{font-size:26px;color:var(--primary)}.project-meta,.detail-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:17px}.project-meta div,.detail-grid>div{display:flex;flex-direction:column;gap:5px}.project-meta span,.detail-grid span.label{font-size:11px;text-transform:uppercase;color:var(--muted)}.detail-grid .full{grid-column:1/-1}.detail-grid p{white-space:pre-wrap;margin:4px 0}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;min-width:800px}th,td{padding:10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{background:#f8fafc;color:#475467;text-transform:uppercase;font-size:11px;position:sticky;top:0}tr:hover td{background:#fbfcff}.empty{text-align:center;color:var(--muted);padding:26px}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:15px}.form-grid.one{grid-template-columns:1fr}.form-grid .full{grid-column:1/-1}.form-grid label{display:flex;flex-direction:column;gap:7px;font-weight:700;color:#344054}input,select,textarea{width:100%;border:1px solid #cbd5e1;border-radius:7px;padding:10px 11px;font:inherit;background:#fff;color:var(--text)}textarea{min-height:92px;resize:vertical}input:focus,select:focus,textarea:focus{outline:2px solid #cad9ff;border-color:var(--primary)}.btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid #cbd5e1;background:#fff;color:#344054;border-radius:7px;padding:9px 12px;font-weight:700;cursor:pointer;text-decoration:none}.btn:hover{text-decoration:none;background:#f8fafc}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.success{background:var(--success);border-color:var(--success);color:#fff}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.warning{background:var(--warning);border-color:var(--warning);color:#fff}.btn.small{padding:6px 8px;font-size:12px}.status,.pill{display:inline-block;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:700;background:#eef2f6;color:#475467}.status.active,.status.owner_approved,.status.leader_approved,.status.confirmed{background:#dcfae6;color:var(--success)}.status.sent_supervisor,.status.supervisor_confirmed,.status.pending_leader,.status.pending{background:#fef0c7;color:var(--warning)}.status.returned_supervisor,.status.returned_owner,.status.returned,.status.paused{background:#fee4e2;color:var(--danger)}.status.draft{background:#e8f0ff;color:var(--primary)}.status.locked,.status.completed{background:#e9d7fe;color:var(--purple)}.flash{padding:12px 14px;border-radius:8px;border:1px solid;margin-bottom:14px}.flash.success{background:#ecfdf3;border-color:#abefc6;color:var(--success)}.flash.error{background:#fef3f2;border-color:#fecdca;color:var(--danger)}.flash.warning{background:#fff8e7;border-color:#f6d786;color:#7a4b00}.notice{background:#fff8e7;border:1px solid #f6d786;color:#7a4b00;padding:12px;border-radius:8px}.info{background:#eef4ff;border:1px solid #b2ccff;color:#194185;padding:12px;border-radius:8px}.danger-box{background:#fef3f2;border:1px solid #fecdca;color:#912018;padding:12px;border-radius:8px}.workflow{display:flex;flex-direction:column;gap:10px}.workflow-item{border-left:3px solid #98a2b3;padding:4px 0 4px 14px}.workflow-item b{display:block}.workflow-item small{color:var(--muted)}.attachment-list{display:grid;gap:8px}.attachment{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:10px;border:1px solid var(--line);border-radius:7px}.split{display:grid;grid-template-columns:2fr 1fr;gap:17px}.narrow{max-width:560px}.permission-box{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.permission-box>div{border:1px solid var(--line);border-radius:8px;padding:13px}.nowrap{white-space:nowrap}code{display:block;background:#0f172a;color:#e2e8f0;padding:12px;border-radius:7px;overflow:auto}@media(max-width:1050px){.cards,.module-grid{grid-template-columns:repeat(2,1fr)}.project-meta,.detail-grid{grid-template-columns:repeat(2,1fr)}.split{grid-template-columns:1fr}.permission-box{grid-template-columns:1fr}}@media(max-width:720px){.topbar{position:static;flex-direction:column;align-items:flex-start}.container{padding:0 11px}.page-head{flex-direction:column}.cards,.module-grid,.form-grid,.project-meta,.detail-grid{grid-template-columns:1fr}.form-grid .full,.detail-grid .full{grid-column:auto}}

.nav-form{display:inline;margin:0;padding:0}.nav-link-button{border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;padding:0}.nav-link-button:hover{text-decoration:underline}

/* MVP 1.4 - Tiến độ, trao đổi kỹ thuật, ký số và phát hành */
.progress-summary .card span:first-child{display:block;color:var(--muted);margin-bottom:6px}.progress-track,.mini-progress{height:8px;background:#e8edf5;border-radius:999px;overflow:hidden}.progress-track{margin-top:8px}.progress-track i,.mini-progress i{display:block;height:100%;background:var(--primary);border-radius:999px}.progress-track.actual i,.mini-progress i{background:var(--success)}.mini-progress{width:110px;margin-bottom:4px}.text-danger{color:var(--danger)!important}.text-success{color:var(--success)!important}.progress-modules{grid-template-columns:repeat(4,1fr)}.section-actions{margin-bottom:17px}.page-head.compact{margin-bottom:10px}.form-inline{display:flex;align-items:end;gap:12px;flex-wrap:wrap}.form-inline label{display:flex;flex-direction:column;gap:6px;font-weight:700;min-width:190px}.status.delayed,.status.rejected{background:#fee4e2;color:var(--danger)}.status.on_track,.status.in_progress,.status.submitted{background:#fef0c7;color:var(--warning)}.status.not_started,.status.planned{background:#eef2f6;color:#475467}.status.approved{background:#dcfae6;color:var(--success)}
.gantt-panel{overflow:auto}.gantt-header{display:grid;grid-template-columns:280px 1fr;gap:14px;align-items:center;border-bottom:1px solid var(--line);padding:0 0 12px;margin-bottom:8px}.gantt-header span:nth-child(2){display:flex;justify-content:space-between}.gantt-header span:nth-child(2)::after{content:''}.gantt-header span:last-child{text-align:right;grid-column:2}.gantt-row{display:grid;grid-template-columns:280px minmax(720px,1fr);gap:14px;align-items:center;padding:9px 0;border-bottom:1px solid #eef2f6}.gantt-label{display:flex;flex-direction:column;gap:4px}.gantt-label small{color:var(--muted)}.gantt-track{height:26px;background:repeating-linear-gradient(to right,#f8fafc 0,#f8fafc 9.8%,#e9eef5 10%);position:relative;border:1px solid var(--line);border-radius:5px;overflow:hidden}.gantt-plan{position:absolute;top:4px;height:16px;background:#9bb7f5;border-radius:4px;min-width:3px;overflow:hidden}.gantt-actual{position:absolute;left:0;top:0;height:100%;background:var(--success);border-radius:4px;z-index:2}.gantt-delay-segment{position:absolute;top:0;height:100%;background:#f5a6a0;z-index:3}.gantt-today{position:absolute;top:0;bottom:0;width:0;border-left:2px dashed #475467;z-index:5;pointer-events:none}.gantt-legend,.chart-legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:16px;color:var(--muted)}.gantt-legend span,.chart-legend span{display:flex;align-items:center;gap:7px}.gantt-legend i,.chart-legend i{display:inline-block;width:26px;height:8px;border-radius:4px}.legend-plan{background:#9bb7f5}.legend-actual,.curve-actual{background:var(--success)}.legend-delay{background:#f5a6a0}.legend-today{background:transparent!important;border-left:2px dashed #475467;border-radius:0!important;width:2px!important;height:14px!important}.curve-plan{background:var(--primary)}#sCurve{width:100%;display:block;max-height:430px}
@media(max-width:900px){.progress-modules{grid-template-columns:repeat(2,1fr)}.gantt-header,.gantt-row{grid-template-columns:220px minmax(620px,1fr)}}

/* MVP 1.4 - Trao đổi kỹ thuật, ký số tùy chọn và văn thư */
.mono{font-family:Consolas,"Courier New",monospace;word-break:break-all;font-size:11px}.compact-form{display:grid;gap:6px;min-width:260px}.compact-form input,.compact-form select{padding:6px 8px;font-size:12px}.form-grid label.check{display:flex;flex-direction:row;align-items:center;gap:8px;font-weight:600}.form-grid label.check input{width:auto}.status.pending_site_manager,.status.pending_owner_specialist,.status.pending_department_leader,.status.signing,.status.ready,.status.pending_clerical{background:#fef0c7;color:var(--warning)}.status.sent_supervisor,.status.supervisor_confirmed,.status.converted_to_document{background:#e8f0ff;color:var(--primary)}.status.internally_approved,.status.signed,.status.issued,.status.valid{background:#dcfae6;color:var(--success)}.status.returned_contractor,.status.rejected,.status.cancelled,.status.invalid{background:#fee4e2;color:var(--danger)}.status.closed,.status.skipped{background:#eef2f6;color:#475467}.status.warning,.status.not_detected{background:#fff8e7;color:#7a4b00}

.verify-detail{max-width:520px;max-height:220px;overflow:auto;white-space:pre-wrap;font-size:11px;background:#0f172a;color:#e2e8f0;padding:10px;border-radius:8px}
details summary{cursor:pointer;color:#2759a5;font-size:12px;margin-top:6px}

/* MVP 1.4.2 - Quan tri du an, tai khoan nen va sao luu tu dong */
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px;margin-bottom:17px}.badge{display:inline-block;border-radius:999px;padding:2px 7px;font-size:10px;font-weight:700;background:#e8f0ff;color:var(--primary);vertical-align:middle}.warning-box{background:#fff8e7;border:1px solid #f6d786;color:#7a4b00;padding:12px;border-radius:8px}.mono{display:inline;font-family:Consolas,"Courier New",monospace;word-break:break-all;font-size:11px}@media(max-width:900px){.grid-2{grid-template-columns:1fr}}

/* MVP 1.4.2: dòng tiêu đề hạng mục */
tr.work-heading td { background:#f3f6fb; border-top:2px solid #9fb3d1; border-bottom:1px solid #cbd5e1; }
tr.work-heading td b { color:#17365d; letter-spacing:.01em; }

/* MVP 1.4.2 - menu chèn dòng */
.row-actions{display:flex;gap:6px;align-items:center;white-space:nowrap}.insert-menu{position:relative}.insert-menu summary{list-style:none;cursor:pointer}.insert-menu summary::-webkit-details-marker{display:none}.insert-menu-box{position:absolute;right:0;top:34px;z-index:20;min-width:210px;background:#fff;border:1px solid #d7e1ea;border-radius:10px;box-shadow:0 10px 28px rgba(25,45,70,.18);padding:6px}.insert-menu-box a{display:block;padding:8px 10px;border-radius:7px;color:#17324d;text-decoration:none}.insert-menu-box a:hover{background:#eef5ff}

/* MVP 1.4.2 - sao lưu/phục hồi theo mô hình CDE */
.backup-top-grid{align-items:stretch}.backup-card{min-height:100%}.backup-status{display:grid;gap:10px;margin-top:4px}.backup-status>div{display:grid;grid-template-columns:170px 1fr;gap:8px;padding-top:8px;border-top:1px solid #e4eaf0}.backup-status b{color:#40556b}.backup-restore-warning{margin:18px 0;padding:20px 22px}.backup-restore-warning h2{margin-top:0}.backup-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.restore-inline{position:relative}.restore-inline summary{cursor:pointer;color:#126d82;white-space:nowrap}.restore-confirm-box{position:absolute;right:0;z-index:30;background:#fff;border:1px solid #d4dee7;border-radius:12px;padding:14px;width:320px;box-shadow:0 12px 30px rgba(20,40,60,.2)}.restore-confirm-box label{display:block;margin-bottom:10px}.restore-confirm-box input[type=text],.restore-confirm-box input:not([type]){width:100%}


/* MVP 1.4.3 - Nhật ký nhiều công việc */
.daily-work-section{display:block}.daily-work-table{min-width:1450px}.daily-work-table th{vertical-align:bottom}.daily-work-table td{vertical-align:top}.daily-work-table input,.daily-work-table select{min-width:105px;padding:7px 8px}.daily-work-table td:last-child input{min-width:180px;margin-bottom:5px}.daily-work-table .center{text-align:center}.daily-work-table .num,.num{text-align:right;white-space:nowrap}.daily-item-locked td{background:#f0fbf4}.daily-item-warning td{background:#fff7e8}.status.partial{background:#e8f0ff;color:var(--primary)}


/* MVP 1.4.4 - Nghiệm thu nhiều công việc */
.acceptance-work-section{display:block}.acceptance-work-table{min-width:1450px}.acceptance-work-table th{vertical-align:bottom}.acceptance-work-table td{vertical-align:top}.acceptance-work-table input,.acceptance-work-table select{min-width:110px;padding:7px 8px}.acceptance-work-table td:last-child input{min-width:185px;margin-bottom:5px}.acceptance-work-table .center{text-align:center}.acceptance-item-zero td{background:#fafafa}.acceptance-item-rejected td{background:#fff2f0}.status.accepted{background:#dcfae6;color:var(--success)}.status.rejected{background:#fee4e2;color:var(--danger)}

/* MVP 1.4.5 - Điều chỉnh/cập nhật tiến độ nhiều công việc */
.progress-adjust-section{display:block}.progress-adjust-table{min-width:1500px}.progress-adjust-table th{vertical-align:bottom}.progress-adjust-table td{vertical-align:top}.progress-adjust-table input,.progress-adjust-table select{min-width:110px;padding:7px 8px}.progress-adjust-table .center{text-align:center}.progress-adjust-table tr.progress-adjust-selected td{background:#f0f7ff}.progress-adjust-table small{color:var(--muted)}.progress-history-table{min-width:1350px}.progress-history-table td{vertical-align:top}.progress-adjust-form .warning-box b{color:#7a4b00}

/* MVP 1.4.10 - Gantt: giữ kế hoạch màu lam, tô phần chậm theo KH đến ngày đánh giá */
.gantt-filter-form,.acceptance-group-filter{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap;margin-bottom:16px;padding:14px 16px}.gantt-filter-form label,.acceptance-group-filter label{display:flex;flex-direction:column;gap:7px;min-width:min(520px,100%)}.gantt-filter-form select,.acceptance-group-filter select{min-width:min(500px,100%)}
.group-summary-table{min-width:1050px}.group-summary-table td,.group-summary-table th{vertical-align:top}.work-items-financial-table{min-width:2050px}.work-items-financial-table td,.work-items-financial-table th{vertical-align:top}.work-items-financial-table .num,.group-summary-table .num{text-align:right;white-space:nowrap}
.gantt-panel .gantt-row{min-height:54px}.gantt-panel .gantt-label b{line-height:1.25}.gantt-panel .gantt-label small{line-height:1.3}
@media(max-width:900px){.gantt-filter-form,.acceptance-group-filter{display:block}.gantt-filter-form label,.acceptance-group-filter label{min-width:0}.gantt-filter-form select,.acceptance-group-filter select{width:100%;min-width:0}}

.gantt-summary-note{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;margin-bottom:12px}.gantt-status{font-weight:700}.gantt-status.delayed{color:var(--danger)}.gantt-status.completed{color:var(--success)}.gantt-status.in-progress{color:#7a5d00}.gantt-status.not-started{color:var(--muted)}

/* MVP 1.5.0 Contract controls */
.inline{display:inline}.span-2{grid-column:1/-1}.check{display:flex;gap:.5rem;align-items:center}.check input{width:auto}.status.effective,.status.approved,.status.paid{background:#e8f7ee;color:#176b3a}.status.unclassified{background:#fff6db;color:#7a5a00}

/* MVP 1.7.1 - Gantt theo nhà thầu + biểu đồ nhân lực */
.gantt-filter-form .full-width{flex-basis:100%}.manpower-panel{overflow:auto}.manpower-kpis{grid-template-columns:repeat(4,minmax(150px,1fr));margin-bottom:12px}.manpower-alert{padding:11px 14px;border-radius:8px;margin:10px 0 14px;font-weight:600;border:1px solid var(--line)}.manpower-alert.ok{background:#ecfdf3;color:#176b3a;border-color:#b7e4c7}.manpower-alert.warning{background:#fff8e5;color:#7a5d00;border-color:#f1d58a}.manpower-alert.danger{background:#fff1f0;color:var(--danger);border-color:#f2b8b5}.manpower-alert.info{background:#f5f8fc;color:var(--muted)}.manpower-chart-wrap{min-width:820px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:8px}.manpower-chart-wrap svg{width:100%;height:auto;display:block}.mp-grid{stroke:#e8edf3;stroke-width:1}.mp-axis{stroke:#66788a;stroke-width:1.2}.mp-axis-label,.mp-axis-title{fill:#66788a;font-size:13px}.mp-plan-line{fill:none;stroke:#4169e1;stroke-width:3;stroke-linejoin:round;stroke-linecap:round}.mp-actual-line{fill:none;stroke:#198754;stroke-width:3;stroke-linejoin:round;stroke-linecap:round}.mp-actual-dot{fill:#198754}.manpower-plan-legend{background:#4169e1}.manpower-actual-legend{background:#198754}@media(max-width:900px){.manpower-kpis{grid-template-columns:repeat(2,1fr)}}

/* MVP 1.7.1 FIX4 - Chi tiết phạm vi thành viên/đơn vị theo Phần thực hiện */
.mvp-contractor-scope-details{margin-top:6px;position:relative}.mvp-contractor-scope-details summary{cursor:pointer;display:inline-flex;align-items:center;gap:4px;border:1px solid #cbd5e1;border-radius:7px;padding:3px 8px;background:#fff;color:#1d4ed8;font-size:.82rem;font-weight:700;user-select:none;list-style:none}.mvp-contractor-scope-details summary::-webkit-details-marker{display:none}.mvp-contractor-scope-details[open] summary{background:#eff6ff;border-color:#93c5fd}.mvp-contractor-scope-popover{margin-top:6px;min-width:250px;max-width:390px;padding:8px 10px;border:1px solid #bfdbfe;border-radius:8px;background:#f8fbff;box-shadow:0 4px 14px rgba(15,23,42,.10);font-size:.82rem;line-height:1.45}.mvp-contractor-scope-popover div+div{border-top:1px dashed #dbeafe;margin-top:5px;padding-top:5px}
