:root{--bg:#f6f7f9;--panel:#fff;--line:#e3e6ea;--txt:#1d2127;--mut:#6b7280;
        --acc:#2563eb;--ok:#15803d;--warn:#b45309;--err:#b91c1c;--chip:#eef2f7;}
  @media (prefers-color-scheme: dark){
    :root{--bg:#14161a;--panel:#1c1f25;--line:#2c3039;--txt:#e7e9ee;--mut:#9aa3b2;
          --acc:#60a5fa;--ok:#4ade80;--warn:#fbbf24;--err:#f87171;--chip:#252932;}}
  *{box-sizing:border-box}
  body{margin:0;background:var(--bg);color:var(--txt);
       font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif}
  header{display:flex;align-items:center;gap:12px;padding:12px 20px;background:var(--panel);
         border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5;flex-wrap:wrap}
  header h1{font-size:15px;margin:0;font-weight:650}
  .badge{font-size:12px;padding:3px 9px;border-radius:20px;background:var(--chip);color:var(--mut);white-space:nowrap}
  .badge.on{color:var(--ok);background:color-mix(in srgb,var(--ok) 14%,transparent)}
  .badge.off{color:var(--err);background:color-mix(in srgb,var(--err) 14%,transparent)}
  .badge.wa{color:var(--warn);background:color-mix(in srgb,var(--warn) 16%,transparent)}
  nav{display:flex;gap:4px;padding:12px 20px 0;flex-wrap:wrap}
  nav button{border:1px solid transparent;background:none;color:var(--mut);padding:8px 14px;
             border-radius:8px 8px 0 0;cursor:pointer;font-size:14px}
  nav button.active{background:var(--panel);border-color:var(--line);border-bottom-color:var(--panel);
                    color:var(--txt);font-weight:600}
  main{padding:0 20px 40px}
  .card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:18px;margin-bottom:16px}
  .card h2{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);
           margin:0 0 14px;display:flex;align-items:center;gap:10px}
  .row{display:flex;gap:12px;flex-wrap:wrap}
  .row>*{flex:1;min-width:170px}
  label{display:block;font-size:12px;color:var(--mut);margin-bottom:5px}
  input,select,textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:7px;
    background:var(--bg);color:var(--txt);font:inherit}
  input[type=checkbox]{width:auto}
  textarea{resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
  .chk{display:flex;align-items:center;gap:7px;font-size:13px;margin:8px 0}
  .chk label{margin:0;color:var(--txt);font-size:13px}
  button.btn{background:var(--acc);color:#fff;border:0;padding:9px 15px;border-radius:7px;
             cursor:pointer;font:inherit;font-weight:550}
  button.btn.sec{background:var(--chip);color:var(--txt)}
  button.btn.danger{background:var(--err)}
  button.btn:disabled{opacity:.45;cursor:not-allowed}
  .actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;align-items:center}
  .hint{font-size:12px;color:var(--mut)}
  table{width:100%;border-collapse:collapse;font-size:13px}
  th,td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:top}
  th{font-size:11px;text-transform:uppercase;color:var(--mut);letter-spacing:.05em}
  tr.sel td{background:color-mix(in srgb,var(--acc) 10%,transparent)}
  tbody tr.pick{cursor:pointer}
  tbody tr.pick:hover td{background:var(--chip)}
  .st{font-weight:600;font-size:12px;white-space:nowrap}
  .st.ok,.st.done{color:var(--ok)} .st.failed{color:var(--err)} .st.skipped,.st.partial{color:var(--warn)}
  .st.running{color:var(--acc)} .st.pending,.st.draft{color:var(--mut)}
  .st.scheduled{color:var(--acc)} .st.missed{color:var(--err)}
  .bar{height:8px;background:var(--chip);border-radius:6px;overflow:hidden;margin:12px 0}
  .bar>i{display:block;height:100%;background:var(--acc);width:0;transition:width .3s}
  #log{max-height:240px;overflow:auto;background:var(--bg);border:1px solid var(--line);
       border-radius:7px;padding:10px;font:12px/1.6 ui-monospace,Menlo,monospace}
  #log div.ok{color:var(--ok)} #log div.error{color:var(--err)} #log div.warn{color:var(--warn)}
  #log div.info{color:var(--mut)}
  .modal{position:fixed;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;
         justify-content:center;z-index:50}
  .modal.show{display:flex}
  .modal .box{background:var(--panel);border-radius:12px;padding:22px;width:340px;border:1px solid var(--line)}
  .modal h3{margin:0 0 6px;font-size:16px}
  #mfaCode{font-size:22px;letter-spacing:.3em;text-align:center;font-family:ui-monospace,monospace}
  .toast{position:fixed;bottom:20px;right:20px;background:var(--panel);border:1px solid var(--line);
         border-left:3px solid var(--acc);padding:12px 16px;border-radius:8px;max-width:380px;
         box-shadow:0 8px 24px rgba(0,0,0,.18);display:none;z-index:60;font-size:13px;white-space:pre-wrap}
  .toast.err{border-left-color:var(--err)} .toast.ok{border-left-color:var(--ok)}
  .split{display:grid;grid-template-columns:minmax(320px,42%) 1fr;gap:16px;align-items:start}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  @media(max-width:900px){.split,.grid2{grid-template-columns:1fr}}
  .prev{border:1px solid var(--line);border-radius:7px;padding:12px;background:var(--bg);
        min-height:120px;max-height:340px;overflow:auto}
  code.k{background:var(--chip);padding:1px 5px;border-radius:4px;font-size:12px}
  details summary{cursor:pointer;color:var(--acc);font-size:13px;margin-bottom:10px}
  .strip{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 14px;
         background:var(--chip);border-radius:8px;margin-bottom:16px;font-size:13px}

/* --- dung chung cho trang dang nhap / quan tri --- */
.center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.authbox{width:100%;max-width:400px;background:var(--panel);border:1px solid var(--line);
         border-radius:12px;padding:28px}
.authbox h1{font-size:19px;margin:0 0 4px}
.authbox p.sub{color:var(--mut);font-size:13px;margin:0 0 20px}
.authbox label{margin-top:12px}
.authbox .btn{width:100%;margin-top:18px;padding:11px}
.err{color:var(--err);font-size:13px;margin-top:12px;min-height:18px}
.usermenu{display:flex;align-items:center;gap:8px}
.usermenu .who{font-size:13px;color:var(--mut)}
.copybox{display:flex;gap:8px;margin-top:10px}
.copybox input{font-family:ui-monospace,Menlo,monospace;font-size:12px}
.role{font-size:11px;padding:2px 7px;border-radius:10px;background:var(--chip);color:var(--mut)}
.role.admin{color:var(--acc);background:color-mix(in srgb,var(--acc) 15%,transparent)}
.warnbox{border-left:3px solid var(--warn);background:color-mix(in srgb,var(--warn) 8%,transparent);
         padding:10px 14px;border-radius:6px;font-size:13px;margin:12px 0}
