:root{
  --ink:#0E1512; --ink-2:#131D18; --ink-3:#1A2620; --line:#2A3B34; --line-soft:#1F2D27;
  --emerald:#27C088; --emerald-dim:#1B8F64; --emerald-glow:rgba(39,192,136,.14);
  --brass:#C9A34E; --brass-dim:#8C7333; --brass-glow:rgba(201,163,78,.10);
  --warn:#E8B14C; --down:#E2685B; --text:#DCE6E0; --muted:#7E938A; --faint:#56685F;
  --font:"IBM Plex Sans Thai",system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  background:radial-gradient(1100px 620px at 50% -10%,rgba(39,192,136,.07),transparent 62%),
    radial-gradient(820px 460px at 50% 110%,rgba(201,163,78,.06),transparent 60%),var(--ink);
  background-attachment:fixed;
  color:var(--text);font-family:var(--font);font-size:14px;line-height:1.5;
  min-height:100dvh;display:grid;place-items:center;padding:24px;
}
.mono{font-family:var(--mono)}

/* shared card */
.card{width:min(420px,100%);background:linear-gradient(180deg,var(--ink-2),var(--ink));
  border:1px solid var(--line);border-radius:16px;padding:28px 26px 22px;
  box-shadow:0 24px 64px rgba(0,0,0,.55),0 0 0 1px rgba(201,163,78,.05)}

/* crest + wordmark (login) */
.crest-wrap{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:22px}
.crest{width:72px;height:72px;border-radius:50%;display:grid;place-items:center;background:#fff;
  border:2px solid var(--brass);box-shadow:0 2px 12px rgba(0,0,0,.5),0 0 26px rgba(201,163,78,.18)}
.crest img{height:48px;width:auto;display:block}
.crest-wrap h1{font-size:19px;font-weight:700;letter-spacing:.4px}
.crest-wrap .sub{font-size:11px;color:var(--muted);letter-spacing:1.2px;text-transform:uppercase;margin-top:-2px}

/* login form */
.field{margin-bottom:15px}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:7px;font-weight:500}
.field input{width:100%;background:var(--ink);border:1px solid var(--line);border-radius:9px;
  color:var(--text);font-family:inherit;font-size:14.5px;padding:12px 14px;transition:.15s}
.field input::placeholder{color:var(--faint)}
.field input:focus{outline:none;border-color:var(--emerald-dim);box-shadow:0 0 0 3px var(--emerald-glow)}
.signin{width:100%;margin-top:7px;background:var(--emerald);color:#06140d;border:1px solid var(--emerald);
  font-family:inherit;font-weight:700;font-size:15px;padding:13px;border-radius:10px;cursor:pointer;
  letter-spacing:.5px;transition:.15s;display:flex;align-items:center;justify-content:center;gap:8px}
.signin:hover{background:#31d196;box-shadow:0 6px 18px rgba(39,192,136,.28)}
.signin:active{transform:translateY(1px)}
.err{display:none;margin-bottom:14px;padding:9px 13px;border-radius:9px;border:1px solid #6a3530;
  background:rgba(226,104,91,.08);color:var(--down);font-size:12.5px}
.err.show{display:block}

/* shared footer */
.foot{margin-top:22px;padding-top:16px;border-top:1px solid var(--line-soft);
  display:flex;align-items:center;justify-content:center;gap:8px;font-size:11px;color:var(--faint)}
.foot .lock{color:var(--brass)}
.badge{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-weight:600;color:var(--warn);
  border:1px solid #5a4a22;background:rgba(232,177,76,.07);padding:3px 9px;border-radius:999px;letter-spacing:.4px}
.dot{width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 7px currentColor}
.priv{text-align:center;font-size:11px;color:var(--muted);margin-top:13px;letter-spacing:.3px}

/* ===== dashboard ===== */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}
.brand{display:flex;align-items:center;gap:11px;min-width:0}
.crest-sm{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:#fff;
  border:2px solid var(--brass);box-shadow:0 2px 10px rgba(0,0,0,.5),0 0 18px rgba(201,163,78,.16);flex:none}
.crest-sm img{height:28px;width:auto;display:block}
.bt h1{font-size:16px;font-weight:700;letter-spacing:.3px;line-height:1.15}
.bt .sub{font-size:10px;color:var(--muted);letter-spacing:1px;text-transform:uppercase}
.who{display:flex;align-items:center;gap:9px;flex:none}
.who .uname{font-family:var(--mono);font-size:12px;color:var(--muted)}
.logout{background:transparent;border:1px solid var(--line);color:var(--muted);padding:7px 12px;
  border-radius:9px;font-family:inherit;font-size:12.5px;cursor:pointer;transition:.15s}
.logout:hover{color:var(--text);border-color:var(--brass-dim)}

/* control buttons — the signature */
.controls{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin-top:4px}
.control{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;
  padding:26px 12px;border-radius:14px;border:1px solid var(--line);cursor:pointer;font-family:inherit;
  background:var(--ink-3);color:var(--text);-webkit-tap-highlight-color:transparent;
  transition:transform .08s ease,box-shadow .15s ease,filter .15s ease,background .15s ease}
.control .ic{width:30px;height:30px}
.control .big{font-size:22px;font-weight:700;letter-spacing:1px}
.control .k{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--faint)}
.control.open{border-color:rgba(39,192,136,.42)}
.control.open .ic,.control.open .big{color:var(--emerald)}
.control.open:hover{background:linear-gradient(180deg,rgba(39,192,136,.10),var(--ink-3));box-shadow:0 8px 22px rgba(39,192,136,.16)}
.control.close{border-color:rgba(201,163,78,.42)}
.control.close .ic,.control.close .big{color:var(--brass)}
.control.close:hover{background:linear-gradient(180deg,rgba(201,163,78,.10),var(--ink-3));box-shadow:0 8px 22px rgba(201,163,78,.14)}
.control:active{transform:translateY(1px) scale(.99)}
.control:focus-visible{outline:2px solid var(--brass);outline-offset:3px}
.control:disabled{opacity:.5;cursor:default;filter:saturate(.6)}

/* status line */
.status{min-height:20px;text-align:center;margin:15px 2px 2px;font-size:13px;opacity:0;transition:opacity .15s}
.status.show{opacity:1}
.status.pending{color:var(--muted)}
.status.ok{color:var(--emerald)}
.status.err{color:var(--down)}

/* activity log */
.logwrap{margin-top:18px;border:1px solid var(--line-soft);border-radius:12px;overflow:hidden;background:rgba(10,16,14,.4)}
.loghead{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-bottom:1px solid var(--line-soft)}
.loghead .t{font-size:12.5px;font-weight:600;letter-spacing:.3px}
.loghead .c{font-size:10.5px;color:var(--faint)}
.log{list-style:none}
.log li{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:9px;
  padding:9px 14px;border-bottom:1px solid rgba(31,45,39,.6);font-size:12.5px}
.log li:last-child{border-bottom:none}
.log .ts{font-family:var(--mono);font-size:11px;color:var(--faint);white-space:nowrap}
.log .u{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tag{font-size:11px;font-weight:600;padding:2px 10px;border-radius:999px;white-space:nowrap}
.tag.open{color:var(--emerald);background:var(--emerald-glow)}
.tag.close{color:var(--brass);background:var(--brass-glow)}
.log .res{font-size:10.5px;color:var(--down)}
.log .empty{padding:20px 14px;text-align:center;color:var(--faint);grid-column:1/-1}
@keyframes flashin{from{background:var(--brass-glow)}to{background:transparent}}
.log .new{animation:flashin 1.1s ease}

/* links */
a{color:var(--emerald);text-decoration:none}
a:hover{text-decoration:underline}
a.signin:hover{text-decoration:none}
.priv a{font-weight:600}

/* register success note */
.note{margin-bottom:14px;padding:12px 14px;border-radius:9px;font-size:13px;line-height:1.55}
.note.ok{border:1px solid var(--emerald-dim);background:var(--emerald-glow);color:var(--text)}
.note.ok b{color:var(--emerald)}

/* dashboard -> admin link */
.adminlink{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:16px;
  padding:12px 14px;border:1px solid var(--line-soft);border-radius:11px;background:rgba(10,16,14,.4);
  color:var(--text);font-size:13px;transition:.15s}
.adminlink:hover{border-color:var(--brass-dim);text-decoration:none}
.adminlink .pcount{font-family:var(--mono);font-size:11px;color:var(--warn);
  background:rgba(232,177,76,.08);border:1px solid rgba(232,177,76,.3);padding:1px 8px;border-radius:999px}

/* ===== admin user management ===== */
.card.wide{width:min(560px,100%)}
.sec-title{font-size:13px;font-weight:600;letter-spacing:.3px;margin:20px 2px 10px;
  display:flex;align-items:center;gap:8px;color:var(--text)}
.sec-title .count{font-family:var(--mono);font-size:11px;color:var(--faint);
  background:var(--ink-3);border:1px solid var(--line-soft);padding:1px 8px;border-radius:999px}
.ulist{list-style:none;border:1px solid var(--line-soft);border-radius:12px;overflow:hidden;background:rgba(10,16,14,.4)}
.ulist li{display:flex;align-items:center;gap:10px;padding:11px 14px;
  border-bottom:1px solid rgba(31,45,39,.6);flex-wrap:wrap}
.ulist li:last-child{border-bottom:none}
.ulist .uname{font-size:13.5px;font-weight:500;flex:1;min-width:90px;display:flex;align-items:center;gap:7px}
.ulist .when{font-size:11px;color:var(--faint)}
.ulist .acts{display:flex;gap:7px;align-items:center;margin-left:auto}
.ulist .acts form{display:inline;margin:0}
.mini{font-family:inherit;font-size:12px;font-weight:600;padding:6px 12px;border-radius:8px;cursor:pointer;
  border:1px solid var(--line);background:var(--ink-3);color:var(--text);transition:.15s}
.mini.ok{border-color:rgba(39,192,136,.45);color:var(--emerald)}
.mini.ok:hover{background:var(--emerald-glow)}
.mini.warn{border-color:rgba(232,177,76,.45);color:var(--warn)}
.mini.warn:hover{background:rgba(232,177,76,.10)}
.mini.danger{border-color:#6a3530;color:var(--down)}
.mini.danger:hover{background:rgba(226,104,91,.10)}
.rolebadge{font-size:10px;font-weight:600;color:var(--brass);background:var(--brass-glow);
  border:1px solid rgba(201,163,78,.3);padding:1px 7px;border-radius:999px}
.statusbadge{font-size:10.5px;font-weight:600;padding:2px 9px;border-radius:999px;white-space:nowrap}
.statusbadge.active{color:var(--emerald);background:var(--emerald-glow)}
.statusbadge.pending{color:var(--warn);background:rgba(232,177,76,.08)}
.statusbadge.revoked{color:var(--down);background:rgba(226,104,91,.08)}
.empty2{padding:16px 14px;text-align:center;color:var(--faint);border:1px solid var(--line-soft);
  border-radius:12px;font-size:12.5px;background:rgba(10,16,14,.4)}
.you{font-size:11px;color:var(--faint);padding:6px 10px}

@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
