/* Phan mem mien phi — giao dien v2 (08/11/2026): trang xam toi gian, the xam nhat, nut den, Space Grotesk + Inter.
   Xanh Dorabot chi o nhan "Ma nguon mo" / "Co tieng Viet". */
:root{--ink:#0f1115;--ink2:#3f4650;--mute:#6b7280;--line:#e6e7ea;--card:#f7f7f8;--card2:#f1f1f3;--bg:#fff;--green:#0b7a55;--greenbg:#e6f4ee;--red:#b42318;--redbg:#fdecec;
  --hf:"Space Grotesk",Inter,system-ui,sans-serif;--bf:Inter,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;--r:12px}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 var(--bf);-webkit-font-smoothing:antialiased}
a{color:var(--ink)}
img{max-width:100%}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.mp-wrap{max-width:1140px;margin:0 auto;padding:0 16px}
.mp-narrow{max-width:820px}
/* dau trang noi */
.mp-topw{position:sticky;top:0;z-index:20;padding-top:10px;padding-bottom:4px;background:linear-gradient(#fff 70%,rgba(255,255,255,0))}
.mp-top{display:flex;align-items:center;gap:16px;border:1px solid var(--line);border-radius:14px;padding:8px 14px;background:rgba(255,255,255,.96);box-shadow:0 2px 10px rgba(16,24,40,.05)}
.mp-logo{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink);font:600 15px var(--hf);white-space:nowrap}
.mp-logo img{display:block}
.mp-logo span{border-left:1px solid var(--line);padding-left:8px}
.mp-ts{position:relative;flex:1;max-width:360px;margin-left:auto}
.mp-ts input{width:100%;font:inherit;font-size:14px;border:1px solid var(--line);border-radius:10px;padding:8px 12px;min-height:38px;background:#fff}
.mp-ts input:focus{outline:2px solid #c9ccd1;border-color:#c9ccd1}
#mp-sug{position:absolute;left:0;right:0;top:calc(100% + 6px);list-style:none;margin:0;padding:4px;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 12px 30px rgba(16,24,40,.12);max-height:380px;overflow:auto;z-index:30}
#mp-sug a{display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:8px;text-decoration:none;color:var(--ink);font-size:14px}
#mp-sug a:hover,#mp-sug a.act{background:var(--card2)}
#mp-sug a span{margin-left:auto;font-size:12px;color:var(--mute);white-space:nowrap}
#mp-sug img{width:20px;height:20px;border-radius:5px}
.mp-nav{display:flex;gap:2px}
.mp-nav a{color:var(--ink2);text-decoration:none;padding:6px 10px;border-radius:8px;font-size:14px;white-space:nowrap}
.mp-nav a:hover{background:var(--card2);color:var(--ink)}
.mp-crumb{font-size:13px;color:var(--mute);margin:22px 0 8px}
.mp-crumb a{color:var(--mute);text-decoration:none}
.mp-crumb a:hover{color:var(--ink)}
/* chu */
h1,h2,h3{font-family:var(--hf);letter-spacing:-.01em;color:var(--ink)}
h1{font-size:30px;line-height:1.2;margin:0 0 8px;font-weight:600}
h2{font-size:21px;margin:0 0 14px;font-weight:600}
.mp-hero{text-align:center;padding:36px 0 24px;max-width:760px;margin:0 auto}
.mp-hero h1{font-size:38px}
.mp-sub{color:var(--mute);margin:0;font-size:15px}
.mp-lead{font-size:16px;color:var(--ink2);margin:10px 0}
.mp-mute{color:var(--mute);font-size:14px;margin:0}
.mp-note{font-size:13px;color:var(--mute);margin:10px 0 0}
.mp-upd{font-size:12px;color:var(--mute)}
.mp-warn{color:var(--red);font-size:13px;margin:8px 0 0}
.mp-sec{margin:32px 0}
.mp-sec>h2{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.mp-more{font:500 14px var(--bf);color:var(--mute)}
.mp-h3{font-size:15px;margin:20px 0 10px;font-weight:600}
.mp-h3 a{text-decoration:none}
.mp-box{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;margin:18px 0}
.mp-box h2{font-size:18px;margin-bottom:10px}
.mp-box ul{margin:0;padding-left:20px}
.mp-box li{margin:5px 0}
/* nut */
.mp-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--ink);color:#fff;border:1px solid var(--ink);border-radius:10px;padding:8px 16px;font:500 14px var(--bf);text-decoration:none;cursor:pointer;min-height:40px}
.mp-btn:hover{background:#2a2e35;color:#fff}
.mp-btn.ghost{background:#fff;color:var(--ink);border-color:var(--line)}
.mp-btn.ghost:hover{background:var(--card2)}
.mp-act{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.mp-act-lg .mp-btn{min-height:44px;padding:10px 20px;font-size:15px}
.mp-link{background:none;border:0;color:var(--ink2);text-decoration:underline;cursor:pointer;font:inherit;font-size:13px;padding:0}
/* chip, sao, do khoe */
.mp-chip{display:inline-flex;align-items:center;font-size:12px;line-height:1.5;border:1px solid var(--line);background:#fff;color:var(--ink2);border-radius:7px;padding:1px 8px;white-space:nowrap}
.mp-t-oss,.mp-vi{border-color:#bfe3d3;background:var(--greenbg);color:var(--green)}
.mp-t-src{border-color:#cdd9f2;background:#eef3fc;color:#2b4c8c}
.mp-t-fm{border-color:#f1dcb5;background:#fff6e6;color:#8a5300}
.mp-t-dora{border-color:#ddd4fb;background:#f3f0ff;color:#5b21b6}
.mp-chips{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.mp-stars{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:var(--ink2);white-space:nowrap;font-variant-numeric:tabular-nums}
.mp-stars svg{color:var(--mute)}
.mp-hb{display:inline-flex;font-size:12px;text-decoration:none;border-radius:6px;overflow:hidden;line-height:1.7;white-space:nowrap}
.mp-hb span{background:#2b2f36;color:#fff;padding:0 7px}
.mp-hb b{font-weight:600;padding:0 7px;color:#fff}
.mp-hb-ok b{background:#16a34a}.mp-hb-mid b{background:#ca8a04}.mp-hb-low b{background:#dc2626}
.mp-icons{display:inline-flex;gap:2px}
.mp-ic{display:inline-flex;color:var(--ink2);padding:4px;border-radius:6px}
.mp-ic:hover{background:var(--card2);color:var(--ink)}
.mp-logo-i{border-radius:7px;flex:0 0 auto;object-fit:contain;background:#fff}
.mp-logo-x{display:inline-flex;align-items:center;justify-content:center;background:var(--card2);color:var(--ink2);font:600 14px var(--hf)}
/* luoi the */
.mp-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.mp-tile,.mp-rtile{display:flex;flex-direction:column;gap:8px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;text-decoration:none;color:var(--ink);transition:border-color .15s,box-shadow .15s,background .15s}
.mp-tile:hover,.mp-rtile:hover{background:#fff;border-color:#cfd2d7;box-shadow:0 4px 14px rgba(16,24,40,.06)}
.mp-tile[hidden]{display:none}
.mp-rtile.cur{border-color:var(--ink)}
.mp-tile-hd{display:flex;align-items:center;gap:10px}
.mp-tile-hd b{font:600 16px var(--hf);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-tile-hd .mp-stars{margin-left:auto}
.mp-tile-d{font-size:13.5px;color:var(--ink2);line-height:1.5;flex:1}
.mp-tile-ft{display:flex;flex-wrap:wrap;gap:5px}
.mp-grid-r{grid-template-columns:repeat(4,minmax(0,1fr))}
.mp-grid-r .mp-tile-d{flex:0}
.mp-more-l{margin:12px 0 0;font-size:14px}
.mp-more-l a{color:var(--ink2)}
/* thanh cong cu */
.mp-bar{display:flex;gap:10px;margin:0 0 10px}
.mp-bar input{flex:1;font:inherit;font-size:14px;border:1px solid var(--line);border-radius:10px;padding:8px 12px;min-height:42px}
.mp-sort select,.mp-fbtn{font:inherit;font-size:14px;border:1px solid var(--line);border-radius:10px;padding:8px 12px;min-height:42px;background:#fff;color:var(--ink);cursor:pointer}
.mp-fbtn[aria-expanded=true]{background:var(--card2)}
#mp-fn:not(:empty){display:inline-block;background:var(--ink);color:#fff;border-radius:999px;font-size:11px;padding:0 6px;margin-left:4px}
.mp-fpanel{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;border:1px solid var(--line);border-radius:var(--r);padding:14px;margin:0 0 12px;background:var(--card)}
.mp-fpanel[hidden]{display:none}
.mp-fpanel fieldset{border:0;margin:0;padding:0}
.mp-fpanel legend{font:600 13px var(--hf);margin-bottom:6px}
.mp-fpanel label{display:flex;align-items:center;gap:6px;font-size:13.5px;padding:2px 0;cursor:pointer}
.mp-count{font-size:13px;color:var(--mute);margin:0 0 12px}
.mp-empty{color:var(--mute);font-size:14px}
.mp-more-wrap{text-align:center;margin-top:16px}
/* trang thay the X */
.mp-hero-sm{display:flex;gap:14px;align-items:flex-start;margin:6px 0 16px}
.mp-hero-sm .mp-logo-i{margin-top:4px}
.mp-intro p{margin:0 0 10px;color:var(--ink2)}
.mp-intro a{color:var(--ink);text-decoration:underline;text-underline-offset:2px}
.mp-filters{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px}
.mp-filters button{font:inherit;font-size:13px;border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 12px;cursor:pointer;color:var(--ink2);min-height:34px}
.mp-filters button.on{background:var(--ink);border-color:var(--ink);color:#fff}
.mp-big{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;margin:0 0 18px}
.mp-big[hidden]{display:none}
.mp-big:target{border-color:var(--ink)}
.mp-big-hd{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.mp-big-hd h3{margin:0;font-size:22px;font-weight:600}
.mp-big-hd h3 a{text-decoration:none}
.mp-grow{flex:1}
.mp-rank{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--ink);color:#fff;font:600 12px var(--hf)}
.mp-shot{margin:14px 0;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:#fff;aspect-ratio:16/10}
.mp-shot img{display:block;width:100%;height:100%;object-fit:cover;object-position:top}
.mp-big .mp-shot{max-width:620px;margin-left:auto;margin-right:auto;box-shadow:0 8px 24px rgba(16,24,40,.08)}
.mp-lead2{margin:12px 0 4px}
.mp-big p{margin:6px 0;color:var(--ink2)}
.mp-feat{margin:8px 0;padding-left:20px;color:var(--ink2)}
.mp-feat li{margin:4px 0}
.mp-plat-t{font-size:13px}
/* bang */
.mp-tbl-wrap{overflow-x:auto}
.mp-tbl{width:100%;border-collapse:collapse;font-size:14px;min-width:560px;background:#fff;border-radius:8px}
.mp-tbl th,.mp-tbl td{border-bottom:1px solid var(--line);padding:8px;text-align:left;vertical-align:middle}
.mp-tbl th{color:var(--mute);font-weight:500;font-size:13px}
.mp-tbl-n{display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-weight:500}
/* trang chi tiet */
.mp-app-hd{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin:6px 0 4px}
.mp-app-hd h1{margin:0;font-size:32px}
.mp-cols{display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:28px;margin:22px 0 6px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.mp-col h2{font:500 14px var(--bf);color:var(--ink);margin:0 0 10px}
.mp-replist{list-style:none;margin:0;padding:0}
.mp-replist li{margin:0 0 6px}
.mp-replist a{display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-size:14px}
.mp-replist a:hover{text-decoration:underline}
.mp-dots{margin:0}
.mp-dots div{display:flex;align-items:baseline;gap:6px;font-size:14px;margin:0 0 7px}
.mp-dots dt{white-space:nowrap;color:var(--ink2)}
.mp-dots div::after{content:"";order:1;flex:1;border-bottom:1px solid var(--line);transform:translateY(-4px)}
.mp-dots dd{order:2;margin:0;font-variant-numeric:tabular-nums;white-space:nowrap}
.mp-kv{margin:0}
.mp-kv div{margin:0 0 8px;font-size:14px}
.mp-kv dt{color:var(--mute);font-size:12.5px}
.mp-kv dd{margin:0}
.mp-langs{display:flex;flex-wrap:wrap;gap:4px 12px}
.mp-langs span{display:inline-flex;align-items:center;gap:5px}
.mp-langs i{width:9px;height:9px;border-radius:50%;display:inline-block}
.mp-dlinks{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.mp-dlinks a{display:inline-block;border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 12px;text-decoration:none;font-size:14px}
.mp-two{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.mp-good h2{color:var(--green)}
.mp-bad h2{color:#9a3a32}
.mp-rep{list-style:none;margin:0;padding:0 !important;display:grid;gap:8px}
.mp-rep li{display:flex;flex-direction:column;gap:2px;border:1px solid var(--line);border-radius:10px;padding:9px 12px;background:#fff;margin:0}
.mp-rep a{display:inline-flex;align-items:center;gap:8px;text-decoration:none}
.mp-rep span{font-size:13.5px;color:var(--mute)}
.mp-hx summary{cursor:pointer;font-weight:500}
.mp-hx p{margin:10px 0 0;font-size:14px;color:var(--ink2)}
.mp-catnav ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.mp-catnav a{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:6px 12px;text-decoration:none;font-size:14px;background:#fff}
.mp-catnav a.cur,.mp-catnav a:hover{background:var(--card2)}
.mp-two-links{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:28px 0}
.mp-two-links a{display:block;border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;text-decoration:none;background:var(--card)}
.mp-two-links a:hover{background:#fff;border-color:#cfd2d7}
.mp-two-links b{display:block;font:600 17px var(--hf)}
.mp-two-links span{font-size:14px;color:var(--mute)}
.mp-faq details{border-bottom:1px solid var(--line);padding:10px 0}
.mp-faq summary{cursor:pointer;font-weight:500}
.mp-faq p{margin:8px 0 0;color:var(--ink2)}
.mp-ad{margin:20px 0;min-height:100px}
.mp-foot{margin-top:40px;padding:22px 0;border-top:1px solid var(--line);font-size:13px;color:var(--mute)}
.mp-foot a{color:var(--ink2)}
@media (max-width:960px){.mp-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mp-grid-r{grid-template-columns:repeat(3,minmax(0,1fr))}.mp-fpanel{grid-template-columns:repeat(2,1fr)}.mp-cols{grid-template-columns:1fr 1fr}}
@media (max-width:700px){
  .mp-top{flex-wrap:wrap;gap:8px 10px}
  .mp-ts{order:3;flex-basis:100%;max-width:none}
  .mp-nav{margin-left:auto}
  .mp-nav a:nth-child(3){display:none}
  .mp-topw{position:static}
  .mp-logo span{display:none}
  h1,.mp-hero h1{font-size:26px}
  .mp-hero{padding:20px 0 14px}
  .mp-grid{grid-template-columns:1fr}
  .mp-grid-r{grid-template-columns:repeat(2,minmax(0,1fr))}
  .mp-bar{flex-wrap:wrap}.mp-bar input{flex-basis:100%}
  .mp-fpanel{grid-template-columns:1fr 1fr}
  .mp-cols{grid-template-columns:1fr;gap:18px}
  .mp-two,.mp-two-links{grid-template-columns:1fr}
  .mp-big{padding:14px}
  .mp-big-hd h3{font-size:19px}
  .mp-app-hd h1{font-size:26px}
}
.mp-tile-ft .mp-chip{max-width:100%;overflow:hidden;text-overflow:ellipsis}
/* D1 08/11/2026: trang muc phat, kiem tra phan mem, Linux */
.mp-law{border-left:4px solid #c62828}
.mp-law .mp-act{margin-top:10px}
.mp-steps{padding-left:20px}.mp-steps li{margin:8px 0}
.mp-cmd{display:flex;gap:10px;align-items:flex-start;background:#f4f5f7;border:1px solid var(--line);border-radius:10px;padding:10px;margin:10px 0}
.mp-cmd code{flex:1;min-width:0;font:12.5px/1.5 ui-monospace,Consolas,monospace;word-break:break-all;white-space:pre-wrap}
.mp-scan textarea{width:100%;box-sizing:border-box;font:14px/1.5 ui-monospace,Consolas,monospace;border:1px solid var(--line);border-radius:10px;padding:10px;margin:8px 0;resize:vertical}
.mp-scan-sum{margin:16px 0 8px}
.mp-res{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:10px 0;background:#fff}
.mp-res h3{margin:0 0 8px;font-size:16px}
.mp-res.bad{border-color:#e7b4b4;background:#fdf3f3}.mp-res.warn{border-color:#ead3a6;background:#fdf8ee}.mp-res.ok{border-color:#b7dcc9;background:#f1faf5}
.mp-res-i{border-top:1px solid var(--line);padding:8px 0}.mp-res-i:first-of-type{border-top:0}
.mp-res-i p{margin:2px 0}
.mp-src li{margin:4px 0}
@media (max-width:640px){.mp-cmd{flex-direction:column}}
/* Cham diem ban quyen (08/11/2026) */
.bq-drop{border:2px dashed var(--line);border-radius:12px;padding:18px;text-align:center;margin:8px 0;background:#fafbfc}
.bq-drop.over{border-color:#0066ff;background:#f3f8ff}
.bq-opt{display:flex;flex-wrap:wrap;gap:12px}.bq-opt label{display:flex;flex-direction:column;gap:4px;font-size:14px;flex:1;min-width:200px}
.bq-opt input,.bq-opt select{border:1px solid var(--line);border-radius:10px;padding:9px 10px;font:inherit}
.bq-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap}
.bq-score{text-align:center;border-radius:14px;padding:10px 18px;min-width:110px;color:#fff}
.bq-score b{display:block;font:700 40px/1 var(--hf)}.bq-score span{font-size:13px}
.bq-score.gA{background:#0f8a5f}.bq-score.gB{background:#4b8f1f}.bq-score.gC{background:#a96500}.bq-score.gD{background:#c62828}
.bq-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0}
.bq-kpi div{border:1px solid var(--line);border-radius:12px;padding:10px;background:#fff}.bq-kpi b{display:block;font:700 22px var(--hf)}.bq-kpi span{font-size:13px;color:var(--mute)}
.bq-num{width:86px;border:1px solid var(--line);border-radius:8px;padding:5px 6px;font:inherit}.bq-price{width:110px}
.bq-bad{color:#c62828;font-weight:600}.bq-ok{color:#0f8a5f;font-weight:600}
.bq-crim{background:#fdecec;border-radius:8px;padding:8px 10px;color:#8b1c1c}
.bq-todo{margin:0;padding-left:16px}.bq-todo li{margin:2px 0}.bq-todo li.bad{color:#8b1c1c}.bq-todo li.warn{color:#7a4a00}
.bq-tbl td{vertical-align:top}
@media (max-width:640px){.bq-kpi{grid-template-columns:1fr 1fr}}
@media print{body.bq-printing>*:not(main),body.bq-printing main>*:not(#bq-out),body.bq-printing .bq-noprint,body.bq-printing .mp-ad{display:none!important}
 body.bq-printing #bq-out{display:block}body.bq-printing .bq-report{border:0;box-shadow:none}body.bq-printing input{border:0}}
