<style>
/* ── Reset ─────────────────────────────────────────────── */
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
:root{
  --blue:#0074B8;--blue-d:#005a8e;--blue-l:#e8f4fd;
  --green:#1D9C68;--green-l:#e8faf2;
  --red:#E63946;--red-l:#fdecea;
  --amber:#f59e0b;--amber-l:#fffbeb;
  --bg:#f1f5f9;--card:#fff;--card2:#f8fafc;
  --border:#e2e8f0;--border2:#cbd5e1;
  --text:#1e293b;--text2:#475569;--text3:#94a3b8;
  --sidebar-w:232px;
  --r:10px;--r2:14px;
  --sh:0 1px 4px rgba(0,0,0,.08);--sh2:0 4px 20px rgba(0,0,0,.13);
  --font:-apple-system,BlinkMacSystemFont,'Segoe UI','Inter',sans-serif;
}
html{overflow-x:clip}body{height:100%;font-family:var(--font);font-size:14px;line-height:1.5;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font-family:var(--font)}
button{cursor:pointer}

/* ── Layout ─────────────────────────────────────────────── */
#app{display:flex;min-height:100vh}
#sidebar{
  width:var(--sidebar-w);flex-shrink:0;
  background:linear-gradient(175deg,#0f172a 0%,#0074B8 100%);
  position:fixed;inset:0 auto 0 0;
  display:flex;flex-direction:column;z-index:200;
  overflow-y:auto;transition:transform .28s cubic-bezier(.4,0,.2,1)
}
#main{margin-left:var(--sidebar-w);flex:1;display:flex;flex-direction:column;min-height:100vh}
#topbar{
  background:var(--card);border-bottom:1px solid var(--border);
  padding:0 18px;height:52px;
  display:flex;align-items:center;justify-content:space-between;
  position:sticky;top:0;z-index:100;box-shadow:var(--sh)
}
#content{padding:16px;flex:1}

/* ── Sidebar ─────────────────────────────────────────────── */
.sb-brand{padding:16px 14px 12px;display:flex;align-items:center;gap:10px;border-bottom:1px solid rgba(255,255,255,.1);flex-shrink:0}
.sb-logo{width:36px;height:36px;border-radius:8px;object-fit:contain}
.sb-title{color:#fff;font-size:13px;font-weight:700;line-height:1.3}
.sb-sub{font-size:10px;color:rgba(255,255,255,.4)}
.sb-nav{flex:1;padding:8px 0;overflow-y:auto}
.sb-section{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:rgba(255,255,255,.28);padding:12px 14px 4px}
.ni{
  display:flex;align-items:center;gap:9px;
  padding:8px 12px;color:rgba(255,255,255,.68);
  border-radius:8px;margin:1px 8px;
  font-size:13px;font-weight:500;cursor:pointer;
  transition:all .15s;position:relative;user-select:none
}
.ni:hover{background:rgba(255,255,255,.1);color:#fff}
.ni.active{background:rgba(255,255,255,.17);color:#fff}
.ni-icon{font-size:15px;width:18px;text-align:center;flex-shrink:0}
.ni-badge{margin-left:auto;background:var(--red);color:#fff;border-radius:50%;min-width:18px;height:18px;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 3px;flex-shrink:0}
.sb-foot{padding:12px 14px;border-top:1px solid rgba(255,255,255,.1);flex-shrink:0}
.sb-name{color:#fff;font-size:13px;font-weight:600;margin-bottom:1px}
.sb-role{color:rgba(255,255,255,.4);font-size:11px;margin-bottom:8px}
.btn-logout{width:100%;padding:7px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:7px;color:rgba(255,255,255,.75);font-size:12px;font-weight:500;transition:.15s}
.btn-logout:hover{background:rgba(255,255,255,.18);color:#fff}

/* ── Topbar ──────────────────────────────────────────────── */
#topbar-title{font-size:15px;font-weight:700;color:var(--text)}
#clock{font-size:11.5px;color:var(--text2);text-align:right;line-height:1.45}
#menu-btn{display:none;background:none;border:none;font-size:22px;color:var(--text2);padding:4px 6px}
#overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:199}

/* ── Cards ───────────────────────────────────────────────── */
.card{background:var(--card);border-radius:var(--r2);box-shadow:var(--sh)}
.card-hd{padding:13px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.card-title{font-size:13px;font-weight:700}
.card-body{padding:16px}

/* ── Stats ───────────────────────────────────────────────── */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--card);border-radius:var(--r2);padding:14px 16px;box-shadow:var(--sh);border-left:4px solid var(--blue)}
.stat.g{border-left-color:var(--green)}.stat.a{border-left-color:var(--amber)}.stat.r{border-left-color:var(--red)}
.stat-lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--text3);margin-bottom:4px}
.stat-val{font-size:24px;font-weight:800;color:var(--blue);line-height:1}
.stat.g .stat-val{color:var(--green)}.stat.a .stat-val{color:var(--amber)}.stat.r .stat-val{color:var(--red)}
.stat-sub{font-size:11px;color:var(--text3);margin-top:2px}

/* ── Buttons ─────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border-radius:7px;font-size:13px;font-weight:600;border:1.5px solid transparent;transition:.15s;white-space:nowrap;line-height:1.4}
.btn-p{background:var(--blue);color:#fff;border-color:var(--blue)}.btn-p:hover{background:var(--blue-d)}
.btn-o{background:transparent;color:var(--text2);border-color:var(--border2)}.btn-o:hover{border-color:var(--blue);color:var(--blue)}
.btn-d{background:var(--red);color:#fff;border-color:var(--red)}.btn-d:hover{filter:brightness(.92)}
.btn-g{background:var(--green);color:#fff;border-color:var(--green)}
.btn-sm{padding:4px 9px;font-size:12px;border-radius:6px}
.btn-ic{background:none;border:none;padding:4px 6px;border-radius:6px;font-size:14px;line-height:1;transition:.15s}
.btn-ic:hover{background:var(--card2)}

/* ── Forms ───────────────────────────────────────────────── */
.fg{margin-bottom:12px}
.fl{display:block;font-size:11px;font-weight:700;color:var(--text2);margin-bottom:4px;text-transform:uppercase;letter-spacing:.3px}
.fc{width:100%;padding:8px 10px;border:1.5px solid var(--border);border-radius:7px;font-size:13px;color:var(--text);background:var(--card);transition:.15s}
.fc:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(0,116,184,.1)}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.hint{font-size:11px;color:var(--text3);margin-top:3px}

/* ── Table ───────────────────────────────────────────────── */
.tw{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.dt{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.dt th{background:var(--blue);color:#fff;padding:9px 11px;text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}
.dt th:first-child{border-radius:8px 0 0 0}.dt th:last-child{border-radius:0 8px 0 0}
.dt td{padding:10px 11px;border-bottom:1px solid var(--border);vertical-align:middle}
.dt tbody tr:hover td{background:var(--card2)}
.dt tbody tr:last-child td{border-bottom:none}

/* ── Badges ──────────────────────────────────────────────── */
.bd{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap}
.bd-p{background:var(--blue-l);color:var(--blue)}
.bd-g{background:var(--green-l);color:var(--green)}
.bd-r{background:var(--red-l);color:var(--red)}
.bd-a{background:var(--amber-l);color:var(--amber)}
.bd-x{background:var(--card2);color:var(--text2)}

/* ── Modal ───────────────────────────────────────────────── */
.mo{position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:9000;display:flex;align-items:center;justify-content:center;padding:12px}
.mo-box{background:var(--card);border-radius:var(--r2);width:100%;max-width:480px;max-height:92vh;display:flex;flex-direction:column;box-shadow:var(--sh2)}
.mo-hd{padding:16px 20px 12px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.mo-title{font-size:15px;font-weight:700}
.mo-cls{background:none;border:none;font-size:18px;color:var(--text3);width:30px;height:30px;border-radius:7px;display:flex;align-items:center;justify-content:center}
.mo-cls:hover{background:var(--card2)}
.mo-body{padding:16px 20px;overflow-y:auto;flex:1}
.mo-ft{padding:12px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}

/* ── Toast ───────────────────────────────────────────────── */
#toasts{position:fixed;bottom:16px;right:16px;z-index:9999;display:flex;flex-direction:column;gap:6px;pointer-events:none}
.toast{background:#1e293b;color:#fff;padding:10px 14px;border-radius:9px;font-size:13px;font-weight:500;box-shadow:var(--sh2);animation:toastIn .2s ease;max-width:280px;pointer-events:auto}
@keyframes toastIn{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}

/* ── Confirm ─────────────────────────────────────────────── */
#confirm-ov{position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:9100;display:flex;align-items:center;justify-content:center;padding:16px}
#confirm-box{background:var(--card);border-radius:var(--r2);padding:22px;width:320px;max-width:100%;box-shadow:var(--sh2)}

/* ── Login ───────────────────────────────────────────────── */
#login-pg{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f172a,#0074B8);padding:16px}
.login-card{background:var(--card);border-radius:var(--r2);padding:28px 24px;width:360px;max-width:100%;box-shadow:var(--sh2)}
.login-logo{text-align:center;margin-bottom:8px}.login-logo img{width:90px;height:90px;object-fit:contain}
.login-brand{text-align:center;margin-bottom:20px}
.login-name{font-size:19px;font-weight:800;color:var(--blue)}
.login-sub{font-size:12px;color:var(--text3)}
.login-err{min-height:16px;font-size:13px;color:var(--red);text-align:center;margin-bottom:8px}

/* ── Welcome ─────────────────────────────────────────────── */
#welcome-pg{position:fixed;inset:0;background:linear-gradient(135deg,#0f172a 0%,#0074B8 55%,#00a0e4 100%);z-index:999;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;overflow-y:auto}
.wc{width:100%;max-width:380px;text-align:center}
.wc-logo{width:90px;height:90px;object-fit:contain;margin:0 auto 12px;display:block}
.wc-greet{font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:rgba(255,255,255,.5);margin-bottom:3px}
.wc-name{font-size:28px;font-weight:800;color:#fff;margin-bottom:2px}
.wc-msg{font-size:13px;color:rgba(255,255,255,.6);margin-bottom:2px}
.wc-date{font-size:11px;color:rgba(255,255,255,.38);margin-bottom:16px}
.wc-enter{margin-top:14px;background:rgba(255,255,255,.12);border:1.5px solid rgba(255,255,255,.2);border-radius:50px;padding:10px 28px;color:#fff;font-size:14px;font-weight:600;transition:.2s}
.wc-enter:hover{background:rgba(255,255,255,.22)}

/* ── Page loading ────────────────────────────────────────── */
.pg-load{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:var(--text3);gap:10px}
.spin{width:24px;height:24px;border:3px solid var(--border);border-top-color:var(--blue);border-radius:50%;animation:sp .7s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}

/* ── Schedule grid ───────────────────────────────────────── */
.sg{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.sg-day{background:var(--card);border:1.5px solid var(--border);border-radius:9px;overflow:hidden}
.sg-hd{background:var(--card2);padding:5px 3px;text-align:center;font-size:10px;font-weight:700;color:var(--text2)}
.sg-day.today .sg-hd{background:var(--blue);color:#fff}
.sg-shift{padding:6px 5px;display:flex;align-items:center;gap:4px;border-top:1px solid var(--border);cursor:pointer;transition:.13s}
.sg-shift:hover{background:var(--card2)}
.sg-shift input[type=checkbox]{width:14px;height:14px;accent-color:var(--blue);flex-shrink:0}
.sg-lbl{font-size:10px;color:var(--text2)}
.sg-shift.ck{background:var(--blue-l)}
.sg-shift.ck .sg-lbl{color:var(--blue);font-weight:600}

/* ── Timelog widget ──────────────────────────────────────── */
.tl-widget{background:linear-gradient(135deg,#0f172a,#0074B8);border-radius:var(--r2);padding:16px 18px;color:#fff;position:relative;overflow:hidden}
.tl-widget::before{content:'';position:absolute;top:-20px;right:-20px;width:80px;height:80px;background:rgba(255,255,255,.05);border-radius:50%}
.tl-status{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:rgba(255,255,255,.5);margin-bottom:2px}
.tl-shift{font-size:14px;font-weight:700;margin-bottom:4px}
.tl-timer{font-size:30px;font-weight:800;font-family:monospace;letter-spacing:2px;margin-bottom:12px}
.tl-timer.run{color:#4ade80}.tl-timer.idle{color:rgba(255,255,255,.3)}
.tl-msg{background:rgba(255,255,255,.08);border-radius:7px;padding:9px;font-size:12px;color:rgba(255,255,255,.65);text-align:center;line-height:1.5}
.btn-start{background:var(--green);color:#fff;border:none;border-radius:9px;padding:10px 18px;font-size:14px;font-weight:700;width:100%;transition:.2s}
.btn-start:hover{background:#00a86b}
.btn-end{background:var(--red);color:#fff;border:none;border-radius:9px;padding:10px 18px;font-size:14px;font-weight:700;width:100%}
.tl-note{font-size:11px;color:rgba(255,255,255,.38);text-align:center;margin-top:6px}

/* ── Notif items ─────────────────────────────────────────── */
.nf-item{display:flex;gap:11px;padding:13px 16px;border-bottom:1px solid var(--border);align-items:flex-start}
.nf-item:last-child{border-bottom:none}
.nf-item:hover{background:var(--card2)}
.nf-ico{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.nf-body{flex:1;min-width:0}
.nf-title{font-size:13px;font-weight:600;margin-bottom:2px;display:flex;flex-wrap:wrap;align-items:center;gap:5px}
.nf-desc{font-size:12.5px;color:var(--text2);line-height:1.5}
.nf-acts{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.nf-time{font-size:11px;color:var(--text3);flex-shrink:0;white-space:nowrap;padding-top:2px}

/* ── Thread cards ────────────────────────────────────────── */
.th-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);margin-bottom:9px;overflow:hidden}
.th-hd{padding:11px 14px;background:var(--card2);display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.th-msg{padding:10px 14px;font-size:13px}
.th-reply{padding:8px 14px;background:#f0fdf4;border-top:1px solid var(--border);font-size:12.5px;color:var(--green);display:flex;gap:6px}
.th-acts{padding:8px 14px;border-top:1px solid var(--border);display:flex;gap:6px}

/* ── Att table ───────────────────────────────────────────── */
.att-t{border-collapse:separate;border-spacing:0;font-size:12px;background:var(--card);min-width:100%}
.att-t th,.att-t td{padding:6px 8px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);text-align:center;white-space:nowrap}
.att-t thead tr:first-child th{border-top:1px solid var(--border)}
.att-t th{background:var(--blue);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase}
.att-t th.wk{background:var(--green)}
.stk-0{position:sticky;left:0;z-index:4;background:var(--card2);border-left:1px solid var(--border);min-width:32px}
.stk-1{position:sticky;left:33px;z-index:4;background:var(--card2);min-width:110px;text-align:left!important}
.stk-2{position:sticky;left:144px;z-index:4;background:var(--blue-l);border-right:3px solid var(--blue)!important;font-weight:700;color:var(--blue);min-width:48px}
.att-t thead .stk-0,.att-t thead .stk-1,.att-t thead .stk-2{z-index:6;background:var(--blue)!important;color:#fff}
.att-inp{width:40px;text-align:center;border:1.5px solid var(--border);border-radius:5px;padding:3px 2px;font-size:12px}
.att-inp:focus{outline:none;border-color:var(--blue);background:var(--blue-l)}

/* ── Week nav ────────────────────────────────────────────── */
.wk-nav{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.wk-nav-btn{background:var(--card);border:1.5px solid var(--border);border-radius:7px;padding:5px 12px;font-size:13px;color:var(--text2);transition:.15s}
.wk-nav-btn:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.wk-nav-btn:disabled{opacity:.35;pointer-events:none}
.wk-lbl{font-size:13px;font-weight:600;color:var(--blue);flex:1;text-align:center}

/* ── Dash schedule card ──────────────────────────────────── */
.ds-item{display:flex;align-items:center;gap:9px;padding:9px 14px;border-bottom:1px solid var(--border)}
.ds-item:last-child{border-bottom:none}
.ds-date{width:38px;height:38px;border-radius:9px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--card2)}
.ds-date.today{background:var(--blue)}
.ds-date.past{opacity:.4}
.ds-day-num{font-size:16px;font-weight:800;line-height:1;color:var(--text)}
.ds-date.today .ds-day-num{color:#fff}
.ds-day-mon{font-size:9px;color:var(--text3)}
.ds-date.today .ds-day-mon{color:rgba(255,255,255,.55)}

/* ── Charts ──────────────────────────────────────────────── */
.chart-wrap{background:var(--card);border-radius:var(--r2);padding:16px;box-shadow:var(--sh);margin-bottom:14px}
.chart-title{font-size:13px;font-weight:700;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between}
.bar-chart{display:flex;align-items:flex-end;gap:4px;height:120px;padding-bottom:4px}
.bar-col{display:flex;flex-direction:column;align-items:center;flex:1;gap:4px;height:100%}
.bar-inner{width:100%;border-radius:4px 4px 0 0;transition:height .4s cubic-bezier(.4,0,.2,1);min-height:2px;cursor:pointer;position:relative}
.bar-inner:hover::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);background:#1e293b;color:#fff;padding:3px 7px;border-radius:5px;font-size:11px;white-space:nowrap;pointer-events:none;z-index:10}
.bar-lbl{font-size:9px;color:var(--text3);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}
.bar-val{font-size:10px;font-weight:700;color:var(--text2)}
.chart-tabs{display:flex;gap:6px;margin-bottom:14px}
.chart-tab{padding:5px 12px;border-radius:6px;font-size:12px;font-weight:600;background:var(--card2);color:var(--text2);border:1.5px solid var(--border);cursor:pointer;transition:.15s}
.chart-tab.active{background:var(--blue);color:#fff;border-color:var(--blue)}
.sparkline{display:inline-flex;align-items:flex-end;gap:2px;height:32px}
.spark-bar{width:6px;border-radius:2px 2px 0 0;background:var(--blue-l)}

/* ── KPI ─────────────────────────────────────────────────── */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.kpi-card{background:var(--card);border-radius:var(--r2);padding:16px;box-shadow:var(--sh);border-top:3px solid var(--blue);position:relative;overflow:hidden}
.kpi-card.grade-A{border-top-color:#059669}
.kpi-card.grade-B{border-top-color:#0074B8}
.kpi-card.grade-C{border-top-color:#f59e0b}
.kpi-card.grade-D{border-top-color:#dc2626}
.kpi-name{font-size:14px;font-weight:700;margin-bottom:2px}
.kpi-spec{font-size:11px;color:var(--text3);margin-bottom:10px}
.kpi-score{font-size:36px;font-weight:800;line-height:1;margin-bottom:4px}
.kpi-card.grade-A .kpi-score{color:#059669}
.kpi-card.grade-B .kpi-score{color:var(--blue)}
.kpi-card.grade-C .kpi-score{color:#f59e0b}
.kpi-card.grade-D .kpi-score{color:#dc2626}
.kpi-grade{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;font-size:13px;font-weight:800;color:#fff;position:absolute;top:14px;right:14px}
.grade-A .kpi-grade{background:#059669}.grade-B .kpi-grade{background:var(--blue)}.grade-C .kpi-grade{background:#f59e0b}.grade-D .kpi-grade{background:#dc2626}
.kpi-bars{display:grid;gap:6px;margin:10px 0}
.kpi-bar-row{display:flex;align-items:center;gap:8px;font-size:11px}
.kpi-bar-lbl{width:72px;color:var(--text2);flex-shrink:0}
.kpi-bar-track{flex:1;height:6px;background:var(--border);border-radius:3px;overflow:hidden}
.kpi-bar-fill{height:100%;border-radius:3px;transition:width .5s ease}
.kpi-bar-val{width:36px;text-align:right;font-weight:700;color:var(--text);font-size:11px}
.kpi-detail{font-size:11px;color:var(--text3);border-top:1px solid var(--border);padding-top:8px;margin-top:8px;display:grid;grid-template-columns:1fr 1fr;gap:3px}

/* ── Calendar ────────────────────────────────────────────── */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal-hdr{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:4px}
.cal-hdr-cell{text-align:center;font-size:10px;font-weight:700;color:var(--text2);padding:4px 2px;text-transform:uppercase}
.cal-day{min-height:72px;background:var(--card);border:1.5px solid var(--border);border-radius:8px;padding:4px;cursor:pointer;transition:.15s;position:relative;overflow:hidden}
.cal-day:hover{border-color:var(--blue);box-shadow:0 0 0 2px rgba(0,116,184,.1)}
.cal-day.today{border-color:var(--blue);background:var(--blue-l)}
.cal-day.other-month{opacity:.35}
.cal-day.has-events{border-color:var(--green)}
.cal-day-num{font-size:12px;font-weight:700;color:var(--text);margin-bottom:3px}
.cal-day.today .cal-day-num{color:var(--blue)}
.cal-event{font-size:9px;padding:1px 4px;border-radius:3px;margin-bottom:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.cal-ev-schedule{background:#dbeafe;color:#1e40af}
.cal-ev-attendance{background:#dcfce7;color:#166534}
.cal-ev-leave{background:#fee2e2;color:#991b1b}
.cal-nav{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.cal-month-lbl{font-size:16px;font-weight:700;flex:1;text-align:center}
.cal-view-toggle{display:flex;gap:4px}
.cal-view-btn{padding:5px 12px;border-radius:6px;font-size:12px;font-weight:600;background:var(--card);border:1.5px solid var(--border);cursor:pointer}
.cal-view-btn.active{background:var(--blue);color:#fff;border-color:var(--blue)}
.cal-legend{display:flex;gap:12px;font-size:11px;color:var(--text2);flex-wrap:wrap;margin-bottom:10px}
.cal-legend-dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:4px}

/* ── PWA Install ─────────────────────────────────────────── */
#pwa-banner{position:fixed;bottom:0;left:0;right:0;background:#0f172a;color:#fff;padding:12px 16px;display:flex;align-items:center;gap:12px;z-index:8000;box-shadow:0 -2px 12px rgba(0,0,0,.25);transform:translateY(100%);transition:transform .3s}
#pwa-banner.show{transform:translateY(0)}
#pwa-banner img{width:36px;height:36px;border-radius:8px;flex-shrink:0}
.pwa-text{flex:1}
.pwa-text strong{font-size:13px}
.pwa-text p{font-size:11px;color:rgba(255,255,255,.6);margin-top:1px}
.btn-pwa-install{background:var(--blue);color:#fff;border:none;border-radius:7px;padding:8px 14px;font-size:12px;font-weight:700;white-space:nowrap;flex-shrink:0}
.btn-pwa-close{background:none;border:none;color:rgba(255,255,255,.5);font-size:18px;padding:4px;flex-shrink:0}

/* ── Notification permission banner ─────────────────────── */
#notif-perm-banner{background:linear-gradient(90deg,#0074B8,#0ea5e9);color:#fff;padding:10px 16px;display:flex;align-items:center;gap:10px;font-size:13px;border-radius:var(--r);margin-bottom:12px}
#notif-perm-banner button{margin-left:auto;background:rgba(255,255,255,.2);border:1.5px solid rgba(255,255,255,.4);border-radius:6px;color:#fff;padding:5px 12px;font-size:12px;font-weight:600;white-space:nowrap;flex-shrink:0}

/* ── MOBILE ──────────────────────────────────────────────── */
@media(max-width:1024px){
  #sidebar{transform:translateX(-100%)}
  #sidebar.open{transform:none}
  #overlay.show{display:block}
  #main{margin-left:0}
  #menu-btn{display:block}
  #content{padding:10px}
  /* Dashboard 1-col on mobile */
  .dash-2{grid-template-columns:1fr!important;gap:12px!important}
  /* Stat grid 2 col on mobile */
  .stat-grid{grid-template-columns:1fr 1fr;gap:9px}
  .stat-val{font-size:20px}
  .stat{padding:11px 13px}
  /* Schedule 4 col on mobile portrait */
  .sg{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
  .sg-hd{font-size:9px;padding:4px 2px}
  .sg-shift{padding:5px 3px;gap:3px}
  .sg-lbl{font-size:9px}
  .mo-box{max-height:92vh}
  .f2{grid-template-columns:1fr}
  #clock{font-size:10.5px}
}
/* Desktop: dash-2 = 2 cột */
@media(min-width:1025px){
  .dash-2{grid-template-columns:1fr 1fr!important}
}
@media(max-width:400px){
  .sg{grid-template-columns:repeat(3,minmax(0,1fr));gap:3px}
  .sg-hd{font-size:8px}
  .stat-grid{grid-template-columns:1fr}
}

/* ── Avatar ──────────────────────────────────────────────── */
.av{width:36px;height:36px;border-radius:50%;object-fit:cover;flex-shrink:0;background:var(--blue);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#fff;overflow:hidden;line-height:1}
.av img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.av-sm{width:28px;height:28px;font-size:11px}
.av-lg{width:56px;height:56px;font-size:22px}
.av-xl{width:80px;height:80px;font-size:30px}
.av-upload{cursor:pointer;position:relative;border-radius:50%;display:inline-block}
.av-upload::after{content:"📷";position:absolute;inset:0;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center;opacity:0;transition:.2s}
.av-upload:hover::after{opacity:1}
.sb-foot{display:flex;align-items:center;gap:10px;padding:12px 14px;border-top:1px solid rgba(255,255,255,.1);flex-shrink:0}
.sb-foot-info{flex:1;min-width:0}
.sb-name{color:#fff;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-role{color:rgba(255,255,255,.4);font-size:11px}

/* ── CHAT ────────────────────────────────────────────────── */
#chat-dock{position:fixed;bottom:0;right:16px;display:flex;align-items:flex-end;gap:10px;z-index:7000;pointer-events:none}
#chat-list-panel{width:300px;background:var(--card);border-radius:14px 14px 0 0;box-shadow:0 -2px 20px rgba(0,0,0,.18);display:flex;flex-direction:column;max-height:440px;pointer-events:all;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1)}
#chat-list-panel.minimized{transform:translateY(calc(100% - 48px))}
.clp-hd{padding:0 12px;background:var(--blue);color:#fff;border-radius:14px 14px 0 0;display:flex;align-items:center;gap:8px;cursor:pointer;flex-shrink:0;user-select:none;height:48px}
.clp-title{font-size:13px;font-weight:700;flex:1}
.clp-badge{background:#e63946;color:#fff;border-radius:50%;min-width:18px;height:18px;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 3px}
.clp-body{overflow-y:auto;flex:1}
.clp-search{padding:8px 10px;border-bottom:1px solid var(--border)}
.clp-search input{width:100%;padding:6px 10px;border:1.5px solid var(--border);border-radius:20px;font-size:12px;background:var(--bg);font-family:var(--font)}
.clp-search input:focus{outline:none;border-color:var(--blue)}
.chat-thread-item{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer;transition:.13s;border-bottom:1px solid var(--border)}
.chat-thread-item:hover{background:var(--bg)}
.cti-info{flex:1;min-width:0}
.cti-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cti-prev{font-size:11px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.cti-meta{display:flex;flex-direction:column;align-items:flex-end;gap:3px;flex-shrink:0}
.cti-time{font-size:10px;color:var(--text3)}
.cti-unread{background:var(--blue);color:#fff;border-radius:50%;min-width:18px;height:18px;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center}
.clp-empty{text-align:center;padding:28px 16px;color:var(--text3);font-size:13px}
.chat-win{width:300px;background:var(--card);border-radius:14px 14px 0 0;box-shadow:0 -2px 20px rgba(0,0,0,.18);display:flex;flex-direction:column;pointer-events:all;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1);max-height:440px}
.chat-win.minimized{transform:translateY(calc(100% - 48px))}
.cw-hd{padding:0 10px;background:var(--blue);color:#fff;border-radius:14px 14px 0 0;display:flex;align-items:center;gap:8px;cursor:pointer;flex-shrink:0;user-select:none;height:48px}
.cw-name{flex:1;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cw-acts{display:flex;gap:2px;flex-shrink:0}
.cw-btn{background:none;border:none;color:rgba(255,255,255,.7);width:28px;height:28px;border-radius:6px;font-size:14px;display:flex;align-items:center;justify-content:center;transition:.15s}
.cw-btn:hover{background:rgba(255,255,255,.2);color:#fff}
.cw-unread-badge{background:#e63946;color:#fff;border-radius:50%;min-width:18px;height:18px;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 3px}
.cw-msgs{flex:1;overflow-y:auto;padding:10px;display:flex;flex-direction:column;gap:6px;background:var(--bg);min-height:120px;width:100%;box-sizing:border-box}
.msg-row{display:flex;align-items:flex-end;gap:6px;width:100%}
.msg-row.mine{flex-direction:row-reverse}
.msg-av{flex-shrink:0;width:28px;height:28px;display:flex;align-items:center;justify-content:center}
/* msg-content: inline-flex shrinks to content width, prevents over-expansion */
.msg-content{display:inline-flex;flex-direction:column;max-width:78%}
.msg-row.mine .msg-content{align-items:flex-end}
.msg-row.theirs .msg-content{align-items:flex-start}
/* bubble: block fills the inline-flex content width exactly */
.msg-bubble{
  display:block;
  max-width:100%;
  padding:8px 12px;
  border-radius:14px;
  font-size:13px;
  line-height:1.6;
  word-break:break-word;
  overflow-wrap:break-word;
  hyphens:none;
  box-sizing:border-box;
}
.msg-row.theirs .msg-bubble{background:var(--card);border-bottom-left-radius:4px;box-shadow:var(--sh)}
.msg-row.mine .msg-bubble{background:var(--blue);color:#fff;border-bottom-right-radius:4px}
.msg-time{font-size:10px;color:var(--text3);margin-top:3px;padding:0 2px;white-space:nowrap;display:block}
.msg-row.mine .msg-time{text-align:right}
.msg-date-sep{text-align:center;font-size:10px;color:var(--text3);padding:4px 0}
.cw-input{display:flex;align-items:flex-end;gap:6px;padding:8px 10px;border-top:1px solid var(--border);background:var(--card);flex-shrink:0}
.cw-input textarea{flex:1;border:1.5px solid var(--border);border-radius:18px;padding:7px 12px;font-size:13px;resize:none;max-height:80px;line-height:1.4;font-family:var(--font);background:var(--bg);min-height:36px}
.cw-input textarea:focus{outline:none;border-color:var(--blue)}
.cw-send{width:36px;height:36px;border-radius:50%;background:var(--blue);border:none;color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.15s}
.cw-send:hover{background:var(--blue-d)}
.cw-load-more{padding:6px;text-align:center;font-size:11px;color:var(--blue);cursor:pointer}
#chat-fab{display:none !important}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.7;box-shadow:0 0 0 4px rgba(255,255,255,.3)}}
.ctx-menu{position:fixed;background:var(--card);border:1px solid var(--border);border-radius:9px;box-shadow:var(--sh2);z-index:9500;min-width:160px;overflow:hidden}
.ctx-item{padding:9px 14px;font-size:13px;cursor:pointer;transition:.13s;display:flex;align-items:center;gap:8px}
.ctx-item:hover{background:var(--bg)}
.ctx-item.danger{color:var(--red)}
@media(max-width:600px){.chat-win,#chat-list-panel{width:calc(100vw - 32px)}}
/* ── Task Progress ───────────────────────────────────────── */
.task-card{background:var(--card);border-radius:var(--r2);padding:14px 16px;box-shadow:var(--sh);margin-bottom:10px;border-left:3px solid var(--border);cursor:pointer;transition:.15s}
.task-card:hover{border-left-color:var(--blue);box-shadow:var(--sh2)}
.task-card.todo{border-left-color:#94a3b8}
.task-card.doing{border-left-color:#f59e0b}
.task-card.review{border-left-color:#0891b2}
.task-card.done{border-left-color:#059669}
.task-card.overdue{border-left-color:#dc2626}
.tc-header{display:flex;align-items:flex-start;gap:10px;margin-bottom:6px}
.tc-name{font-size:14px;font-weight:700;flex:1;min-width:0}
.tc-deadline{font-size:11px;color:var(--text3);margin-top:2px}
.tc-deadline.soon{color:#f59e0b;font-weight:600}
.tc-deadline.overdue{color:#dc2626;font-weight:700}
.tc-progress{font-size:11px;color:var(--text2);margin-top:6px;background:var(--bg);border-radius:6px;padding:5px 8px;border-left:2px solid var(--blue)}
.tc-progress.admin-note{border-left-color:#f59e0b}
/* Progress timeline */
.prog-timeline{display:flex;flex-direction:column;gap:0;margin:10px 0}
.prog-entry{display:flex;gap:10px;position:relative;padding-bottom:14px}
.prog-entry:last-child{padding-bottom:0}
.prog-entry:not(:last-child)::before{content:'';position:absolute;left:14px;top:30px;bottom:0;width:1px;background:var(--border)}
.prog-av{flex-shrink:0;width:28px;height:28px}
.prog-body{flex:1;min-width:0}
.prog-meta{display:flex;align-items:center;gap:6px;margin-bottom:3px;flex-wrap:wrap}
.prog-author{font-size:12px;font-weight:700}
.prog-time{font-size:11px;color:var(--text3)}
.prog-role-badge{font-size:10px;padding:1px 6px;border-radius:10px;font-weight:600}
.prog-role-admin{background:var(--amber-l,#fef3c7);color:#92400e}
.prog-role-ctv{background:var(--blue-l);color:var(--blue)}
.prog-text{font-size:13px;color:var(--text);line-height:1.5;background:var(--bg);border-radius:8px;padding:8px 10px;word-break:break-word}
.prog-entry.admin .prog-text{background:var(--amber-l,#fffbeb);border:1px solid #fde68a}
/* Status pills */
.task-status-bar{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0}
.ts-btn{padding:6px 14px;border-radius:20px;font-size:12px;font-weight:600;border:1.5px solid var(--border);background:var(--card);cursor:pointer;transition:.15s}
.ts-btn:hover{border-color:var(--blue);color:var(--blue)}
.ts-btn.active.todo{background:#94a3b8;color:#fff;border-color:#94a3b8}
.ts-btn.active.doing{background:#f59e0b;color:#fff;border-color:#f59e0b}
.ts-btn.active.review{background:#0891b2;color:#fff;border-color:#0891b2}
.ts-btn.active.done{background:#059669;color:#fff;border-color:#059669}
/* Progress input */
.prog-input-wrap{display:flex;flex-direction:column;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.prog-input-wrap textarea{border:1.5px solid var(--border);border-radius:10px;padding:10px 12px;font-size:13px;resize:vertical;min-height:72px;font-family:var(--font);line-height:1.5;background:var(--bg)}
.prog-input-wrap textarea:focus{outline:none;border-color:var(--blue)}
#crop-modal{position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:9800;display:none;align-items:center;justify-content:center;padding:16px}
#crop-modal.show{display:flex}
.crop-box{background:#1e293b;border-radius:16px;width:100%;max-width:420px;overflow:hidden;box-shadow:0 8px 40px rgba(0,0,0,.5);display:flex;flex-direction:column}
.crop-hd{padding:14px 18px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(255,255,255,.1)}
.crop-hd-title{color:#fff;font-size:15px;font-weight:700}
.crop-hd-close{background:none;border:none;color:rgba(255,255,255,.5);font-size:20px;padding:2px 6px;cursor:pointer;border-radius:6px}
.crop-hd-close:hover{color:#fff;background:rgba(255,255,255,.1)}
.crop-area{position:relative;background:#000;height:320px;overflow:hidden}
.crop-area img{display:block;max-width:100%}
.crop-controls{padding:14px 18px;background:#0f172a;display:flex;flex-direction:column;gap:10px}
.crop-zoom{display:flex;align-items:center;gap:10px}
.crop-zoom label{color:rgba(255,255,255,.6);font-size:12px;white-space:nowrap}
.crop-zoom input[type=range]{flex:1;accent-color:var(--blue)}
.crop-preview-wrap{display:flex;align-items:center;gap:12px;padding:6px 0}
.crop-preview-label{color:rgba(255,255,255,.5);font-size:11px;white-space:nowrap}
.crop-preview-av{width:56px;height:56px;border-radius:50%;overflow:hidden;border:2px solid rgba(255,255,255,.2);flex-shrink:0;background:#334155}
.crop-preview-av img{width:100%;height:100%;object-fit:cover}
.crop-btns{display:flex;gap:8px;justify-content:flex-end}
.crop-btn-cancel{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);color:#fff;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer}
.crop-btn-cancel:hover{background:rgba(255,255,255,.2)}
.crop-btn-save{background:var(--blue);border:none;color:#fff;border-radius:8px;padding:8px 20px;font-size:13px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:6px}
.crop-btn-save:hover{background:var(--blue-d)}
.crop-btn-save:disabled{opacity:.5;cursor:not-allowed}
/* Round crop guide overlay */
.cropper-view-box,.cropper-face{border-radius:50%!important}
.cropper-view-box{outline:2px solid var(--blue);outline-color:rgba(0,116,184,.8)}
/* ── Reply & Attachment ──────────────────────────────────── */
.msg-reply-quote{background:rgba(0,0,0,.08);border-left:3px solid var(--blue);border-radius:6px 6px 0 0;padding:5px 10px;margin-bottom:4px;font-size:11px;cursor:pointer;max-width:100%}
.msg-row.mine .msg-reply-quote{background:rgba(255,255,255,.18);border-left-color:rgba(255,255,255,.6)}
.msg-reply-who{font-weight:700;margin-bottom:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg-reply-text{opacity:.75;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg-reply-img{width:32px;height:32px;object-fit:cover;border-radius:4px;flex-shrink:0}
/* Attachment image */
.msg-img{max-width:200px;max-height:200px;border-radius:10px;object-fit:cover;cursor:pointer;display:block;margin-top:4px;border:1px solid rgba(0,0,0,.08)}
.msg-img:hover{opacity:.9}
/* Attachment file */
.msg-file{display:flex;align-items:center;gap:8px;background:rgba(0,0,0,.06);border-radius:8px;padding:8px 10px;margin-top:4px;cursor:pointer;text-decoration:none;max-width:220px}
.msg-row.mine .msg-file{background:rgba(255,255,255,.15)}
.msg-file-ic{font-size:22px;flex-shrink:0}
.msg-file-info{min-width:0}
.msg-file-name{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg-file-size{font-size:10px;opacity:.6;margin-top:1px}
/* Reply bar (input area) */
#reply-bar{display:none;background:var(--blue-l);border-top:1px solid var(--blue);padding:6px 10px;flex-shrink:0;position:relative}
#reply-bar.show{display:flex;align-items:flex-start;gap:8px}
.reply-bar-content{flex:1;min-width:0}
.reply-bar-who{font-size:11px;font-weight:700;color:var(--blue);margin-bottom:1px}
.reply-bar-text{font-size:11px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reply-bar-close{background:none;border:none;color:var(--text3);font-size:16px;padding:0;cursor:pointer;flex-shrink:0;line-height:1}
/* Attachment preview bar */
#attach-bar{display:none;background:var(--bg);border-top:1px solid var(--border);padding:8px 10px;flex-shrink:0}
#attach-bar.show{display:flex;align-items:center;gap:8px}
.attach-preview-img{width:48px;height:48px;object-fit:cover;border-radius:6px;border:1px solid var(--border)}
.attach-preview-file{width:48px;height:48px;background:var(--card2);border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0}
.attach-preview-info{flex:1;min-width:0}
.attach-preview-name{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.attach-preview-size{font-size:10px;color:var(--text3);margin-top:2px}
.attach-remove{background:none;border:none;color:var(--red);font-size:18px;padding:0;cursor:pointer;flex-shrink:0}
/* Hover actions — đổi sang nút inline thay vì absolute để mobile work */
.msg-actions{display:flex;gap:4px;margin-top:3px;opacity:0;transition:opacity .15s;height:0;overflow:hidden}
.msg-row:hover .msg-actions,.msg-actions.visible{opacity:1;height:auto;overflow:visible}
.msg-row.mine .msg-actions{justify-content:flex-end}
.msg-row.theirs .msg-actions{justify-content:flex-start}
.msg-act-btn{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:2px 8px;font-size:11px;cursor:pointer;box-shadow:var(--sh);white-space:nowrap;color:var(--text2)}
.msg-act-btn:hover{background:var(--bg);color:var(--blue)}
/* Lightbox */
#lightbox{position:fixed;inset:0;background:rgba(0,0,0,.9);z-index:9999;display:none;align-items:center;justify-content:center;cursor:zoom-out}
#lightbox.show{display:flex}
#lightbox img{max-width:92vw;max-height:92vh;object-fit:contain;border-radius:8px}
</style>

/* ══════════════════════════════════════════════════════════
   💬 MESSENGER BUBBLE DOCK — v7
   ══════════════════════════════════════════════════════════ */

/* Dock container — góc phải màn hình */
.bubble-dock {
  position: fixed !important;
  bottom: 16px !important;
  right: 16px !important;
  top: auto !important;
  left: auto !important;
  width: 60px !important;
  display: flex !important;
  flex-direction: column-reverse !important;
  align-items: center !important;
  gap: 10px !important;
  z-index: 9400 !important;
  pointer-events: all !important;
  /* Ngăn bị ảnh hưởng bởi parent overflow/transform */
  contain: layout style;
  transform: translateZ(0);
  -webkit-transform: translateZ(0);
}

/* Desktop: đẩy sang trái đủ để không bị sidebar overlay */
@media (min-width: 1025px) {
  .bubble-dock {
    right: 24px;
  }
  .chat-win {
    z-index: 8400;
    pointer-events: all;
  }
}

/* Avatar bubble của các thread có unread */
.bubble-av {
  position: relative;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  cursor: pointer;
  box-shadow: 0 2px 12px rgba(0,0,0,.2);
  transition: transform .15s, box-shadow .15s;
  border: 3px solid #fff;
  overflow: visible;
}
.bubble-av:hover { transform: scale(1.08); box-shadow: 0 4px 16px rgba(0,0,0,.3); }
.bubble-av .av { width: 42px; height: 42px; font-size: 16px; }

/* Badge số unread trên từng bubble */
.bubble-badge {
  position: absolute;
  top: -4px;
  right: -4px;
  background: #e3342f;
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  min-width: 18px;
  height: 18px;
  border-radius: 9px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
  border: 2px solid #fff;
  line-height: 1;
}

/* Nút Compose (tạo chat mới) */
.bubble-compose {
  position: relative;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--blue, #0074B8);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 4px 16px rgba(0,116,184,.4);
  transition: transform .15s, box-shadow .15s;
  border: none;
}
.bubble-compose:hover {
  transform: scale(1.08);
  box-shadow: 0 6px 20px rgba(0,116,184,.5);
}

/* Badge tổng trên compose */
.bubble-total-badge {
  position: absolute;
  top: -3px;
  right: -3px;
  background: #e3342f;
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  min-width: 18px;
  height: 18px;
  border-radius: 9px;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
  border: 2px solid #fff;
  line-height: 1;
}

/* Cửa sổ chat — override để đẹp hơn với bubble mode */
/* ── Chat window override ── */
.chat-win {
  position: fixed !important;
  bottom: 0 !important;
  top: auto !important;
  left: auto !important;
  width: 320px !important;
  height: 420px !important;
  z-index: 9200 !important;
  right: 92px !important; /* default: sát bên trái bubble dock */
  pointer-events: all !important;
  border-radius: 12px 12px 0 0 !important;
  box-shadow: 0 -4px 24px rgba(0,0,0,.18) !important;
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
  background: var(--card) !important;
  transition: height .2s ease !important;
}
.chat-win.minimized {
  height: 44px !important;
}

/* Mobile: full screen từ DƯỚI LÊN */
@media (max-width: 1024px) {
  .bubble-dock {
    bottom: 16px !important;
    right: 16px !important;
    z-index: 9300 !important;
  }
  .chat-win {
    position: fixed !important;
    bottom: 0 !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100vw !important;
    height: 100vh !important;
    height: 100dvh !important;
    border-radius: 0 !important;
    z-index: 9250 !important;
    transform: none !important;
  }
  .chat-win.minimized {
    display: none !important;
  }
  .chat-win ~ .chat-win { display: none !important; }
}

/* ── New chat popup — góc phải phía trên compose button ── */
#new-chat-popup {
  position: fixed !important;
  bottom: 84px !important;
  right: 16px !important;
  width: 300px;
  max-height: 70vh;
  background: var(--card, #fff);
  border-radius: 14px;
  box-shadow: 0 12px 40px rgba(0,0,0,.3);
  border: 1px solid var(--border, #e5e7eb);
  z-index: 9600 !important;
  overflow: hidden;
  animation: slideUp .2s ease;
  transform: translateZ(0);
  -webkit-transform: translateZ(0);
}

/* Mobile: popup full width */
@media (max-width: 1024px) {
  #new-chat-popup {
    left: 12px !important;
    right: 12px !important;
    bottom: 80px !important;
    width: auto !important;
    max-height: 60vh;
  }
}
#new-chat-popup .ncp-header {
  padding: 12px 16px;
  font-size: 14px;
  font-weight: 600;
  border-bottom: 1px solid var(--border, #e5e7eb);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
#new-chat-popup .ncp-search {
  padding: 8px 12px;
  border-bottom: 1px solid var(--border, #e5e7eb);
}
#new-chat-popup .ncp-search input {
  width: 100%;
  border: 1px solid var(--border, #e5e7eb);
  border-radius: 20px;
  padding: 6px 12px;
  font-size: 12px;
  outline: none;
  background: var(--bg2, #f0f2f5);
  color: var(--text, #1a1a2e);
}
#new-chat-popup .ncp-list {
  max-height: 280px;
  overflow-y: auto;
}
#new-chat-popup .ncp-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  cursor: pointer;
  transition: background .12s;
}
#new-chat-popup .ncp-item:hover {
  background: var(--bg2, #f0f2f5);
}
#new-chat-popup .ncp-unread {
  margin-left: auto;
  background: #e3342f;
  color: #fff;
  border-radius: 10px;
  padding: 2px 7px;
  font-size: 11px;
  font-weight: 600;
}

@keyframes slideUp {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Mobile: popup full width */
@media (max-width: 600px) {
  #new-chat-popup {
    left: 12px;
    right: 12px;
    width: auto;
    bottom: 80px;
  }
}

/* ══════════════════════════════════════════════════════════
   📱 MOBILE OPTIMIZATION v7
   ══════════════════════════════════════════════════════════ */

/* ── Fix iOS input zoom (font-size >= 16px) ────────────────── */
@media (max-width: 1024px) {
  input, select, textarea {
    font-size: 16px !important;
  }
  .fc { font-size: 16px !important; }

  /* Modal full-width on mobile */
  .mo-box {
    width: calc(100vw - 24px) !important;
    margin: 12px !important;
    max-height: 88vh !important;
  }

  /* Report layout: sidebar → dropdown */
  #rpt-sidebar {
    display: none !important;
  }
  #rpt-mobile-sel {
    display: block !important;
  }
  #rpt-main {
    grid-column: 1 / -1 !important;
  }

  /* Rotate hint */
  .rotate-hint {
    display: flex !important;
  }
}

/* ── Sticky columns cho bảng nhiều cột ─────────────────────── */
.tw { overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* Sticky cột đầu (STT hoặc Tên) */
.stk-0 {
  position: sticky !important;
  left: 0;
  z-index: 3;
  background: var(--card) !important;
  box-shadow: 2px 0 4px rgba(0,0,0,.08);
}
/* Sticky cột thứ 2 (Tên) */
.stk-1 {
  position: sticky !important;
  left: 32px;
  z-index: 3;
  background: var(--card) !important;
  box-shadow: 2px 0 4px rgba(0,0,0,.08);
}
/* Sticky cột thứ 3 (Tổng) */
.stk-2 {
  position: sticky !important;
  left: 140px;
  z-index: 3;
  background: var(--card) !important;
  box-shadow: 2px 0 6px rgba(0,0,0,.1);
}
/* Header sticky */
thead .stk-0, thead .stk-1, thead .stk-2 {
  background: var(--bg2) !important;
  z-index: 4;
}

/* ── Rotate hint banner ─────────────────────────────────────── */
.rotate-hint {
  display: none;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background: var(--blue2);
  color: #fff;
  padding: 8px 14px;
  border-radius: 8px;
  font-size: 12px;
  margin-bottom: 10px;
  animation: pulse 2s ease infinite;
}
.rotate-hint .rh-icon {
  font-size: 20px;
  animation: spin 3s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ── Landscape mobile compact mode ─────────────────────────── */
/* ── Bảng schedule tổng hợp (admin) ─────────────────────────── */
@media (max-width: 1024px) {
  /* Day-view toggle button */
  .sched-view-toggle {
    display: flex !important;
  }
  /* Bảng full schedule ẩn ở portrait nếu có day-view */
  .sched-table-wrap.has-dayview {
    display: none;
  }
  .sched-dayview {
    display: block !important;
  }
}
@media (min-width: 1025px) {
  .sched-view-toggle { display: none !important; }
  .sched-dayview { display: none !important; }
  .sched-table-wrap.has-dayview { display: block !important; }
}

/* Day view cards */
.sched-dayview { display: none; }
.dayview-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 0;
  margin-bottom: 10px;
}
.dayview-nav button {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 6px 14px;
  color: var(--text);
  cursor: pointer;
  font-family: var(--font);
  font-size: 13px;
}
.dayview-nav .dayview-label {
  font-weight: 600;
  font-size: 14px;
}
.dayview-cards {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.dayview-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 12px;
}
.dayview-card .dc-name {
  font-size: 12px;
  font-weight: 600;
  margin-bottom: 6px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dayview-card .dc-shifts {
  display: flex;
  gap: 6px;
}
.dc-shift {
  flex: 1;
  text-align: center;
  padding: 4px;
  border-radius: 6px;
  font-size: 11px;
}
.dc-shift.on  { background: rgba(63,185,80,.15); color: var(--teal); }
.dc-shift.off { background: var(--bg2); color: var(--text3); }

/* ── Report mobile layout ───────────────────────────────────── */
.rpt-mobile-sel {
  display: none;
  width: 100%;
  margin-bottom: 12px;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  color: var(--text);
  font-family: var(--font);
  font-size: 14px;
  outline: none;
}

/* Bảng báo cáo */
.rpt-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
@media (max-width: 1024px) {
  .rpt-table {
    font-size: 11px !important;
  }
  .rpt-table th, .rpt-table td {
    padding: 6px 8px !important;
  }
  /* Wrap bảng báo cáo trong overflow */
  .rpt-preview-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

/* ── Schedule đăng ký (CTV) ─────────────────────────────────── */
@media (max-width: 1024px) {
  /* Grid đăng ký lịch */
  .sg {
    gap: 4px !important;
  }
  .sg-cell {
    padding: 6px 4px !important;
    font-size: 11px !important;
  }
  .sg-label {
    font-size: 9px !important;
  }
  /* Card tuần */
  .week-card {
    padding: 12px !important;
  }
  .card-hd {
    font-size: 13px !important;
  }
}



/* Landscape mobile: topbar + content compact */
@media (max-height: 500px) and (orientation: landscape) {
  /* Topbar thấp hơn */
  #topbar {
    height: 40px !important;
    padding: 0 10px !important;
  }
  #topbar-title {
    font-size: 13px !important;
  }
  /* Content padding nhỏ hơn */
  #content {
    padding: 8px !important;
  }
  /* Bảng compact */
  .att-t td, .att-t th,
  table.dt td, table.dt th {
    padding: 4px 6px !important;
    font-size: 11px !important;
  }
  /* Stat grid 3 cột */
  .stat-grid {
    grid-template-columns: repeat(3,1fr) !important;
    gap: 6px !important;
  }
  .stat { padding: 8px 10px !important; }
  .stat-val { font-size: 18px !important; }
  /* Schedule 7 cột khi landscape */
  .sg {
    grid-template-columns: repeat(7, minmax(0,1fr)) !important;
    gap: 3px !important;
  }
  .sg-hd { font-size: 8px !important; padding: 3px 2px !important; }
  .sg-shift { padding: 4px 2px !important; }
  .sg-lbl { font-size: 8px !important; }
  /* Rotate hint ẩn khi landscape */
  .rotate-hint { display: none !important; }
  /* Chat bubble */
  .bubble-dock { bottom: 8px !important; right: 8px !important; }
  /* Dashboard: 2 cột khi landscape vì có đủ ngang */
  .dash-2 {
    grid-template-columns: 1fr 1fr !important;
  }
}
