/* ============================================================================
   PP STAMP HR — Admin Dashboard (Vanilla CSS, responsive ถึงแท็บเล็ต)
   ============================================================================ */
:root{
    --brand:#2457d6; --brand-dark:#1849a9; --brand-soft:#eef3ff;
    --accent:#0b7d72; --accent-dark:#08665e;
    --ok:#15803d; --ok-soft:#e8f6ec;
    --warn:#b45309; --warn-soft:#fff5e6;
    --danger:#c02626; --danger-soft:#fdecec;
    --ink:#142033; --ink-soft:#53657d;
    --line:#dde4ee; --bg:#f6f8fc; --card:#fff;
    --radius:14px; --shadow:0 4px 16px rgba(20,32,51,.06);
    --side-w:230px;
    --font:"Sarabun","Noto Sans Thai","Leelawadee UI","Prompt",
           -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{font-family:var(--font);background:var(--bg);color:var(--ink);line-height:1.6;font-size:15px}
.hidden{display:none !important}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;
         overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.muted{color:var(--ink-soft);font-size:13.5px}
.req{color:var(--danger)}
h1,h2,h3{margin:0}

/* ------------------------------------------------------------- login page */
.login-wrap{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px 16px}
.login-card{
    width:100%;max-width:420px;background:var(--card);border:1px solid var(--line);
    border-radius:18px;padding:32px 28px;box-shadow:var(--shadow);
}
.login-logo{
    width:56px;height:56px;border-radius:16px;background:var(--brand);color:#fff;
    display:flex;align-items:center;justify-content:center;font-weight:800;font-size:20px;margin-bottom:18px;
}
.login-card h1{font-size:22px}
.login-card .sub{color:var(--ink-soft);margin:4px 0 24px}
.link-small{
    display:block;margin-top:18px;text-align:center;font-size:13.5px;color:var(--ink-soft);
    background:none;border:none;cursor:pointer;font-family:inherit;text-decoration:underline;width:100%;
}
.link-small:hover{color:var(--brand)}
.divider{display:flex;align-items:center;gap:10px;margin:22px 0;color:var(--ink-soft);font-size:13px}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--line)}

/* ------------------------------------------------------------------ shell */
.shell{display:flex;min-height:100dvh}
.side{
    width:var(--side-w);flex:none;background:var(--card);border-right:1px solid var(--line);
    display:flex;flex-direction:column;position:sticky;top:0;height:100dvh;
}
.side-head{padding:18px 18px 14px;border-bottom:1px solid var(--line)}
.side-head .brand{font-weight:800;font-size:17px;color:var(--brand-dark)}
.side-head .who{font-size:13px;color:var(--ink-soft);margin-top:4px;word-break:break-word}
.side-nav{flex:1;overflow-y:auto;padding:10px}
.navbtn{
    width:100%;text-align:left;background:none;border:none;font-family:inherit;font-size:14.5px;
    color:var(--ink);padding:11px 12px;border-radius:10px;cursor:pointer;display:flex;gap:9px;
    align-items:center;margin-bottom:2px;position:relative;
}
/* ลูกเล่นตอนชี้เมาส์ — ขยับเข้าเล็กน้อย + ไอคอนเด้งขึ้นมาเต็มสี
   จงใจใช้ระยะขยับแค่ 3px และไอคอนโต 1.15 เท่า เพราะเมนูนี้ใช้ทุกวัน
   แอนิเมชันที่แรงเกินไปจะน่ารำคาญตั้งแต่วันที่สามเป็นต้นไป */
.navbtn{transition:background .16s ease,transform .16s ease,box-shadow .16s ease}
.navbtn:active{transform:scale(.985)}

/* จำกัดเอฟเฟกต์ hover ไว้เฉพาะเครื่องที่มีเมาส์จริง
   บนมือถือ :hover จะ "ค้าง" หลังแตะ ทำให้ปุ่มเลื่อนค้างไว้แบบไม่มีเหตุผล */
@media (hover:hover) and (pointer:fine){
    .navbtn:hover{background:var(--nav-accent-soft,var(--bg));transform:translateX(3px)}
    .navbtn:hover .nav-ico{filter:none;transform:scale(1.15)}
    .navbtn.active:hover{transform:translateX(3px)}
}
.navbtn:focus-visible{outline:2px solid var(--nav-accent,var(--brand));outline-offset:-2px}

/* ชื่อเมนูเลื่อนตามนิด ๆ ให้รู้สึกว่าทั้งปุ่มขยับพร้อมกัน ไม่ใช่ไอคอนขยับเดี่ยว */
.nav-ico{transition:filter .16s ease,transform .16s ease}
.navbtn.active{
    background:var(--nav-accent-soft,var(--brand-soft));
    color:var(--nav-accent,var(--brand-dark));font-weight:700;
    box-shadow:inset 0 0 0 1px var(--nav-accent-line,rgba(31,95,214,.22));
}
.navbtn.active .nav-ico{filter:none;transform:scale(1.1)}

/* แถบสีบางด้านซ้ายของเมนูที่เปิดอยู่ — บอกตำแหน่งปัจจุบันโดยไม่ต้องพึ่งสีพื้นอย่างเดียว
   (เผื่อคนที่แยกเฉดสีอ่อน ๆ ได้ไม่ชัด) */
.navbtn.active::after{
    content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
    width:3px;height:60%;border-radius:0 3px 3px 0;background:var(--nav-accent,var(--brand));
}
.navbtn .pill{
    margin-left:auto;background:var(--danger);color:#fff;border-radius:999px;
    font-size:11px;font-weight:700;padding:1px 7px;min-width:20px;text-align:center;
}
.side-foot{padding:12px;border-top:1px solid var(--line)}
.content{flex:1;min-width:0;padding:22px 24px 60px}
.page-head{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin-bottom:18px}

/* หัวข้อหน้า — แถบสีหนา ๆ นำหน้า ให้รู้ทันทีว่าอยู่หน้าไหนและอยู่หมวดไหน
   ใช้สีชุดเดียวกับเมนูด้านซ้าย ตาจึงเชื่อมโยงเมนูกับหน้าที่เปิดอยู่ได้เอง */
.view{--pg-accent:#1f5fd6}
.view[data-accent="daily"] {--pg-accent:#1f5fd6}
.view[data-accent="people"]{--pg-accent:#0b7d72}
.view[data-accent="report"]{--pg-accent:#b45309}
.view[data-accent="config"]{--pg-accent:#4a5a6e}
.page-head h1{
    font-size:22px;display:flex;align-items:center;gap:11px;line-height:1.35;
}
.page-head h1::before{
    content:"";width:5px;height:26px;border-radius:3px;background:var(--pg-accent);flex:none;
}

/* ------------------------------------------------------------------ cards */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
      padding:18px;margin-bottom:16px;box-shadow:var(--shadow)}
.card h2{font-size:16px;margin-bottom:12px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--brand);
      border-radius:12px;padding:14px 16px;box-shadow:var(--shadow)}
.stat .lab{font-size:13px;color:var(--ink-soft)}
.stat .val{font-size:28px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.2}
.stat.s-ok{border-left-color:var(--ok)}
.stat.s-warn{border-left-color:var(--warn)}
.stat.s-danger{border-left-color:var(--danger)}
.stat.s-mute{border-left-color:#94a3b8}

/* ----------------------------------------------------------------- tables */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table{border-collapse:collapse;width:100%;font-size:14px}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:13px;color:var(--ink-soft);font-weight:700;white-space:nowrap;
   background:var(--bg);position:sticky;top:0;z-index:1}
tbody tr:hover{background:#fafcff}
td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
.empty{text-align:center;color:var(--ink-soft);padding:30px 12px}

/* ---------------------------------------------------------------- buttons */
.btn{font-family:inherit;font-size:14.5px;font-weight:600;border:none;border-radius:10px;
     padding:10px 16px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
     gap:8px;min-height:42px}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn[data-busy="1"]{pointer-events:none;cursor:wait}
.btn:focus-visible{outline:3px solid rgba(31,95,214,.4);outline-offset:2px}
.btn-block{width:100%}
.btn-lg{min-height:50px;font-size:16px}
.btn-sm{min-height:34px;padding:6px 12px;font-size:13.5px;border-radius:8px}
.btn-primary{background:var(--brand);color:#fff}
.btn-primary:not(:disabled):hover{background:var(--brand-dark)}
.btn-ok{background:var(--ok);color:#fff}
.btn-danger{background:var(--danger);color:#fff}
/* ปุ่มสำหรับการกระทำที่ย้อนกลับได้แต่ต้องคิดก่อน (เช่น กู้คืนข้อมูล)
   จงใจแยกจากสีแดงที่ใช้กับการลบถาวร เพื่อไม่ให้ความหมายของสีแดงเจือจาง */
.btn-warn{background:var(--warn);color:#fff}
.btn-warn:not(:disabled):hover{filter:brightness(.93)}
.btn-ghost{background:var(--card);color:var(--brand);border:1px solid var(--line)}
.btn-ghost:not(:disabled):hover{background:var(--brand-soft)}
.btn-line{background:#07883c;color:#fff}
.btn-line:not(:disabled):hover{background:#066e31}
.btn-row{display:flex;flex-wrap:wrap;gap:8px}
.spinner{width:15px;height:15px;border-radius:50%;border:2px solid rgba(255,255,255,.45);
         border-top-color:#fff;animation:spin .8s linear infinite;display:inline-block}
.btn-ghost .spinner{border-color:rgba(31,95,214,.25);border-top-color:var(--brand)}
@keyframes spin{to{transform:rotate(360deg)}}

/* ------------------------------------------------------------------ forms */
.field{display:block;margin-bottom:14px}
.field>span{display:block;font-size:13.5px;font-weight:600;margin-bottom:5px}
.field input,.field select,.field textarea{
    width:100%;font-family:inherit;font-size:15px;color:var(--ink);padding:10px 12px;
    border:1px solid var(--line);border-radius:9px;background:var(--card);min-height:42px}
.field textarea{resize:vertical;min-height:70px}
.field input[type="checkbox"],.field input[type="radio"]{
    width:20px;height:20px;min-height:20px;padding:0;margin:0 7px 0 0;
    vertical-align:-4px;accent-color:var(--brand);flex:none;cursor:pointer}
.field input:focus,.field select:focus,.field textarea:focus{
    outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(31,95,214,.15)}
.field.has-error input,.field.has-error select{border-color:var(--danger)}
.field-error{display:block;color:var(--danger);font-size:12.5px;margin-top:4px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 14px}
.ddns-status-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin:18px 0 22px}
.ddns-status-grid>div{padding:12px 14px;background:var(--bg,#f7f9fc);border:1px solid var(--line);border-radius:10px;min-width:0}
.ddns-status-grid dt{font-size:12px;color:var(--ink-soft,#64748b);margin-bottom:5px}
.ddns-status-grid dd{font-size:14px;font-weight:600;margin:0;overflow-wrap:anywhere}
.ddns-notice{margin:12px 0;padding:12px 14px;background:#fffbeb;color:#854d0e;border:1px solid #fcd34d;border-radius:10px;line-height:1.65;overflow-wrap:anywhere}
.ddns-actions{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 14px}
.ddns-history{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}
.ddns-history summary{cursor:pointer;font-weight:600;padding:6px 0}
.ddns-history>p{margin:10px 0}
.ddns-history td:last-child{max-width:360px;white-space:normal;overflow-wrap:anywhere}
.ddns-footnote{font-size:12.5px;line-height:1.65}
.filters{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}
.filters .field{margin-bottom:0;min-width:150px}

/* ----------------------------------------------------------------- badges */
.badge{font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;white-space:nowrap;display:inline-block}
.b-ok{background:var(--ok-soft);color:var(--ok)}
.b-warn{background:var(--warn-soft);color:var(--warn)}
.b-danger{background:var(--danger-soft);color:var(--danger)}
.b-info{background:var(--brand-soft);color:var(--brand-dark)}
.b-mute{background:#eef2f7;color:var(--ink-soft)}

/* --------------------------------------------------------- review cards */
.review-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.review-tabs{margin-bottom:12px}
.tabs{display:flex;flex-wrap:wrap;gap:6px}
.tab{font:600 14px/1.5 var(--font);min-height:42px;padding:9px 16px;
     border:1px solid var(--line);border-radius:10px;background:var(--card);
     color:var(--ink-soft);cursor:pointer}
.tab-active{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-dark)}
.tab:focus-visible{outline:3px solid rgba(36,87,214,.3);outline-offset:2px}
.review-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
             overflow:hidden;box-shadow:var(--shadow)}
.review-card .selfie{width:100%;aspect-ratio:3/4;object-fit:cover;background:#0f172a;display:block}
.review-card .noimg{width:100%;aspect-ratio:3/4;display:flex;align-items:center;justify-content:center;
                    background:var(--bg);color:var(--ink-soft);font-size:13.5px;text-align:center;padding:16px}
.review-card .body{padding:14px}
.review-card .body h3{font-size:15.5px;margin-bottom:2px}
.kvlist{margin:10px 0 12px;display:flex;flex-direction:column;gap:4px;font-size:13.5px}
.kvlist .kv{display:flex;justify-content:space-between;gap:10px}
.kvlist .kv b{font-variant-numeric:tabular-nums}
.maplink{font-size:13px;color:var(--brand);text-decoration:underline}

/* ----------------------------------------------------------------- modal */
.modal{position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:60;
       display:flex;align-items:center;justify-content:center;padding:20px;overflow-y:auto}
.modal-box{background:var(--card);border-radius:16px;padding:24px;width:100%;max-width:520px;
           max-height:90dvh;overflow-y:auto;box-shadow:0 20px 50px rgba(0,0,0,.25)}
.modal-box h2{font-size:18px;margin-bottom:14px}
.modal-actions{display:flex;gap:10px;margin-top:8px}
.modal-actions .btn{flex:1}

/* ----------------------------------------------------------- misc */
.alert{border-radius:10px;padding:11px 14px;font-size:14px;margin-bottom:14px}
.alert-error{background:var(--danger-soft);color:var(--danger)}
.alert-ok{background:var(--ok-soft);color:var(--ok)}
.alert-warn{background:var(--warn-soft);color:var(--warn)}
.alert-info{background:var(--brand-soft);color:var(--brand-dark)}
.toast{position:fixed;right:20px;bottom:20px;z-index:80;background:#16202e;color:#fff;
       padding:12px 18px;border-radius:11px;font-size:14px;max-width:min(420px,90vw);
       box-shadow:0 10px 30px rgba(0,0,0,.25)}
.toast.t-error{background:var(--danger)}
.toast.t-ok{background:var(--ok)}
.loading{display:flex;align-items:center;gap:10px;color:var(--ink-soft);padding:22px 0}
.loading .spinner{border-color:rgba(31,95,214,.25);border-top-color:var(--brand)}


/* ------------------------------------------- แดชบอร์ดวิเคราะห์กำลังคน */
.dept-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-top:12px}
.dept-card{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.dept-name{font-size:13px;color:var(--ink-soft);margin-bottom:4px}
.dept-count{font-variant-numeric:tabular-nums;line-height:1.2;margin-bottom:8px}
.dept-present{font-size:26px;font-weight:800}
.dept-expected{font-size:15px;color:var(--ink-soft)}
.dept-chips{display:flex;flex-wrap:wrap;gap:5px}
.dept-missing{margin-top:8px;font-size:12.5px;color:var(--ink-soft);line-height:1.5}

.leave-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;
           padding:9px 12px;border-bottom:1px solid var(--line);border-radius:0}
.leave-row:last-child{border-bottom:none}
.leave-row-warn{background:var(--danger-soft)}
.leave-date{width:118px;flex-shrink:0;font-size:13.5px;color:var(--ink-soft)}
.leave-names{flex:1;min-width:140px;font-size:14px}

.alert-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
           padding:10px 12px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px}
.alert-row:last-child{margin-bottom:0}
.alert-label{font-size:14px}
.alert-detail{flex-basis:100%;font-size:12.5px;color:var(--ink-soft);line-height:1.5}

/* ------------------------------------------------------- ตั้งค่าระบบ */
.link-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
          padding:10px 0;border-bottom:1px solid var(--line)}
.link-row:last-child{border-bottom:none}
.link-label{width:210px;flex-shrink:0;font-size:13.5px;color:var(--ink-soft)}
.link-url{flex:1;min-width:200px;font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
input.link-url{padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--bg);color:var(--ink)}

.set-field{padding:12px 0;border-bottom:1px solid var(--line)}
.set-field:last-child{border-bottom:none}
.set-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.set-label{font-size:14px;font-weight:700}
.set-input{max-width:320px;width:100%}
.set-field input[type=checkbox].set-input{width:auto}
.set-hint{margin-top:5px;font-size:12.5px;color:var(--ink-soft);line-height:1.5}

/* ------------------------------------------------------ PPSTAMP HR Bot */
.bot-enable-row{
    display:flex;align-items:flex-start;gap:12px;padding:14px 16px;margin:12px 0 18px;
    border:1px solid var(--line);border-radius:12px;background:var(--bg);cursor:pointer;
}
.bot-enable-row .bot-check{
    width:20px;height:20px;flex:none;margin-top:2px;accent-color:var(--brand);cursor:pointer;
}
.bot-enable-row span{display:flex;flex-direction:column;gap:2px}
.bot-enable-row small{font-size:12.5px;color:var(--ink-soft);font-weight:400}
.bot-number-wrap{display:flex;align-items:center;gap:9px}
.field .bot-number-wrap input{max-width:180px}
.bot-number-wrap>span{color:var(--ink-soft);white-space:nowrap}
.bot-group-summary{
    display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:12px 14px;
    border:1px solid var(--line);border-radius:10px;background:var(--bg);margin-bottom:12px;
}
.bot-group-summary strong{font-size:15px}
.bot-pairing{
    margin-top:12px;padding:14px 16px;border:1px solid rgba(31,95,214,.25);
    border-radius:10px;background:var(--brand-soft);color:var(--brand-dark);
}
.bot-pair-code{
    display:inline-block;margin:7px 0 5px;padding:7px 13px;border-radius:8px;background:var(--card);
    border:1px dashed var(--brand);font:800 22px/1.25 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
    letter-spacing:.08em;user-select:all;
}
.bot-pair-command{
    display:block;width:100%;margin:7px 0;padding:8px 10px;border:1px solid var(--line);
    border-radius:8px;background:var(--card);color:var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
.bot-template-field textarea{min-height:112px;line-height:1.6}
.bot-template-field>small{display:block;text-align:right;color:var(--ink-soft);margin-top:3px}
.bot-filter-actions{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}
.bot-people{max-height:420px}
.bot-people .bulk-item.is-disabled{cursor:not-allowed;opacity:.68}
.bot-people .bulk-item.is-disabled:hover{background:transparent}
.bot-people input[type=checkbox]{width:18px;height:18px;flex:none;accent-color:var(--brand)}
.bot-save-card{display:flex;align-items:center;justify-content:space-between;gap:18px}
.bot-save-card h2{margin-bottom:4px}
.bot-save-card p{margin:0}

@media (max-width:560px){
    .link-label{width:100%}
    .leave-date{width:100%}
    .bot-save-card{align-items:stretch;flex-direction:column}
    .bot-save-card .btn{width:100%}
    .field .bot-number-wrap input{max-width:none}
}


/* ------------------------------------------------- ปฏิทินรายเดือนแบบตาราง
   วางแกนแบบไฟล์ Excel เดิม: แถว=วันที่ คอลัมน์=พนักงาน */
.cal-legend{display:flex;flex-wrap:wrap;gap:14px;margin:10px 0 14px}
.cal-legend-item{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-soft)}

.cal-scroll{
    position:relative;isolation:isolate;max-height:720px;
    max-height:clamp(320px,68vh,720px);max-height:clamp(320px,68dvh,720px);
    overflow:auto;scrollbar-gutter:stable;border:1px solid var(--line);border-radius:10px;
    background:var(--card);touch-action:pan-x pan-y;
}
.cal-scroll:focus-visible{outline:3px solid rgba(36,87,214,.32);outline-offset:2px}
.cal-table{border-collapse:separate;border-spacing:0;min-width:100%}
.cal-table th,.cal-table td{padding:3px 4px;text-align:center;vertical-align:middle;white-space:nowrap}
.cal-table thead th{position:sticky;top:0;z-index:5;background:var(--card);
                    border-bottom:1px solid var(--line);box-shadow:0 2px 4px rgba(20,32,51,.08);
                    font-size:12.5px;line-height:1.3}
.cal-dow-col{position:sticky;left:0;z-index:3;background:var(--card);
             min-width:34px;max-width:34px;font-size:12px;color:var(--ink-soft)}
.cal-date-col{position:sticky;left:34px;z-index:3;background:var(--card);
              min-width:56px;max-width:56px;font-size:12px;color:var(--ink-soft);
              border-right:1px solid var(--line)}
.cal-table thead .cal-dow-col,.cal-table thead .cal-date-col{z-index:7}
.cal-emp-col{min-width:104px;font-size:12px}
.cal-emp-code{font-size:10px;color:var(--ink-soft);font-weight:600;letter-spacing:.02em}
.cal-dept{font-size:11px;color:var(--ink-soft);font-weight:400}
.calendar-scope{display:inline-flex;align-items:center;gap:7px;margin:0 0 12px;padding:7px 10px;
                border-radius:999px;background:#eef7f5;color:#0b6b63;font-size:12.5px;font-weight:700}
.calendar-scope:empty{display:none}

.cal-sunday-row td{background:#fdf2f4}
.cal-sunday-row .cal-dow-col,.cal-sunday-row .cal-date-col{background:#fdf2f4;color:var(--danger)}
.cal-total-row td{background:var(--bg);font-weight:700;font-size:12px;border-top:1px solid var(--line)}
.cal-total-row .cal-dow-col,.cal-total-row .cal-date-col{background:var(--bg)}

.cal-chip{display:inline-block;padding:3px 7px;border-radius:6px;font-size:11.5px;
          font-weight:700;line-height:1.35;white-space:nowrap}
.cal-chip-btn{border:none;cursor:pointer;font-family:inherit;width:100%;text-align:center}
.cal-chip-btn:hover{outline:2px solid var(--brand);outline-offset:-2px}
.cal-edited{margin-left:2px;color:var(--danger)}
.cal-allowance-mark{margin-left:3px;font-size:11px}
.mo-allowance-mark{position:absolute;right:1px;bottom:0;font-size:8px;line-height:10px;background:#fff;color:#111;border-radius:2px}
.pr-raw,.pr-allowance-days{font-size:11px;white-space:normal;min-width:150px}
.pr-raw summary,.pr-allowance-days summary{cursor:pointer;color:var(--brand-dark)}
.pr-raw p,.pr-allowance-days p{margin:6px 0;line-height:1.5}

.c-ontime{background:var(--ok-soft);color:var(--ok)}
.c-late{background:var(--warn-soft);color:var(--warn)}
.c-absent{background:var(--danger);color:#fff}
.c-leave{background:var(--danger);color:#fff}
.c-off{background:#eef2f7;color:#53657d}
.c-none{background:#f8fafc;color:#64748b}
.c-notyet{background:#f8fafc;color:#64748b}
.c-upcoming{background:transparent;color:#64748b}

@media (max-width:560px){.cal-scroll{max-height:64vh;max-height:64dvh}}

/* ------------------------------------------------ วันหยุดหมู่ + เวอร์ชัน */
.bulk-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));
             gap:6px;margin-top:10px;max-height:280px;overflow-y:auto;
             border:1px solid var(--line);border-radius:10px;padding:10px}
.bulk-item{display:flex;align-items:center;gap:8px;font-size:13.5px;
           padding:5px 7px;border-radius:8px;cursor:pointer}
.bulk-item:hover{background:var(--bg)}
.bulk-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.bulk-dept{font-size:11.5px;color:var(--ink-soft)}
.app-version{margin-top:10px;text-align:center;font-size:11.5px;color:var(--ink-soft)}

/* ------------------------------------------- สมาชิกแผนก / สมาชิกกะ */
.department-members-card{border-top:4px solid #0f9488}
.department-member-filters .field{min-width:210px}
.membership-fieldset{border:0;padding:0;margin:0;min-width:0}
.department-people{max-height:390px;grid-template-columns:repeat(auto-fill,minmax(270px,1fr))}
.department-people .bulk-item{min-height:54px;border:1px solid transparent;align-items:flex-start;padding:8px 10px}
.department-people .bulk-item:hover{border-color:var(--line)}
.department-people .bulk-item.is-member{background:#eefaf8;border-color:#cbece7}
.department-people .bulk-item.is-staged{background:#fff8e9;border-color:#f4d595}
.department-people .bulk-item.is-disabled{opacity:.62;cursor:not-allowed;background:#f7f8fa}
.department-people input[type="checkbox"]{width:18px;height:18px;margin-top:2px;flex:none}
.dm-person{display:flex;flex:1;min-width:0;flex-direction:column;gap:2px}
.dm-person strong{font-size:13.5px;line-height:1.35;overflow:hidden;text-overflow:ellipsis}
.dm-person small{font-size:11.5px;color:var(--ink-soft);line-height:1.35}
.dm-status{flex:none;max-width:130px;text-align:right;font-size:11.5px;line-height:1.35;color:var(--ink-soft)}
.membership-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;flex-wrap:wrap}
.membership-count{font-size:13px;color:var(--ink-soft);font-weight:700}
.membership-count.is-dirty{color:var(--warn)}

/* ----------------------------------------------------------- กะงาน */
.step-head{font-size:14px;color:var(--ink-soft);margin:18px 0 8px;font-weight:700}
.shift-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:12px}
.shift-card{position:relative;border:2px solid var(--line);border-radius:12px;
            padding:0;background:var(--card);transition:border-color .12s;overflow:hidden}
.shift-card:hover{border-color:var(--brand)}
.shift-select{display:block;width:100%;min-height:120px;border:0;background:transparent;color:inherit;
              padding:12px 14px 40px;text-align:left;font:inherit;cursor:pointer}
.shift-select:focus-visible,.shift-add:focus-visible{outline:3px solid rgba(31,95,214,.34);outline-offset:-3px}
.shift-card.sel{border-color:var(--brand);background:var(--brand-soft)}
.shift-free{border-style:dashed}
.shift-name{font-weight:700;font-size:14.5px;line-height:1.35}
.shift-time{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums;margin:4px 0 2px}
.shift-free .shift-time{font-size:15px;color:var(--ink-soft)}
.shift-days{font-size:12.5px;color:var(--ink-soft);line-height:1.45}
.shift-use{font-size:12px;color:var(--brand-dark);margin-top:6px}
.shift-actions{position:absolute;left:12px;right:12px;bottom:8px;display:flex;gap:6px}
.shift-add{display:flex;align-items:center;justify-content:center;border-style:dashed;
           color:var(--brand);font:inherit;font-weight:700;padding:12px 14px;min-height:120px;cursor:pointer}

@media (max-width:640px){
    .department-member-filters .field{min-width:0}
    .department-people{grid-template-columns:1fr;max-height:52vh;max-height:52dvh;padding:7px}
    .department-people .bulk-item{min-height:58px;padding:9px 8px}
    .dm-status{max-width:105px}
    .membership-actions{align-items:stretch}
    .membership-actions>.btn-row{width:100%;display:grid;grid-template-columns:1fr 1fr}
    .membership-actions>.btn-row .btn{min-height:44px}
}

/* ------------------------------------------------- หัวข้อกลุ่มในเมนู (v2.1.0)
   ให้แต่ละหมวดมีสีประจำตัว เพื่อให้หาเมนูเจอด้วยการกวาดตา ไม่ต้องอ่านทีละบรรทัด
   สีที่เลือกยังอยู่ในโทนเดิมของระบบทั้งหมด (น้ำเงิน-เขียว-ส้ม-เทา) ไม่มีสีแปลกปลอมเข้ามา */
.nav-sec{
    --nav-accent:#1f5fd6;--nav-accent-soft:#eaf1ff;--nav-accent-line:rgba(31,95,214,.22);
    margin-bottom:10px;padding-bottom:4px;
}
.nav-sec + .nav-sec{border-top:1px solid var(--line);padding-top:2px}
.nav-sec[data-accent="daily"]  {--nav-accent:#1f5fd6;--nav-accent-soft:#eaf1ff;--nav-accent-line:rgba(31,95,214,.22)}
.nav-sec[data-accent="people"] {--nav-accent:#0b7d72;--nav-accent-soft:#e2f5f2;--nav-accent-line:rgba(13,148,136,.26)}
.nav-sec[data-accent="report"] {--nav-accent:#b45309;--nav-accent-soft:#fff5e6;--nav-accent-line:rgba(180,83,9,.24)}
.nav-sec[data-accent="config"] {--nav-accent:#4a5a6e;--nav-accent-soft:#eef1f6;--nav-accent-line:rgba(91,107,128,.26)}

.nav-group{
    font-size:11.5px;color:var(--ink-soft);letter-spacing:.04em;
    padding:14px 12px 5px;font-weight:700;display:flex;align-items:center;gap:7px;
}
.nav-sec:first-child .nav-group{padding-top:4px}
.nav-dot{width:7px;height:7px;border-radius:50%;background:var(--nav-accent);flex:none}

.nav-ico{font-size:15px;line-height:1;width:20px;text-align:center;flex:none;
         filter:grayscale(.25);transition:filter .15s ease}

/* เมนูหลักของแต่ละหมวด — ตัวหนากว่า และมีแถบสีด้านซ้ายให้สังเกตเห็นก่อนเพื่อน */
.navbtn-key{font-weight:600}
.navbtn-key::before{
    content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
    width:3px;height:18px;border-radius:0 3px 3px 0;background:var(--nav-accent);opacity:.55;
}
.navbtn-key:hover::before,.navbtn-key.active::before{opacity:1}

/* ------------------------------------------------------------ responsive */
@media (max-width:900px){
    .shell{flex-direction:column}
    .side{width:100%;height:auto;position:static;border-right:none;border-bottom:1px solid var(--line)}
    .side-nav{display:flex;overflow-x:auto;gap:6px;padding:8px 10px}
    .nav-sec{display:flex;gap:6px;align-items:center;margin-bottom:0;flex:none}
    .nav-group{padding:0 4px 0 8px;border-left:2px solid var(--nav-accent);white-space:nowrap}
    .nav-sec:first-child .nav-group{padding-top:0}
    .nav-dot{display:none}
    .navbtn{white-space:nowrap;width:auto;margin-bottom:0}
    .navbtn-key::before{display:none}
    .side-foot{display:flex;justify-content:flex-end}
    .side-foot .btn{width:auto}
    .content{padding:18px 16px 50px}
}
@media (max-width:560px){
    .page-head h1{font-size:19px}
    .stat .val{font-size:24px}
    .filters{flex-direction:column;align-items:stretch}
    .filters .field{min-width:0}
}


/* ------------------------------------------------ สิทธิ์วันลา + ลาครึ่งวัน (v2.1.0) */

/* แถวที่ตัวเลขไม่ตรงกับที่ระบบแนะนำ — ทำให้สะดุดตาโดยไม่ตะโกนจนอ่านยาก */
tr.row-warn td{background:#fffaf0}
tr.row-warn td:first-child{box-shadow:inset 3px 0 0 var(--warn)}

/* ลาครึ่งวันในปฏิทิน — ใช้สีลา แต่ไล่เฉดครึ่งช่อง สื่อว่า "ครึ่งลา ครึ่งทำงาน" */
.c-half{
    background:#f1f5f9;color:#334155;border:1px dashed #94a3b8;
}
.c-holiday{background:#ede4ff;color:#582595;border:1px solid #d4b9f3}
.c-vacation{background:#dff1ff;color:#075985;border:1px solid #9acdeb}
.c-sick{background:#374151;color:#fff;border:1px solid #374151}
.c-personal{background:#fce7f3;color:#9d174d;border:1px solid #f5b4d5}
.c-hour{background:#fef3a8;color:#713f12;border:1px solid #e4c94b}
.leave-history-filters{align-items:end;flex-wrap:wrap;margin-bottom:14px}
.leave-history-filters .field{min-width:130px;flex:1}
.leave-history-filters #lh-user{min-width:190px}
.leave-history-totals{width:100%;padding:8px 0}
.leave-history-totals summary{cursor:pointer;font-weight:600;color:var(--brand)}
#lh-summary{display:block;margin:12px 0}
#lh-tbody details{min-width:180px}
#lh-tbody summary{cursor:pointer;color:var(--brand);font-size:12px}


/* แถบเตือนเวอร์ชันไม่ตรงกัน — ตั้งใจให้อยู่บนสุดและมองข้ามไม่ได้
   เพราะถ้าเห็นแถบนี้ แปลว่าทุกอย่างที่เห็นข้างล่างอาจไม่ตรงกับความจริง */
.ver-warn{
    position:sticky;top:0;z-index:9999;
    background:#c02626;color:#fff;padding:11px 16px;font-size:14px;line-height:1.55;
    display:flex;flex-wrap:wrap;gap:6px;align-items:center;
}
.ver-warn a{color:#fff;text-decoration:underline;font-weight:700;white-space:nowrap}

/* ----------------------------------------- ศูนย์การทำงาน (UX v2.2.7) */
.workspace-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:14px}
.workspace-card{display:block;min-height:126px;border:1px solid var(--line);border-radius:14px;background:var(--card);padding:16px;text-align:left;color:var(--ink);font-family:inherit;cursor:pointer;text-decoration:none}
.workspace-card:hover{border-color:var(--brand);background:var(--brand-soft)}
.workspace-card:focus-visible{outline:3px solid rgba(31,95,214,.4);outline-offset:2px}
.workspace-card span{display:block;font-size:24px;line-height:1;margin-bottom:12px}
.workspace-card b{display:block;font-size:15px}
.workspace-card small{display:block;color:var(--ink-soft);line-height:1.4;margin-top:4px}
.workspace-safe{border-left:4px solid var(--brand)}
@media (max-width:640px){.workspace-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.workspace-card{min-height:112px;padding:13px}.workspace-card span{font-size:21px;margin-bottom:9px}.workspace-card small{font-size:12px}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}

/* สิทธิ์วันลารายบุคคล: checkbox ต้องไม่รับขนาดเต็มแบบช่องตัวเลข */
.field input.qt-eligible-check{width:18px;min-height:18px;height:18px;padding:0;margin:0 7px 0 0;vertical-align:-3px;accent-color:var(--brand)}
.cal-entry-mark{font-size:11px;margin-left:3px;vertical-align:1px}

/* กติกาวันลาของบริษัท — สี่การ์ดสั้นอ่านได้ทั้งจอใหญ่และมือถือ */
.policy-rule-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.policy-rule{display:flex;flex-direction:column;gap:5px;padding:13px;border:1px solid var(--line);border-radius:12px;background:#f8fafc}
.policy-rule b{color:var(--ink)}
.policy-rule span{color:var(--ink-soft);font-size:13px;line-height:1.55}
@media (max-width:700px){.policy-rule-grid{grid-template-columns:1fr}}

/* Calm Operations — shared visual language; existing navigation and workflows stay intact. */
.icon-defs{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
.ui-icon{display:block;width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.side-head{padding:22px 18px 18px}
.side-head .brand{font-size:19px;letter-spacing:-.3px;color:var(--brand)}
.side-nav{padding:12px 10px}
.nav-sec,.nav-sec[data-accent]{--nav-accent:var(--brand);--nav-accent-soft:var(--brand-soft);--nav-accent-line:#cbd9fb}
.navbtn{font-size:14px;min-height:42px;color:var(--ink-soft)}
.navbtn-key::before{display:none}
.navbtn.active{color:var(--brand-dark)}
.nav-ico{display:flex;align-items:center;justify-content:center;width:22px;height:22px;filter:none;color:var(--brand)}
.nav-ico .ui-icon{width:20px;height:20px}
.navbtn.active .nav-ico{transform:none}
.content{padding:28px 30px 60px}
.page-head{margin-bottom:22px}
.page-head h1{font-size:24px;letter-spacing:-.3px}
.page-head h1::before{width:4px;height:24px;background:var(--brand)}
.card{padding:22px}
.card h2{font-size:17px;line-height:1.5}
.card>p.muted{margin:0 0 14px;max-width:90ch}
.table-wrap{border-radius:10px;scrollbar-color:#c3cedd transparent}
th{background:#f1f5fb;color:#445770}
th,td{padding:12px}
tbody tr:last-child td{border-bottom:0}
.cal-table thead th{padding:9px 5px;background:#f1f5fb}
.cal-table .cal-chip{min-height:27px;display:inline-flex;align-items:center;justify-content:center}
.cal-table .cal-chip-btn:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}
.cal-table .cal-emp-col{font-size:13px}
.workspace-card{position:relative;min-height:138px;padding:18px;transition:background .15s,border-color .15s,box-shadow .15s}
.workspace-card:hover{box-shadow:0 4px 12px rgba(36,87,214,.08)}
.workspace-card span{display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin-bottom:12px;border-radius:10px;background:var(--brand-soft);color:var(--brand)}
.workspace-card small{font-size:13px}
.workspace-safe{border-left:1px solid var(--line)}
.workspace-safe .workspace-card{min-height:118px}
.workspace-safe .workspace-card span{background:#edf7f5;color:var(--accent)}
.btn{transition:background .15s,border-color .15s;line-height:1.4}
.field input:disabled,.field select:disabled,.field textarea:disabled{background:#f1f5f9;color:var(--ink-soft);cursor:not-allowed}
.btn:focus-visible,.tab:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid rgba(36,87,214,.32);outline-offset:2px}
@media (hover:hover) and (pointer:fine){.navbtn:hover,.navbtn.active:hover{transform:none}.navbtn:hover .nav-ico{transform:none}}
@media (max-width:900px){.side-head{padding:14px 16px}.side-nav{padding:8px 10px}.side-foot{padding:8px 12px;align-items:center;gap:14px}.side-foot .app-version{margin-top:0}.content{padding:22px 16px 50px}.nav-sec+.nav-sec{border-top:0;padding-top:0}}
@media (max-width:560px){.page-head h1{font-size:21px}.card{padding:16px}.workspace-card{padding:14px;min-height:130px}.workspace-card small{font-size:12px}.workspace-safe .workspace-card{min-height:124px}.modal{padding:12px}.modal-box{padding:20px}}
/* Company calendar and dated shift controls follow the existing table system. */
.holiday-toolbar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:18px}
.holiday-toolbar>.field{margin:0;width:126px;flex:none}
.holiday-state{align-self:center;color:var(--ink);font-weight:600;font-size:14px}
.holiday-toolbar-actions{margin-left:auto;flex-wrap:wrap}
.company-holiday-table{border:1px solid var(--line);border-radius:12px;background:#fff}
.company-holiday-table table{width:100%;min-width:840px}
.company-holiday-table th{white-space:nowrap;background:#f6f8fc}
.company-holiday-table td{padding:10px 12px;vertical-align:middle}
.company-holiday-table input,.company-holiday-table select{width:100%;min-height:38px;padding:7px 9px;border:1px solid var(--line);border-radius:7px;color:var(--ink);font:inherit;font-size:14px;background:#fff;box-shadow:none}
.company-holiday-table input:focus,.company-holiday-table select:focus{outline:2px solid rgba(36,87,214,.25);border-color:var(--brand)}
.company-holiday-table input[type=date]{min-width:145px}
.company-holiday-table input[type=text]{min-width:185px}
.company-holiday-table select{min-width:155px}
.holiday-rules{line-height:1.7;margin:14px 0 24px}
.holiday-bulk-card{border-top:1px solid var(--line);margin-top:20px}
#ch-warnings{white-space:pre-line}
.field-wide{grid-column:1/-1}
.schedule-period-table{margin-top:18px}
.schedule-period-table td{vertical-align:top}
.schedule-period-table .btn-row{flex-wrap:nowrap}
@media(max-width:720px){
 .holiday-toolbar{gap:10px}
 .holiday-toolbar-actions{margin-left:0;width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
 .holiday-toolbar-actions .btn{padding:9px 8px;font-size:12px;white-space:normal}
 .holiday-state{font-size:13px}
 .schedule-period-table table{min-width:620px}
}

/* ---------------------------------------------- OT และค่าคอมมิชชั่น */
.payroll-rulebar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:16px}
.payroll-rulebar>div{display:flex;flex-direction:column;gap:4px;padding:14px 16px;border:1px solid #dbe4f2;border-radius:12px;background:#f8fafc}
.payroll-rulebar b{font-size:14px;color:var(--brand-dark)}
.payroll-rulebar span{font-size:12.5px;line-height:1.55;color:var(--ink-soft)}
.payroll-control-grid{display:grid;grid-template-columns:minmax(220px,300px) minmax(170px,1fr) auto;gap:18px;align-items:end}
.payroll-control-grid>.field{margin:0}
.payroll-status-block{display:flex;align-items:center;gap:9px;flex-wrap:wrap;min-height:44px}
.payroll-status-block>span{font-size:12px;color:var(--ink-soft);width:100%}
.payroll-status-block small{color:var(--ink-soft)}
.payroll-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.payroll-actions .btn{min-height:42px}
.payroll-actions .btn.is-dirty{box-shadow:0 0 0 3px rgba(36,87,214,.18)}
.payroll-stats{grid-template-columns:repeat(auto-fit,minmax(155px,1fr))}
.payroll-stats .stat{min-width:0}
.payroll-stats .val{font-size:21px;white-space:nowrap}
.payroll-stat-total{border-left-color:var(--accent);background:#f0fdfa}
.payroll-table-wrap{max-height:64vh;max-height:64dvh;overflow:auto}
.payroll-table{min-width:1550px}
.payroll-table thead th{position:sticky;top:0;z-index:3;white-space:nowrap}
.payroll-table .payroll-sticky{position:sticky;left:0;z-index:2;background:#fff;min-width:220px;max-width:250px;box-shadow:1px 0 0 var(--line)}
.payroll-table thead .payroll-sticky{z-index:5;background:#f1f5fb}
.payroll-person{vertical-align:middle}
.pr-members-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:14px}
.pr-members-toolbar .field{margin:0;min-width:185px}
.pr-members-toolbar>.muted{flex-basis:100%;font-size:12px}
.pr-commission-badge{display:block;margin:5px 0 0;padding:2px 6px;text-align:center}
.pr-rule-settings{border-top:1px solid var(--line);margin-top:14px;padding-top:12px}
.pr-rule-settings summary{cursor:pointer;font-weight:600}
.pr-rule-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:12px}
.pr-unallocated{grid-column:1/-1}

/* Whole-month view: compact status grid; the original detailed matrix is retained. */
#mo-calendar-card{position:relative}
.mo-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.mo-toolbar h2{margin:0;font-size:17px}
.mo-toolbar .tab{min-height:34px;padding:6px 10px;font-size:12px}
.mo-fullscreen-month{display:none;margin:0;min-width:138px}
.mo-fullscreen-month span{font-size:11px}
.mo-fullscreen-month input{min-height:34px;padding:5px 7px}
/* ตารางละเอียดต้องยาวตามเนื้อหา: เลื่อนลงด้วยหน้าเว็บ ไม่ซ่อนวันท้ายเดือนในกล่องย่อย */
#mo-calendar-scroll{max-height:none;overflow-x:auto;overflow-y:visible;scrollbar-gutter:auto}
.mo-floating-header{position:fixed;overflow:hidden;pointer-events:none;background:#f1f5fb;box-shadow:0 2px 5px #14233722}
.mo-floating-header[hidden]{display:none}
.mo-floating-header .cal-table{table-layout:fixed;margin:0;border-spacing:0}
.mo-floating-header .cal-table th{box-sizing:border-box}
@media print{.mo-floating-header{display:none!important}}
.mo-overview-scroll{max-height:none;overflow-x:auto;scrollbar-gutter:auto}
.mo-overview-table{table-layout:fixed;width:100%;min-width:950px}
.mo-overview-table .mo-person{width:140px;min-width:140px;text-align:left;position:sticky;left:0;background:#fff;z-index:3;padding:1px 6px;box-shadow:1px 0 0 var(--line)}
.mo-overview-table thead .mo-person{z-index:6;background:#f1f5fb}
.mo-overview-table tbody .mo-person{top:auto}
.mo-overview-table th,.mo-overview-table td{padding:1px;text-align:center;height:26px;border-bottom:1px solid #eef2f7}
.mo-overview-table thead th{font-size:11px;padding:5px 0;background:#f1f5fb}
.mo-date small{display:block;font-size:9px;font-weight:400}
.mo-person-button{display:flex;align-items:center;gap:5px;justify-content:space-between;width:100%;border:0;background:transparent;color:var(--ink);font:600 12px/1.4 var(--font);padding:1px 0;text-align:left;cursor:pointer;white-space:nowrap;overflow:hidden}
.mo-person-button small{font-size:9px;font-weight:400;color:var(--ink-soft);flex:none}
.mo-status{display:block;position:relative;width:100%;min-width:22px;height:23px;border:0;border-radius:4px;font:700 11px/1 var(--font);padding:0;cursor:pointer;white-space:nowrap}
.mo-status:focus-visible,.mo-person-button:focus-visible{outline:2px solid var(--brand);outline-offset:-1px}
.mo-today{box-shadow:inset 1px 0 #93b4f5,inset -1px 0 #93b4f5}
.mo-has-note:after{content:'';position:absolute;right:1px;top:1px;width:3px;height:3px;border-radius:50%;background:currentColor}
#mo-calendar-card .cal-legend{gap:5px 10px;margin:8px 0}
#mo-calendar-card .cal-legend-item{font-size:11px;gap:4px}
#mo-calendar-card .cal-legend .cal-chip{font-size:10px;padding:2px 5px;min-width:20px}
#mo-calendar-card .calendar-scope{font-size:11px;padding:4px 7px;margin:0 0 6px}
#mo-calendar-help{font-size:12px;margin-bottom:8px}
.mo-week-nav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:8px 0;font-size:12px}
.mo-week-nav .btn{padding:5px 10px;min-height:32px}
.mo-fullscreen-open{overflow:hidden}
#mo-calendar-card.mo-fullscreen{position:fixed;inset:0;z-index:45;margin:0;padding:12px 16px;border-radius:0;overflow:auto;background:#fff}
.mo-fullscreen #mo-calendar-help,.mo-fullscreen #mo-calendar-scope{display:none}
.mo-fullscreen .mo-fullscreen-month{display:block}
.mo-day-detail{position:fixed;right:16px;top:16px;bottom:16px;z-index:50;width:min(370px,calc(100vw - 32px));overflow:auto;background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px;box-shadow:0 14px 70px rgba(20,35,55,.3)}
.mo-day-detail h3{font-size:17px;margin:20px 0 12px}
.mo-day-text{white-space:pre-line;font-size:14px;line-height:1.7}
@media(min-width:641px) and (max-height:760px){.mo-fullscreen .mo-overview-table th,.mo-fullscreen .mo-overview-table td{height:24px}.mo-fullscreen .mo-status{height:21px}}
@media(max-width:640px){.mo-overview-table{min-width:0}.mo-overview-table .mo-person{width:115px;min-width:115px}.mo-overview-table th,.mo-overview-table td{height:36px}.mo-status{height:32px;min-width:24px;font-size:12px}.mo-person-button{font-size:11px;display:block}.mo-person-button small{display:block}.mo-toolbar{gap:8px}.mo-fullscreen .mo-toolbar h2{font-size:14px}#mo-calendar-card.mo-fullscreen{padding:10px}}

/* -------------------------------------------------------------- สรุปรายปี */
.annual-page-note{margin:5px 0 0}
.annual-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.annual-card-head h2{margin-bottom:4px}
.annual-card-head .muted{margin:0}
.annual-table{min-width:1450px}
.annual-table th{white-space:nowrap}
.annual-table td{vertical-align:middle}
.annual-person{position:sticky;left:0;z-index:2;min-width:176px;max-width:220px;background:#fff;box-shadow:1px 0 0 var(--line)}
.annual-table thead .annual-person{z-index:4;background:#f1f5fb}
.annual-person b,.annual-person small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.annual-person small{margin-top:3px;color:var(--ink-soft);font-size:11px}
.annual-absent{color:var(--danger);font-weight:700}
.annual-leave-cell{white-space:nowrap;min-width:92px}
.annual-leave-cell b,.annual-leave-cell small{display:block}
.annual-leave-cell small{margin-top:3px;color:var(--ink-soft);font-size:10.5px;font-weight:400}
.annual-entitlement{min-width:238px}
.annual-entitlement-cell{min-width:238px;padding-top:7px!important;padding-bottom:7px!important}
.annual-entitlement-line{display:grid;grid-template-columns:62px 1fr auto;gap:6px;align-items:baseline;padding:2px 0;white-space:nowrap;font-size:12px}
.annual-entitlement-name{font-weight:700;color:var(--ink)}
.annual-entitlement-line small,.annual-entitlement-muted{color:var(--ink-soft);font-size:11px}
.annual-entitlement-muted{grid-column:2/-1}
@media(max-width:640px){.annual-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.annual-card-head{align-items:stretch}.annual-card-head .badge{align-self:flex-start}.annual-entitlement-line{font-size:11px}}
.payroll-person b,.payroll-person small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.payroll-person small{color:var(--ink-soft);font-size:11.5px;margin-top:3px}
.payroll-person .badge{display:inline-flex;margin-top:5px}
.payroll-input-cell{min-width:138px}
.payroll-number{width:104px;min-height:38px;padding:7px 8px;border:1px solid var(--line);border-radius:8px;text-align:right;font:inherit;font-variant-numeric:tabular-nums;background:#fff;color:var(--ink)}
.payroll-number:focus{outline:2px solid rgba(36,87,214,.24);border-color:var(--brand)}
.payroll-number:disabled{background:#f1f5f9;color:var(--ink-soft)}
.payroll-input-cell small{display:block;color:var(--ink-soft);font-size:10.5px;margin-top:3px}
.payroll-money,.payroll-strong,.payroll-total{font-weight:750;white-space:nowrap}
.payroll-total{color:var(--brand-dark);background:#f4f7ff}
.payroll-late,.payroll-deduct{color:#b42318}
.payroll-share{color:#067647}
.payroll-footnote{margin:12px 0 0!important;font-size:12px}
@media(max-width:900px){
 .payroll-rulebar{grid-template-columns:1fr}
 .payroll-control-grid{grid-template-columns:1fr}
 .payroll-actions{justify-content:flex-start}
 .payroll-table-wrap{max-height:68vh;max-height:68dvh}
}
@media(max-width:560px){
 .payroll-actions{display:grid;grid-template-columns:1fr 1fr}
 .payroll-actions .btn{white-space:normal;padding:9px}
 .payroll-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
 .payroll-stats .val{font-size:18px}
}
