:root{--blue:#005ca1;--blue2:#004a82;--orange:#f0aa1d;--bg:#f3f6fa;--line:#dde5ee;--txt:#1d2733;--muted:#6b7a8c;--red:#d93025;--yellow:#fff4d6;--ybd:#f0c75e;--rbg:#fde8e7;--green:#188038}
*{box-sizing:border-box}
body{margin:0;font-family:Montserrat,Segoe UI,Arial,sans-serif;font-size:13px;color:var(--txt);background:var(--bg)}
.hidden{display:none!important}
.topbar{position:sticky;top:0;z-index:20;display:flex;justify-content:space-between;align-items:center;background:var(--blue);color:#fff;padding:10px 20px;border-bottom:3px solid var(--orange)}
.brand{display:flex;gap:12px;align-items:center}
.logo{width:40px;height:40px;border-radius:8px;background:var(--orange);color:#fff;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:16px}
.logo.big{width:56px;height:56px;font-size:22px;margin:0 auto 10px}
.title{font-weight:800;font-size:18px}.sub{font-size:11px;opacity:.85;font-weight:500}
.topright{display:flex;gap:10px;align-items:center}
.chip{background:rgba(255,255,255,.15);padding:4px 10px;border-radius:20px;font-size:11px;font-weight:600}
.chip.bad{background:var(--red)}
main{padding:16px 20px;max-width:1800px;margin:0 auto}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:16px;box-shadow:0 1px 2px rgba(0,0,0,.03)}
.card h3{margin:0 0 12px;color:var(--blue);font-weight:800;font-size:15px;display:flex;align-items:center;gap:8px}
.num{background:var(--blue);color:#fff;border-radius:50%;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;font-size:12px}
.drop{position:relative;border:2px dashed #9bb7d4;border-radius:10px;padding:22px;text-align:center;background:#f7fbff;cursor:pointer;transition:.15s}
.drop.over{border-color:var(--orange);background:#fff8e9}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer}
.muted{color:var(--muted);font-size:12px}
.opts{margin:10px 0 4px}.chk{display:inline-flex;gap:6px;align-items:center;cursor:pointer;font-weight:500}
.btn{font-family:inherit;font-weight:700;font-size:13px;border-radius:7px;border:1px solid transparent;padding:8px 14px;cursor:pointer}
.btn.small{padding:4px 10px;font-size:12px}
.btn.primary{background:var(--blue);color:#fff}.btn.primary:hover{background:var(--blue2)}
.btn.accent{background:var(--orange);color:#fff}.btn.accent:hover{filter:brightness(.95)}
.btn.ghost{background:#fff;color:var(--blue);border-color:#b9cde2}.topbar .btn.ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.5)}
.btn:disabled{opacity:.5;cursor:default}
.btn.link{background:none;border:none;color:var(--red);padding:2px 6px}
input,select{font-family:inherit;font-size:13px;padding:6px 8px;border:1px solid #c6d3e1;border-radius:6px;background:#fff}
input:focus,select:focus{outline:2px solid #9cc3e8;border-color:var(--blue)}
.file{border:1px solid var(--line);border-radius:9px;margin-top:12px;overflow:hidden}
.filehead{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;background:#eef4fa;padding:10px 12px;border-bottom:1px solid var(--line)}
.filehead .fname{font-weight:800;color:var(--blue);margin-right:auto}
.filehead label{display:flex;gap:6px;align-items:center;font-weight:600;font-size:12px}
.filehead input.acct{width:160px}.filehead input.owner{width:300px}.filehead input.hdr{width:64px}
.filebody{display:grid;grid-template-columns:minmax(380px,520px) 1fr;gap:14px;padding:12px}
@media(max-width:1100px){.filebody{grid-template-columns:1fr}}
.maptbl{width:100%;border-collapse:collapse}
.maptbl td{padding:4px 6px;border-bottom:1px solid #eef2f6;vertical-align:middle}
.maptbl td:first-child{font-weight:600;width:44%}
.maptbl select{width:100%}
.maptbl tr.req td:first-child::after{content:" *";color:var(--red)}
.badge{display:inline-block;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:10px;white-space:nowrap}
.b-ok{background:#e3f4e8;color:var(--green)}.b-warn{background:var(--yellow);color:#8a6100;border:1px solid var(--ybd)}
.b-err{background:var(--rbg);color:var(--red)}.b-man{background:#e6eefb;color:var(--blue)}.b-prof{background:#fff1d6;color:#8a5a00}
.warns{list-style:none;margin:0 0 8px;padding:0}
.warns li{padding:5px 8px;border-radius:6px;margin-bottom:4px;font-size:12px}
.warns li.error{background:var(--rbg);color:var(--red)}.warns li.warn{background:var(--yellow);color:#7a5600}.warns li.info{background:#eef4fa;color:#40566e}
.prev{overflow:auto;max-height:260px;border:1px solid var(--line);border-radius:6px}
.prev table{border-collapse:collapse;font-size:11.5px;width:100%}
.prev th,.prev td{padding:4px 6px;border-bottom:1px solid #eef2f6;white-space:nowrap;text-align:left}
.prev th{background:#f5f8fb;position:sticky;top:0}
.balok{color:var(--green);font-weight:700}.balbad{color:var(--red);font-weight:700}
.summary{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:10px}
.summary .s{background:#f5f8fb;border:1px solid var(--line);border-radius:8px;padding:8px 12px;min-width:130px}
.summary .s b{display:block;font-size:16px;color:var(--blue)}
.summary .s.w b{color:#b07800}.summary .s.e b{color:var(--red)}
.starts{margin-bottom:10px}.starts summary{cursor:pointer;font-weight:600;color:var(--blue)}
.startsbox{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0}
.startsbox label{display:flex;gap:6px;align-items:center;background:#f5f8fb;border:1px solid var(--line);padding:4px 8px;border-radius:6px;font-family:Consolas,monospace}
.startsbox input{width:70px}
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}
.toolbar .sp{flex:1}
.toolbar input[type=search]{width:200px}
.prog{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:var(--blue)}
.prog .bar{width:180px;height:8px;background:#e3ebf3;border-radius:5px;overflow:hidden}
.prog .bar i{display:block;height:100%;width:0;background:var(--orange);transition:width .3s}
.tablewrap{overflow:auto;max-height:calc(100vh - 230px);border:1px solid var(--line);border-radius:8px}
#grid{border-collapse:collapse;width:100%;font-size:12px}
#grid th{position:sticky;top:0;background:var(--blue);color:#fff;font-weight:700;padding:8px 6px;text-align:left;white-space:nowrap;z-index:2}
#grid td{padding:5px 6px;border-bottom:1px solid #edf1f5;vertical-align:top}
#grid th.r,#grid td.r{text-align:right;white-space:nowrap}
#grid td.wide{min-width:260px;max-width:420px}
#grid td.wide2{min-width:180px;max-width:300px}
#grid tr.warn td{background:#fffaf0}#grid tr.error td{background:#fff3f2}
#grid tr.warn td:first-child{box-shadow:inset 3px 0 var(--orange)}#grid tr.error td:first-child{box-shadow:inset 3px 0 var(--red)}
#grid td.norm{cursor:text;outline:none;border-left:2px solid #e3ebf3}
#grid td.norm:focus{background:#fff!important;box-shadow:inset 0 0 0 2px var(--blue)}
#grid td.norm.empty::before{content:"(chưa chuẩn hóa)";color:#aab6c3;font-style:italic}
#grid td.norm .src{display:block;font-size:10px;color:var(--muted);margin-top:2px}
#grid td.date{cursor:pointer;white-space:nowrap}
#grid td.vch{font-family:Consolas,monospace;white-space:nowrap}
#grid .sw{border:none;background:#e6eefb;color:var(--blue);border-radius:4px;cursor:pointer;font-size:11px;padding:1px 5px;margin-left:4px}
#grid ul{margin:0;padding-left:14px}
#grid li.error{color:var(--red)}#grid li.warn{color:#8a6100}#grid li.info{color:var(--muted)}
.foot{margin-top:8px}
.overlay{position:fixed;inset:0;background:rgba(0,40,80,.6);z-index:50;display:flex;align-items:center;justify-content:center}
.loginbox{background:#fff;padding:28px;border-radius:12px;width:320px;text-align:center;border-top:5px solid var(--orange)}
.loginbox h2{color:var(--blue);margin:0 0 16px;font-size:18px}
.loginbox input{width:100%;margin-bottom:10px;padding:10px}.loginbox .btn{width:100%}
.err{color:var(--red);margin-top:8px;min-height:16px}
.toast{position:fixed;bottom:20px;right:20px;background:#1d2733;color:#fff;padding:12px 16px;border-radius:8px;z-index:60;max-width:460px;box-shadow:0 4px 14px rgba(0,0,0,.2)}
.toast.bad{background:var(--red)}
