/* ═══ base.css — design tokens + shared components (โหลดทั้ง login + admin) ═══ */
:root{
  --brand-50:#eef2ff;--brand-100:#e0e7ff;--brand-200:#c7d2fe;--brand-300:#a5b4fc;
  --brand-400:#818cf8;--brand-500:#6366f1;--brand-600:#4f46e5;--brand-700:#4338ca;
  --brand-800:#3730a3;--brand-900:#312e81;--brand-950:#1e1b4b;
  --gold-400:#fbbf24;--gold-500:#f59e0b;--gold-600:#d97706;
  --ink:#0f172a;--ink-soft:#334155;--ink-muted:#64748b;--ink-faint:#94a3b8;
  --line:#e2e8f0;--line-strong:#cbd5e1;--surface:#ffffff;--bg:#f1f5f9;
  --ok:#059669;--ok-bg:#d1fae5;--warn:#d97706;--warn-bg:#fef3c7;
  --danger:#dc2626;--danger-bg:#fee2e2;--info:#2563eb;--info-bg:#dbeafe;
  --shadow-sm:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.1);
  --shadow:0 4px 12px rgba(15,23,42,.08);
  --shadow-lg:0 12px 32px rgba(15,23,42,.12);
  --shadow-xl:0 24px 60px rgba(15,23,42,.18);
  --radius:14px;--radius-lg:20px;--radius-sm:10px;
  --ease:cubic-bezier(.4,0,.2,1);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:"Sarabun","Kanit",system-ui,sans-serif;color:var(--ink);
  background:var(--bg);line-height:1.6;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4,h5{font-family:"Kanit",system-ui,sans-serif;font-weight:600;line-height:1.3;margin:0}
a{color:var(--brand-600);text-decoration:none}
img{max-width:100%;display:block}
button{font-family:inherit}
:focus-visible{outline:2px solid var(--brand-400);outline-offset:2px}

/* ── Buttons (app-style) ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:"Kanit",sans-serif;font-weight:500;font-size:14.5px;line-height:1;
  padding:11px 18px;border-radius:var(--radius-sm);border:1px solid transparent;
  cursor:pointer;transition:transform .16s var(--ease),box-shadow .2s var(--ease),background .2s;
  white-space:nowrap;text-decoration:none}
.btn i{font-size:16px}
.btn:active{transform:translateY(1px)}
.btn-primary{background:linear-gradient(135deg,var(--brand-500),var(--brand-700));
  color:#fff;box-shadow:0 4px 14px rgba(79,70,229,.32)}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 8px 22px rgba(79,70,229,.4)}
.btn-ghost{background:#fff;color:var(--ink-soft);border-color:var(--line-strong)}
.btn-ghost:hover{background:var(--brand-50);border-color:var(--brand-300);color:var(--brand-700)}
.btn-danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 4px 14px rgba(220,38,38,.28)}
.btn-danger:hover{transform:translateY(-1px)}
.btn-gold{background:linear-gradient(135deg,var(--gold-400),var(--gold-600));color:#78350f;box-shadow:0 4px 14px rgba(251,191,36,.35)}
.btn-sm{padding:7px 12px;font-size:13px}
.btn-icon{width:38px;height:38px;padding:0;border-radius:10px}
.btn-block{width:100%}
.btn[disabled]{opacity:.6;pointer-events:none}

/* ── Form fields ── */
.field{width:100%;padding:11px 14px;border:1.5px solid var(--line-strong);border-radius:var(--radius-sm);
  font-family:inherit;font-size:14.5px;color:var(--ink);background:#fff;
  transition:border-color .16s,box-shadow .16s}
.field:focus{outline:none;border-color:var(--brand-400);box-shadow:0 0 0 3.5px var(--brand-100)}
.field::placeholder{color:var(--ink-faint)}
.field:disabled{background:var(--bg);color:var(--ink-muted)}
textarea.field{resize:vertical;min-height:90px;line-height:1.6}
select.field{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%2364748b' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;padding-right:38px}
.form-label{display:block;font-weight:600;font-size:13.5px;color:var(--ink-soft);margin-bottom:6px}
.form-label .req{color:var(--danger)}
.form-group{margin-bottom:18px}
.form-hint{font-size:12.5px;color:var(--ink-muted);margin-top:5px}
.form-error{font-size:12.5px;color:var(--danger);margin-top:5px;display:flex;gap:5px;align-items:center}
.field.is-invalid{border-color:var(--danger);box-shadow:0 0 0 3.5px var(--danger-bg)}

/* ── Badges / chips ── */
.badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;
  padding:4px 10px;border-radius:999px;line-height:1.4;font-family:"Kanit",sans-serif}
.badge-ok{background:var(--ok-bg);color:var(--ok)}
.badge-warn{background:var(--warn-bg);color:var(--warn)}
.badge-danger{background:var(--danger-bg);color:var(--danger)}
.badge-info{background:var(--info-bg);color:var(--info)}
.badge-muted{background:var(--bg);color:var(--ink-muted)}
.badge-brand{background:var(--brand-100);color:var(--brand-700)}

.role-chip{display:inline-flex;align-items:center;gap:5px;font-family:"Kanit",sans-serif;
  font-weight:600;font-size:12px;padding:4px 11px;border-radius:999px}
.role-chip i{font-size:13px}
.role-chip-admin{background:linear-gradient(135deg,#fde68a,#fbbf24);color:#78350f}
.role-chip-academic{background:linear-gradient(135deg,#bfdbfe,#60a5fa);color:#1e3a8a}
.role-chip-head{background:linear-gradient(135deg,#ddd6fe,#a78bfa);color:#4c1d95}
.role-chip-teacher{background:linear-gradient(135deg,#a7f3d0,#34d399);color:#065f46}

/* ── utility ── */
.u-muted{color:var(--ink-muted)}
.u-center{text-align:center}
.u-mono{font-variant-numeric:tabular-nums}
.u-flex{display:flex;align-items:center;gap:10px}
.u-between{display:flex;align-items:center;justify-content:space-between;gap:12px}
.u-wrap{flex-wrap:wrap}
.u-grow{flex:1}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
