:root{
  --bg:#f3f6f9;--card:#fff;--text:#17212b;--muted:#687782;--line:#dfe6ec;
  --blue:#0f5f9a;--blue2:#e9f2fb;--green:#1d7f4e;--green2:#e9f7ef;
  --orange:#c96013;--orange2:#fff2e8;--red:#bd2a2a;--red2:#fdecec;
  --purple:#6c4fb4;--purple2:#f0ebfb;--shadow:0 2px 10px rgba(20,37,52,.06)
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:var(--text)}
button,input,select,textarea{font:inherit}
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.96);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.topbar-inner{max-width:1180px;margin:auto;padding:11px 14px;display:flex;justify-content:space-between;align-items:center;gap:12px}
.brand-wrap{display:flex;align-items:center;gap:10px;min-width:0}.logo-strip{display:flex;align-items:center;gap:7px;flex:0 0 auto}.logo-box{height:42px;min-width:48px;max-width:82px;padding:3px 5px;border:1px solid var(--line);border-radius:9px;background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden}.logo-box img{display:block;max-width:100%;max-height:100%;object-fit:contain}.logo-box.fpt{width:62px}.logo-box.tienbao{width:48px}.logo-box.truongan{width:80px}.logo-box.tvf{width:70px}.brand{min-width:0}.brand h1{font-size:17px;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand small{display:block;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.version{font-size:12px;font-weight:800;color:var(--blue);background:var(--blue2);padding:6px 9px;border-radius:999px;white-space:nowrap}
main{max-width:1180px;margin:auto;padding:14px 14px 86px}
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}
.section{margin-top:13px;padding:14px}.section-title{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}.section-title h2{font-size:16px;margin:0}.section-title h2.status-heading{display:inline-block;text-transform:uppercase;font-weight:900;letter-spacing:.4px;background:#dff3ff;color:#0f5f8f;border:1px solid #a9d9f4;border-radius:10px;padding:7px 10px;box-shadow:0 1px 0 rgba(15,95,143,.05)}.sub{font-size:12px;color:var(--muted)}
.btn{border:1px solid var(--line);background:#fff;border-radius:10px;padding:9px 12px;font-weight:750;cursor:pointer;color:var(--text)}
.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn.soft{background:#f8fafc}.btn.danger{color:var(--red);background:#fff7f7;border-color:#efcccc}.btn.small{padding:6px 9px;font-size:12px}
.input{width:100%;border:1px solid var(--line);background:#fff;border-radius:10px;padding:10px 11px;color:var(--text)}
.label{font-size:12px;color:var(--muted);margin-bottom:5px;display:block;font-weight:700}
.hero{padding:15px;background:linear-gradient(135deg,#0f5f9a,#1779ba);color:#fff;border-radius:18px;box-shadow:0 6px 18px rgba(15,95,154,.18)}
.hero-top{display:grid;grid-template-columns:minmax(360px,1fr) auto auto;gap:16px;align-items:start}.hero h2{font-size:18px;margin:0 0 4px}.hero .meta{font-size:12px;opacity:.9}.hero-logos{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:nowrap}.hero-logo{height:58px;min-width:76px;max-width:118px;padding:5px 7px;border-radius:10px;background:#fff;border:1px solid rgba(255,255,255,.55);display:flex;align-items:center;justify-content:center;overflow:hidden;box-shadow:0 2px 7px rgba(0,0,0,.10)}.hero-logo img{display:block;max-width:100%;max-height:100%;object-fit:contain}.hero-logo.fpt{width:88px}.hero-logo.tvf{width:82px}.hero-logo.tienbao{width:88px}.hero-logo.truongan{width:112px}.hero-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:13px}.hero-kpi{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.15);padding:9px;border-radius:12px}.hero-kpi small{display:block;opacity:.86}.hero-kpi b{font-size:18px;display:block;margin-top:3px}
.task-select-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}
.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.qbox{padding:11px;border:1px solid var(--line);border-radius:12px;background:#fafcfd}.qbox small{display:block;color:var(--muted);font-size:11px}.qbox b{font-size:17px;display:block;margin-top:4px}.qbox.blue{background:var(--blue2);border-color:#cfe1f1}.qbox.green{background:var(--green2);border-color:#cdebd9}.qbox.orange{background:var(--orange2);border-color:#f0d4be}.qbox.purple{background:var(--purple2);border-color:#ded4f7}
.progress-wrap{margin-top:12px}.progress-head{display:flex;justify-content:space-between;gap:8px;font-size:12px}.progress{height:11px;border-radius:999px;background:#dbeafe;overflow:hidden;margin-top:6px;border:1px solid #bfdbfe}.progress>span{display:block;height:100%;border-radius:inherit;background:#2563eb;width:0}.progress.actual{background:#dcfce7;border-color:#bbf7d0}.progress.actual>span{background:#16a34a}
.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}.metric{padding:10px;border:1px solid var(--line);border-radius:12px;background:#fff}.metric small{display:block;color:var(--muted);font-size:11px}.metric b{display:block;font-size:16px;margin-top:4px}.danger{color:var(--red)}.warn{color:var(--orange)}.good{color:var(--green)}
.quick-form{display:grid;grid-template-columns:1.35fr .9fr 1fr 1fr;gap:8px}.quick-form .wide{grid-column:span 2}.quick-form .actions{display:flex;gap:8px;align-items:end}
.task-list{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.task-card{border:1px solid var(--line);border-radius:14px;padding:13px;background:#fff;box-shadow:0 2px 8px rgba(20,37,52,.05);transition:.18s ease}.task-card:hover{transform:translateY(-1px);box-shadow:0 5px 14px rgba(20,37,52,.09)}.task-card.tone-0{background:#eef6ff;border-color:#bfd8f0}.task-card.tone-1{background:#eef9f2;border-color:#c6e7d2}.task-card.tone-2{background:#fff4e9;border-color:#f1d3b7}.task-card.tone-3{background:#f5efff;border-color:#ddd0f3}.task-top{display:flex;justify-content:space-between;gap:10px}.task-card h3{font-size:15px;margin:0;font-weight:850;color:#12202c;line-height:1.3}.task-card .sub{font-weight:650;color:#526675;margin-top:2px}.task-card .unit{font-size:11px;padding:5px 8px;border-radius:999px;background:rgba(255,255,255,.8);color:#314757;font-weight:850;border:1px solid rgba(70,95,115,.12)}.task-meta{margin-top:8px;font-size:12px;color:#4f6270;display:grid;grid-template-columns:1fr 1fr;gap:5px 10px}.task-meta span{padding:5px 7px;border-radius:8px;background:rgba(255,255,255,.58)}.task-meta b{color:#12202c;font-size:12.5px;font-weight:850}.task-status{display:flex;justify-content:space-between;gap:8px;margin-top:10px;font-size:12px;font-weight:750;color:#314757}.task-status b{font-size:13px;color:#12202c}.mini-progress{height:8px;background:rgba(255,255,255,.75);border-radius:999px;overflow:hidden;margin-top:6px;border:1px solid rgba(60,80,100,.08)}.mini-progress span{display:block;height:100%;background:var(--green);border-radius:999px}.task-actions{display:flex;gap:6px;margin-top:11px}.task-card .task-actions .btn{background:rgba(255,255,255,.82);font-weight:800}
.chartbox{height:320px;border:1px solid var(--line);border-radius:13px;padding:8px;background:#fff}.chartbox canvas{width:100%;height:100%}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-top:7px}.dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:5px}.dot.plan{background:#9aa7b1}.dot.actual{background:var(--green)}
.overall-head{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 12px}.overall-chip{border:1px solid var(--line);border-radius:999px;padding:6px 10px;background:#f8fafc;font-size:11px;font-weight:850;color:#334155}.overall-chip.overdue{background:#fee2e2;color:#b91c1c;border-color:#fecaca}.overall-chip.behind{background:#ffedd5;color:#c2410c;border-color:#fed7aa}.overall-chip.ok{background:#dcfce7;color:#15803d;border-color:#bbf7d0}.overall-chip.upcoming{background:#e2e8f0;color:#475569;border-color:#cbd5e1}.overall-chart{border:1px solid var(--line);border-radius:13px;background:#fff;overflow:hidden}.overall-chart-scroll{max-height:680px;overflow:auto}.overall-row{display:grid;grid-template-columns:minmax(230px,1.2fr) minmax(260px,2fr) 145px;gap:12px;align-items:center;padding:10px 12px;border-bottom:1px solid #edf1f4}.overall-row:last-child{border-bottom:0}.overall-name b{display:block;font-size:12.5px;color:#152433}.overall-name span{font-size:10.5px;color:var(--muted)}.overall-bars{display:grid;gap:6px}.overall-barline{display:grid;grid-template-columns:72px 1fr 52px;gap:7px;align-items:center;font-size:10.5px;color:#52616d}.overall-track{height:9px;background:#edf1f4;border-radius:999px;overflow:hidden}.overall-fill{height:100%;border-radius:999px}.overall-fill.plan{background:#7556bd}.overall-fill.actual{background:#1d7f4e}.overall-pct{text-align:right;font-weight:850;color:#17212b}.overall-status{text-align:right}.overall-status .daily-status{display:inline-block}.overall-note{font-size:11px;color:var(--muted);margin-top:8px}.overall-group{padding:8px 12px;background:#f7f9fb;border-bottom:1px solid var(--line);font-size:12px;font-weight:900;color:#314757;position:sticky;top:0;z-index:1}@media(max-width:700px){.overall-row{grid-template-columns:1fr;gap:7px}.overall-status{text-align:left}.overall-barline{grid-template-columns:66px 1fr 46px}.overall-chart-scroll{max-height:620px}}
.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:12px}table{width:100%;border-collapse:collapse;font-size:12px;min-width:760px}th,td{padding:9px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{background:#f8fafc;color:#52616d;position:sticky;top:0}.num{text-align:right;white-space:nowrap}
.bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:40;background:rgba(255,255,255,.97);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav-inner{max-width:720px;margin:auto;display:grid;grid-template-columns:repeat(5,1fr)}.navbtn{border:0;background:transparent;padding:8px 4px 7px;color:#60717e;font-size:10px;font-weight:750}.navbtn span{display:block;font-size:19px;line-height:20px;margin-bottom:2px}.navbtn.active{color:var(--blue)}
.empty{padding:18px;text-align:center;color:var(--muted);font-size:13px}.help{font-size:12px;color:var(--muted);line-height:1.6}.rule-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.rule{border:1px solid var(--line);border-radius:12px;padding:10px;background:#fafcfd}.rule b{display:block;font-size:13px;margin-bottom:3px}.rule span{font-size:12px;color:var(--muted)}

.toast{position:fixed;left:50%;bottom:84px;transform:translateX(-50%) translateY(20px);z-index:100;background:#17212b;color:#fff;padding:10px 14px;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.22);font-size:13px;opacity:0;pointer-events:none;transition:.22s ease;max-width:min(92vw,520px);text-align:center}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.toast.good{background:#1d7f4e}.toast.warn{background:#a94f0d}.toast.bad{background:#a92525}
dialog{border:0;border-radius:16px;max-width:980px;width:calc(100% - 24px);padding:0;box-shadow:0 20px 50px rgba(0,0,0,.28)}dialog::backdrop{background:rgba(20,30,40,.45)}.dialog-head{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.dialog-body{padding:14px 16px}.form-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.span2{grid-column:span 2}.span4{grid-column:1/-1}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}
@media(max-width:850px){.hero-top{grid-template-columns:1fr auto}.hero-logos{grid-column:1/-1;justify-content:flex-start}.hero-grid,.summary-grid,.metrics{grid-template-columns:repeat(2,1fr)}.task-list{grid-template-columns:1fr}.quick-form{grid-template-columns:1fr 1fr}.quick-form .wide{grid-column:span 2}.form-grid{grid-template-columns:1fr 1fr}.span2{grid-column:span 2}.span4{grid-column:1/-1}}
@media(max-width:520px){main{padding:10px 10px 86px}.hero-top{grid-template-columns:1fr}.hero-logos{grid-column:auto;justify-content:flex-start;gap:6px;margin-top:6px}.hero-logo{height:42px;min-width:54px;padding:3px 4px}.hero-logo.fpt{width:62px}.hero-logo.tvf{width:58px}.hero-logo.tienbao{width:62px}.hero-logo.truongan{width:82px}.hero-top>#todayLabel{justify-self:start}.topbar-inner{padding:8px 10px;gap:7px}.brand-wrap{gap:7px;min-width:0}.logo-strip{gap:4px}.logo-box{height:31px;min-width:34px;padding:2px 3px;border-radius:7px}.logo-box.fpt{width:44px}.logo-box.tienbao{width:34px}.logo-box.truongan{width:56px}.logo-box.tvf{width:48px}.brand h1{font-size:13px}.brand small{font-size:10px}.version{font-size:10px;padding:5px 7px}.hero{padding:13px}.hero h2{font-size:16px}.hero-grid{grid-template-columns:1fr 1fr}.hero-kpi b{font-size:16px}.section{padding:12px}.summary-grid,.metrics{grid-template-columns:1fr 1fr}.qbox b,.metric b{font-size:15px}.task-select-row{grid-template-columns:1fr}.quick-form{grid-template-columns:1fr}.quick-form .wide{grid-column:auto}.quick-form .actions{align-items:stretch}.chartbox{height:285px}.rule-grid{grid-template-columns:1fr}}

.task-card.status-overdue{border-left:6px solid #dc2626}
.task-card.status-behind{border-left:6px solid #f59e0b}
.task-card.status-ok{border-left:6px solid #16a34a}
.task-card.status-upcoming{border-left:6px solid #64748b}
.progress-alert-btn{border:0;border-radius:999px;padding:7px 10px;font-size:11px;font-weight:900;cursor:pointer;white-space:nowrap}
.progress-alert-btn.overdue{background:#fee2e2;color:#b91c1c;box-shadow:inset 0 0 0 1px #fecaca}
.progress-alert-btn.behind{background:#ffedd5;color:#c2410c;box-shadow:inset 0 0 0 1px #fed7aa}
.progress-alert-btn.ok{background:#dcfce7;color:#15803d;box-shadow:inset 0 0 0 1px #bbf7d0}
.progress-alert-btn.upcoming{background:#e2e8f0;color:#475569;box-shadow:inset 0 0 0 1px #cbd5e1}

.calc-panel{background:#edf7ff;border:1px solid #a9d5f5;border-radius:12px;padding:11px}.calc-panel .label{color:#145b8f;font-weight:850}.calc-input-row{display:grid;grid-template-columns:132px minmax(0,1fr);gap:10px;align-items:center}.calc-mode{background:#e2f2ff;border-color:#91c7ee;font-weight:750;color:#124f7b}.calc-field{background:#fff;border-color:#7fbee9;font-weight:800;color:#17324a;min-width:0}.calc-result{margin-top:7px;font-size:12px;color:#35657f;font-weight:700}.calc-result.error{color:#b42318}.calc-result.ok{color:#0f6f9d}@media(max-width:520px){.calc-input-row{grid-template-columns:1fr}.calc-mode{width:100%}}
