:root{--navy:#1A4871;--navy-dark:#10406B;--navy-soft:#2C5C86;--green:#6AB182;--green-dark:#4F9E6C;--bg:#F5F7FA;--panel:#fff;--panel2:#F0F3F7;--border:#E2E8F0;--text:#1F2933;--muted:#475569;--danger:#B91C1C;--warn:#A16207;--ok:#15803D;--shadow:0 1px 3px rgba(16,42,67,.08),0 1px 2px rgba(16,42,67,.06)}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--text);font-family:"Microsoft JhengHei",system-ui,sans-serif;font-size:13px}
.shell{display:flex;min-height:100vh}
/* ---- 側欄（沿用 DF） ---- */
.sidebar{width:216px;flex:0 0 216px;background:var(--navy);color:#DCE6F0;display:flex;flex-direction:column;height:100vh;position:sticky;top:0;overflow-y:auto}
.sidebar .brand{display:flex;align-items:center;gap:10px;padding:14px 16px;font-weight:800;font-size:15px;color:#fff}
.sidebar .logo{width:28px;height:28px;border-radius:8px;background:var(--green);color:var(--navy-dark);display:inline-flex;align-items:center;justify-content:center;font-weight:900;font-size:12px}
.sidebar .newbtn{display:flex;align-items:center;justify-content:center;gap:6px;margin:2px 14px 10px;padding:8px;background:var(--green-dark);color:#fff;border:none;border-radius:8px;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.sidebar .newbtn:hover{background:#3F8A5B}
.nav-section{font-size:11px;color:#B8C9DA;padding:12px 16px 4px;letter-spacing:1px}
.nav-item{display:flex;align-items:center;gap:8px;padding:7px 16px;color:#DCE6F0;cursor:pointer;font:inherit;font-size:13px;border:none;background:transparent;width:100%;text-align:left}
.nav-item:hover{background:var(--navy-soft);color:#fff}
.nav-item.active{background:var(--navy-dark);color:#fff;box-shadow:inset 3px 0 0 var(--green)}
.nav-item .ico{width:16px;text-align:center;color:#B8C9DA}
.nav-sub{padding:0 16px 6px 40px}.nav-sub select{width:100%;font-size:12px}
.pinned-item{display:flex;align-items:center;gap:8px;padding:6px 16px;color:#DCE6F0;cursor:pointer;font-size:12px}
.pinned-item:hover{background:var(--navy-soft);color:#fff}
.pinned-item.active{background:var(--navy-dark)}
.pinned-item .pico{width:20px;height:20px;border-radius:5px;background:var(--green-dark);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}
.sidebar-foot{margin-top:auto;padding:12px 16px;border-top:1px solid rgba(255,255,255,.15);font-size:12px;color:#DCE6F0}
.sidebar-foot .uname{color:#fff;font-weight:700}
/* ---- 主區 ---- */
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{background:#fff;border-bottom:1px solid var(--border);padding:8px 18px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;position:sticky;top:0;z-index:20}
.topbar .title{font-size:16px;font-weight:700;color:var(--navy-dark)}
.topbar .crumb{color:var(--muted);font-size:12px}
.topbar .spacer{flex:1}
.proto{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--muted)}
.content{padding:16px 18px 40px;min-width:0}
h1,h2,h3,h4{color:#0F172A}
.page-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 8px}
.page-head h2{font-size:15px;margin:0}
.lead{color:var(--muted);margin:0 0 12px}
.sec{background:#fff;border:1px solid var(--border);border-radius:8px;margin-bottom:14px;box-shadow:var(--shadow);min-width:0}
.sec>h3{font-size:13px;margin:0;padding:9px 12px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;background:#FAFBFC;border-radius:8px 8px 0 0}
.sec>h3 small{font-weight:normal;color:var(--muted)}
.pad{padding:10px 12px}
.scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse}
th,td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:top}
th{color:var(--muted);font-weight:normal;font-size:12px;white-space:nowrap}
td.n,th.n{text-align:right;white-space:nowrap}
tr.click{cursor:pointer}tr.click:hover td{background:#F8FAFC}
.r{color:var(--danger)}.y{color:var(--warn)}.g{color:var(--ok)}.mu{color:var(--muted)}
.dot::before{content:"●";margin-right:4px}
.tag{display:inline-block;border:1px solid #CBD5E1;border-radius:10px;padding:0 7px;font-size:11px;color:var(--muted);margin-right:3px;white-space:nowrap;background:#fff}
.tag.r{border-color:#FCA5A5;color:var(--danger);background:#FEF2F2}.tag.y{border-color:#FCD34D;color:var(--warn);background:#FFFBEB}.tag.g{border-color:#86EFAC;color:var(--ok);background:#F0FDF4}.tag.b{border-color:#93C5FD;color:#1D4ED8;background:#EFF6FF}
.pill{display:inline-block;border-radius:10px;padding:1px 8px;font-size:11px;background:var(--panel2);color:#334155;white-space:nowrap}
.pill.personal{background:#EEF2FF;color:#3730A3}.pill.assigned{background:#FEF3C7;color:#92400E}.pill.delegated{background:#FCE7F3;color:#9D174D}.pill.project{background:#E0F2FE;color:#075985}.pill.dept{background:#F1F5F9;color:#334155}.pill.strategy{background:#DCFCE7;color:#166534}.pill.directive{background:#FEE2E2;color:#991B1B}.pill.meeting{background:#EDE9FE;color:#5B21B6}
/* 頁籤（DF mywork-source-tabs） */
.tabs{display:flex;gap:4px;margin-bottom:10px;flex-wrap:wrap;border-bottom:1px solid var(--border)}
.tabs button{font:inherit;font-size:13px;border:none;background:transparent;padding:6px 12px;cursor:pointer;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs button:hover{color:var(--navy-dark);background:#F1F5F9}
.tabs button.on{color:var(--navy-dark);border-bottom-color:var(--navy);font-weight:700}
.filters{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;align-items:center}
/* 卡片列表（DF mywork-card） */
.wlist{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.wcard{display:flex;align-items:flex-start;gap:10px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:9px 12px;box-shadow:var(--shadow);cursor:pointer}
.wcard:hover{border-color:#94A3B8}
.wcard.done{opacity:1;background:#F1F5F9;color:#475569}
.wcard .wmain{flex:1;min-width:0}
.wcard .wtitle{font-weight:600;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.wcard .wsub{color:var(--muted);font-size:12px;margin-top:3px;display:flex;gap:10px;flex-wrap:wrap}
.wcard .wact{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;max-width:360px}
.check{width:22px;height:22px;border-radius:50%;border:2px solid #94A3B8;background:#fff;cursor:pointer;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;color:transparent;font-size:12px;padding:0}
.check:hover{border-color:var(--green-dark);color:var(--green-dark)}
.check.done{background:var(--green-dark);border-color:var(--green-dark);color:#fff}
/* 表單元件 */
input,select,textarea{font:inherit;font-size:12px;border:1px solid #CBD5E1;border-radius:5px;padding:4px 6px;background:#fff;color:var(--text);max-width:100%}
textarea{width:100%;min-height:56px}
input:disabled,select:disabled,textarea:disabled{background:#F1F5F9;color:#334155}
.bad{border-color:var(--danger)!important;background:#FEF2F2!important}
.err{color:var(--danger);font-size:12px}
.ok{color:var(--ok);font-size:12px}
.btn{font:inherit;display:inline-block;border:1px solid #CBD5E1;border-radius:6px;padding:4px 10px;background:#fff;font-size:12px;cursor:pointer;color:var(--text);white-space:nowrap}
.btn:hover{background:#F1F5F9;border-color:#94A3B8}
.btn.pri{background:var(--navy);color:#fff;border-color:var(--navy)}
.btn.pri:hover{background:var(--navy-dark)}
.btn.grn{background:var(--green-dark);color:#fff;border-color:var(--green-dark)}
.btn.grn:hover{background:#3F8A5B}
.btn.dng{color:var(--danger);border-color:#FCA5A5}
.btn.dng:hover{background:#FEF2F2}
.btn:disabled{opacity:.45;cursor:default}
.row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.form{display:grid;grid-template-columns:120px 1fr;gap:6px 10px;padding:10px 12px;align-items:center}
.form>label{color:var(--muted);text-align:right;font-size:12px}
.form>label.req{color:var(--danger);font-weight:700}
.form .full{grid-column:1/-1}
.vform{display:flex;flex-direction:column;gap:8px;padding:10px 12px}
.vform label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted)}
.note{background:#FFFBEB;border:1px solid #FCD34D;padding:8px 12px;border-radius:6px;margin-bottom:12px;font-size:12px;color:#713F12}
.info{background:#EFF6FF;border:1px solid #BFDBFE;padding:8px 12px;border-radius:6px;margin-bottom:12px;font-size:12px;color:#1E3A8A}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin-bottom:14px}
.gcard{background:#fff;border:1px solid var(--border);border-radius:8px;padding:12px;box-shadow:var(--shadow);min-width:0}
.gcard.click{cursor:pointer}.gcard.click:hover{border-color:#94A3B8}
.gcard h4{margin:4px 0 6px;font-size:14px}
.stats{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.stat{background:#fff;border:1px solid var(--border);border-radius:8px;padding:8px 12px;min-width:92px;box-shadow:var(--shadow)}
.stat b{display:block;font-size:18px;color:var(--navy-dark)}
.stat span{font-size:12px;color:var(--muted)}
/* 雙軌進度（DF dual-rail） */
.rail{display:grid;grid-template-columns:36px 1fr 52px;gap:6px;align-items:center;font-size:11px;color:var(--muted);margin:2px 0}
.rail i{display:block;height:7px;background:#E2E8F0;border-radius:4px;overflow:hidden}
.rail i b{display:block;height:100%;background:var(--navy-soft)}
.rail.m i b{background:var(--green-dark)}
.rail strong{text-align:right;color:var(--text)}
.bar{height:8px;background:#E2E8F0;border-radius:4px;overflow:hidden}.bar b{display:block;height:100%;background:var(--green-dark)}
/* 看板 */
.kan{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;align-items:flex-start}
.col{background:var(--panel2);border-radius:8px;padding:6px;flex:1 0 150px;min-width:150px;min-height:60px}
.col.fold{flex:0 0 40px;min-width:40px;cursor:pointer;writing-mode:vertical-rl;padding:8px 6px;color:var(--muted)}
.col h4{font-size:12px;margin:2px 2px 6px;color:#334155;display:flex;justify-content:space-between;gap:4px;flex-wrap:wrap}
.col h4 em{font-style:normal;color:var(--muted);font-weight:normal}
.kcard{background:#fff;border:1px solid var(--border);border-radius:6px;padding:7px;margin-bottom:6px;font-size:12px;cursor:pointer}
.kcard:hover{border-color:#94A3B8}
.kcard small{display:block;color:var(--muted);margin-top:2px}
.kcard.warn-r{border-left:3px solid var(--danger)}.kcard.warn-y{border-left:3px solid #D97706}
.kcard.drag{opacity:.4}.col.over{outline:2px dashed #64748B}
.lab{display:inline-block;border-radius:3px;padding:0 5px;font-size:11px;color:#fff;margin-right:3px}
/* 甘特 */
.gantt{position:relative;border:1px solid var(--border);border-radius:6px;background:#fff}
.gantt .gh,.gantt .gr{display:grid;grid-template-columns:200px 1fr;border-bottom:1px solid var(--border)}
.gantt .gl{padding:5px 8px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-right:1px solid var(--border)}
.gantt .gt{position:relative;min-height:28px}
.gantt .gm{position:absolute;top:0;bottom:0;border-left:1px dashed #E2E8F0;font-size:11px;color:var(--muted);padding-left:3px}
.gantt .gb{position:absolute;height:8px;border-radius:3px}
.gantt .gb.p{top:5px;background:#4F7FD1}.gantt .gb.a{top:15px;background:var(--green-dark)}.gantt .gb.late{background:var(--danger)}
.gantt .today{position:absolute;top:0;bottom:0;border-left:2px solid #DC2626;z-index:2}
.gantt .grp{background:#F8FAFC;font-weight:700}
/* 抽屜與彈窗 */
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(880px,100vw);background:#fff;border-left:1px solid #94A3B8;box-shadow:-3px 0 12px rgba(0,0,0,.15);z-index:50;overflow:auto}
.drawer .dh{position:sticky;top:0;background:#F8FAFC;border-bottom:1px solid var(--border);padding:9px 14px;display:flex;justify-content:space-between;align-items:center;gap:8px;z-index:2;flex-wrap:wrap}
.drawer .dh b{font-size:14px;color:var(--navy-dark)}
.drawer .db{display:grid;grid-template-columns:1fr 1fr}
.drawer .db>div{min-width:0;padding-bottom:12px}
.drawer .db>div+div{border-left:1px solid var(--border)}
.drawer h4{font-size:12px;margin:12px 12px 4px;color:#334155}
.tl{padding:0 12px;font-size:12px}
.tl>div{padding:4px 0;border-bottom:1px dotted #CBD5E1}
.modalbg{position:fixed;inset:0;background:rgba(15,23,42,.4);z-index:60;display:flex;align-items:flex-start;justify-content:center;padding:40px 12px;overflow:auto}
.modal{background:#fff;border-radius:8px;width:min(580px,100%);padding:6px 0 12px;box-shadow:0 12px 40px rgba(16,42,67,.25)}
.modal.wide{width:min(1400px,100%)}
.modal h3{font-size:14px;margin:8px 14px;color:var(--navy-dark)}
.modal .acts{padding:0 14px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
[hidden]{display:none!important}
.bellp{position:fixed;right:14px;top:48px;width:380px;max-width:calc(100vw - 24px);max-height:70vh;overflow:auto;background:#fff;border:1px solid #94A3B8;border-radius:8px;z-index:40;box-shadow:0 6px 18px rgba(0,0,0,.15)}
.bellp .it{padding:8px 12px;border-bottom:1px solid var(--border);cursor:pointer}
.bellp .it:hover{background:#F8FAFC}
.badge{background:#B91C1C;color:#fff;border-radius:8px;padding:0 6px;font-size:11px;margin-left:3px}
#toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);background:#0F172A;color:#fff;padding:8px 16px;border-radius:6px;z-index:90;opacity:0;transition:opacity .2s;pointer-events:none;max-width:90vw}
#toast.on{opacity:1}
/* 行事曆 */
.cal .wk{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid #CBD5E1}
.cal .wk:last-child{border-bottom:1px solid #CBD5E1}
.cal .dn{border-right:1px solid #CBD5E1;border-top:1px solid #CBD5E1;padding:2px 4px;font-size:11px;color:var(--muted);background:#F8FAFC}
.cal .dn.out,.cal .dbody.out{background:#F1F5F9}
.cal .dn.today{font-weight:bold;color:#000;background:#E2E8F0}
.cal .dbody{border-right:1px solid #CBD5E1;min-height:58px;padding:2px}
.cal .bar2{background:#E2E8F0;border:1px solid #94A3B8;border-radius:3px;font-size:11px;padding:0 4px;margin:1px 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.cal .ci{font-size:11px;border:1px solid #CBD5E1;border-radius:3px;padding:1px 3px;margin-bottom:2px;background:#fff;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal .ci.pr{border-style:dashed;background:#FFFBEB}
.cal .hd{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));font-size:11px;color:var(--muted);text-align:center;padding:2px 0}
.rep td,.rep th{border:1px solid #CBD5E1;font-size:12px;white-space:normal;min-width:64px}
.rep td[contenteditable]{background:#FFFDF0}
.mini{font-size:11px;color:var(--muted)}
.star{cursor:pointer;color:#B45309;user-select:none}
.per{margin-left:auto;display:flex;gap:4px;align-items:center;flex-wrap:wrap;font-weight:normal;font-size:12px;color:var(--muted)}
.per label{display:flex;gap:3px;align-items:center}
.per .btn{padding:2px 7px}
.per .rng{color:#0F172A;font-weight:bold}
.up{color:var(--ok)}.dn{color:var(--danger)}
.code{font-family:Consolas,monospace;background:#0F172A;color:#E2E8F0;border-radius:6px;padding:8px 10px;font-size:12px;white-space:pre-wrap;word-break:break-all}
.keybox{border:2px solid var(--green-dark);background:#F0FDF4;border-radius:8px;padding:10px 12px;margin:8px 0}
.fb{border-left:3px solid var(--navy-soft);background:#F8FAFC;padding:6px 10px;margin-top:8px;border-radius:0 6px 6px 0}
.fb.directive{border-left-color:#DC2626}
.timeline article{border-left:2px solid #CBD5E1;padding:4px 0 8px 12px;position:relative;font-size:12px}
.timeline article::before{content:"";position:absolute;left:-5px;top:8px;width:8px;height:8px;border-radius:50%;background:var(--navy-soft)}
.timeline time{color:var(--muted);font-size:11px}
/* UI 通則：可點元素手指游標、鍵盤 focus */
[onclick],[role=button],a,select,label,input[type=checkbox],input[type=radio],button{cursor:pointer}
a{color:#1D4ED8}a:hover{text-decoration:underline;color:#1E3A8A}
:focus-visible{outline:2px solid #2563EB;outline-offset:2px}
.nav-item:focus-visible,.wcard:focus-visible,.kcard:focus-visible,tr.click:focus-visible,.pinned-item:focus-visible{outline-offset:-2px}
@media (max-width:760px){.shell{flex-direction:column}.sidebar{width:100%;flex-basis:auto;height:auto;position:static}.two,.drawer .db{grid-template-columns:1fr}.drawer .db>div+div{border-left:0;border-top:1px solid var(--border)}.form{grid-template-columns:90px 1fr}.gantt .gh,.gantt .gr{grid-template-columns:110px 1fr}}
.nav-sep{height:1px;background:rgba(255,255,255,.18);margin:8px 16px}
.nav-sub-item,.nav-sub2{display:flex;align-items:center;gap:6px;width:100%;text-align:left;border:none;background:transparent;color:#DCE6F0;font:inherit;font-size:12.5px;padding:5px 16px 5px 40px;cursor:pointer}
.nav-sub2{padding-left:56px;font-size:12px;color:#B8C9DA}
.nav-sub-item:hover,.nav-sub2:hover{background:var(--navy-soft);color:#fff}
.nav-sub-item.active,.nav-sub2.active{background:var(--navy-dark);color:#fff}
.nav-r{font-size:11px;color:#94A9BF;margin-left:auto}
.sidebar-foot .ver{margin-top:6px;font-size:11px;color:#B8C9DA}
.memenu{width:200px}.memenu .it{padding:9px 14px;border-bottom:1px solid var(--border);cursor:pointer}.memenu .it:hover{background:#F8FAFC}
.ro-view{opacity:.97}
.tblock{background:#fff;border:1px solid var(--border);border-radius:8px;margin-bottom:12px}
.tblock>h3{margin:0;padding:10px 14px;border-bottom:1px solid var(--border);font-size:14px;display:flex;gap:8px;align-items:baseline}
.tblock>h3 small{color:var(--muted);font-weight:400;font-size:12px}
.trow{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid #EEF2F6;flex-wrap:wrap}
.trow:last-child{border-bottom:none}
.trow .tt{flex:1;min-width:180px;cursor:pointer}
.st3{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:700}
.st3.no{background:#FEE2E2;color:#991B1B}.st3.ok{background:#DCFCE7;color:#166534}.st3.msg{background:#FEF3C7;color:#92400E}
.wk3 label{display:block;font-size:13px;font-weight:600;margin:8px 0 4px}.wk3 input[type=text]{width:100%}
.autol{margin:0;padding:0 0 0 18px;font-size:13px}.autol li{margin:2px 0}
/* v3.1 規則 15／16 */
.lk{display:inline-block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;font-size:12px;color:#1D4ED8}
.lk.o{color:var(--muted)}.lk.r{color:var(--danger);font-weight:600}
.seg{display:inline-flex;border:1px solid #CBD5E1;border-radius:6px;overflow:hidden}.seg button{border:0;background:#fff;padding:3px 10px;font-size:12px;cursor:pointer;color:var(--text)}.seg button+button{border-left:1px solid #CBD5E1}.seg button.on{background:var(--navy);color:#fff}
.eve{border-top:1px dashed #CBD5E1;background:#FAFBFC}.eve h4{margin:0;padding:8px 14px 0;font-size:13px}
.evbad{color:var(--danger)}
.qgrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
.qcell{background:#fff;border:1px solid var(--border);border-radius:8px;padding:8px;min-width:0}.qcell h4{margin:0 0 6px;font-size:13px}
.qcell.q0{border-top:3px solid var(--danger)}.qcell.q1{border-top:3px solid #2563EB}.qcell.q2{border-top:3px solid var(--warn)}.qcell.q3{border-top:3px solid #94A3B8}
.qc{border:1px solid #EEF2F6;border-radius:6px;padding:6px 8px;margin-bottom:6px;cursor:pointer;overflow-wrap:anywhere}.qc:hover{background:#F8FAFC}
.qblk{margin:8px 14px;padding:8px 10px;border:1px solid #BFDBFE;background:#F8FBFF;border-radius:8px;display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}
.lksel{max-width:240px}.pickl{max-height:50vh;overflow:auto;border:1px solid var(--border);border-radius:6px;margin:8px 0}
.stat b.r{color:var(--danger)}
/* v3.2 主管派月目標、本週目標、週一到週五、新人引導、指標管理 */
.wgrid{display:grid;align-items:start;grid-template-columns:repeat(5,minmax(0,1fr)) minmax(0,.62fr) minmax(0,1fr);gap:5px;padding:8px}
.wcol{background:#F8FAFC;border:1px solid var(--border);border-radius:6px;min-width:0;padding:4px;font-size:11.5px}
.wcol.today{border-color:#2563EB;background:#EFF6FF}.wcol.un{background:#FFFBEB;border-style:dashed}
.wch{display:flex;flex-wrap:wrap;gap:0 5px;align-items:baseline;padding:2px 3px 4px;border-bottom:1px solid var(--border);margin:-4px -4px 4px;border-radius:6px 6px 0 0}
.wch .wn{color:var(--muted);font-size:11px}.wcol.full .wch{background:#FFEDD5;border-bottom-color:#FB923C;color:#9A3412}.wfull{font-size:11px;font-weight:700;color:#C2410C}
.wc{background:#fff;border:1px solid #E2E8F0;border-radius:5px;padding:3px 5px;margin-bottom:4px;cursor:pointer;overflow-wrap:anywhere;line-height:1.35}.wc:hover{background:#F1F5F9}.wc.late{border-color:#FCA5A5}
.wc .lk{display:block;max-width:100%;font-size:11px}.wcol .hint{margin-bottom:4px;color:var(--warn)}
.guide{border:2px solid #93C5FD}.guide.done{border:1px solid #86EFAC;background:#F0FDF4}
.gnum{display:inline-flex;width:24px;height:24px;border-radius:12px;align-items:center;justify-content:center;background:#DBEAFE;color:#1D4ED8;font-weight:700}.gnum.ok{background:#DCFCE7;color:var(--ok)}
.rhythm{margin:0 0 10px;font-size:13px;font-weight:600}
.gl{border-bottom:none;padding-bottom:2px}.wgl{padding-top:0;padding-left:30px}.wgt{font-size:12px;color:#1E3A8A}.wgt.mu{color:var(--muted)}.gnew{background:#EFF6FF}
.gline .tag{margin-right:0}
.more{border-top:1px dashed #CBD5E1;padding:6px 14px}.more .btn.lnk{border:0;background:none;color:#1D4ED8;padding:0 4px 0 0;font-weight:600}.mrow{padding:2px 0;font-size:12px}
.mggrid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:14px;padding:10px 14px}.mggrid h4{margin:6px 0}.mgt{width:100%}.mgt input{max-width:100%}.mgx{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}.mgx .lksel{max-width:170px}
.kmt-t td,.kmt-t th{padding:3px 4px}.kmt-t input.kmt{width:52px}
.evw{min-width:740px;table-layout:fixed}.evw th,.evw td{vertical-align:top;font-size:12px;overflow-wrap:anywhere}.evw tr>th:first-child{width:92px;white-space:nowrap}.evw-top td,.evw-top th{background:#F8FAFC}.evw-today th,.evw-today td{background:#EFF6FF}
.dgpre{white-space:pre-wrap;background:#F8FAFC;border:1px solid var(--border);border-radius:6px;padding:10px;font-size:12px;max-height:360px;overflow:auto}
/* ---- v4.1：目標卡列、四欄看板、任務卡抽屜、整頁本週回報（規則 18） ---- */
.btn.sm{padding:1px 7px;font-size:11.5px}
button.lnk,.btn.lnk{border:0;background:none;color:#1D4ED8;cursor:pointer;font:inherit;font-size:12px;padding:0 2px;text-decoration:underline}
.gact{font-size:12.5px;padding:0 2px}.gact b{font-size:15px}
.gbar-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:2px 0 6px}
.gbar{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 8px;margin-bottom:8px}
.gcard{flex:0 0 172px;background:#fff;border:1px solid var(--border);border-top:3px solid #16A34A;border-radius:8px;padding:6px 9px;cursor:pointer;display:flex;flex-direction:column;gap:3px;min-width:0;box-shadow:var(--shadow)}
.gcard:hover{background:#F8FAFC}.gcard.bad{border-top-color:var(--danger)}.gcard.on{outline:2px solid var(--navy);background:#EFF6FF}
.gcard .gct{display:flex;justify-content:space-between;align-items:center}.gcard .gx{border:0;background:none;cursor:pointer;color:var(--muted);font-size:12px;padding:0 2px}
.gcn{font-size:13px;overflow-wrap:anywhere;line-height:1.35}
.gcard.add{border:1px dashed #94A3B8;cursor:default;background:#F8FAFC;box-shadow:none;justify-content:center}.gcard.add input{width:100%}
.kboard{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;align-items:start;margin-bottom:6px;overflow-x:auto;padding-bottom:4px}
.kcol{background:#EEF2F6;border:1px solid var(--border);border-radius:8px;padding:5px;min-width:0}
.kcol.ov{outline:2px dashed #2563EB}
.kch{display:flex;justify-content:space-between;align-items:baseline;padding:2px 3px 6px}
.kc{background:#fff;border:1px solid #E2E8F0;border-left:4px solid #94A3B8;border-radius:6px;padding:5px 6px;margin-bottom:6px;cursor:pointer;overflow-wrap:anywhere;font-size:12px;line-height:1.4}
.kc:hover{box-shadow:var(--shadow)}.kc.st-1{border-left-color:#2563EB}.kc.st-2{border-left-color:var(--ok)}.kc.st-2 .kt{color:var(--muted)}.kc.st-3{opacity:.45}.kc.st-3 .kt{text-decoration:line-through}
.kc .lk{display:block;max-width:100%;font-size:11px}
.kc .km{display:flex;flex-wrap:wrap;gap:2px 4px;align-items:center;margin-top:2px}.kc .km .tag{margin:0}
.kc .btn.sm{margin-top:3px}
.kemp{padding:4px 3px 6px}
.kform{background:#fff;border:1px solid #93C5FD;border-radius:6px;padding:5px;display:flex;flex-direction:column;gap:4px}.kform input,.kform select{width:100%}
.kadd{width:100%}
.t4d{padding:4px 16px 20px}.t4d.cx{background:#F8FAFC}
.t4d .f{padding:9px 0;border-bottom:1px solid #EEF2F6;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.t4d .f>label:first-child{flex:0 0 100%;font-weight:700;font-size:12px;color:#334155}
.t4d .f.ft{border-bottom:0;background:#F8FAFC;padding:9px 8px;border-radius:6px;margin-top:6px}
.t4d h5{flex:0 0 100%;margin:8px 0 0;font-size:12px}
.t4d textarea{width:100%}.t4d .ckr{padding:2px 0}
.wrsec textarea{width:100%;min-height:100px;font-size:13px;line-height:1.6}
.wrt{width:100%;border-collapse:collapse}.wrt th,.wrt td{border-bottom:1px solid #EEF2F6;padding:6px 10px;text-align:left;font-size:12.5px;vertical-align:middle}.wrt th{background:#F8FAFC}
.wrl{padding:4px 0;border-bottom:1px dashed #EEF2F6}.wrl .lk{max-width:220px}
/* ---- v4.3：下班只確認、週一自動滾動、必填（規則 19、20、22） ---- */
.gcard .gdb{border:0;background:none;color:#1D4ED8;cursor:pointer;font-size:11.5px;padding:0 2px;white-space:nowrap}.gcard .gdb:hover{text-decoration:underline}
.kch{gap:4px;flex-wrap:wrap}.kch[draggable=true]{cursor:grab}.kch .kcn{flex:1;min-width:0;overflow-wrap:anywhere}.kch .row{gap:2px}.kch input{width:100%}
.kcadd{background:#F8FAFC;border:1px dashed #94A3B8;border-radius:8px;padding:5px;min-width:0;display:flex;flex-direction:column;gap:4px}.kcadd input{width:100%}
.gd{padding:4px 16px 20px}.gd .gs{padding:10px 0;border-bottom:1px solid #EEF2F6}.gd .gs>h4{margin:0 0 6px;font-size:12.5px;color:#334155}
.gd table{border-collapse:collapse;width:100%}.gd th,.gd td{border-bottom:1px solid #EEF2F6;padding:4px 8px;text-align:left;font-size:12.5px}.gd th{background:#F8FAFC}
.gd tr.cur td{background:#FEF3C7;font-weight:700}.gd .gmw{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap}.gd .gmw>div{flex:1 1 260px;min-width:0}
.gd textarea{width:100%}.gd .gnote{white-space:pre-wrap;background:#F8FAFC;border:1px solid var(--border);border-radius:6px;padding:8px 10px}
.gd .gtl{cursor:pointer;color:#1D4ED8;text-decoration:underline}
.wrsend{padding:10px 0 20px;display:flex;gap:12px;align-items:center;justify-content:flex-end}.btn.big{padding:10px 28px;font-size:15px;border-radius:8px}
/* ---- v4.3：下班確認、上週未完成、必填 ---- */
.dksub h4{margin:8px 10px 2px;font-size:13px}.dksub h4 small{font-weight:400;color:var(--muted)}
.kc.od{border-left-color:var(--danger)}
#t-dk .trow{flex-wrap:wrap}
.dked{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;flex:0 0 100%;padding:2px 0 2px 14px}.mini.r,.kc [data-od]{color:var(--danger)}.kc [data-od]{font-weight:700}
.dkck{display:flex;flex-wrap:wrap;gap:2px 12px}
/* ---- 主管端 v1 ---- */
.hq .tt{min-width:220px}.hq input{width:110px}
.hhint{margin:-6px 0 14px;display:flex;flex-wrap:wrap;gap:2px 10px;align-items:baseline}
.hkr{cursor:pointer}.hkr:hover td{background:#F8FAFC}.mini.y{color:var(--warn)}
#hev-t th,#hev-t td{vertical-align:top;font-size:12px;overflow-wrap:anywhere}.hevt{padding:1px 0}.hph th,.hph td{color:#94A3B8;background:#FAFBFC;font-size:11px}
.rvgrid{display:grid;grid-template-columns:160px minmax(0,1fr);gap:12px;align-items:start}
.rvi{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid var(--border);background:#fff;padding:8px 10px;cursor:pointer;font:inherit;font-size:12px;color:var(--text)}.rvi.on{background:#EFF6FF;box-shadow:inset 3px 0 0 var(--navy)}
.sec.rvb{display:grid;grid-template-columns:minmax(0,1fr) 170px}.rvb .rvc{min-width:0}.rvb .rvc>h3{font-size:13px;margin:0;padding:9px 12px;border-bottom:1px solid var(--border);background:#FAFBFC}
.rvfb{border-left:1px solid var(--border);padding:8px;background:#FFFDF5;min-width:0}.rvfb textarea{width:100%}.rvtxt,.rvfbro{white-space:pre-wrap;line-height:1.6;overflow-wrap:anywhere}
.sgd{margin-top:4px;display:flex;flex-wrap:wrap;gap:4px;min-width:0}.sgd select{font-size:11px;max-width:100%}.sgd .tag{white-space:normal}
.wrfb{margin-top:6px;background:#FEF3C7;border-radius:5px;padding:4px 8px;font-size:12px}
.nav-sub-item.later{opacity:.5;cursor:default}.nav-sub-item.later:hover{background:transparent;color:#DCE6F0}

/* ===== 試用版：登入頁、改密碼頁、儲存失敗紅條、右上姓名與登出 ===== */
.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;background:var(--bg)}
.authcard{background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:24px 26px;width:340px;max-width:100%;display:flex;flex-direction:column;gap:10px}
.authcard h1{font-size:18px;margin:0;color:var(--navy)}
.authcard h2{font-size:15px;margin:0}
.authcard label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}
.authcard input{font:inherit;padding:8px 10px;border:1px solid var(--border);border-radius:6px;color:var(--text)}
.authcard input:focus{outline:2px solid var(--navy-soft);outline-offset:0}
.authcard .err{color:var(--danger);min-height:1.2em;font-size:13px}
.authcard .row{display:flex;gap:8px;align-items:center}
.authcard button{font:inherit}
.saveerr{position:fixed;top:0;left:0;right:0;z-index:200;background:var(--danger);color:#fff;text-align:center;padding:7px 12px;font-size:13px;font-weight:600}
.saveerr button{margin-left:10px;background:#fff;color:var(--danger);border:0;border-radius:4px;padding:2px 10px;font:inherit;cursor:pointer}
.mename{font-weight:600;color:var(--text);white-space:nowrap}

/* ===== 手機版 RWD（規則 21）：只在 ≤768／≤480 生效，桌機 1024 以上不受影響 ===== */
@media (max-width:768px){
  /* 版面：.main 攤平，頂列 → 頁籤列 → 內容 */
  .shell{flex-direction:column;min-height:100dvh}
  .main{display:contents}
  .topbar{order:0;position:static;padding:6px 12px;gap:6px}
  .topbar .crumb{display:none}
  .content{order:2;padding:12px 12px 32px}
  /* 側欄 → 頂部橫向可捲頁籤列（黏在上緣） */
  .sidebar{order:1;width:100%;flex:0 0 auto;height:auto;position:sticky;top:0;z-index:25;flex-direction:row;flex-wrap:nowrap;align-items:stretch;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .sidebar::-webkit-scrollbar{display:none}
  .sidebar .brand,.sidebar-foot,.nav-sep{display:none}
  .nav-item,.nav-sub-item,.nav-sub2,.pinned-item{flex:0 0 auto;width:auto;min-height:48px;padding:0 14px;white-space:nowrap;align-items:center}
  .nav-item.active{box-shadow:inset 0 -3px 0 var(--green)}
  .nav-sub-item,.nav-sub2{background:rgba(255,255,255,.07);font-size:13px}
  .nav-sub{flex:0 0 auto;display:flex;align-items:center;padding:0 8px}.nav-sub select{width:auto}
  .nav-r{margin-left:6px}
  .sidebar .newbtn{flex:0 0 auto;margin:6px}
  /* 觸控目標 ≥ 44px */
  .btn,.btn.sm,.tabs button,.seg button,.sidebar .newbtn,.gcard .gx,.gcard .gdb,.rvi,.saveerr button{min-height:44px}
  .btn,.btn.sm{display:inline-flex;align-items:center;justify-content:center;padding:0 12px;font-size:14px}
  .btn.big{padding:0 28px}
  .seg{flex-wrap:wrap}
  .check{width:44px;height:44px;font-size:16px}
  input[type=checkbox],input[type=radio]{width:22px;height:22px;margin:11px 6px 11px 0;flex:0 0 auto}
  label:has(>input[type=checkbox]),label:has(>input[type=radio]){display:inline-flex;align-items:center;min-height:44px}
  button.lnk,.btn.lnk{min-height:44px;display:inline-flex;align-items:center}
  /* iOS 聚焦不放大：輸入元件 ≥16px、高度 ≥44 */
  input,select,textarea,.authcard input{font-size:16px}
  input:not([type=checkbox]):not([type=radio]),select{min-height:44px}
  /* 四欄看板 → 單欄堆疊，欄名成區塊標題 */
  .kboard{grid-template-columns:minmax(0,1fr)!important;overflow-x:visible;gap:10px}
  .kch{position:sticky;top:48px;z-index:3;background:#EEF2F6;border-radius:6px;padding:8px 6px;font-size:14px}
  /* 其餘多欄格線收成單欄 */
  .qgrid,.mggrid,.rvgrid,.sec.rvb{grid-template-columns:minmax(0,1fr)}
  .rvfb{border-left:0;border-top:1px solid var(--border)}
  .wgrid{grid-template-columns:minmax(0,1fr)}
  .form{grid-template-columns:minmax(0,1fr)}.form>label{text-align:left}
  .gcard{flex-basis:200px}
  .trow .tt{min-width:0;flex:1 1 100%}
  .lk,.wrl .lk,.lksel{max-width:100%}
  .wcard{flex-wrap:wrap}.wcard .wact{max-width:100%}
  /* 表格：外層可橫捲、第一欄黏住 */
  .scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .scroll>table tr>:first-child{position:sticky;left:0;z-index:1;background:#fff;box-shadow:1px 0 0 var(--border)}
  .scroll>table tr>th:first-child{background:#F8FAFC}
  /* 彈窗滿版、按鈕列固定在底部 */
  .modalbg{padding:0;align-items:stretch}
  .modal,.modal.wide{width:100vw;min-height:100dvh;border-radius:0;box-shadow:none;padding:6px 0 0;display:flex;flex-direction:column}
  .modal>.acts{position:sticky;bottom:0;z-index:5;margin-top:auto;background:#fff;border-top:1px solid var(--border);padding:8px 14px calc(8px + env(safe-area-inset-bottom))}
  .drawer{width:100vw;border-left:0}
  .bellp{right:8px;left:8px;width:auto;max-width:none;top:56px}
  /* 今天頁：今天要處理（三件事）與下班確認排在最前，第一屏看得到 */
  .content:has(>#t-today){display:flex;flex-direction:column}
  .content:has(>#t-today)>*{order:5}
  .content:has(>#t-today)>.page-head{order:0}
  .content:has(>#t-today)>#tb-three,.content:has(>#t-today)>#t-today{order:1}
  .content:has(>#t-today)>#t-dk{order:2}
  .content:has(>#t-today)>#t-boss{order:3}
}
@media (max-width:480px){
  .topbar .title{font-size:15px}
  .topbar #today-lab{display:none}
  /* 頂列單行：標題與姓名可截斷，＋ 交辦、通知、改密碼、登出留在右側 */
  .topbar{flex-wrap:nowrap;gap:5px;padding:6px 8px}
  .topbar .title{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .topbar .mename{min-width:0;max-width:4.5em;overflow:hidden;text-overflow:ellipsis;font-size:12px}
  .topbar .btn{flex:0 0 auto;padding:0 10px}
  .tblock>h3,.sec>h3{flex-wrap:wrap}
  .tblock>h3 small,.sec>h3 small{flex:1 1 100%}
  .stat{min-width:0;flex:1 1 40%}
  .authcard{padding:18px 16px}
}

/* ===== 表單元件（全站一致，2026-09-29）：彈窗 680、一欄直排、標籤在上、控制項 44px／16px、多行自動長高、選人膠囊、日期快選、連結欄 =====
   範圍：彈窗 .modal、抽屜 .drawer、頁面上標 .fz 的表單區。沿用既有配色與字型。 */
.modalbg{padding:24px 12px;align-items:flex-start}
.modal{width:min(680px,100%);padding:0 24px;max-height:calc(100dvh - 48px);overflow:auto;display:flex;flex-direction:column;border-radius:12px;font-size:15px}
.modal>*{flex-shrink:0}
.modal>h3:first-child{position:sticky;top:0;z-index:6;background:#fff;margin:0 -24px;padding:20px 24px 14px;font-size:18px;border-bottom:1px solid var(--border)}
.modal>h3:not(:first-child){font-size:15px!important;margin:20px 0 6px;color:var(--navy-dark)}
.modal>.acts{position:sticky;bottom:0;z-index:6;background:#fff;margin:auto -24px 0;padding:12px 24px;border-top:1px solid var(--border);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.modal>.acts .btn,.drawer .acts .btn{min-height:44px;padding:0 18px;font-size:15px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center}
.modal>.acts .btn.pri,.drawer .acts .btn.pri{order:3;margin-left:auto}
.modal>.acts .err{order:2;flex:1 1 160px;text-align:right}
.modal .pad{padding:8px 0}
.modal .form{padding:16px 0 8px}
.modal .note{font-size:14px;margin:12px 0 0}
/* 抽屜：680、一欄 */
.drawer{width:min(680px,100vw);font-size:15px}
.drawer .dh{padding:14px 24px}.drawer .dh b{font-size:17px}
.drawer .db{display:block}
.drawer .db>div{padding-bottom:12px}
.drawer .db>div+div{border-left:0;border-top:1px solid var(--border)}
.drawer h4{font-size:15px;margin:20px 24px 8px;color:var(--navy-dark)}
.drawer .pad{padding:8px 24px}
.drawer .form{padding:0 24px 8px}
.drawer .tl{padding:0 24px;font-size:14px}
.drawer .acts{position:sticky;bottom:0;z-index:3;background:#fff;border-top:1px solid var(--border);padding:12px 24px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.drawer .t4d,.drawer .gd{padding:4px 24px 24px}
.drawer .t4d .f{padding:14px 0;gap:8px 10px}
.drawer .t4d .f>label:first-child,.drawer .t4d h5{font-size:14px;font-weight:600;color:var(--muted)}
/* 一欄直排：標籤在上（14px 灰），控制項滿寬，欄位間距 16px */
:is(.modal,.drawer,.fz) .form{display:flex;flex-direction:column;align-items:stretch;gap:6px}
:is(.modal,.drawer,.fz) .form>label{font-size:14px;color:var(--muted);text-align:left;font-weight:400}
:is(.modal,.drawer,.fz) .form>label.req{color:var(--muted);font-weight:400}
:is(.modal,.drawer,.fz) .form>label:not(:first-child),:is(.modal,.drawer,.fz) .form>:is(.row,.fld,.lkf,.chips):not(:first-child){margin-top:10px}
:is(.modal,.drawer,.fz) .form>label:has(>:is(input:not([type=checkbox]):not([type=radio]),select,textarea)){display:flex;flex-direction:column;gap:6px}
:is(.modal,.drawer,.fz) .form>label:empty{display:none}
.fm{display:flex;flex-direction:column;gap:16px;max-width:680px}
.fld{display:flex;flex-direction:column;gap:6px;min-width:0}
.fld>label,.fldl{font-size:14px;color:var(--muted);font-weight:400}
.hint{font-size:13px;color:var(--muted);line-height:1.5}
.req-star{color:var(--danger);margin-left:3px;font-weight:700}
.fg2{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 16px}
.fmacts{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.fmacts .btn{min-height:44px!important;padding:0 18px!important;font-size:15px!important;border-radius:8px;display:inline-flex;align-items:center}
/* 輸入框、下拉：高 44、字 16、圓角 8、聚焦外框明顯 */
:is(.modal,.drawer,.fz) :is(input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]),select){height:44px;min-height:44px;font-size:16px;border-radius:8px;padding:0 12px;border:1px solid #CBD5E1;width:100%;max-width:100%;background-color:#fff}
:is(.modal,.drawer,.fz) :is(input,select,textarea):disabled{background:#F1F5F9}
:is(.modal,.drawer,.fz) .row>:is(input:not([type=checkbox]):not([type=radio]),select){width:auto;flex:1 1 180px;min-width:0}
:is(.modal,.drawer,.fz) textarea{font-size:16px;line-height:1.5;border-radius:8px;padding:10px 12px;border:1px solid #CBD5E1;width:100%;min-height:calc(4.5em + 22px);max-height:calc(18em + 22px);field-sizing:content;resize:vertical;overflow:auto}
:is(.modal,.drawer,.fz) textarea.ta1{min-height:44px}
:is(.modal,.drawer,.fz) :is(input,select,textarea):focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,72,113,.22)}
:is(.modal,.drawer,.fz) .bad:focus{box-shadow:0 0 0 3px rgba(185,28,28,.2)}
:is(.modal,.drawer,.fz) .btn:not(.sm):not(.big){min-height:40px;font-size:14px;padding:0 14px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center}
:is(.modal,.drawer,.fz) .btn.sm{min-height:34px;font-size:13px;padding:0 10px;border-radius:8px;display:inline-flex;align-items:center}
:is(.modal,.drawer,.fz) .err{font-size:14px}
:is(.modal,.drawer,.fz) label:not(.chip):has(>input[type=checkbox]),:is(.modal,.drawer,.fz) label:not(.chip):has(>input[type=radio]){display:inline-flex;align-items:center;gap:8px;min-height:40px;font-size:15px}
:is(.modal,.drawer,.fz) :not(.chip)>input[type=checkbox],:is(.modal,.drawer,.fz) :not(.chip)>input[type=radio]{width:20px;height:20px;margin:0;flex:0 0 auto}
/* 選人膠囊（可多選；單選同樣式） */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{position:relative;display:inline-flex;align-items:center;justify-content:center;height:40px;min-width:76px;padding:0 16px;border:1px solid #CBD5E1;border-radius:20px;background:#fff;color:var(--text);font-size:15px;cursor:pointer;user-select:none;white-space:nowrap}
.chip:hover{border-color:var(--navy-soft)}
.chip>input[type=checkbox],.chip>input[type=radio]{position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;cursor:pointer}
.chip:has(>input:checked){background:var(--navy);border-color:var(--navy);color:#fff}
.chip:has(>input:focus-visible){box-shadow:0 0 0 3px rgba(26,72,113,.3)}
.chip:has(>input:disabled){opacity:.65;cursor:default}.chip>input:disabled{cursor:default}
/* 日期快選、日期／月份切換 */
.dq{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.dq button{height:34px;padding:0 12px;border-radius:17px;border:1px solid #CBD5E1;background:#F8FAFC;font:inherit;font-size:13px;color:var(--text);cursor:pointer}
.dq button:hover{border-color:var(--navy-soft);color:var(--navy-dark)}
.dq[hidden]{display:none}
/* 連結欄 */
.lkf .lkin{display:flex;gap:8px}
.lkf .lkin input{flex:1;min-width:0}
.lkchips{display:flex;flex-wrap:wrap;gap:8px}
.lkchips:empty{display:none}
.lkc{display:inline-flex;align-items:center;max-width:100%;min-height:36px;border:1px solid #BFDBFE;background:#EFF6FF;border-radius:18px;padding:0 4px 0 14px;font-size:14px;gap:2px}
.lkc>a,.lkc>span{color:#1D4ED8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none;min-width:0}
.lkc>a:hover{text-decoration:underline}
.lkc>button{border:0;background:none;width:30px;height:30px;border-radius:15px;cursor:pointer;color:#475569;font-size:17px;line-height:1;flex:0 0 auto}
.lkc>button:hover{background:#DBEAFE;color:var(--danger)}
.lkro{margin-top:4px}.lkro .lkc{min-height:28px;font-size:12.5px;padding:0 12px}
/* 檢查清單：每列滿寬 44px，Enter 新增下一列 */
.cklist{display:flex;flex-direction:column;gap:6px;flex:0 0 100%}
.ckr2{display:flex;align-items:center;gap:8px}
.ckr2 input.ckt{flex:1;min-width:0;height:44px!important;min-height:44px!important}
.ckr2.done input.ckt{color:var(--muted);text-decoration:line-through}
.cknew{display:flex;gap:8px;flex:0 0 100%}
.cknew input{flex:1;min-width:0;height:44px!important;min-height:44px!important}
/* 頁面上的表單區（名錄新增、搜尋優化、指標管理新增行動計畫、自訂卡） */
.fz .fm{padding:16px 12px}
.fz .fm.tight{padding:0}
@media (max-width:768px){
  .modalbg{padding:0}
  .modal,.modal.wide{width:100vw;height:100dvh;max-height:100dvh;min-height:0;border-radius:0;padding:0 16px}
  .modal>h3:first-child{margin:0 -16px;padding:14px 16px 12px;font-size:17px}
  .modal>.acts{margin:auto -16px 0;padding:10px 16px calc(10px + env(safe-area-inset-bottom))}
  .drawer .dh,.drawer .acts{padding-left:16px;padding-right:16px}
  .drawer h4{margin-left:16px;margin-right:16px}
  .drawer .pad,.drawer .form,.drawer .tl{padding-left:16px;padding-right:16px}
  .drawer .t4d,.drawer .gd{padding:4px 16px 24px}
  .chip{min-width:0;padding:0 14px}
  .fz .fm{padding:12px}
}
/* 表單元件補充：隱藏、會議待辦列、主管留話、通知時間 */
:is(.modal,.drawer,.fz) [hidden]{display:none!important}
.mtl{display:flex;flex-direction:column;gap:10px;padding:4px 0}
.mtr{border:1px solid var(--border);border-radius:8px;padding:10px;display:flex;flex-direction:column;gap:8px;background:#FAFBFC}
.mtr2{display:flex;flex-wrap:wrap;gap:8px}
.mtr2>select,.mtr2>input{flex:1 1 140px!important;width:auto!important;min-width:0}
.hqm{flex:0 0 100%;display:flex;flex-direction:column;gap:6px;padding:4px 0 0 30px}
.trow textarea.vqr{flex:1 1 200px;min-height:calc(4.5em + 22px);max-height:calc(18em + 22px);font-size:16px;line-height:1.5;border-radius:8px;padding:10px 12px;field-sizing:content}
#dg input[type=time]{height:44px;font-size:16px;border-radius:8px;padding:0 10px;min-width:140px;border:1px solid #CBD5E1}
#dg input[type=time]:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,72,113,.22)}
.wrmiss-row{flex-wrap:wrap}
@media (max-width:768px){.hqm{padding-left:0}.wrmiss-row>span.mini{flex:1 1 100%!important;padding-top:0!important}}
/* ========== 數據報表（dataviz.js）========== */
.dv-head{gap:8px}.dv-per{display:flex;gap:4px}.dv-srcs{display:flex;gap:10px;flex-wrap:wrap;flex:1 1 auto}.dv-src{display:inline-flex;gap:4px;align-items:center}
#dv-page.dv-busy .dv-grid,#dv-page.dv-busy table{opacity:.55;transition:opacity .15s}
.dv-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1px;background:var(--border);border-bottom:1px solid var(--border)}
.dv-stat{background:#fff;padding:10px 12px;min-width:0}.dv-v{font-size:22px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.3}
.dv-d{font-size:11px;font-weight:700;white-space:nowrap;color:var(--muted)}.dv-d.up{color:var(--ok)}.dv-d.dn{color:var(--danger)}
.dv-kpi .row{gap:10px;margin-bottom:4px;font-size:12px}.dv-bar{height:8px;background:var(--panel2);border-radius:4px;overflow:hidden}.dv-bar i{display:block;height:100%;background:var(--green-dark);border-radius:4px}
.dv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;padding:10px 12px}
.dv-card{margin:0;min-width:0;border:1px solid var(--border);border-radius:6px;padding:8px 8px 4px}.dv-card figcaption{font-size:12px;margin:0 0 4px 4px}
.dv-chart{position:relative;min-height:170px;min-width:0}.dv-svg{display:block;max-width:100%;overflow:visible}
.dv-grid-l{stroke:#EEF2F6;stroke-width:1}.dv-base{stroke:#CBD5E1;stroke-width:1}.dv-ax{font-size:10.5px;fill:var(--muted);font-variant-numeric:tabular-nums}
.dv-cross{stroke:#94A3B8;stroke-width:1;stroke-dasharray:3 3}
.dv-tip{position:absolute;pointer-events:none;background:#fff;border:1px solid var(--border);box-shadow:var(--shadow);border-radius:6px;padding:5px 8px;font-size:12px;white-space:nowrap;z-index:3}
.dv-tr{display:flex;align-items:center;gap:5px}.dv-tr i,.dv-lg i{display:inline-block;width:12px;height:2px;border-radius:1px}.dv-tr b{font-variant-numeric:tabular-nums}
.dv-lg{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11px;color:var(--muted);padding:2px 4px}.dv-lg span{display:inline-flex;align-items:center;gap:4px}
.dv-key{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.dv-h4{font-size:12.5px;margin:6px 12px 4px}.dv-wrap{word-break:break-all;min-width:140px}.dv-none{padding:60px 0;text-align:center;font-size:12px}
@media (max-width:768px){.dv-grid{grid-template-columns:1fr}.dv-stats{grid-template-columns:1fr 1fr}.dv-v{font-size:18px}}
/* ---- 任務留言串（comments.js） ---- */
.cmt{border-top:1px solid var(--border);padding:12px 24px 20px;margin-top:8px}
.modal>.cmt{padding:12px 0 16px}
.cmt h4{margin:0 0 8px!important;font-size:15px;color:var(--navy-dark)}
.cm-list{display:flex;flex-direction:column;gap:10px;margin-bottom:10px}
.cm-it{display:flex;gap:10px;align-items:flex-start;min-width:0}
.cm-av{flex:0 0 32px;width:32px;height:32px;border-radius:50%;background:var(--navy-soft);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}
.cm-it.me .cm-av{background:var(--green-dark)}
.cm-b{flex:1;min-width:0;background:var(--panel2);border-radius:8px;padding:8px 10px}
.cm-h{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;font-size:14px}
.cm-act{margin-left:auto;display:inline-flex;gap:4px;flex-wrap:wrap}
.cm-tx{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15px;line-height:1.6;margin-top:2px}
.cm-row{display:flex;gap:6px;align-items:center;justify-content:flex-end;margin-top:6px;flex-wrap:wrap}.cm-row .err{margin-right:auto}
.cm-new{display:flex;gap:8px;align-items:flex-end}
:is(.modal,.drawer,.fz) textarea.cm-in,:is(.modal,.drawer,.fz) textarea.cm-ed{min-height:44px}
.cm-new .cm-in{flex:1;min-width:0}
.cm-new .cm-go{flex:0 0 auto;min-height:44px!important}
.cm-n{display:inline-block;font-size:11px;color:var(--navy);background:#E8EEF5;border-radius:10px;padding:1px 7px;margin-left:4px;white-space:nowrap}
.cm-nb{margin-left:4px}
@media (max-width:768px){.cmt{padding:12px 16px 20px}.modal>.cmt{padding:12px 0 16px}}
/* ---- 主管首頁：今日重點、服務線、循環與團隊一行（brief.js）---- */
.br-it{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-bottom:1px solid #EEF2F6;flex-wrap:wrap}
.br-it:last-of-type{border-bottom:none}
.br-it[data-lv="red"]{box-shadow:inset 3px 0 0 var(--danger)}.br-it[data-lv="yellow"]{box-shadow:inset 3px 0 0 #D97706}.br-it[data-lv="green"]{box-shadow:inset 3px 0 0 var(--ok)}
.br-lv{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;white-space:nowrap;color:var(--muted);min-width:58px}
.br-lv i{width:10px;height:10px;border-radius:50%;background:#94A3B8;flex:0 0 10px}
.br-lv.r{color:var(--danger)}.br-lv.r i{background:var(--danger)}.br-lv.y{color:var(--warn)}.br-lv.y i{background:#D97706}.br-lv.g{color:var(--ok)}.br-lv.g i{background:var(--ok)}
.br-lv.n i{background:transparent;border:1.5px solid #94A3B8}
.br-tx{flex:1 1 260px;min-width:0}.br-t{font-size:14px;color:var(--text)}.br-d{margin-top:2px;font-size:13px}.br-c{margin-top:2px}
.br-act{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
#h-mine>.tblock>h3{font-size:13px;background:#FAFBFC}
.ln-t th[scope=row]{text-align:left;font-weight:600;white-space:nowrap}
.ln-t td.n,.ln-t th.n,#ld-t .n,#ld-bl .n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ln-t tr.click{cursor:pointer}.ln-t tr.click:hover td,.ln-t tr.click:hover th{background:#F8FAFC}
.ln-t .dv-d{margin-left:2px}
.h-line .h-kv{display:flex;flex-wrap:wrap;gap:6px 22px;padding:10px 14px;align-items:center;font-size:13px}
.h-line .h-kv b{font-size:15px;font-variant-numeric:tabular-nums}
.bc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
#sm-t input{width:100%;min-width:140px}#sm-t select{max-width:170px}
#sm-test-out{font-size:13px}
/* ---- 詢單登記（leads.js）---- */
#ld-t td{vertical-align:top}.ld-need{min-width:180px;white-space:pre-wrap}.ld-co{min-width:120px}
.ld-me{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.ld-me input{width:120px}.ld-me input[aria-label="備註"]{width:160px}
@media (max-width:768px){.br-act{width:100%;padding-left:70px}.ld-me{width:100%}.ld-me input,.ld-me input[aria-label="備註"]{flex:1 1 120px;width:auto;min-height:44px}.ld-me select{min-height:44px}}
@media (max-width:480px){.br-act{padding-left:0}}
.ln-jm{display:none}
@media (max-width:480px){.ln-t th:last-child,.ln-t td.ln-j{display:none}.ln-jm{display:flex;margin-top:2px}.ln-t td,.ln-t th{padding-left:5px;padding-right:5px}.ln-t td .mini{font-size:10.5px}}
/* ---- 設計排程週排程板（規則 31，marketing.js）與設計報表（vendor-report.js） ---- */
.dsnav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 8px}.dsnav .row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.dsnav input[type=search]{flex:1 1 220px;min-width:0;height:36px;border:1px solid #CBD5E1;border-radius:8px;padding:0 10px;font:inherit;font-size:14px}
.dsgrow{flex:1}.dswk{font-size:14px;color:var(--navy-dark);margin-left:4px;font-variant-numeric:tabular-nums}
.dslg{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--muted);margin:0 0 8px}.dslg i,.dsk i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.dsbw{overflow-x:auto;padding-bottom:4px}
.dsb,.dsflow{display:grid;grid-template-columns:repeat(7,minmax(128px,1fr));gap:8px;align-items:stretch}
.dscol{background:var(--panel2);border-radius:10px;padding:8px 6px 6px;min-height:180px;display:flex;flex-direction:column;min-width:0;border:1px solid transparent}
.dscol h4{font-size:13px;margin:0 2px 8px;color:#334155;display:flex;justify-content:space-between;align-items:baseline;gap:4px}
.dscol h4 em{font-style:normal;color:var(--muted);font-weight:400;font-size:11.5px;font-variant-numeric:tabular-nums}
.dscol.today{background:#E6EEF6;border-color:#B7CBE0}.dscol.today h4{color:var(--navy-dark)}
.dscol.past{opacity:.82}
.dscol.side{background:#fff;border:1px dashed #CBD5E1}.dscol.pool{background:#FBFCFD}
.dscol.over{border:2px dashed var(--navy-soft);background:#EEF4FA}
.dscl{flex:1;min-height:40px}
.dsemp{color:#94A3B8;font-size:11.5px;text-align:center;padding:14px 0}
.dsc{background:#fff;border:1px solid var(--border);border-left:4px solid var(--dc,#94A3B8);border-radius:7px;padding:6px 8px;margin-bottom:6px;cursor:pointer;font-size:12.5px;line-height:1.35}
.dsc:hover{border-color:#94A3B8;border-left-color:var(--dc,#94A3B8)}.dsc:focus-visible{outline:2px solid var(--navy);outline-offset:1px}
.dsc[draggable=true]{cursor:grab}.dsc.drag{opacity:.4}
.dsc.long{box-shadow:0 0 0 2px #FCD34D}
.dsc-t{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.dsc-m{display:flex;flex-wrap:wrap;gap:2px 6px;align-items:center;margin-top:3px;font-size:11px;color:var(--muted)}
.dsc-m .tag{font-size:10.5px;padding:0 6px}.dsc .late{color:var(--danger);font-weight:700}
.dsc-mv{display:none}
.dscap{margin-top:6px;padding:6px 2px 0;border-top:1px solid #DCE3EA;font-size:11.5px;color:var(--muted)}
.dscap .bar{display:flex;height:8px;border-radius:4px;background:#fff;overflow:hidden;border:1px solid #D5DDE6}.dscap .bar i{display:block;height:100%}
.dscap .dscl2{margin-top:3px;display:flex;flex-wrap:wrap;gap:2px 8px;align-items:baseline}.dscap .dscl2 b{color:var(--text);font-variant-numeric:tabular-nums}
.dscap.over .bar{border-color:#FCA5A5;background:#FEF2F2}.dscap.over .dscl2 b{color:var(--danger)}
.dsk{display:flex;flex-wrap:wrap;gap:2px 8px}
.dsfoot{display:flex;gap:10px;align-items:center;margin:10px 0 4px;flex-wrap:wrap}
.dslong{font-size:11.5px;color:var(--warn);margin:0 2px 6px}
/* 抽屜 */
.dsbar{padding:12px 24px 8px;background:#F8FAFC;border-bottom:1px solid var(--border)}
.dsbar .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.dsbar #d-backwhy{margin-top:8px;font-size:14px}
.dsacts{margin-top:10px}
.dssteps{display:flex;flex-wrap:wrap;gap:4px;list-style:none;margin:10px 0 0;padding:0;font-size:12px}
.dssteps li{padding:3px 9px;border-radius:12px;background:#fff;border:1px solid var(--border);color:#94A3B8}
.dssteps li.done{color:var(--muted);background:#F1F5F9}
.dssteps li.on{background:var(--navy);border-color:var(--navy);color:#fff;font-weight:700}
.dsrv{margin:12px 24px 0;padding:12px 14px;border:1px solid #FCD34D;background:#FFFBEB;border-radius:10px;display:flex;flex-direction:column;gap:10px}
.dsrv .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.drawer table.dswl{width:100%;border-collapse:collapse;font-size:14px}.drawer table.dswl th,.drawer table.dswl td{padding:6px 8px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}
.dsdraft td{background:#FFFBEB}.dslq{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.dslq b{flex:1 1 100%;font-size:14px}
.drawer .dslq input{width:auto;flex:1 1 110px}
.dswsum{margin:8px 0;font-size:14px}.dswsum b{font-size:16px;color:var(--navy-dark)}
.dswf{border:1px solid var(--border);border-radius:10px;padding:12px;margin-top:8px;display:flex;flex-direction:column;gap:10px}
.dswf .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dsvj{border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:8px;display:flex;flex-direction:column;gap:6px}
.dsvj .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dsvm{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:14px;color:var(--muted)}.dsvm b{color:var(--text)}
.dsvbill{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end}.dsvbill>label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted);flex:1 1 150px}
.drawer .dsvbill>label.dsvpaid{flex:0 0 auto;flex-direction:row;align-items:center}
.dsmore{margin-top:12px;border:1px solid var(--border);border-radius:10px;padding:0 12px}
.dsmore>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;font-size:14px;color:var(--navy-dark)}
.dsmore>.form{padding:0 0 12px!important}
/* Planner 原始紀錄（唯讀） */
.plrec{min-width:0}.plrec>summary{flex-wrap:wrap;gap:4px}td>.plrec{min-width:280px}
.plrec .plsec{padding:0 0 10px;min-width:0}.plrec .plsec>b{display:block;margin-bottom:4px}
.plnote{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px;line-height:1.6}
.plck{font-size:14px;overflow-wrap:anywhere;padding:2px 0}.plck>label{display:flex;gap:6px;align-items:flex-start}.plck input{margin-top:3px;flex:none}
.plk{overflow-wrap:anywhere;word-break:break-all;font-size:14px}
.plrec .plinfo{padding:0 0 10px!important}.plrec .plinfo>div{min-width:0;overflow-wrap:anywhere}
/* 報表 */
.rpmon{display:flex;gap:6px;align-items:center}.rpmon input[type=month]{height:36px;border:1px solid #CBD5E1;border-radius:8px;padding:0 8px;font:inherit;font-size:14px}
.rpbig{font-size:13px;color:var(--muted)}.rpbig b{font-size:18px;color:var(--navy-dark);font-variant-numeric:tabular-nums}
.rp2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:0 14px}
.rptot td{font-weight:700;background:#F8FAFC}
.vrin{height:34px;border:1px solid #CBD5E1;border-radius:6px;padding:0 8px;font:inherit;font-size:13px;width:120px;max-width:100%}
.vrpaid{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.dmstats{border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:14px}
.dmth{font:inherit;font-weight:700;border:0;background:none;padding:0;cursor:pointer;color:inherit;white-space:nowrap}.dmth.on{color:var(--navy-dark)}
.dmdot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px}
.dmcharts{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;padding:10px 12px}
.dmbars{margin:0}.dmbars figcaption{font-size:12.5px;font-weight:700;margin-bottom:6px}
.dmb{display:grid;grid-template-columns:80px minmax(0,1fr) 44px;gap:6px;align-items:center;font-size:12px;margin-bottom:4px}
.dmbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.dmbt{height:10px;background:#EEF2F6;border-radius:5px;overflow:hidden}.dmbt i{display:block;height:100%;border-radius:5px}
.dmb b{text-align:right;font-variant-numeric:tabular-nums}
.dmhelp{border:1px solid #FCD34D;background:#FFFBEB;border-radius:10px;margin-bottom:8px}
.dmhb{display:flex;gap:8px;align-items:center;flex-wrap:wrap;width:100%;text-align:left;border:0;background:none;font:inherit;font-size:14px;padding:10px 12px;cursor:pointer;min-height:44px;color:#713F12}
.dmhelp ul{margin:0;padding:0 12px 10px 32px;font-size:14px}.dmhelp li{margin:3px 0}
.dmfm{max-width:none}.dmpd{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.fz textarea[readonly]{background:#F8FAFC}
@media (max-width:768px){
  .dsb,.dsflow{grid-template-columns:minmax(0,1fr)}
  .dscol{min-height:0}.dscol .dsemp{padding:6px 0}
  .dsc-mv{display:block;width:100%;margin-top:6px;font-size:16px;min-height:44px;border:1px solid #CBD5E1;border-radius:8px;background:#fff;padding:0 8px}
  .dsbar{padding:12px 16px 8px}.dsrv{margin:12px 16px 0}
  .dsnav input[type=search],.rpmon input[type=month],.vrin{min-height:44px;font-size:16px}
  .dmb{grid-template-columns:70px minmax(0,1fr) 40px}
}
