:root{--navy:#1E4397;--navy-dark:#153172;--ink:#14213D;--muted:#5B6478;--line:#E3E8F0;--bg:#F3F5F9;--surface:#fff;--tint:#EEF3FF;
--ok:#15803D;--ok-bg:#DCFCE7;--warn:#B45309;--warn-bg:#FEF3C7;--bad:#B91C1C;--bad-bg:#FEE2E2;--info-bg:#DBEAFE}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 'Be Vietnam Pro',system-ui,-apple-system,'Segoe UI',sans-serif}
a{color:var(--navy)}a:hover{color:var(--navy-dark)}
button,input,select,textarea{font:inherit;color:inherit}
h1{font-size:22px;margin:0 0 4px}h2{font-size:16px;margin:0 0 10px}h3{font-size:14px;margin:0 0 8px}
.app{display:flex;min-height:100vh}
.side{width:232px;flex:none;background:var(--navy);color:#fff;padding:18px 14px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh;overflow:auto}
.brand{display:flex;align-items:center;gap:10px;padding:4px 8px 16px}.brand small{display:block;font-size:11px;opacity:.75}
.logo{width:36px;height:36px;border-radius:8px;background:#fff;color:var(--navy);font-weight:700;display:flex;align-items:center;justify-content:center}
.nav{display:flex;flex-direction:column;gap:2px}
.nav a{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:9px 12px;border-radius:8px;color:#fff;text-decoration:none;opacity:.92}
.nav a:hover{background:rgba(255,255,255,.12)}.nav a[aria-current=page]{background:#fff;color:var(--navy);font-weight:600;opacity:1}
.nav .sep{height:1px;background:rgba(255,255,255,.2);margin:8px}
.badge{background:#F59E0B;color:var(--ink);font-size:11px;font-weight:700;border-radius:999px;padding:1px 8px}
.who{margin-top:auto;padding-top:12px;border-top:1px solid rgba(255,255,255,.2);font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.who .btn.link{color:#fff;opacity:.85}
.main{flex:1;min-width:0;padding:20px 28px 40px}.main.solo{max-width:480px;margin:60px auto;padding:20px}
.topbar{display:flex;align-items:center;gap:10px;margin-bottom:14px}.grow{flex:1}.menu-toggle{display:none;font-size:20px}
.bell{text-decoration:none;font-size:18px;position:relative;padding:4px}.bell .badge{position:absolute;top:-4px;right:-8px}
.sub{color:var(--muted);font-size:13px}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:12px;background:var(--info-bg)}.flash.error{background:var(--bad-bg);color:var(--bad)}.flash.success{background:var(--ok-bg);color:var(--ok)}.flash.warning{background:var(--warn-bg);color:var(--warn)}
.page-head{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:10px;margin-bottom:16px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:14px;min-width:0}
.grid{display:grid;gap:14px}.grid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
.kpi{display:block;text-decoration:none;color:inherit}.kpi .lab{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.kpi .val{font-size:28px;font-weight:700;margin-top:2px}.kpi .val small{font-size:14px;color:var(--muted);font-weight:500}
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:1px solid var(--line);background:#fff;border-radius:8px;font-weight:600;cursor:pointer;text-decoration:none;color:var(--ink);line-height:1.3}
.btn:hover{background:var(--bg)}.btn.pri{background:var(--navy);color:#fff;border-color:var(--navy)}.btn.pri:hover{background:var(--navy-dark)}
.btn.ok{background:var(--ok);color:#fff;border-color:var(--ok)}.btn.bad{color:var(--bad)}.btn.sm{padding:5px 10px;font-size:13px}.btn.link{border:0;background:none;padding:4px 6px;color:var(--navy)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.pill{display:inline-block;font-size:12px;font-weight:600;border-radius:999px;padding:2px 10px;white-space:nowrap}
.pill.ok{background:var(--ok-bg);color:var(--ok)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill.bad{background:var(--bad-bg);color:var(--bad)}.pill.info{background:var(--info-bg);color:var(--navy)}.pill.muted{background:var(--bg);color:var(--muted)}
.list .item{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--line)}.list .item:first-child{border-top:0}.list .item>div{min-width:0}
.tbl{overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}
tr.hl{background:var(--tint)}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
form.f{display:grid;gap:12px}.f label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:600;color:var(--muted)}
.f input,.f select,.f textarea{border:1px solid #D5DBE7;border-radius:8px;padding:9px 10px;background:#fff;font-weight:400;font-size:14px;color:var(--ink);width:100%}
.f .row{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.f .row3{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}
.f .actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.note{background:var(--bg);border-radius:8px;padding:10px 12px;font-size:13px}.note.warn{background:var(--warn-bg);color:var(--warn)}
.tabs{display:flex;gap:4px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:4px;flex-wrap:wrap}.tabs a{padding:7px 12px;border-radius:6px;text-decoration:none;color:var(--ink);font-weight:600}.tabs a[aria-current=page]{background:var(--navy);color:#fff}
.diff{border:1px solid var(--line);border-radius:10px;overflow:hidden}.diff .r{display:grid;grid-template-columns:1fr 1fr 1fr;border-top:1px solid var(--line)}.diff .r:first-child{border-top:0;background:var(--bg);font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase}.diff .r>div{padding:9px 12px;min-width:0;overflow-wrap:anywhere}.diff .old{color:var(--bad);text-decoration:line-through}.diff .new{color:var(--ok);font-weight:600}
.chip{display:inline-block;font-size:12px;background:var(--tint);color:var(--navy);border-radius:999px;padding:2px 10px;font-weight:600}
.org ul{list-style:none;margin:0;padding-left:22px;border-left:1px dashed var(--line)}.org>ul{padding-left:0;border-left:0}.org li{margin:6px 0}.org .n{display:inline-block;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:4px 10px}.org .n.me{border-color:var(--navy);background:var(--tint)}
.tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.tile{display:block;text-decoration:none;color:inherit;background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;text-align:center}.tile:hover{border-color:var(--navy)}.tile .lg{height:56px;display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--navy);font-size:18px}.tile img{max-height:56px;max-width:140px;object-fit:contain}
.prose{max-width:760px;line-height:1.65}.prose img{max-width:100%;height:auto}.prose h2{font-size:18px;margin-top:22px}
.right{text-align:right}.mt{margin-top:12px}.mb0{margin-bottom:0}.muted{color:var(--muted)}.small{font-size:12px}
.login{background:#fff;border:1px solid var(--line);border-radius:14px;padding:28px;text-align:center}.login .logo{margin:0 auto 10px;width:56px;height:56px;font-size:22px}
.login .devs{text-align:left;margin-top:18px;border-top:1px solid var(--line);padding-top:14px}
@media (max-width:860px){.app{display:block}.side{position:fixed;left:-240px;top:0;transition:left .2s;z-index:20}.side.open{left:0}.menu-toggle{display:inline-flex}.main{padding:14px 16px 30px}.grid.c2,.grid.c3,.grid.c4{grid-template-columns:1fr}.f .row,.f .row3{grid-template-columns:1fr}.diff .r{grid-template-columns:1fr}.diff .r:first-child{display:none}}
/* Mobile: .hide-m ẩn cột phụ; .tbl.cards biến mỗi hàng bảng thành một thẻ, nhãn cột lấy từ td[data-l] */
@media (max-width:860px){
.hide-m{display:none !important}
.tbl.cards thead{display:none}
.tbl.cards table,.tbl.cards tbody,.tbl.cards tr,.tbl.cards td{display:block;width:100%}
.tbl.cards tr{border:1px solid var(--line);border-radius:10px;padding:6px 12px;margin:0 0 10px;background:#fff}
.tbl.cards tr.hl{background:var(--tint)}
.tbl.cards td{border-bottom:0;padding:5px 0;white-space:normal !important;text-align:left}
.tbl.cards td.num{text-align:left}
.tbl.cards td[data-l]:not([data-l=""])::before{content:attr(data-l);display:block;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.tbl.cards td:empty{display:none}
}
