:root{--bg:#f4f6fa;--card:#fff;--line:#e3e7ee;--text:#1f2937;--muted:#6b7280;--navy:#0f3d6e;
--done:#16a34a;--doing:#2563eb;--soon:#d97706;--over:#dc2626;--up:#9ca3af;--nodate:#a78bfa;--key:#fbbf24}
*{box-sizing:border-box}
body{margin:0;font-family:Sarabun,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px}
header{background:var(--navy);color:#fff;padding:12px 22px;position:sticky;top:0;z-index:20;box-shadow:0 2px 8px rgba(0,0,0,.2);display:flex;align-items:center;gap:14px;flex-wrap:wrap}
header h1{margin:0;font-size:20px;font-weight:700}
header .sub{opacity:.85;font-size:13px;margin-top:2px}
header a{color:#fff}
header button{background:rgba(255,255,255,.15);color:#fff;border-color:rgba(255,255,255,.4)}
header button:hover{background:rgba(255,255,255,.3)}
.wm{font-size:10.5px;letter-spacing:.06em;color:rgba(255,255,255,.55);user-select:none;line-height:1}
.wm b{font-weight:600;color:rgba(255,255,255,.85)}
.wrap{max-width:1500px;margin:0 auto;padding:16px 22px 60px}
input,select,textarea,button{font-family:inherit;font-size:13px;padding:6px 10px;border:1px solid #cbd5e1;border-radius:7px;background:#fff;color:var(--text)}
button{cursor:pointer} button:hover{background:#f1f5f9} button:disabled{opacity:.4;cursor:not-allowed}
button.primary{background:var(--navy);color:#fff;border-color:var(--navy)} button.primary:hover{background:#0b2f56}
button.danger{color:#b91c1c;border-color:#fca5a5} button.danger:hover{background:#fef2f2}
button.sm{padding:2px 8px;font-size:12px}
.muted{color:var(--muted);font-size:12px}
.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;color:#fff;white-space:nowrap}
.b-done{background:var(--done)} .b-doing{background:var(--doing)} .b-soon{background:var(--soon)} .b-over{background:var(--over)} .b-up{background:var(--up)} .b-nodate{background:var(--nodate)}
.userbox{display:flex;align-items:center;gap:8px;font-size:12.5px}
.userbox img{width:28px;height:28px;border-radius:50%;background:#fff}
.userbox .rolebadge{background:rgba(255,255,255,.2);border-radius:999px;padding:1px 8px;font-size:11px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:14px}
.panel h2{margin:0 0 10px;font-size:16px;color:var(--navy)}
table{border-collapse:collapse;width:100%}
th,td{padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top;text-align:left}
th{background:#f8fafc;font-weight:600;font-size:12.5px;color:#374151}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:#1f2937;color:#fff;padding:9px 16px;border-radius:8px;font-size:13px;z-index:999;box-shadow:0 6px 20px rgba(0,0,0,.3);opacity:0;transition:.2s;pointer-events:none}
.toast.show{opacity:1}
.toast.err{background:#b91c1c}
.login{max-width:420px;margin:12vh auto;background:#fff;border:1px solid var(--line);border-radius:14px;padding:32px;text-align:center;box-shadow:0 10px 40px rgba(0,0,0,.08)}
.login h1{color:var(--navy);font-size:22px;margin:0 0 6px}
.gbtn{display:inline-flex;align-items:center;gap:10px;padding:10px 18px;font-size:15px;border:1px solid #cbd5e1;border-radius:9px;background:#fff;margin-top:18px}
.gbtn:hover{background:#f8fafc}
dialog{border:none;border-radius:12px;padding:0;max-width:560px;width:95%;box-shadow:0 10px 40px rgba(0,0,0,.3)}
dialog::backdrop{background:rgba(0,0,0,.4)}
.dlg{padding:18px 20px;position:relative}
.dlg h2{margin:0 0 12px;font-size:17px;color:var(--navy);padding-right:36px}
.dclose{position:absolute;top:12px;right:12px;width:32px;height:32px;padding:0;border:none;border-radius:50%;background:#f1f5f9;color:#475569;font-size:16px;line-height:32px;text-align:center}
.dlg h3{margin:16px 0 6px;font-size:14px}
.dlg label{display:block;font-size:12.5px;color:var(--muted);margin-top:8px}
.dlg input[type=text],.dlg input[type=date],.dlg input[type=number],.dlg select{width:100%}
.dlg .actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}
.row{display:flex;gap:6px;align-items:center}
.row input{flex:1}
.presence{display:flex;gap:4px;align-items:center}
.presence .av{width:26px;height:26px;border-radius:50%;background:#fff;border:2px solid #fff;margin-left:-6px;object-fit:cover}
.presence .av.txt{display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:var(--navy)}
.sync{font-size:11px;opacity:.8}
.sync.err{color:#fecaca;font-weight:600}
/* ---- notifications bell ---- */
.bellwrap{position:relative;display:inline-block}
.bell{position:relative;width:34px;height:34px;padding:0;border-radius:50%;font-size:17px;line-height:34px;text-align:center}
.bell .cnt{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#ef4444;color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center}
.bellmenu{position:absolute;right:0;top:40px;width:360px;max-width:92vw;background:#fff;color:var(--text);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.25);z-index:100;overflow:hidden}
.bellmenu .hd{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line);font-weight:600}
.bellmenu .hd button{font-size:11.5px;padding:2px 8px}
.bellmenu .list{max-height:60vh;overflow:auto}
.bellmenu .it{display:block;padding:9px 12px;border-bottom:1px solid var(--line);cursor:pointer;text-decoration:none;color:inherit;font-size:13px}
.bellmenu .it:hover{background:#f8fafc}
.bellmenu .it.unread{background:#eff6ff}
.bellmenu .it .t{font-weight:600;display:flex;gap:6px;align-items:center}
.bellmenu .it .t i{width:8px;height:8px;border-radius:50%;background:#2563eb;display:none}
.bellmenu .it.unread .t i{display:inline-block}
.bellmenu .it .b{color:var(--muted);font-size:12px;margin-top:2px;white-space:pre-wrap}
.bellmenu .it .d{color:#9ca3af;font-size:11px;margin-top:2px}
.bellmenu .empty{padding:24px;text-align:center;color:var(--muted)}
.reqbox{background:#fff;border:1px dashed #cbd5e1;border-radius:12px;padding:18px;max-width:560px;margin:10px auto}
.reqbox textarea{width:100%;min-height:70px;margin:8px 0}
.reqrow{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:start;padding:10px 0;border-bottom:1px solid var(--line)}
.reqrow .who{font-weight:600} .reqrow .msg{font-size:12.5px;color:var(--muted);white-space:pre-wrap}
.reqrow .act{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
