:root{--bg:#f4f4f5;--card:#fff;--ink:#23262b;--muted:#6b7078;--line:#e4e4e7;--brand:#d7322c;--brand-dark:#b92721;--brand-soft:#fdecea;--brand-ink:#fff;--charcoal:#2a2d33;--danger:#b91c1c;--warn:#92400e;--ok:#166534;--radius:8px}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 "Leelawadee UI","Segoe UI",Tahoma,"Noto Sans Thai",sans-serif}
a{color:var(--brand)}
.topbar{display:flex;align-items:center;gap:22px;padding:0 24px;min-height:62px;background:#fff;color:var(--ink);flex-wrap:wrap;border-bottom:1px solid var(--line);box-shadow:0 1px 0 rgba(0,0,0,.02);position:relative}
.topbar::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--brand) 0 34%,#9a9a9a 34% 100%)}
.topbar a{color:var(--charcoal);text-decoration:none;padding:20px 0 17px;border-bottom:3px solid transparent}.topbar a:hover{color:var(--brand)}.topbar a.on{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}
.brand{display:flex;align-items:center;gap:10px;margin-right:10px;padding:0!important;border:0!important}.brand img{height:30px;display:block}.brand span{font-weight:600;color:var(--muted);font-size:14px;letter-spacing:.5px;border-left:1px solid var(--line);padding-left:10px}
.spacer{flex:1}
.topbar select{background:#fafafa;color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:6px 8px;max-width:280px}
.topbar form{margin:0}
.linkbtn{background:none;border:0;color:var(--muted);cursor:pointer;font:inherit;padding:0}.linkbtn:hover{color:var(--brand)}
.user-chip{display:flex;align-items:center;gap:8px;padding:0!important;border:0!important;color:var(--charcoal)!important}.user-chip i{font-style:normal;width:30px;height:30px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;font-weight:700;font-size:14px}
main{max-width:1100px;margin:24px auto;padding:0 16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin-bottom:16px}
h1{font-size:22px;margin:0 0 16px;font-weight:600}
h1::after{content:"";display:block;width:36px;height:3px;background:var(--brand);margin-top:8px;border-radius:2px}
.card h1::after{width:28px}h2{font-size:17px;margin:0 0 12px}
.muted{color:var(--muted)}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.kpi{font-size:30px;font-weight:700;color:var(--charcoal)}
.grid .card{border-top:3px solid var(--line)}.grid .card:first-child{border-top-color:var(--brand)}
label{display:block;font-weight:600;margin:10px 0 4px}
input,select,textarea{width:100%;padding:9px 11px;border:1px solid #d4d4d8;border-radius:6px;font:inherit;background:#fff}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(215,50,44,.12)}
textarea{min-height:70px}
.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:640px){.row{grid-template-columns:1fr}}
.btn:hover{background:var(--brand-dark)}
.btn{display:inline-block;background:var(--brand);color:var(--brand-ink);border:0;border-radius:8px;padding:8px 14px;font:inherit;cursor:pointer;text-decoration:none}
.btn.secondary{background:#ececee;color:var(--ink)}.btn.secondary:hover{background:#e0e0e3}.btn.danger{background:var(--danger)}.btn.sm{padding:4px 10px;font-size:13px}
.actions{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap;align-items:center}
table{width:100%;border-collapse:collapse}
th,td{text-align:left;padding:8px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:13px;color:var(--muted);font-weight:600}
tr.inactive td{color:#9ca3af}
.tag{display:inline-block;font-size:12px;padding:1px 8px;border-radius:99px;background:#ececee;color:var(--charcoal)}
.tag.p3{background:#fef3c7;color:#92400e}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:12px;border:1px solid}
.flash.error{background:#fef2f2;border-color:#fecaca;color:var(--danger)}
.flash.success{background:#f0fdf4;border-color:#bbf7d0;color:var(--ok)}
.flash.info{background:#eff6ff;border-color:#bfdbfe;color:#1e40af}
.flash.temp{background:#fffbeb;border-color:#fcd34d;color:var(--warn);font-weight:600}
.auth{max-width:400px;margin:8vh auto}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:end;margin-bottom:12px}
.toolbar input,.toolbar select{width:auto}
.mono{font-family:Consolas,monospace}
.inline{display:inline}
.appcard{display:block;text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s,transform .15s}
a.appcard:hover{border-color:var(--brand);box-shadow:0 6px 18px rgba(0,0,0,.06);transform:translateY(-1px)}
a.appcard h2{color:var(--brand)}
.appcard.soon{opacity:.7}
/* ---- Login (full-screen, card centered) ---- */
.login-page{min-height:100vh;margin:0;background:#1c1f24;display:flex;flex-direction:column;overflow-x:hidden}
.login-bg{position:fixed;inset:0;background:radial-gradient(1200px 700px at 15% 20%,#3a2a2c 0%,transparent 60%),radial-gradient(900px 600px at 85% 80%,#3b3f46 0%,transparent 60%),linear-gradient(135deg,#1b1d21 0%,#2a2d33 55%,#1f2126 100%);overflow:hidden}
.login-bg::after{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);background-size:44px 44px;mask-image:radial-gradient(ellipse at center,#000 30%,transparent 75%)}
.orb{position:absolute;border-radius:50%;filter:blur(70px);opacity:.45}
.o1{width:420px;height:420px;background:#d7322c;top:-120px;left:-80px;opacity:.28}
.o2{width:360px;height:360px;background:#8a8f98;bottom:-140px;right:-60px;opacity:.25}
.o3{width:220px;height:220px;background:#d7322c;bottom:18%;left:62%;opacity:.15}
.login-wrap{position:relative;flex:1;display:flex;align-items:center;justify-content:center;padding:32px 16px}
.login-card{width:100%;max-width:520px;background:#f1f1f1;border-radius:6px;box-shadow:0 20px 60px rgba(0,0,0,.45);padding:40px 40px 32px}
.login-logo{display:block;width:220px;max-width:70%;margin:4px auto 18px}
.login-title{text-align:center;font-size:21px;color:#4b5058;margin-bottom:26px;letter-spacing:.2px}
.login-form .fl{margin-bottom:18px}
.login-form label{font-weight:400;font-size:13px;color:#6b7078;margin:0 0 2px}
.login-form .req{color:#d7322c}
.login-form input[type=email],.login-form input[type=password],.login-form input[type=text],.login-form input:not([type]){border:0;border-bottom:1px solid #b9bcc2;border-radius:0;background:transparent;padding:8px 0;font-size:16px}
.login-form input:focus{outline:none;border-bottom:2px solid #d7322c;padding-bottom:7px}
.fl.invalid label{color:#d7322c}.fl.invalid input{border-bottom:2px solid #d7322c}
.fl-err{color:#d7322c;font-size:13px;min-height:0;margin-top:4px}
.pw{position:relative}.pw input{padding-right:52px!important}
.pw-eye{position:absolute;right:0;top:6px;border:0;background:none;color:#6b7078;font:inherit;font-size:13px;cursor:pointer}
.login-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:22px;flex-wrap:wrap}
.login-btn{background:#d7322c;border-radius:3px;padding:9px 20px}.login-btn:hover{background:#b92721}
.switch{display:flex;align-items:center;gap:10px;font-weight:400!important;font-size:15px!important;color:#3b3f46!important;cursor:pointer;margin:0!important}
.switch input{position:absolute;opacity:0;width:0;height:0}
.slider{position:relative;width:40px;height:20px;background:#c3c6cc;border-radius:20px;transition:.2s;flex:none}
.slider::before{content:"";position:absolute;width:24px;height:24px;left:-2px;top:-2px;background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,.35);transition:.2s}
.switch input:checked+.slider{background:#eba19e}.switch input:checked+.slider::before{transform:translateX(20px);background:#d7322c}
.switch input:focus-visible+.slider{outline:2px solid #d7322c;outline-offset:2px}
.login-hint{font-size:12px;color:#8a8f98;margin:22px 0 0;text-align:center}
.login-card .flash{font-size:14px}
.login-foot{position:relative;background:rgba(0,0,0,.55);color:#d6d8dc;font-size:13px;padding:9px 16px;text-align:center}
@media(max-width:480px){.login-card{padding:28px 20px 24px}}
/* ---- 2FA / legal ---- */
.setup2fa{display:grid;grid-template-columns:auto 1fr;gap:24px;align-items:start;margin:8px 0}
.setup2fa .qr svg{display:block;border:1px solid var(--line);border-radius:8px;padding:6px;background:#fff}
.setup2fa ol{margin:0;padding-left:20px;line-height:1.9}
.secret{display:inline-block;background:#f4f4f5;border-radius:6px;padding:4px 8px;margin-top:4px;user-select:all}
@media(max-width:640px){.setup2fa{grid-template-columns:1fr}}
.codes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px 24px;font-size:18px;padding:14px 18px;background:#f4f4f5;border-radius:8px;margin:12px 0}
.tag.ok{background:#dcfce7;color:#166534}
.legal h2{font-size:15px;margin:16px 0 6px}.legal p,.legal li{color:#3b3f46}
.legal .draft,.draft{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:6px;padding:2px 10px;font-size:13px}
.legal-box{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:4px 18px 14px;margin:8px 0 14px;background:#fafafa}
.checkline{display:flex;gap:10px;align-items:flex-start;font-weight:400}.checkline input{width:auto;margin-top:5px}
.site-foot{text-align:center;color:var(--muted);font-size:12px;padding:20px 0 28px}.site-foot a{color:var(--muted)}
@media print{.topbar,.actions,.site-foot{display:none}}
.danger-zone{border-color:#fecaca}.danger-zone h2{color:var(--danger)}
input::placeholder{letter-spacing:normal}
.tag.staff{background:var(--brand-soft);color:var(--brand)}
.legal .ver{color:var(--muted);font-size:13px;border-left:3px solid var(--brand);padding-left:10px}
.legal-table{margin:6px 0 10px;font-size:14px}.legal-table th{background:#f4f4f5}
