/* 仪表盘 */
.cards { display:flex; gap:16px; flex-wrap:wrap; margin-bottom:22px; }
.stat-card { flex:1; min-width:160px; background:#fff; border-radius:10px; padding:18px 20px; border:1px solid var(--line); }
.stat-card .num { font-size:28px; font-weight:800; color:var(--blue); }
.stat-card .lbl { font-size:13px; color:var(--muted); margin-top:4px; }
.panel { background:#fff; border-radius:10px; border:1px solid var(--line); padding:18px 20px; margin-bottom:20px; }
.panel h3 { font-size:15px; color:var(--blue); margin-bottom:14px; }
.bar-row { display:flex; align-items:center; margin-bottom:8px; font-size:13px; }
.bar-row .bl { width:90px; color:var(--muted); }
.bar-track { flex:1; background:#eef1f6; border-radius:6px; height:18px; overflow:hidden; }
.bar-fill { height:100%; background:var(--blue2); }
.bar-val { width:90px; text-align:right; color:#444; }
.act-item { font-size:13px; color:#555; padding:8px 0; border-bottom:1px dashed var(--line); }
.act-item:last-child { border-bottom:none; }

/* 仪表盘卡片可点击 */
.stat-card { cursor:pointer; transition:box-shadow .15s, border-color .15s; }
.stat-card:hover { box-shadow:0 6px 18px rgba(14,63,143,.12); border-color:var(--blue2); }
.stat-card .lbl { color:var(--muted); }
.stat-card .lbl::after { content:' ›'; color:var(--blue2); font-weight:700; }
/* ===== 门户 ===== */
.portal { display:flex; flex-direction:column; gap:16px; }
.pwelcome { display:flex; justify-content:space-between; align-items:center; background:linear-gradient(135deg,#0e3f8f,#1a5fd0); color:#fff; border-radius:14px; padding:22px 26px; }
.pwelcome h2 { font-size:22px; margin:0 0 6px; color:#fff; }
.pmeta { font-size:13px; opacity:.85; }
.pquick { display:flex; gap:10px; }
.qbtn { background:rgba(255,255,255,.15); color:#fff; border:1px solid rgba(255,255,255,.3); border-radius:8px; padding:9px 16px; font-size:14px; cursor:pointer; transition:all .15s; }
.qbtn:hover { background:rgba(255,255,255,.25); }
.pstat-row { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.pstat { display:flex; align-items:center; gap:14px; background:#fff; border:1px solid var(--line); border-radius:12px; padding:16px 18px; box-shadow:0 2px 8px rgba(15,40,80,.05); }
.pstat-icon { width:46px; height:46px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:20px; font-weight:700; color:#fff; flex:0 0 46px; }
.pstat.red .pstat-icon { background:#ef4444; }
.pstat.blue .pstat-icon { background:#3b82f6; }
.pstat.amber .pstat-icon { background:#f59e0b; }
.pstat.green .pstat-icon { background:#22c55e; }
.pstat-label { font-size:12px; color:#889; }
.pstat-value { font-size:24px; font-weight:700; color:#1c2c4e; line-height:1.2; }
.pstat-sub { font-size:12px; color:#99a; }
/* 门户卡副标题：严重滞后/需关注 分色标签（同类型同底色，两卡一致） */
.pc-tag { display:inline-block; padding:2px 8px; border-radius:999px; font-size:12px; line-height:1.5; margin-right:6px; font-weight:600; }
.pc-tag.crit { background:#fde8e8; color:#dc2626; }
.pc-tag.warn { background:#fef3c7; color:#b45309; }
.pc-tag.zero { background:#eef1f5; color:#94a3b8; }
.playout { display:grid; grid-template-columns:1fr 340px; gap:16px; align-items:start; }
.psection { background:#fff; border:1px solid var(--line); border-radius:12px; }
.psection-head { display:flex; align-items:center; gap:12px; padding:14px 18px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.psection-head h3 { margin:0; font-size:15px; color:#1c2c4e; }
.phead-tabs { display:flex; gap:6px; margin-left:auto; }
.ptab { padding:5px 12px; font-size:13px; color:#666; background:none; border:1px solid transparent; border-radius:20px; cursor:pointer; transition:all .15s; }
.ptab:hover { background:#f0f4fa; color:#0e3f8f; }
.ptab.active { background:#eef2fb; color:#0e3f8f; font-weight:600; border-color:#d4e3fb; }
.padmin-link { font-size:12px; color:#1a5fd0; background:none; border:none; cursor:pointer; }
.padmin-link:hover { text-decoration:underline; }
.papp-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; padding:16px 18px; }
.papp-card { display:flex; align-items:center; gap:12px; padding:14px; border:1px solid var(--line); border-radius:10px; cursor:pointer; transition:all .15s; background:#fff; }
.papp-card:hover { border-color:#b7cbf0; box-shadow:0 4px 14px rgba(26,95,208,.12); transform:translateY(-2px); }
.papp-icon { width:42px; height:42px; border-radius:10px; display:flex; align-items:center; justify-content:center; color:#fff; font-weight:700; font-size:15px; flex:0 0 42px; }
.papp-name { font-size:14px; font-weight:600; color:#1c2c4e; }
.papp-desc { font-size:12px; color:#99a; margin-top:2px; }
.pcol-aside { display:flex; flex-direction:column; gap:14px; }
.paside-card { background:#fff; border:1px solid var(--line); border-radius:12px; padding:14px 16px; }
.phead { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.phead h4 { margin:0; font-size:14px; color:#1c2c4e; }
.pt-count { color:#e74c3c; font-size:11px; font-weight:400; }
.plink { font-size:12px; color:#1a5fd0; background:none; border:none; cursor:pointer; }
.plink:hover { text-decoration:underline; }
.paside-list { list-style:none; margin:0; padding:0; }
.paside-list li { padding:9px 0; border-bottom:1px solid #f2f4f7; }
.paside-list li:last-child { border-bottom:none; }
.row1 { display:flex; align-items:center; gap:8px; font-size:13px; color:#333; }
.row2 { display:flex; justify-content:space-between; align-items:center; font-size:12px; color:#99a; margin-top:4px; padding-left:14px; }
.pt-title { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pt-src { background:#eef2fb; color:#0e3f8f; font-size:11px; padding:1px 8px; border-radius:4px; }
.pt-due-over { color:#e74c3c; font-weight:600; }
.pt-new { background:#e74c3c; color:#fff; font-size:10px; padding:1px 6px; border-radius:8px; }
.prio-dot { width:8px; height:8px; border-radius:50%; flex:0 0 8px; }
.prio-urgent { background:#e74c3c; }
.prio-high { background:#f59e0b; }
.prio-mid { background:#3b82f6; }
.prio-low { background:#94a3b8; }
/* 待办中心 */
.ptabs-bar { display:flex; gap:4px; padding:0 2px; margin-bottom:14px; flex-wrap:wrap; }
.ptabs-bar .ptab { border-radius:8px; }
.ptab-count { font-size:11px; opacity:.7; margin-left:2px; }
.psection-body { padding:6px 0; }
.trow { display:flex; align-items:center; gap:14px; padding:13px 18px; border-bottom:1px solid #f2f4f7; }
.trow:last-child { border-bottom:none; }
.trow.done .ttitle { color:#99a; text-decoration:line-through; }
.prio { width:4px; height:40px; border-radius:2px; flex:0 0 4px; }
.prio.urgent { background:#e74c3c; }
.prio.high { background:#f59e0b; }
.prio.mid { background:#3b82f6; }
.prio.low { background:#94a3b8; }
.tbody { flex:1; min-width:0; }
.ttitle { font-size:14px; color:#1c2c4e; font-weight:500; }
.tmeta { display:flex; align-items:center; gap:10px; margin-top:5px; flex-wrap:wrap; }
.tsrc { font-size:11px; color:#1a5fd0; background:#eef2fb; padding:1px 8px; border-radius:4px; }
.due { font-size:12px; color:#99a; }
.due.overdue { color:#e74c3c; font-weight:600; }
/* 待办中心：每条显示关联人（负责人），首字母头像 + @姓名；后端 portalTodos() 已派生 owner_name */
.tuser { display:inline-flex; align-items:center; gap:5px; font-size:12px; color:#475569; font-weight:500; }
.tuser .ava { width:16px; height:16px; border-radius:50%; background:#3b82f6; color:#fff; font-style:normal; font-size:10px; line-height:1; display:inline-flex; align-items:center; justify-content:center; font-weight:600; }
/* 应用管理 */
.data-table { width:100%; border-collapse:collapse; }
.data-table th, .data-table td { padding:11px 14px; font-size:13px; text-align:left; border-bottom:1px solid #f0f2f5; }
.data-table th { background:#f7f9fc; color:#556; font-weight:600; white-space:nowrap; }
.data-table td { color:#333; }
.mini-icon { display:inline-flex; width:26px; height:26px; border-radius:6px; align-items:center; justify-content:center; color:#fff; font-weight:700; font-size:12px; margin-right:8px; }
.aurl { color:#1a5fd0; font-size:12px; word-break:break-all; }
.arow-actions a { color:#1a5fd0; font-size:13px; margin-right:10px; text-decoration:none; }
.arow-actions a:hover { text-decoration:underline; }
.arow-actions a.danger { color:#e74c3c; }
.checkbox-row { display:flex; flex-wrap:wrap; gap:8px 14px; }
@media (max-width:1100px){ .playout { grid-template-columns:1fr; } .papp-grid { grid-template-columns:repeat(2,1fr); } }
@media (max-width:820px){ .pstat-row { grid-template-columns:repeat(2,1fr); } .papp-grid { grid-template-columns:1fr; } }
/* 门户欢迎条 + 天气 */
.pwelcome { display:flex; justify-content:space-between; align-items:stretch; gap:18px; margin-bottom:16px; }
.pwelcome .pw-left { flex:1; background:linear-gradient(135deg,#1d5bce,#2a7cf0); color:#fff; border-radius:14px; padding:22px 28px; }
.pwelcome .pw-left h2 { font-size:22px; margin:0 0 6px; color:#fff; }
.pwelcome .pw-sub { font-size:14px; opacity:.92; margin-bottom:10px; }
.pwelcome .pw-date { display:flex; gap:18px; font-size:13px; opacity:.92; flex-wrap:wrap; }
.pwelcome .pw-date span { display:inline-flex; align-items:center; gap:5px; }
.pwelcome .pw-quick { display:flex; gap:10px; margin-top:14px; }
.pwelcome .qbtn { background:rgba(255,255,255,.18); color:#fff; border:1px solid rgba(255,255,255,.35); border-radius:8px; padding:8px 14px; font-size:13px; cursor:pointer; transition:all .15s; }
.pwelcome .qbtn:hover { background:rgba(255,255,255,.28); }
.pwelcome .pw-weather { flex:0 0 280px; background:linear-gradient(135deg,#3a8bf2,#5aa8ff); color:#fff; border-radius:14px; padding:18px 22px; display:flex; flex-direction:column; justify-content:space-between; cursor:pointer; transition:all .15s; }
.pwelcome .pw-weather:hover { transform:translateY(-2px); box-shadow:0 6px 18px rgba(58,139,242,.3); }
.pw-weather .pw-row1 { display:flex; align-items:center; gap:10px; }
.pw-weather .pw-icon { font-size:36px; line-height:1; }
.pw-weather .pw-loc { font-size:14px; opacity:.95; cursor:pointer; border-bottom:1px dashed rgba(255,255,255,.5); padding-bottom:1px; transition:border-color .15s; }
.pw-weather .pw-loc:hover { border-bottom-color:#fff; }
.pw-weather .pw-temp { font-size:36px; font-weight:700; line-height:1; }
.pw-weather .pw-desc { font-size:13px; opacity:.95; }
.pw-weather .pw-detail { display:flex; gap:14px; font-size:12px; opacity:.85; margin-top:8px; }
.pw-weather .pw-detail span { display:inline-flex; align-items:center; gap:3px; }
.pw-weather .pw-meta { font-size:11px; opacity:.7; margin-top:6px; }

/* 门户主布局 */
.portal { display:flex; flex-direction:column; gap:16px; }
.pstat-row { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.pstat { display:flex; align-items:center; gap:14px; background:#fff; border:1px solid var(--line); border-radius:12px; padding:16px 18px; box-shadow:0 2px 8px rgba(15,40,80,.05); }
.pstat-icon { width:46px; height:46px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:20px; font-weight:700; color:#fff; flex:0 0 46px; }
.pstat.red .pstat-icon { background:#ef4444; }
.pstat.blue .pstat-icon { background:#3b82f6; }
.pstat.amber .pstat-icon { background:#f59e0b; }
.pstat.green .pstat-icon { background:#22c55e; }
.pstat-label { font-size:12px; color:#889; }
.pstat-value { font-size:24px; font-weight:700; color:#1c2c4e; line-height:1.2; }
.pstat-sub { font-size:12px; color:#99a; }

/* 门户待处理任务轮播条（位于 welcome 与统计卡片之间） */
.task-ticker { display:flex; align-items:center; gap:12px; background:#fff; border:1px solid var(--line); border-radius:12px; padding:10px 14px; box-shadow:0 2px 8px rgba(15,40,80,.05); position:relative; overflow:hidden; }
.task-ticker:empty { display:none; }
.ticker-label { flex:0 0 auto; background:linear-gradient(135deg,#0e3f8f,#1a5fd0); color:#fff; font-size:13px; font-weight:600; padding:6px 10px; border-radius:8px; white-space:nowrap; }
.ticker-viewport { flex:1; min-width:0; height:44px; overflow:hidden; position:relative; }
.ticker-track { display:flex; flex-direction:column; }
.ticker-item { flex:0 0 44px; height:44px; display:flex; align-items:center; gap:12px; padding:0 10px; border-radius:8px; cursor:pointer; transition:background .15s; box-sizing:border-box; }
.ticker-item:hover { filter:brightness(.98); }
.ticker-item.urgent { background:#fff1f0; border-left:4px solid #ef4444; }
.ticker-item.warning { background:#fffbeb; border-left:4px solid #f59e0b; }
.ticker-icon { width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:14px; flex:0 0 28px; }
.ticker-item.urgent .ticker-icon { background:#fecaca; }
.ticker-item.warning .ticker-icon { background:#fde68a; }
.ticker-body { flex:1; min-width:0; display:flex; flex-direction:column; justify-content:center; }
.ticker-title { font-size:14px; font-weight:600; color:#1c2c4e; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ticker-meta { font-size:12px; color:#7a869a; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-top:1px; }
.ticker-item.urgent .ticker-meta { color:#b91c1c; }
.ticker-item.warning .ticker-meta { color:#92400e; }
.ticker-go { flex:0 0 auto; background:#fff; border:1px solid var(--line); color:#1a5fd0; font-size:12px; padding:5px 10px; border-radius:6px; cursor:pointer; transition:all .15s; }
.ticker-go:hover { background:#0e3f8f; color:#fff; border-color:#0e3f8f; }
.ticker-nav { display:flex; flex-direction:column; gap:4px; flex:0 0 auto; }
.ticker-nav button { width:24px; height:20px; border:1px solid var(--line); background:#fff; border-radius:4px; cursor:pointer; color:#667; font-size:14px; line-height:1; display:flex; align-items:center; justify-content:center; transition:all .15s; }
.ticker-nav button:hover { background:#0e3f8f; color:#fff; border-color:#0e3f8f; }
.ticker-dots { position:absolute; right:50px; bottom:6px; display:flex; gap:5px; }
.ticker-dot { width:6px; height:6px; border-radius:50%; background:#d1d5db; cursor:pointer; transition:all .15s; }
.ticker-dot.active { background:#0e3f8f; transform:scale(1.2); }

@media (max-width:820px){
  .task-ticker { flex-wrap:wrap; gap:8px; padding:10px 12px; }
  .ticker-label { font-size:12px; padding:5px 8px; }
  .ticker-viewport { width:100%; height:40px; order:2; }
  .ticker-item { height:40px; }
  .ticker-nav { flex-direction:row; order:3; margin-left:auto; }
  .ticker-dots { position:static; order:3; }
  .ticker-go { display:none; }
}

.playout { display:grid; grid-template-columns:1fr 320px; gap:16px; align-items:start; }

/* 应用中心（横排紧凑） */
.psection { background:#fff; border:1px solid var(--line); border-radius:12px; }
.psection-head { display:flex; align-items:center; gap:12px; padding:14px 18px; border-bottom:1px solid var(--line); flex-wrap:wrap; }
.psection-head h3 { margin:0; font-size:15px; color:#1c2c4e; }
.phead-tabs { display:flex; gap:6px; margin-left:auto; }
.ptab { padding:5px 12px; font-size:13px; color:#666; background:none; border:1px solid transparent; border-radius:20px; cursor:pointer; transition:all .15s; }
.ptab:hover { background:#f0f4fa; color:#0e3f8f; }
.ptab.active { background:#eef2fb; color:#0e3f8f; font-weight:600; border-color:#d4e3fb; }

.papp-row { display:grid; grid-template-columns:repeat(8,1fr); gap:14px; padding:18px; }
.papp-mini { display:flex; flex-direction:column; align-items:center; gap:6px; padding:10px 6px; border-radius:10px; cursor:pointer; transition:all .15s; text-align:center; }
.papp-mini:hover { background:#f4f7fc; transform:translateY(-2px); }
.papp-mini-icon { width:48px; height:48px; border-radius:12px; display:flex; align-items:center; justify-content:center; color:#fff; font-weight:700; font-size:18px; box-shadow:0 4px 10px rgba(15,40,80,.12); }
.papp-mini-name { font-size:13px; color:#1c2c4e; font-weight:500; line-height:1.2; max-width:80px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.papp-mini-desc { font-size:11px; color:#99a; }

/* 待办任务表格 */
.portal-task-table { width:100%; border-collapse:collapse; padding:0 18px 18px; }
.portal-task-table th, .portal-task-table td { padding:11px 10px; font-size:13px; text-align:left; border-bottom:1px solid #f0f2f5; }
.portal-task-table th { color:#556; font-weight:600; background:#fafbfc; font-size:12px; }
.portal-task-table td { color:#333; }
.portal-task-table tr { cursor:pointer; transition:background .12s; }
.portal-task-table tr:hover { background:#f4f7fc; }
.portal-task-table .ptype { font-size:12px; color:#0e3f8f; }
.portal-task-table .pno { color:#1a5fd0; font-weight:500; }
.portal-task-table .pstatus { display:inline-block; padding:2px 8px; border-radius:10px; font-size:11px; }
.portal-task-table .pstatus.wait { background:#fff7e6; color:#b25400; }
.portal-task-table .pstatus.doing { background:#e0f2fe; color:#0369a1; }
.portal-task-table .pstatus.done { background:#d1fae5; color:#065f46; }
.portal-task-table .pop { color:#1a5fd0; font-size:13px; text-decoration:none; }

/* 右侧日历 */
.cal-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.cal-head h4 { margin:0; font-size:14px; color:#1c2c4e; }
.cal-sel { display:flex; gap:6px; align-items:center; font-size:12px; color:#556; }
.cal-sel button { padding:3px 10px; font-size:12px; border:1px solid var(--line); background:#fff; border-radius:6px; cursor:pointer; }
.cal-sel button.active { background:#0e3f8f; color:#fff; border-color:#0e3f8f; }
.cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:4px; font-size:11px; text-align:center; color:#556; }
.cal-grid .ck { padding:6px 0; border-radius:6px; background:transparent; position:relative; }
.cal-grid .ck-count { position:absolute; top:-3px; right:-3px; min-width:14px; height:14px; line-height:14px; padding:0 3px; background:#e74c3c; color:#fff; font-size:9px; border-radius:7px; box-shadow:0 0 0 1px #fff; font-weight:600; }
.cal-grid .ck.muted { color:#c0c5cd; }
.cal-grid .ck.today { background:#0e3f8f; color:#fff; font-weight:600; }
.cal-grid .ck.has-task { position:relative; }
.cal-grid .ck.has-task::after { content:''; position:absolute; bottom:3px; left:50%; transform:translateX(-50%); width:6px; height:6px; border-radius:50%; background:#e74c3c; box-shadow:0 0 0 2px rgba(231,76,60,.2); }
.cal-grid .ck { cursor:pointer; transition:background .15s; }
.cal-grid .ck:hover { background:#f4f7fc; }
.cal-grid .ck.today.has-task::after { background:#fff; box-shadow:0 0 0 2px rgba(255,255,255,.4); }
.cal-grid .ck.has-task::after { content:''; position:absolute; bottom:3px; left:50%; transform:translateX(-50%); width:7px; height:7px; border-radius:50%; background:#e74c3c; box-shadow:0 0 0 2px rgba(231,76,60,.25); }
.cal-grid .ckwk { color:#99a; font-weight:600; padding:7px 0; border-bottom:1px solid #f0f2f5; margin-bottom:4px; }

/* 公告列表 */
.paside-list { list-style:none; margin:0; padding:0; }
.paside-list li { padding:10px 0; border-bottom:1px solid #f2f4f7; cursor:pointer; transition:background .12s; }
.paside-list li:hover { background:#f4f7fc; padding-left:6px; padding-right:6px; margin:0 -6px; border-radius:6px; border-bottom-color:transparent; }
.paside-list li:last-child { border-bottom:none; }
.paside-list .row1 { display:flex; align-items:center; gap:8px; font-size:13px; color:#333; }
.paside-list .row2 { display:flex; justify-content:space-between; align-items:center; font-size:11px; color:#99a; margin-top:4px; padding-left:18px; }
.paside-tag { background:#fef3c7; color:#92400e; padding:1px 6px; border-radius:4px; font-size:11px; }
.paside-tag.urgent { background:#fee2e2; color:#b91c1c; }
.paside-tag.important { background:#fee2e2; color:#b91c1c; }
.paside-tag.normal { background:#eef1f5; color:#6b7280; }

.pcol-aside { display:flex; flex-direction:column; gap:14px; }
.paside-card { background:#fff; border:1px solid var(--line); border-radius:12px; padding:14px 16px; }
.phead { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.phead h4 { margin:0; font-size:14px; color:#1c2c4e; }
.plink { font-size:12px; color:#1a5fd0; background:none; border:none; cursor:pointer; }
.plink:hover { text-decoration:underline; }

/* 日计划弹窗列表 */
.day-plan-item { display:flex; gap:12px; padding:12px 0; border-bottom:1px solid #f2f4f7; align-items:flex-start; }
.day-plan-item:last-child { border-bottom:none; }
.day-plan-item.done .day-plan-title { text-decoration:line-through; color:#99a; }
.day-plan-item .prio { width:4px; min-height:48px; border-radius:2px; flex:0 0 4px; margin-top:2px; }
.day-plan-item .prio.urgent { background:#e74c3c; }
.day-plan-item .prio.high { background:#f59e0b; }
.day-plan-item .prio.mid { background:#3b82f6; }
.day-plan-item .prio.low { background:#94a3b8; }
.day-plan-body { flex:1; min-width:0; }
.day-plan-title { font-size:14px; color:#1c2c4e; font-weight:500; }
.day-plan-meta { display:flex; gap:6px; align-items:center; margin-top:5px; flex-wrap:wrap; }
.day-plan-meta .muted { color:#99a; font-size:12px; }
.day-plan-remark { color:#666; font-size:12px; margin-top:5px; padding-left:2px; line-height:1.5; }
.day-plan-ops { display:flex; gap:4px; flex:0 0 auto; }
.day-plan-ops .icon-btn { background:none; border:none; cursor:pointer; padding:4px; font-size:14px; border-radius:4px; transition:background .15s; }
.day-plan-ops .icon-btn:hover { background:#f0f4fa; }
.todo-mini .row1 { padding-left:14px; }
.prio-dot { width:8px; height:8px; border-radius:50%; flex:0 0 8px; }
.prio-urgent { background:#e74c3c; }
.prio-high { background:#f59e0b; }
.prio-mid { background:#3b82f6; }
.prio-low { background:#94a3b8; }

@media (max-width:1100px){
  .playout { grid-template-columns:1fr; }
  .papp-row { grid-template-columns:repeat(4,1fr); }
}
@media (max-width:820px){
  .pstat-row { grid-template-columns:repeat(2,1fr); }
  .papp-row { grid-template-columns:repeat(2,1fr); }
  .pwelcome { flex-direction:column; }
  .pwelcome .pw-weather { flex:none; width:100%; }
}
/* 待办表格 Tab */
.day-task-tabs { display:flex; gap:4px; padding:0; flex-wrap:wrap; }
.day-task-tabs .ptab { padding:5px 14px; font-size:13px; }
.day-task-tabs .ptab-count { background:#f0f4fa; color:#0e3f8f; padding:1px 6px; border-radius:8px; font-size:11px; margin-left:4px; }
.day-task-tabs .ptab.active .ptab-count { background:#0e3f8f; color:#fff; }
/* ===== 待办中心：按客户分组 + 置顶 ===== */
.pt-group { margin-bottom:14px; padding:8px 0; }
.pt-group-head { display:flex; align-items:center; padding:8px 12px; background:#f6f8fb; border-left:3px solid #185fa5; border-radius:4px; margin-bottom:6px; }
.pt-group-overdue > .pt-group-head { background:#fce8e8; border-left-color:#a32d2d; }
.pt-group-name { font-size:13px; font-weight:500; color:#0c447c; }
.pt-group-overdue .pt-group-name { color:#791f1f; }
.trow.overdue { background:linear-gradient(0deg,#fff5f5 0%,#fff 100%); }
.trow .due.overdue { color:#a32d2d; font-weight:500; }
.trow .due.today { color:#c66a00; font-weight:500; }
.pt-reply { margin-top:5px; font-size:12px; color:#0e3f8f; background:#f0f5fd; border:1px solid #dbe6f5; border-radius:5px; padding:3px 8px; display:inline-block; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; cursor:pointer; }
.pt-reply:hover { background:#e2edfa; }

/* 只读视图徽章（任务/工单/跟进：非负责人仅查看） */
.readonly-badge { display:inline-block; margin-left:10px; padding:2px 9px; border-radius:20px; font-size:12px; font-weight:500; color:#92400e; background:#fef3c7; border:1px solid #fde68a; vertical-align:middle; white-space:nowrap; }

/* ===== 工作日报：门户收工卡 + 编辑器（P1 2026-09-08） ===== */
/* 说明：卡片/编辑器的关键样式已在 app.js 内以 inline-style 落了一份（双重保险），
   这里补充 hover 态、窄屏适配等 inline 无法表达的部分。 */
.wcard { box-shadow:0 1px 3px rgba(16,24,40,.05); }
.wcard.todo:hover { border-color:#e8a5a2; }
.wcard.done:hover { border-color:#a5d6b8; }
.wc-badge { font-weight:500; letter-spacing:.5px; flex:none; }
.wc-btn { font-weight:500; transition:all .15s ease; }
.wc-btn:hover { filter:brightness(1.06); }
.wc-btn.ghost:hover { background:#f6f8fb; border-color:#94a3b8; }
/* 日报编辑器（挂在 modal-body 内） */
.wr-editor { font-size:13px; color:var(--text,#333); }
.wr-item:hover { background:#f8fafc; }
.wr-item input[type=checkbox] { width:15px; height:15px; accent-color:#0e3f8f; cursor:pointer; flex:none; }
.wr-manual .wr-input:focus { outline:none; border-color:#0e3f8f; }
.wr-del:hover { background:#fef2f2; border-color:#f5c2c0; }
@media (max-width:640px){
  .wcard { flex-wrap:wrap; }
  .wcard .wc-btn, .wcard button { margin-left:0 !important; }
}

/* ---- 收工卡 v2（2026-09-08 按原型改版：白卡 + 图标 + 分类 chips）---- */
.wcard-hello { margin:12px 0 0; }
.wc2 { align-items:flex-start; padding:16px 18px; background:#fff; border:1px solid #eef1f6; }
.wc2.wcard.todo:hover { border-color:#e8a5a2; }
.wc2-ico { flex:none; width:38px; height:38px; border-radius:10px; background:#fff1e0; color:#d97706; font-weight:800; font-size:20px; display:flex; align-items:center; justify-content:center; }
.wc2-main { flex:1; min-width:0; }
.wc2-t { font-size:15px; font-weight:700; color:#1e293b; }
.wc2-s { font-size:13px; color:#64748b; margin-top:3px; }
.wc2-s b { color:#d93636; }
.wc2-chips { display:flex; flex-wrap:wrap; gap:6px; margin-top:10px; }
.wc2-chip { font-size:12px; color:#334155; background:#f1f5f9; border:1px solid #e2e8f0; border-radius:14px; padding:2px 10px; white-space:nowrap; }
.wc2-chip b { color:#0e3f8f; }
.wc2-acts { flex:none; display:flex; align-items:center; gap:10px; align-self:center; }
.wc2-gen { border:0; background:#0e3f8f; color:#fff; font-size:13px; padding:7px 16px; border-radius:7px; cursor:pointer; }
.wc2-gen:hover { background:#0b3478; }
@media (max-width:720px){
  .wc2 { flex-wrap:wrap; }
  .wc2-acts { width:100%; justify-content:flex-end; padding-top:4px; }
}

/* ---- 团队看板 v5（2026-09-08 对照原型：KPI 卡 + 全员表格）---- */
.wrb-kpis { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin:12px 0; }
.wrb-kpi { display:flex; align-items:center; gap:12px; background:#fff; border:1px solid #eef1f6; border-radius:12px; padding:14px 16px; box-shadow:0 1px 3px rgba(16,24,40,.05); }
.wrb-kpi .k-ico { flex:none; width:38px; height:38px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:16px; font-weight:700; }
.wrb-kpi .lbl { display:block; font-size:12px; color:#94a3b8; margin-bottom:2px; }
.wrb-kpi b { font-size:20px; color:#1e293b; line-height:1.2; }
.wrb-kpi b i { font-style:normal; font-size:13px; color:#94a3b8; font-weight:400; }
.wrt-card { background:#fff; border:1px solid #eef1f6; border-radius:12px; box-shadow:0 1px 3px rgba(16,24,40,.05); overflow:hidden; }
.wrt-head { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid #eef1f6; flex-wrap:wrap; }
.wrt-head b { font-size:15px; color:#1e293b; }
.wrt-btn { height:30px; padding:0 14px; font-size:13px; border-radius:6px; border:1px solid #d8dee9; background:#fff; color:#334155; cursor:pointer; }
.wrt-btn:hover { background:#f6f8fb; border-color:#94a3b8; }
.wrt-btn:disabled { opacity:.5; cursor:default; }
.wrt-scroll { overflow-x:auto; }
table.wrt { width:100%; border-collapse:collapse; min-width:640px; }
table.wrt th { text-align:left; font-size:12px; color:#94a3b8; font-weight:500; padding:10px 16px; border-bottom:1px solid #eef1f6; background:#fafbfd; white-space:nowrap; }
table.wrt td { padding:12px 16px; border-bottom:1px solid #f1f4f8; font-size:13px; color:#334155; vertical-align:middle; }
table.wrt tr.wrt-r:hover td { background:#fafcff; }
.wrt-u { display:flex; align-items:center; gap:10px; min-width:120px; }
.wrt-u .wr-avatar { width:34px; height:34px; font-size:14px; flex:none; }
.wrt-u .nm { font-weight:600; color:#1e293b; font-size:13px; line-height:1.3; }
.wrt-u .rl { font-size:11px; color:#94a3b8; line-height:1.3; }
.wrt-sum { max-width:420px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.wrt-act { color:#0e3f8f; cursor:pointer; font-size:13px; white-space:nowrap; margin-right:12px; }
.wrt-act:hover { text-decoration:underline; }
tr.wrt-detail > td { background:#fbfcfe; padding:16px 24px; }
.wrt-foot { padding:10px 16px; font-size:12px; color:#94a3b8; background:#fafbfd; border-top:1px solid #eef1f6; }
@media (max-width:860px){
  .wrb-kpis { grid-template-columns:repeat(2,1fr); }
  .wrt-sum { max-width:200px; }
}
@media (max-width:560px){
  .wrb-kpi { padding:10px 12px; }
  .wrb-kpi b { font-size:17px; }
}

/* ===== 工作日报看板（P1 2026-09-08 阶段④；v3 单表头 + Tab + 全宽自适应） ===== */
/* 全宽自适应：不再限宽居中，随内容区流式撑满 */
.wr-board { width:100%; max-width:none; margin:0; }
/* 顶部工具栏（唯一表头=全局顶栏面包屑；此处仅工具栏，不重复页面标题） */
.wrb-bar { position:relative; overflow:hidden; display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  border-radius:12px; padding:10px 16px; color:#fff;
  background:linear-gradient(135deg,#0e3f8f 0%,#1d55b0 55%,#2f6fd0 100%);
  box-shadow:0 2px 8px rgba(14,63,143,.16); }
.wrb-bar::after { content:''; position:absolute; right:-40px; top:-70px; width:180px; height:180px; border-radius:50%; background:rgba(255,255,255,.07); }
.wrb-bar::before { content:''; position:absolute; right:120px; bottom:-90px; width:130px; height:130px; border-radius:50%; background:rgba(255,255,255,.05); }
.wrb-bar > * { position:relative; z-index:1; }
.wrb-subline { font-size:12px; color:#64748b; margin:8px 2px 0; }
/* Tab 切换（团队日报 / 我的日报） */
.wrb-tabs { display:flex; gap:4px; background:rgba(255,255,255,.14); border-radius:9px; padding:3px; }
.wrb-tab { height:28px; padding:0 16px; border:none; border-radius:7px; background:transparent; color:rgba(255,255,255,.85); font-size:13px; cursor:pointer; transition:all .15s ease; }
.wrb-tab:hover { color:#fff; background:rgba(255,255,255,.12); }
.wrb-tab.on { background:#fff; color:#0e3f8f; font-weight:600; box-shadow:0 1px 3px rgba(0,0,0,.18); }
/* 当前账号 chip */
.wrb-me { display:flex; align-items:center; gap:8px; background:rgba(255,255,255,.14); border:1px solid rgba(255,255,255,.28); border-radius:9px; padding:4px 12px 4px 5px; }
.wrb-me-name { font-size:13px; font-weight:600; color:#fff; white-space:nowrap; }
.wrb-me-role { font-size:11px; color:rgba(255,255,255,.85); background:rgba(255,255,255,.16); padding:1px 7px; border-radius:8px; white-space:nowrap; }
.wrb-datebar { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.wrb-datebar .btn { height:30px; padding:0 12px; font-size:12px; border-radius:7px; }
.wrb-datebar .btn-ghost { background:rgba(255,255,255,.14); border:1px solid rgba(255,255,255,.35); color:#fff; }
.wrb-datebar .btn-ghost:hover { background:rgba(255,255,255,.25); }
.wrb-datebar input[type=date] { height:30px; padding:0 8px; border-radius:7px; border:1px solid rgba(255,255,255,.35); background:rgba(255,255,255,.14); color:#fff; font-size:12px; }
.wrb-datebar input[type=date]::-webkit-calendar-picker-indicator { filter:invert(1); opacity:.8; cursor:pointer; }
/* 统计 chips */
.wrb-stats { display:flex; gap:10px; flex-wrap:wrap; margin:14px 0 16px; }
.wrb-chip { display:inline-flex; align-items:center; gap:10px; background:#fff; border:1px solid #e5e9f0; border-radius:10px; padding:10px 16px; box-shadow:0 1px 2px rgba(16,24,40,.04); }
.wrb-chip .lbl { font-size:12px; color:#64748b; flex:none; }
.wrb-chip b { font-size:20px; font-weight:700; }
/* 人员卡片 */
.wr-card { background:#fff; border:1px solid #e5e9f0; border-radius:12px; margin-bottom:12px; overflow:hidden; box-shadow:0 1px 3px rgba(16,24,40,.05); transition:box-shadow .15s ease; }
.wr-card:hover { box-shadow:0 3px 10px rgba(16,24,40,.08); }
.wr-head { display:flex; align-items:center; gap:12px; padding:13px 18px; cursor:pointer; user-select:none; transition:background .15s ease; }
.wr-head:hover { background:#f8fafc; }
.wr-avatar { flex:none; width:38px; height:38px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#fff; font-size:15px; font-weight:600; }
.wr-name { font-size:15px; font-weight:600; color:#1e293b; }
.wr-role { font-size:11px; color:#64748b; background:#f1f5f9; padding:2px 7px; border-radius:4px; flex:none; }
.wr-badge { flex:none; font-size:11px; padding:3px 10px; border-radius:10px; font-weight:500; }
.wr-time { font-size:12px; color:#94a3b8; flex:none; }
.wr-arrow { flex:none; font-size:11px; color:#94a3b8; transition:transform .15s ease; }
.wr-body { padding:2px 18px 16px; border-top:1px solid #f1f5f9; }
.wr-sec-label { font-size:12px; color:#64748b; margin-bottom:4px; }
.wr-item:hover { background:#f8fafc; }
/* 响应式：≤860px 工具栏换行、两栏变单列；≤560px 收紧留白 */
@media (max-width:860px){
  .wrb-bar { padding:10px 12px; }
  .wrb-datebar { width:100%; order:3; }
  .wrb-tabs { order:4; }
  .wrb-me { order:2; margin-left:auto; }
  .wr-board .wr-body > div[style*="grid-template-columns"]{ grid-template-columns:1fr !important; }
  .wr-board .wrb-stats { margin:12px 0 14px; }
}
@media (max-width:560px){
  .wr-board { padding:0 2px; }
  .wrb-bar { padding:8px 10px; border-radius:10px; gap:9px; }
  .wrb-tab { padding:0 12px; }
  .wrb-me { padding:3px 9px 3px 4px; }
  .wrb-chip { padding:8px 12px; }
  .wr-head { padding:11px 12px; gap:9px; }
  .wr-body { padding:2px 12px 14px; }
}

/* ===== 工作日报 v4（四 Tab：我的日报/日报编辑器/团队看板/历史归档） ===== */
.wrb-hello { position:relative; overflow:hidden; border-radius:14px; padding:20px 24px; color:#fff;
  background:linear-gradient(135deg,#0e3f8f 0%,#1d55b0 55%,#2f6fd0 100%); box-shadow:0 4px 14px rgba(14,63,143,.18); }
.wrb-hello::after { content:''; position:absolute; right:-50px; top:-70px; width:200px; height:200px; border-radius:50%; background:rgba(255,255,255,.08); }
.wrb-hello-t { font-size:20px; font-weight:700; letter-spacing:.5px; position:relative; z-index:1; }
.wrb-hello-s { font-size:13px; opacity:.92; margin-top:6px; position:relative; z-index:1; }
.wrb-hello-s b { font-size:15px; }
.wrb-status { display:flex; align-items:center; gap:12px; background:#fffdf5; border:1px solid #f5e3bd; border-left:4px solid #f59e0b; border-radius:10px; padding:12px 16px; margin:12px 0; box-shadow:0 1px 3px rgba(16,24,40,.05); }
.wrb-status.ok { background:#f4fbf6; border-color:#cde8d5; border-left-color:#1a7f37; }
.wrb-status.draft { background:#f5f9ff; border-color:#d8e4f5; border-left-color:#3b82f6; }
.wrb-status-ico { flex:none; width:34px; height:34px; border-radius:9px; display:flex; align-items:center; justify-content:center; font-size:16px; background:#fff7e6; color:#b45309; }
.wrb-status.ok .wrb-status-ico { background:#e6f6ec; color:#1a7f37; }
.wrb-status.draft .wrb-status-ico { background:#eef4fd; color:#0e3f8f; }
.wrb-status-t { font-size:14px; font-weight:600; color:#1e293b; }
.wrb-status-s { font-size:12px; color:#64748b; margin-top:2px; }
.wrb-cmtcard { background:#fffbeb; border-left:3px solid #f59e0b; border-radius:0 8px 8px 0; padding:9px 12px; font-size:13px; color:#1e293b; line-height:1.6; margin-bottom:12px; }
.wrb-sec-h { font-size:14px; font-weight:600; color:#1e293b; margin:14px 2px 8px; }
.wrb-grp { background:#fff; border:1px solid #eef1f6; border-radius:10px; margin-bottom:10px; overflow:hidden; }
.wrb-grp-h { font-size:13px; font-weight:600; color:#0e3f8f; padding:9px 14px; background:#f8faff; border-bottom:1px solid #eef1f6; }
.wrb-grp-h span { font-weight:400; color:#94a3b8; font-size:12px; margin-left:6px; }
.wrb-grp-i { display:flex; align-items:center; gap:8px; padding:7px 14px; border-bottom:1px dashed #f1f5f9; font-size:13px; color:#334155; }
.wrb-grp-i:last-child { border-bottom:none; }
.wrb-collect { max-height:300px; overflow:auto; border:1px solid #eef1f6; border-radius:8px; }
.wrb-datecard { display:flex; align-items:center; gap:10px; flex-wrap:wrap; background:#fff; border:1px solid #e5e9f0; border-radius:10px; padding:8px 12px; margin-bottom:12px; }
.wrb-datecard .btn-ghost { background:#fff; border:1px solid #d8dee9; color:#334155; }
.wrb-datecard .btn-ghost:hover { background:#f6f8fb; }
.wrb-datecard input[type=date] { height:30px; padding:0 8px; border-radius:7px; border:1px solid #d8dee9; background:#fff; color:#1e293b; font-size:13px; }
.wrh-row { display:flex; align-items:center; gap:12px; padding:10px 16px; border-bottom:1px solid #f1f5f9; }
.wrh-row:hover { background:#f8fafc; }
.wrh-row:last-child { border-bottom:none; }
.wrh-date { flex:none; width:92px; font-weight:600; color:#1e293b; font-size:13px; }
.wrh-date span { display:block; font-weight:400; font-size:11px; color:#94a3b8; }
.wrh-sum { flex:1; min-width:0; font-size:12px; color:#64748b; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.wrh-time { flex:none; font-size:12px; color:#94a3b8; width:44px; text-align:right; }
@media (max-width:720px){
  .wrb-hello { padding:16px; }
  .wrb-hello-t { font-size:17px; }
  .wrb-status { flex-wrap:wrap; }
  .wrh-row { flex-wrap:wrap; }
  .wrh-sum { flex-basis:100%; order:5; white-space:normal; }
}
