@import url('https://fonts.googleapis.com/css2?family=Anuphan:wght@400;500;600;700&family=IBM+Plex+Sans+Thai:wght@300;400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap');

/* ===== Design tokens =================================================
   Blueprint & Marigold — โทนน้ำเงินหมึกแบบแบบแปลนงานเทคนิค
   ตัดกับสีเหลืองอำพันสำหรับจุดที่ต้องการให้สายตาไปหยุด
   ==================================================================== */
:root{
  --ink:#101C2E; --ink-2:#1B2C45; --ink-3:#2A3E5C;
  --paper:#EEF2F8; --white:#fff;
  --line:#DBE3EE; --line-2:#C7D3E3;
  --text:#1B2735; --text-2:#5A6B82; --text-3:#8A99AD;
  --primary:#1E5F8C; --primary-700:#154765; --primary-50:#E8F1F8;
  --accent:#E8912B; --accent-50:#FDF3E4;
  --mint:#127E74; --mint-50:#E4F4F2;
  --rose:#C43A50; --rose-50:#FBE9EC;
  --violet:#6244C7;
  --r:14px; --r-sm:9px;
  --shadow:0 1px 2px rgba(16,28,46,.06), 0 8px 24px -12px rgba(16,28,46,.18);
  --shadow-lg:0 24px 60px -28px rgba(16,28,46,.45);
  --sidebar-w:264px;
}

*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:'IBM Plex Sans Thai',system-ui,sans-serif;
  font-size:15px; line-height:1.65; color:var(--text);
  background:var(--paper); -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,h5,.display{font-family:'Anuphan',sans-serif;font-weight:600;letter-spacing:-.01em;margin:0 0 .4rem}
h1{font-size:1.6rem} h2{font-size:1.25rem} h3{font-size:1.05rem}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
.num{font-family:'IBM Plex Mono',monospace;font-variant-numeric:tabular-nums}
.text-muted{color:var(--text-3)}
.small{font-size:.83rem}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:4px}

/* ===== Layout ====================================================== */
.shell{display:flex;min-height:100vh}
.sidebar{
  width:var(--sidebar-w);flex:0 0 var(--sidebar-w);
  background:
    linear-gradient(180deg,rgba(30,95,140,.28),rgba(16,28,46,0) 40%),
    linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px) 0 0/100% 26px,
    linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px) 0 0/26px 100%,
    var(--ink);
  color:#C9D6E8;position:sticky;top:0;height:100vh;overflow-y:auto;z-index:40;
}
.brand{display:flex;gap:.7rem;align-items:center;padding:1.15rem 1.15rem 1rem;border-bottom:1px solid rgba(255,255,255,.09)}
.brand-mark{
  width:40px;height:40px;flex:none;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--accent),#C9761B);color:#1B1206;
  font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:.72rem;letter-spacing:.02em;
}
.brand-name{font-family:'Anuphan',sans-serif;font-weight:600;color:#fff;font-size:.98rem;line-height:1.25}
.brand-sub{font-size:.7rem;color:#8FA3BE;letter-spacing:.06em;text-transform:uppercase;font-family:'IBM Plex Mono',monospace}
.nav-group{padding:1rem .75rem .25rem}
.nav-label{font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:#6F849F;padding:0 .5rem .45rem;font-family:'IBM Plex Mono',monospace}
.nav-item{
  display:flex;align-items:center;gap:.65rem;padding:.55rem .7rem;margin-bottom:2px;
  border-radius:var(--r-sm);color:#BCCADD;font-size:.92rem;position:relative;transition:.16s
}
.nav-item:hover{background:rgba(255,255,255,.07);color:#fff;text-decoration:none}
.nav-item.active{background:rgba(232,145,43,.14);color:#fff}
.nav-item.active::before{content:"";position:absolute;left:-.75rem;top:8px;bottom:8px;width:3px;background:var(--accent);border-radius:0 3px 3px 0}
.nav-item i{width:18px;text-align:center;font-size:1rem;opacity:.9}
.nav-count{margin-left:auto;font-family:'IBM Plex Mono',monospace;font-size:.72rem;background:rgba(255,255,255,.1);padding:.05rem .4rem;border-radius:20px}
.sidebar-foot{padding:1rem;margin-top:auto;font-size:.72rem;color:#6F849F;border-top:1px solid rgba(255,255,255,.09)}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  background:rgba(255,255,255,.86);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);padding:.7rem 1.6rem;
  display:flex;align-items:center;gap:1rem;position:sticky;top:0;z-index:30
}
.topbar .eyebrow{font-family:'IBM Plex Mono',monospace;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--text-3)}
.topbar h1{font-size:1.12rem;margin:0}
.userbox{margin-left:auto;display:flex;align-items:center;gap:.7rem}
.avatar{width:38px;height:38px;border-radius:50%;background:var(--primary-50);color:var(--primary-700);
  display:grid;place-items:center;font-weight:600;font-family:'Anuphan',sans-serif;flex:none;overflow:hidden}
.avatar img{width:100%;height:100%;object-fit:cover}
.content{padding:1.5rem 1.6rem 3rem;max-width:1400px;width:100%}
.burger{display:none;background:none;border:1px solid var(--line);border-radius:9px;padding:.35rem .55rem;font-size:1.1rem;color:var(--text-2)}

/* ===== Cards ======================================================= */
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);margin-bottom:1.1rem}
.card-head{padding:.95rem 1.15rem;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:.7rem}
.card-head h2,.card-head h3{margin:0}
.card-head .spacer{margin-left:auto}
.card-body{padding:1.15rem}
.card-body.tight{padding:.6rem}

/* สถิติ — เลขเป็นพระเอก มีเส้นสีคาดใต้ตัวเลข */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1rem;margin-bottom:1.2rem}
.stat{background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:1.05rem 1.15rem;box-shadow:var(--shadow);position:relative;overflow:hidden}
.stat::after{content:"";position:absolute;inset:auto 0 0 0;height:3px;background:var(--primary);opacity:.85}
.stat.accent::after{background:var(--accent)} .stat.mint::after{background:var(--mint)}
.stat.rose::after{background:var(--rose)} .stat.violet::after{background:var(--violet)}
.stat-label{font-size:.78rem;color:var(--text-2);display:flex;align-items:center;gap:.4rem}
.stat-value{font-family:'IBM Plex Mono',monospace;font-size:2.05rem;font-weight:600;line-height:1.15;color:var(--ink);margin-top:.15rem}
.stat-value small{font-size:.9rem;color:var(--text-3);font-weight:400}
.stat-foot{font-size:.75rem;color:var(--text-3);margin-top:.2rem}

/* ===== Grid ======================================================== */
.row{display:grid;gap:1.1rem}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g-8-4{grid-template-columns:2fr 1fr}
.g-4-8{grid-template-columns:1fr 2fr}
.span2{grid-column:span 2}

/* ===== Forms ======================================================= */
.field{margin-bottom:.95rem}
.field label{display:block;font-size:.83rem;font-weight:500;color:var(--text-2);margin-bottom:.3rem}
.req::after{content:" *";color:var(--rose)}
.input,select.input,textarea.input{
  width:100%;padding:.6rem .8rem;border:1px solid var(--line-2);border-radius:var(--r-sm);
  font-family:inherit;font-size:.94rem;color:var(--text);background:#fff;transition:.15s
}
.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-50);outline:none}
.input[readonly],.input:disabled{background:#F5F7FA;color:var(--text-2)}
textarea.input{min-height:96px;resize:vertical}
.hint{font-size:.78rem;color:var(--text-3);margin-top:.25rem}
.form-note{background:var(--primary-50);border-left:3px solid var(--primary);padding:.7rem .9rem;border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:.86rem;color:var(--primary-700);margin-bottom:1rem}

.btn{
  display:inline-flex;align-items:center;gap:.45rem;padding:.55rem 1rem;border-radius:var(--r-sm);
  border:1px solid transparent;font-family:'Anuphan',sans-serif;font-weight:500;font-size:.92rem;
  cursor:pointer;transition:.15s;text-decoration:none;line-height:1.4
}
.btn:hover{text-decoration:none;transform:translateY(-1px)}
.btn-primary{background:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-700);color:#fff}
.btn-accent{background:var(--accent);color:#2A1B05}
.btn-ghost{background:#fff;border-color:var(--line-2);color:var(--text-2)}
.btn-ghost:hover{border-color:var(--primary);color:var(--primary)}
.btn-danger{background:var(--rose-50);color:var(--rose);border-color:#F2CBD2}
.btn-sm{padding:.32rem .65rem;font-size:.82rem}
.btn-block{width:100%;justify-content:center}
.btn-icon{padding:.35rem .5rem;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--text-2)}
.btn-icon:hover{border-color:var(--primary);color:var(--primary)}
.actions{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}

/* แถบตัวกรอง */
.filters{display:flex;gap:.6rem;flex-wrap:wrap;align-items:flex-end;background:#fff;border:1px solid var(--line);
  border-radius:var(--r);padding:.85rem 1rem;margin-bottom:1.1rem;box-shadow:var(--shadow)}
.filters .field{margin:0;min-width:170px;flex:1 1 170px}
.filters .field.wide{flex:2 1 280px}

/* ===== Table ======================================================= */
.table-wrap{overflow-x:auto;border-radius:var(--r)}
table.tbl{width:100%;border-collapse:collapse;font-size:.9rem;background:#fff}
table.tbl th{
  text-align:left;padding:.65rem .85rem;background:#F6F8FC;color:var(--text-2);
  font-weight:500;font-size:.76rem;letter-spacing:.06em;text-transform:uppercase;
  font-family:'IBM Plex Mono',monospace;border-bottom:1px solid var(--line);white-space:nowrap
}
table.tbl td{padding:.7rem .85rem;border-bottom:1px solid #EDF1F7;vertical-align:middle}
table.tbl tbody tr:hover{background:#FAFBFE}
table.tbl tbody tr:last-child td{border-bottom:none}
.tbl .idx{font-family:'IBM Plex Mono',monospace;color:var(--text-3);font-size:.8rem}
.nowrap{white-space:nowrap}

.pill{display:inline-block;padding:.12rem .55rem;border-radius:20px;font-size:.75rem;font-weight:500;white-space:nowrap}
.pill-ok{background:var(--mint-50);color:var(--mint)}
.pill-warn{background:var(--accent-50);color:#9A5B0B}
.pill-bad{background:var(--rose-50);color:var(--rose)}
.pill-info{background:var(--primary-50);color:var(--primary-700)}
.pill-muted{background:#EEF1F6;color:var(--text-3)}
.chip{display:inline-block;padding:.1rem .5rem;border:1px solid var(--line-2);border-radius:20px;
  font-size:.76rem;color:var(--text-2);background:#fff;margin:0 .15rem .25rem 0}
.chip:hover{border-color:var(--primary);color:var(--primary);text-decoration:none}

.empty{text-align:center;padding:2.6rem 1rem;color:var(--text-3)}
.empty i{font-size:2.2rem;display:block;margin-bottom:.5rem;opacity:.5}
.empty strong{display:block;color:var(--text-2);font-family:'Anuphan',sans-serif;margin-bottom:.2rem}

/* ===== Alerts ====================================================== */
.alert{display:flex;gap:.6rem;padding:.8rem 1rem;border-radius:var(--r-sm);margin-bottom:1rem;font-size:.9rem;border:1px solid}
.alert-success{background:var(--mint-50);border-color:#BFE3DF;color:var(--mint)}
.alert-warn{background:var(--accent-50);border-color:#F5DCB4;color:#8A5209}
.alert-danger{background:var(--rose-50);border-color:#F2CBD2;color:var(--rose)}
.alert-info{background:var(--primary-50);border-color:#C7DDEC;color:var(--primary-700)}

/* ===== Progress / bars ============================================= */
.bar{height:8px;background:#EDF1F7;border-radius:20px;overflow:hidden}
.bar > span{display:block;height:100%;background:var(--primary);border-radius:20px}
.rank-row{display:flex;align-items:center;gap:.7rem;padding:.5rem 0;border-bottom:1px dashed #E8EDF5}
.rank-row:last-child{border-bottom:none}
.rank-row .n{font-family:'IBM Plex Mono',monospace;font-size:.78rem;color:var(--text-3);width:22px}
.rank-row .name{flex:1;min-width:0;font-size:.88rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank-row .v{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:.88rem}

/* ===== Login ======================================================= */
.auth{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr}
.auth-art{
  background:
    linear-gradient(160deg,rgba(30,95,140,.35),rgba(16,28,46,.1)),
    linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px) 0 0/34px 100%,
    var(--ink);
  color:#fff;padding:3.5rem;display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden
}
.auth-art h1{font-size:2.3rem;color:#fff;line-height:1.25;max-width:15ch}
.auth-art p{color:#A7B9D0;max-width:44ch}
.auth-art .kicker{font-family:'IBM Plex Mono',monospace;font-size:.72rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--accent);margin-bottom:1rem}
.auth-steps{margin-top:2.5rem;display:grid;gap:.9rem;max-width:400px}
.auth-step{display:flex;gap:.9rem;align-items:flex-start}
.auth-step .n{font-family:'IBM Plex Mono',monospace;color:var(--accent);font-size:.8rem;padding-top:.15rem;flex:none}
.auth-step div strong{display:block;color:#fff;font-family:'Anuphan',sans-serif;font-weight:500;font-size:.95rem}
.auth-step div span{color:#8FA3BE;font-size:.84rem}
.auth-form{display:flex;flex-direction:column;justify-content:center;padding:3rem;background:#fff}
.auth-form .inner{width:100%;max-width:380px;margin:0 auto}
.demo-box{margin-top:1.4rem;border:1px dashed var(--line-2);border-radius:var(--r-sm);padding:.8rem .9rem;font-size:.82rem;color:var(--text-2)}
.demo-box code{font-family:'IBM Plex Mono',monospace;background:#F1F4F9;padding:.05rem .35rem;border-radius:4px;color:var(--primary-700)}

/* ===== Misc ======================================================== */
.map-frame{width:100%;height:280px;border:1px solid var(--line);border-radius:var(--r-sm)}
.kv{display:grid;grid-template-columns:150px 1fr;gap:.45rem 1rem;font-size:.9rem}
.kv dt{color:var(--text-2)} .kv dd{margin:0;font-weight:500}
.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin-bottom:1.1rem;overflow-x:auto}
.tab{padding:.55rem .9rem;font-size:.9rem;color:var(--text-2);border-bottom:2px solid transparent;white-space:nowrap}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:500}
.tab:hover{text-decoration:none;color:var(--primary)}
.mt0{margin-top:0}.mb0{margin-bottom:0}.mt1{margin-top:1rem}.mb1{margin-bottom:1rem}

/* ===== Responsive ================================================== */
@media (max-width:1100px){ .g4{grid-template-columns:repeat(2,1fr)} .g-8-4,.g-4-8{grid-template-columns:1fr} }
@media (max-width:900px){
  .sidebar{position:fixed;left:0;top:0;transform:translateX(-100%);transition:.25s;box-shadow:var(--shadow-lg)}
  .sidebar.open{transform:none}
  .burger{display:inline-flex}
  .g2,.g3{grid-template-columns:1fr} .span2{grid-column:auto}
  .auth{grid-template-columns:1fr} .auth-art{display:none}
  .content{padding:1.1rem}
  .kv{grid-template-columns:1fr} .kv dt{color:var(--text-3);font-size:.8rem}
}
@media (prefers-reduced-motion:reduce){ *{transition:none!important;animation:none!important} .btn:hover{transform:none} }
@media print{ .sidebar,.topbar,.filters,.actions,.btn{display:none!important} .content{padding:0} .card{box-shadow:none} }

/* ซ่อนชื่อผู้ใช้บนแถบบนเมื่อจอแคบ */
@media (max-width:600px){ .d-none-mobile{display:none} }
