/* ============================================================
   WorkHub 设计系统 v2 —— 主色 #2783DE / 零外部 CDN
   ============================================================ */
:root {
  --primary: #2783DE;
  --primary-soft: #E5F2FC;
  --text: #2C2C2B;
  --text-sec: #7D7A75;
  --canvas: #FFFFFF;
  --surface: #F9F8F7;
  --surface-2: #F0EFED;
  --border: #E6E5E3;
  --green: #46A171;
  --green-soft: #E8F1EC;
  --orange: #D5803B;
  --orange-soft: #FBEBDE;
  --red: #E56458;
  --red-soft: #FCE9E7;
  --purple: #9B59B6;
  --purple-soft: #F3E8FF;
  --note-yellow: #FFF7E8;
  --note-blue: #E8F3FF;
  --note-gray: #F2F3F5;
  --radius: 8px;
  --radius-lg: 12px;
  --shadow: 0 1px 2px rgba(0,0,0,.05), 0 4px 12px rgba(0,0,0,.04);
  --shadow-hover: 0 4px 16px rgba(0,0,0,.10);
  --font: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
}
* { margin:0; padding:0; box-sizing:border-box; }
html,body { height:100%; }
body { font-family:var(--font); background:var(--surface); color:var(--text); font-size:14px; line-height:1.5; }
button { font-family:var(--font); }
input,select,textarea { font-family:var(--font); }
::-webkit-scrollbar { width:8px; height:8px; }
::-webkit-scrollbar-thumb { background:var(--surface-2); border-radius:4px; }
::-webkit-scrollbar-track { background:transparent; }

/* ===== 登录页 ===== */
.login-wrap { min-height:100vh; display:flex; align-items:center; justify-content:center; background:linear-gradient(160deg,#EAF4FE 0%,var(--surface) 45%, #FDF7EF 100%); padding:20px; }
.login-card { width:400px; max-width:94vw; background:var(--canvas); border:1px solid var(--border); border-radius:16px; box-shadow:0 12px 48px rgba(39,131,222,.12); padding:36px 36px 30px; }
.login-logo { display:flex; align-items:center; gap:12px; margin-bottom:6px; }
.login-logo .lg { width:44px; height:44px; border-radius:12px; background:linear-gradient(135deg,#2783DE,#667eea); color:#fff; display:flex; align-items:center; justify-content:center; font-size:20px; box-shadow:0 2px 8px rgba(39,131,222,.35); }
.login-logo h1 { font-size:22px; }
.login-sub { font-size:13px; color:var(--text-sec); margin-bottom:24px; }
.login-field { margin-bottom:14px; }
.login-field label { display:block; font-size:12px; color:var(--text-sec); font-weight:500; margin-bottom:6px; }
.login-field input { width:100%; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius); font-size:14px; outline:none; transition:border .2s, box-shadow .2s; background:var(--canvas); }
.login-field input:focus { border-color:var(--primary); box-shadow:0 0 0 3px rgba(39,131,222,.12); }
.login-btn { width:100%; padding:11px; border:none; border-radius:var(--radius); background:var(--primary); color:#fff; font-size:15px; font-weight:600; cursor:pointer; margin-top:6px; transition:all .2s; }
.login-btn:hover { opacity:.92; }
.login-btn:active { transform:scale(.985); }
.login-btn:disabled { opacity:.55; cursor:not-allowed; }
.login-err { min-height:20px; font-size:12px; color:var(--red); margin-top:10px; text-align:center; }
.login-foot { margin-top:18px; padding-top:14px; border-top:1px solid var(--border); font-size:11px; color:var(--text-sec); text-align:center; line-height:1.7; }

/* ===== 布局 ===== */
.app { display:flex; height:100vh; overflow:hidden; min-width:1024px; }
.sidebar { width:64px; background:var(--canvas); border-right:1px solid var(--border); display:flex; flex-direction:column; align-items:center; padding:16px 0 12px; gap:8px; flex-shrink:0; z-index:50; }
.sidebar .sb-logo { width:40px; height:40px; border-radius:12px; background:linear-gradient(135deg,#2783DE,#667eea); color:#fff; display:flex; align-items:center; justify-content:center; font-size:18px; margin-bottom:12px; box-shadow:0 2px 8px rgba(39,131,222,.35); }
.nav-item { width:52px; padding:6px 0; border-radius:var(--radius); display:flex; flex-direction:column; align-items:center; justify-content:center; cursor:pointer; color:var(--text-sec); transition:all .2s; gap:3px; border:none; background:transparent; }
.nav-item:hover { background:var(--surface); color:var(--text); }
.nav-item.active { background:var(--primary-soft); color:var(--primary); }
.nav-item svg { width:20px; height:20px; }
.nav-item span { font-size:10px; font-weight:500; }
.sb-foot { margin-top:auto; font-size:9px; color:var(--text-sec); text-align:center; line-height:1.6; }
.main { flex:1; overflow-y:auto; display:flex; flex-direction:column; }
.content { padding:24px; max-width:1280px; width:100%; margin:0 auto; flex:1; }

/* ===== 顶栏 ===== */
.topbar { display:flex; align-items:center; justify-content:space-between; padding:12px 24px; background:var(--canvas); border-bottom:1px solid var(--border); position:sticky; top:0; z-index:40; }
.topbar-left { display:flex; align-items:center; gap:16px; }
.logo { font-size:18px; font-weight:700; color:var(--text); display:flex; align-items:center; gap:8px; }
.search-wrap { position:relative; }
.search-box { width:280px; padding:7px 12px 7px 34px; border:1px solid var(--border); border-radius:var(--radius); font-size:13px; background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%237D7A75' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.35-4.35'/%3E%3C/svg%3E") no-repeat 10px center; outline:none; transition:border .2s; }
.search-box:focus { border-color:var(--primary); background-color:var(--canvas); }
.search-result { position:absolute; top:40px; left:0; width:380px; background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); box-shadow:var(--shadow-hover); display:none; z-index:300; max-height:380px; overflow-y:auto; }
.search-result.show { display:block; }
.sr-item { padding:10px 14px; cursor:pointer; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--border); }
.sr-item:last-child { border-bottom:none; }
.sr-item:hover { background:var(--surface); }
.sr-item .sr-icon { width:30px; height:30px; border-radius:8px; display:flex; align-items:center; justify-content:center; font-size:14px; flex-shrink:0; background:var(--surface-2); }
.sr-item .sr-t { font-size:13px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sr-item .sr-m { font-size:11px; color:var(--text-sec); }
.topbar-right { display:flex; align-items:center; gap:12px; }
.avatar { width:32px; height:32px; border-radius:50%; background:var(--primary); color:#fff; display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:600; cursor:pointer; user-select:none; }
.role-chip { font-size:11px; padding:2px 8px; border-radius:10px; background:var(--primary-soft); color:var(--primary); font-weight:500; }
.role-chip.admin { background:#2C2C2B; color:#fff; }
.role-chip.leader { background:var(--purple-soft); color:var(--purple); }

/* 用户菜单 */
.user-menu-wrap { position:relative; }
.user-menu { position:absolute; top:40px; right:0; background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); box-shadow:var(--shadow-hover); min-width:200px; padding:6px; display:none; z-index:300; }
.user-menu.show { display:block; animation:menuPop .12s ease-out; }
.user-menu .um-head { padding:10px 12px; border-bottom:1px solid var(--border); margin-bottom:4px; }
.user-menu .um-name { font-size:14px; font-weight:600; }
.user-menu .um-sub { font-size:11px; color:var(--text-sec); }
.user-menu a { display:block; padding:8px 12px; font-size:13px; color:var(--text); border-radius:6px; cursor:pointer; }
.user-menu a:hover { background:var(--surface); }
.user-menu a.danger:hover { background:var(--red-soft); color:var(--red); }
@keyframes menuPop { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }

/* ===== 按钮 ===== */
.btn { padding:6px 16px; border-radius:var(--radius); border:none; cursor:pointer; font-size:13px; font-weight:500; transition:all .2s; display:inline-flex; align-items:center; gap:6px; }
.btn:active { transform:scale(.97); }
.btn:disabled { opacity:.5; cursor:not-allowed; }
.btn-primary { background:var(--primary); color:#fff; }
.btn-primary:hover { opacity:.9; }
.btn-ghost { background:var(--surface); color:var(--text); border:1px solid var(--border); }
.btn-ghost:hover { background:var(--surface-2); }
.btn-danger { background:var(--red-soft); color:var(--red); }
.btn-danger:hover { background:var(--red); color:#fff; }
.btn-sm { padding:4px 10px; font-size:12px; border-radius:6px; }

/* ===== 视图 ===== */
.view { display:none; }
.view.active { display:block; animation:fadeIn .2s ease; }
@keyframes fadeIn { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:none; } }

/* ===== 卡片通用 ===== */
.card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); box-shadow:var(--shadow); }
.sec-title { font-size:15px; font-weight:600; margin-bottom:12px; display:flex; align-items:center; justify-content:space-between; }
.sec-title .add-btn { font-size:12px; color:var(--primary); cursor:pointer; display:flex; align-items:center; gap:4px; font-weight:500; }
.sec-title .add-btn:hover { text-decoration:underline; }
.sub-filter { font-size:12px; color:var(--text-sec); display:flex; align-items:center; gap:8px; }

/* ===== 首页仪表盘 ===== */
.dash-grid { display:grid; grid-template-columns:320px 1fr; gap:16px; }
.home-col { min-width:0; }

/* 日历 */
.cal-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow); }
.cal-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.cal-title { font-size:14px; font-weight:600; }
.cal-nav { display:flex; gap:6px; align-items:center; }
.cal-nav .nav-btn { width:26px; height:26px; border:1px solid var(--border); border-radius:6px; background:var(--canvas); cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:12px; color:var(--text-sec); transition:all .2s; }
.cal-nav .nav-btn:hover { border-color:var(--primary); color:var(--primary); }
.cal-view-toggle { display:flex; gap:2px; background:var(--surface); border-radius:6px; padding:2px; }
.cal-view-toggle button { padding:2px 10px; border:none; border-radius:4px; background:transparent; cursor:pointer; font-size:12px; color:var(--text-sec); }
.cal-view-toggle button.active { background:var(--canvas); color:var(--primary); font-weight:500; box-shadow:0 1px 2px rgba(0,0,0,.06); }
.cal-week { display:grid; grid-template-columns:repeat(7,1fr); gap:4px; }
.cal-dow { text-align:center; font-size:11px; color:var(--text-sec); padding:4px 0; font-weight:500; }
.cal-day { aspect-ratio:1; border-radius:6px; display:flex; flex-direction:column; align-items:center; justify-content:center; cursor:pointer; position:relative; transition:all .15s; }
.cal-day:hover { background:var(--surface); }
.cal-day.today { background:var(--primary-soft); color:var(--primary); font-weight:600; }
.cal-day.out { color:#C9C7C2; }
.cal-day .num { font-size:14px; }
.cal-day .dots { display:flex; gap:2px; margin-top:3px; min-height:5px; }
.cal-day .dot { width:5px; height:5px; border-radius:50%; }
.cal-day .dot.red { background:var(--red); }
.cal-day .dot.orange { background:var(--orange); }
.cal-day .dot.green { background:var(--green); }
.cal-day .dot.blue { background:var(--primary); }
.cal-legend { display:flex; gap:10px; margin-top:12px; padding-top:10px; border-top:1px solid var(--border); font-size:10px; color:var(--text-sec); }
.cal-legend span { display:flex; align-items:center; gap:4px; }
.cal-legend i { width:7px; height:7px; border-radius:50%; display:inline-block; }

/* KPI */
.kpi-row { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-bottom:16px; }
.kpi-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow); transition:all .2s; }
.kpi-card:hover { box-shadow:var(--shadow-hover); transform:translateY(-2px); }
.kpi-label { font-size:12px; color:var(--text-sec); margin-bottom:6px; display:flex; align-items:center; gap:6px; }
.kpi-value { font-size:28px; font-weight:700; line-height:1; }
.kpi-value.green { color:var(--green); }
.kpi-value.orange { color:var(--orange); }
.kpi-value.red { color:var(--red); }
.kpi-value.blue { color:var(--primary); }
.kpi-sub { font-size:11px; color:var(--text-sec); margin-top:6px; }

/* 白板便签 */
.wb-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-bottom:16px; }
.wb-card { border-radius:var(--radius); padding:12px; cursor:pointer; transition:all .2s; position:relative; box-shadow:var(--shadow); }
.wb-card:hover { transform:translateY(-2px); box-shadow:var(--shadow-hover); }
.wb-card.dragging { opacity:.5; }
.wb-card.drag-over { outline:2px dashed var(--primary); }
.wb-card.note { background:var(--note-yellow); border-left:3px solid #FFD666; }
.wb-card.request { background:var(--note-blue); border-left:3px solid var(--primary); }
.wb-card.file { background:var(--note-gray); border-left:3px solid #999; }
.wb-card .wb-type { font-size:10px; font-weight:600; text-transform:uppercase; letter-spacing:.5px; margin-bottom:4px; display:flex; align-items:center; justify-content:space-between; }
.wb-card.note .wb-type { color:#B8860B; }
.wb-card.request .wb-type { color:var(--primary); }
.wb-card.file .wb-type { color:#666; }
.wb-card .wb-title { font-size:13px; font-weight:500; margin-bottom:4px; line-height:1.4; word-break:break-all; }
.wb-card .wb-meta { display:flex; align-items:center; justify-content:space-between; font-size:11px; color:var(--text-sec); margin-top:6px; }
.wb-card .wb-pin { position:absolute; top:6px; right:8px; font-size:12px; opacity:0; transition:opacity .2s; color:var(--orange); }
.wb-card:hover .wb-pin { opacity:1; }
.wb-card .wb-pin.on { opacity:1; }
.wb-status { padding:1px 6px; border-radius:4px; font-size:10px; font-weight:500; }
.wb-status.open { background:var(--orange-soft); color:var(--orange); }
.wb-status.assigned { background:var(--primary-soft); color:var(--primary); }
.wb-status.done { background:var(--green-soft); color:var(--green); }
.wb-link-btn { color:var(--primary); cursor:pointer; }
.wb-link-btn:hover { text-decoration:underline; }

/* 项目进度（首页） */
.proj-row { display:flex; flex-direction:column; gap:10px; margin-bottom:16px; }
.proj-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:14px 16px; box-shadow:var(--shadow); display:flex; align-items:center; gap:14px; cursor:pointer; transition:all .2s; }
.proj-card:hover { box-shadow:var(--shadow-hover); transform:translateY(-2px); }
.proj-ring { flex-shrink:0; }
.proj-info { flex:1; min-width:0; }
.proj-name { font-size:14px; font-weight:600; margin-bottom:2px; display:flex; align-items:center; gap:6px; }
.proj-name .nm { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.proj-stage { display:inline-block; padding:1px 8px; border-radius:4px; font-size:10px; font-weight:500; flex-shrink:0; }
.stage-planning { background:var(--surface-2); color:var(--text-sec); }
.stage-developing { background:var(--primary-soft); color:var(--primary); }
.stage-testing { background:var(--orange-soft); color:var(--orange); }
.stage-release { background:var(--purple-soft); color:var(--purple); }
.stage-completed { background:var(--green-soft); color:var(--green); }
.proj-bar { height:6px; background:var(--surface-2); border-radius:3px; margin-top:6px; overflow:hidden; }
.proj-bar-fill { height:100%; border-radius:3px; background:var(--primary); transition:width .4s ease; }
.proj-meta { font-size:11px; color:var(--text-sec); display:flex; gap:12px; margin-top:4px; align-items:center; }
.proj-members { display:flex; align-items:center; }
.member-dot { width:22px; height:22px; border-radius:50%; border:2px solid var(--canvas); margin-left:-6px; font-size:10px; display:flex; align-items:center; justify-content:center; font-weight:600; color:#fff; flex-shrink:0; }
.member-dot:first-child { margin-left:0; }

/* 最近动态 */
.activity-list { display:flex; flex-direction:column; }
.activity-item { display:flex; gap:10px; padding:8px 0; border-bottom:1px solid var(--border); }
.activity-item:last-child { border-bottom:none; }
.activity-dot { width:8px; height:8px; border-radius:50%; background:var(--primary); margin-top:6px; flex-shrink:0; }
.activity-text { font-size:13px; word-break:break-all; }
.activity-time { font-size:11px; color:var(--text-sec); margin-top:2px; }

/* 今日待办 */
.todo-scroll { display:flex; gap:10px; overflow-x:auto; padding:6px 2px 10px; }
.todo-card { min-width:210px; max-width:240px; background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius); padding:12px; flex-shrink:0; cursor:grab; transition:all .2s; position:relative; overflow:hidden; box-shadow:var(--shadow); user-select:none; }
.todo-card:hover { box-shadow:var(--shadow-hover); }
.todo-card.swiping { transition:none; }
.todo-card.swipe-done { opacity:.5; transform:translateX(-120%); transition:all .35s ease; }
.todo-card.swipe-later { opacity:.5; transform:translateX(120%); transition:all .35s ease; }
.todo-card .todo-pri { width:3px; position:absolute; left:0; top:0; bottom:0; border-radius:var(--radius) 0 0 var(--radius); }
.todo-pri.high { background:var(--red); }
.todo-pri.med { background:var(--orange); }
.todo-pri.low { background:var(--green); }
.todo-title { font-size:13px; font-weight:500; margin-bottom:4px; padding-left:8px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.todo-meta { display:flex; align-items:center; gap:8px; padding-left:8px; }
.todo-tag { font-size:10px; padding:1px 6px; border-radius:4px; background:var(--surface-2); color:var(--text-sec); max-width:110px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.todo-date { font-size:11px; color:var(--text-sec); }
.todo-hint { font-size:10px; color:#C9C7C2; padding-left:8px; margin-top:6px; }

/* ===== 工作台 ===== */
.ws-tabs { display:flex; gap:0; border-bottom:1px solid var(--border); margin-bottom:16px; }
.ws-tab { padding:10px 20px; cursor:pointer; font-size:14px; font-weight:500; color:var(--text-sec); border-bottom:2px solid transparent; transition:all .2s; background:none; border-top:none; border-left:none; border-right:none; }
.ws-tab:hover { color:var(--text); }
.ws-tab.active { color:var(--primary); border-bottom-color:var(--primary); }
.ws-tab .badge { display:inline-block; padding:0 6px; border-radius:10px; font-size:11px; background:var(--surface-2); color:var(--text-sec); margin-left:4px; }
.ws-tab.active .badge { background:var(--primary-soft); color:var(--primary); }

/* 快速填报栏 */
.ai-bar { display:flex; align-items:center; gap:10px; background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:10px 14px; margin-bottom:16px; box-shadow:var(--shadow); }
.ai-bar .ai-icon { width:32px; height:32px; border-radius:50%; background:linear-gradient(135deg,#667eea,#764ba2); display:flex; align-items:center; justify-content:center; color:#fff; font-size:16px; flex-shrink:0; }
.ai-input { flex:1; border:none; outline:none; font-size:14px; background:transparent; min-width:100px; }
.ai-input::placeholder { color:var(--text-sec); }
.ai-voice-btn { width:40px; height:40px; border-radius:50%; border:none; background:var(--primary-soft); color:var(--primary); cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all .2s; flex-shrink:0; }
.ai-voice-btn:hover { background:var(--primary); color:#fff; }
.ai-voice-btn.recording { background:var(--red); color:#fff; animation:pulse 1.5s infinite; }
@keyframes pulse { 0%,100%{transform:scale(1);} 50%{transform:scale(1.12);} }
.ai-send-btn { padding:8px 16px; border-radius:var(--radius); border:none; background:var(--primary); color:#fff; cursor:pointer; font-size:13px; font-weight:500; flex-shrink:0; transition:all .2s; }
.ai-send-btn:hover { opacity:.9; }
.ai-manual-btn { padding:8px 12px; border-radius:var(--radius); border:1px solid var(--border); background:var(--canvas); color:var(--text-sec); cursor:pointer; font-size:12px; flex-shrink:0; transition:all .2s; }
.ai-manual-btn:hover { background:var(--surface); }
.ai-tip { font-size:11px; color:#C9C7C2; flex-shrink:0; }

/* 看板 */
.kanban { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; align-items:start; }
.kanban-col { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-lg); padding:12px; min-height:320px; transition:all .2s; }
.kanban-col.drag-over { background:var(--primary-soft); border-color:var(--primary); }
.kanban-col-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; padding-bottom:8px; border-bottom:1px solid var(--border); }
.kanban-col-title { font-size:13px; font-weight:600; display:flex; align-items:center; gap:6px; }
.kanban-col-count { font-size:11px; color:var(--text-sec); background:var(--canvas); padding:1px 8px; border-radius:10px; }
.kanban-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius); padding:10px 12px; margin-bottom:8px; cursor:grab; transition:all .15s; position:relative; overflow:hidden; box-shadow:0 1px 2px rgba(0,0,0,.03); }
.kanban-card:hover { box-shadow:var(--shadow-hover); border-color:var(--primary); }
.kanban-card.dragging { opacity:.4; }
.kanban-card .kc-pri { position:absolute; left:0; top:0; bottom:0; width:3px; }
.kc-pri.high { background:var(--red); }
.kc-pri.med { background:var(--orange); }
.kc-pri.low { background:var(--green); }
.kanban-card .kc-title { font-size:13px; font-weight:500; margin-bottom:4px; padding-left:6px; }
.kanban-card .kc-meta { display:flex; align-items:center; justify-content:space-between; padding-left:6px; gap:6px; }
.kanban-card .kc-tag { font-size:10px; padding:1px 6px; border-radius:4px; background:var(--surface-2); color:var(--text-sec); max-width:90px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.kanban-card .kc-date { font-size:11px; color:var(--text-sec); flex-shrink:0; }
.kanban-card .kc-progress { height:4px; background:var(--surface-2); border-radius:2px; margin-top:6px; margin-left:6px; overflow:hidden; }
.kanban-card .kc-progress-fill { height:100%; border-radius:2px; background:var(--primary); }
.kc-owner { display:flex; align-items:center; gap:4px; font-size:10px; color:var(--text-sec); padding-left:6px; margin-top:5px; }
.kc-owner .member-dot { width:16px; height:16px; font-size:8px; border-width:1px; margin:0; }

/* 列表视图 */
.list-view { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; }
.list-toolbar { display:flex; align-items:center; gap:10px; padding:10px 16px; background:var(--surface); border-bottom:1px solid var(--border); font-size:12px; color:var(--text-sec); flex-wrap:wrap; }
.list-toolbar .lt-left { flex:1; display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.list-toolbar select { padding:4px 8px; border:1px solid var(--border); border-radius:6px; font-size:12px; background:var(--canvas); }
.list-header, .list-row { display:grid; grid-template-columns:34px 1fr 110px 64px 90px 90px 92px 30px; align-items:center; padding:9px 16px; gap:8px; }
.list-header { background:var(--surface); font-size:12px; font-weight:600; color:var(--text-sec); border-bottom:1px solid var(--border); }
.list-row { border-bottom:1px solid var(--border); font-size:13px; transition:background .15s; }
.list-row:hover { background:var(--surface); }
.list-row:last-child { border-bottom:none; }
.list-checkbox { width:16px; height:16px; accent-color:var(--primary); cursor:pointer; }
.list-title { font-weight:500; cursor:pointer; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.list-title:hover { color:var(--primary); }
.list-cell { min-width:0; }
.list-cell .inline-input, .list-cell .inline-select { width:100%; padding:4px 6px; border:1px solid var(--primary); border-radius:6px; font-size:12px; background:#fff; outline:none; }
.list-tag { font-size:11px; padding:2px 8px; border-radius:4px; display:inline-block; max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.list-status { font-size:11px; padding:2px 8px; border-radius:4px; font-weight:500; display:inline-block; }
.status-todo { background:var(--surface-2); color:var(--text-sec); }
.status-doing { background:var(--primary-soft); color:var(--primary); }
.status-review { background:var(--orange-soft); color:var(--orange); }
.status-done { background:var(--green-soft); color:var(--green); }
.list-del { border:none; background:none; cursor:pointer; font-size:14px; color:#C9C7C2; opacity:0; transition:opacity .2s; }
.list-row:hover .list-del { opacity:1; }
.list-del:hover { color:var(--red); }
.pager { display:flex; align-items:center; justify-content:center; gap:12px; padding:12px; font-size:12px; color:var(--text-sec); }

/* 项目卡片网格 */
.proj-grid { display:grid; grid-template-columns:1fr; gap:16px; }
.proj-cards-wrap { display:grid; grid-template-columns:repeat(auto-fill,minmax(340px,1fr)); gap:14px; }
.proj-grid-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow); transition:all .2s; position:relative; }
.proj-grid-card:hover { box-shadow:var(--shadow-hover); transform:translateY(-2px); border-color:var(--primary-soft); }
.proj-grid-card .pgc-toprow { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; gap:8px; position:relative; }
.proj-grid-card .pgc-name { font-size:15px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; cursor:pointer; }
.proj-grid-card .pgc-name:hover { color:var(--primary); }
.proj-grid-card .pgc-progress { display:flex; align-items:center; gap:10px; margin:10px 0; cursor:pointer; }
.proj-grid-card .pgc-bar { flex:1; }
.proj-grid-card .pgc-stats { display:flex; gap:14px; font-size:12px; color:var(--text-sec); margin-top:8px; flex-wrap:wrap; }
.proj-grid-card .pgc-stats span { display:flex; align-items:center; gap:4px; }
.proj-grid-card .pgc-deadline { font-size:12px; color:var(--text-sec); margin-top:8px; padding-top:8px; border-top:1px solid var(--border); }
.proj-grid-card .pgc-deadline.urgent { color:var(--orange); }
.proj-grid-card .pgc-deadline.overdue { color:var(--red); }
.proj-grid-card .pgc-meta { display:flex; align-items:center; gap:8px; font-size:12px; }
.pgc-menu { width:28px; height:28px; border:none; background:transparent; border-radius:6px; font-size:18px; color:var(--text-sec); cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all .15s; flex-shrink:0; }
.pgc-menu:hover { background:var(--surface-2); color:var(--text); }
.pgc-menu-pop { position:absolute; top:32px; right:8px; z-index:10; background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius); box-shadow:0 4px 16px rgba(0,0,0,.12); min-width:160px; padding:4px; display:flex; flex-direction:column; gap:2px; animation:menuPop .12s ease-out; }
.pgc-menu-pop a { display:block; padding:8px 10px; font-size:13px; color:var(--text); border-radius:4px; cursor:pointer; transition:all .15s; }
.pgc-menu-pop a:hover { background:var(--surface-2); color:var(--primary); }
.pgc-menu-pop a.danger:hover { background:var(--red-soft); color:var(--red); }
.pgc-menu-sep { height:1px; background:var(--border); margin:4px 0; }

/* 项目筛选工具栏 */
.proj-toolbar { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:12px 14px; box-shadow:var(--shadow); display:flex; flex-wrap:wrap; gap:14px 18px; align-items:center; }
.pt-section { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.pt-label { font-size:12px; color:var(--text-sec); font-weight:500; margin-right:2px; }
.pt-chip { font-size:12px; padding:4px 10px; border:1px solid var(--border); border-radius:14px; background:var(--canvas); color:var(--text-sec); cursor:pointer; transition:all .15s; font-weight:500; }
.pt-chip:hover { border-color:var(--primary); color:var(--primary); }
.pt-chip.on { background:var(--primary); color:#fff; border-color:var(--primary); }
.pt-chip.reset { color:var(--orange); border-color:var(--orange-soft); background:var(--orange-soft); }
.pt-input { font-size:13px; padding:6px 10px; border:1px solid var(--border); border-radius:6px; background:var(--canvas); outline:none; min-width:160px; transition:border-color .15s; }
.pt-input:focus { border-color:var(--primary); }

/* 过程时间轴 */
.timeline { position:relative; padding-left:20px; }
.timeline::before { content:''; position:absolute; left:6px; top:0; bottom:0; width:2px; background:var(--border); }
.timeline-item { position:relative; padding:12px 0 12px 16px; }
.timeline-item::before { content:''; position:absolute; left:-17px; top:18px; width:10px; height:10px; border-radius:50%; background:var(--primary); border:2px solid var(--canvas); }
.timeline-item .tl-content { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius); padding:12px; box-shadow:var(--shadow); }
.timeline-item .tl-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
.timeline-item .tl-user { font-size:13px; font-weight:600; display:flex; align-items:center; gap:8px; }
.timeline-item .tl-time { font-size:11px; color:var(--text-sec); }
.timeline-item .tl-text { font-size:13px; color:var(--text); margin-bottom:6px; word-break:break-all; }
.timeline-item .tl-changes { display:flex; gap:8px; flex-wrap:wrap; }
.tl-change { font-size:11px; padding:2px 8px; border-radius:4px; background:var(--surface-2); }
.tl-change.progress { background:var(--primary-soft); color:var(--primary); }
.tl-change.status { background:var(--orange-soft); color:var(--orange); }

/* ===== 周报视图 ===== */
.week-bar { display:flex; align-items:center; gap:12px; margin-bottom:16px; flex-wrap:wrap; }
.week-nav { display:flex; align-items:center; gap:8px; background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:8px 12px; box-shadow:var(--shadow); }
.week-nav .nav-btn { width:28px; height:28px; border:1px solid var(--border); border-radius:6px; background:var(--canvas); cursor:pointer; font-size:13px; color:var(--text-sec); }
.week-nav .nav-btn:hover { border-color:var(--primary); color:var(--primary); }
.week-nav .wk-label { font-size:14px; font-weight:600; min-width:200px; text-align:center; }
.week-nav .wk-cur { font-size:12px; color:var(--primary); cursor:pointer; font-weight:500; }
.week-nav .wk-cur:hover { text-decoration:underline; }
.team-summary { display:grid; grid-template-columns:repeat(5,1fr); gap:12px; margin-bottom:16px; }
.member-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(360px,1fr)); gap:14px; }
.member-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow); transition:all .2s; }
.member-card:hover { box-shadow:var(--shadow-hover); }
.mc-head { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.mc-avatar { width:40px; height:40px; border-radius:50%; color:#fff; display:flex; align-items:center; justify-content:center; font-size:16px; font-weight:600; flex-shrink:0; }
.mc-name { font-size:15px; font-weight:600; }
.mc-sub { font-size:11px; color:var(--text-sec); }
.mc-kpis { display:flex; gap:8px; margin:10px 0; }
.mc-kpi { flex:1; background:var(--surface); border-radius:var(--radius); padding:8px; text-align:center; }
.mc-kpi b { display:block; font-size:18px; }
.mc-kpi span { font-size:10px; color:var(--text-sec); }
.mc-task { display:flex; align-items:center; gap:8px; padding:6px 8px; border-radius:6px; font-size:12px; transition:background .15s; }
.mc-task:hover { background:var(--surface); }
.mc-task .t-title { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mc-task .t-prog { font-size:11px; color:var(--text-sec); flex-shrink:0; min-width:34px; text-align:right; }
.mc-more { font-size:12px; color:var(--primary); cursor:pointer; padding:6px 8px; display:inline-block; }
.mc-more:hover { text-decoration:underline; }
.mc-empty { font-size:12px; color:var(--text-sec); padding:10px 8px; }
.pri-bar { width:3px; height:16px; border-radius:2px; flex-shrink:0; }
.mc-rate { height:6px; background:var(--surface-2); border-radius:3px; overflow:hidden; margin-top:4px; }
.mc-rate-fill { height:100%; border-radius:3px; background:var(--green); }

/* 周报详情弹层 */
.wd-log { padding:8px 10px; background:var(--surface); border-radius:var(--radius); margin-bottom:6px; font-size:12px; }
.wd-log .wd-time { font-size:10px; color:var(--text-sec); margin-top:2px; }
.wd-task-block { border:1px solid var(--border); border-radius:var(--radius); padding:10px 12px; margin-bottom:8px; }
.wd-task-head { display:flex; align-items:center; gap:8px; font-size:13px; font-weight:500; }
.wd-task-head .t-title { flex:1; }

/* 周报填写卡 */
.report-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:18px 20px; box-shadow:var(--shadow); margin-bottom:16px; }
.report-card .rc-head { display:flex; align-items:center; gap:10px; margin-bottom:12px; }
.report-card .rc-title { font-size:15px; font-weight:600; }
.report-card textarea { width:100%; min-height:72px; padding:9px 11px; border:1px solid var(--border); border-radius:var(--radius); font-size:13px; line-height:1.6; resize:vertical; outline:none; transition:border .2s; background:var(--canvas); font-family:inherit; }
.report-card textarea:focus { border-color:var(--primary); }
.report-card .rc-label { font-size:12px; font-weight:600; color:var(--text-sec); margin:12px 0 6px; display:flex; align-items:center; justify-content:space-between; }
.report-card .rc-label:first-of-type { margin-top:0; }
.report-card .rc-foot { display:flex; align-items:center; gap:10px; margin-top:14px; }
.report-card .rc-saved { font-size:11px; color:var(--text-sec); margin-left:auto; }
.rp-chip { font-size:11px; padding:2px 10px; border-radius:10px; font-weight:600; }
.rp-chip.none { background:var(--surface-2); color:var(--text-sec); }
.rp-chip.draft { background:var(--orange-soft); color:var(--orange); }
.rp-chip.submitted { background:var(--green-soft); color:var(--green); }

/* 周报提醒条 */
.notice-bar { display:flex; align-items:center; gap:10px; background:var(--note-blue); border:1px solid #C7E0F8; border-radius:var(--radius-lg); padding:10px 16px; margin-bottom:16px; font-size:13px; }
.notice-bar .nb-act { margin-left:auto; color:var(--primary); font-weight:600; cursor:pointer; white-space:nowrap; }
.notice-bar .nb-act:hover { text-decoration:underline; }
.notice-bar .nb-close { border:none; background:none; cursor:pointer; color:var(--text-sec); font-size:14px; }

/* 项目周报卡 */
.pw-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(380px,1fr)); gap:14px; }
.pw-delta { font-size:12px; font-weight:600; }
.pw-delta.up { color:var(--green); }
.pw-delta.flat { color:var(--text-sec); }
.pw-member-row { display:flex; align-items:center; gap:8px; padding:5px 8px; border-radius:6px; font-size:12px; }
.pw-member-row:hover { background:var(--surface); }
.pw-member-row .pm-name { flex:1; }
.pw-member-row .pm-stat { color:var(--text-sec); font-size:11px; }
.rc-quote { background:var(--surface); border-left:3px solid var(--primary); border-radius:0 var(--radius) var(--radius) 0; padding:8px 12px; font-size:12px; line-height:1.7; white-space:pre-wrap; word-break:break-all; margin-bottom:8px; }
.rc-quote.plan { border-left-color:var(--green); }
.rc-quote.risk { border-left-color:var(--red); background:var(--red-soft); }
.rc-quote-label { font-size:11px; font-weight:600; color:var(--text-sec); margin-bottom:3px; }

/* ===== 统计 ===== */
.stats-filters { display:flex; gap:12px; margin-bottom:16px; flex-wrap:wrap; align-items:center; }
.filter-select { padding:6px 12px; border:1px solid var(--border); border-radius:var(--radius); font-size:13px; background:var(--canvas); cursor:pointer; outline:none; }
.filter-select:focus { border-color:var(--primary); }
.stats-grid { display:grid; grid-template-columns:1fr 320px; gap:16px; align-items:start; }
.chart-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow); margin-bottom:16px; }
.chart-title { font-size:14px; font-weight:600; margin-bottom:12px; display:flex; align-items:center; justify-content:space-between; }
.chart-title .ct-sub { font-size:11px; color:var(--text-sec); font-weight:400; }
.chart-body svg { width:100%; display:block; }
.report-section { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow); }
.report-btn { display:flex; align-items:center; gap:10px; padding:12px 14px; border:1px solid var(--border); border-radius:var(--radius); cursor:pointer; transition:all .2s; margin-bottom:8px; width:100%; text-align:left; background:var(--canvas); font-size:13px; }
.report-btn:hover { background:var(--surface); border-color:var(--primary); }
.report-btn .rb-icon { width:36px; height:36px; border-radius:var(--radius); display:flex; align-items:center; justify-content:center; font-size:18px; flex-shrink:0; }
.report-btn .rb-info { flex:1; }
.report-btn .rb-title { font-size:13px; font-weight:600; }
.report-btn .rb-desc { font-size:11px; color:var(--text-sec); }
.align-view { margin-top:16px; padding-top:16px; border-top:1px solid var(--border); }
.align-row { padding:8px 0; border-bottom:1px solid var(--border); font-size:12px; color:var(--text-sec); }
.align-row:last-child { border-bottom:none; }
.align-row b { color:var(--text); }

/* ===== 管理页 ===== */
.settings-card { background:var(--canvas); border:1px solid var(--border); border-radius:var(--radius-lg); padding:20px; box-shadow:var(--shadow); margin-bottom:16px; }
.settings-title { font-size:15px; font-weight:600; margin-bottom:12px; display:flex; align-items:center; justify-content:space-between; }
.admin-table { width:100%; border-collapse:collapse; font-size:13px; }
.admin-table th { text-align:left; padding:9px 10px; background:var(--surface); color:var(--text-sec); font-size:12px; font-weight:600; border-bottom:1px solid var(--border); }
.admin-table td { padding:9px 10px; border-bottom:1px solid var(--border); }
.admin-table tr:hover td { background:var(--surface); }
.admin-table .cell-user { display:flex; align-items:center; gap:8px; }
.chip { font-size:11px; padding:2px 8px; border-radius:10px; background:var(--green-soft); color:var(--green); }
.chip.off { background:var(--surface-2); color:var(--text-sec); }

/* ===== 弹层 ===== */
.modal-overlay { position:fixed; inset:0; background:rgba(0,0,0,.30); backdrop-filter:blur(4px); display:none; align-items:center; justify-content:center; z-index:200; }
.modal-overlay.show { display:flex; }
.modal { background:var(--canvas); border-radius:var(--radius-lg); padding:24px; width:480px; max-width:92vw; max-height:86vh; overflow-y:auto; box-shadow:0 8px 32px rgba(0,0,0,.16); animation:modalIn .18s ease; }
.modal.wide { width:760px; }
@keyframes modalIn { from { opacity:0; transform:scale(.96); } to { opacity:1; transform:none; } }
.modal-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:16px; }
.modal-title { font-size:16px; font-weight:600; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.modal-close { width:28px; height:28px; border:none; background:var(--surface); border-radius:6px; cursor:pointer; font-size:16px; color:var(--text-sec); transition:all .2s; }
.modal-close:hover { background:var(--surface-2); }
.modal-body { display:flex; flex-direction:column; gap:12px; }
.result-row { display:flex; align-items:center; justify-content:space-between; padding:10px 12px; background:var(--surface); border-radius:var(--radius); gap:10px; }
.result-label { font-size:13px; color:var(--text-sec); flex-shrink:0; }
.result-value { font-size:13px; font-weight:600; }
.result-value .ai-source { font-size:10px; color:var(--purple); background:var(--purple-soft); padding:1px 6px; border-radius:4px; margin-left:6px; font-weight:500; }
.ai-source { font-size:10px; color:var(--purple); background:var(--purple-soft); padding:1px 6px; border-radius:4px; font-weight:500; }
.result-select, .result-input { appearance:none; -webkit-appearance:none; font-size:13px; color:var(--text); background:var(--canvas); font-weight:600; border:1px solid var(--border); border-radius:6px; padding:6px 28px 6px 10px; min-width:0; max-width:100%; flex:1; transition:border-color .15s, box-shadow .15s; background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' stroke='%23868680' stroke-width='1.5' fill='none' stroke-linecap='round'/></svg>"); background-repeat:no-repeat; background-position:right 8px center; }
.result-input { background-image:none; padding:6px 10px; width:90px; flex:none; }
.result-select:focus, .result-input:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px rgba(39,131,222,.12); }
.result-textarea { width:100%; flex:1; font-size:13px; color:var(--text); font-weight:500; background:var(--canvas); border:1px solid var(--border); border-radius:6px; padding:8px 10px; resize:vertical; min-height:54px; line-height:1.5; font-family:inherit; }
.result-textarea:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px rgba(39,131,222,.12); }
.btn-mini { font-size:11px; padding:3px 8px; border:1px solid var(--border); background:var(--surface); color:var(--text-sec); border-radius:4px; cursor:pointer; transition:all .15s; }
.btn-mini:hover { border-color:var(--orange); color:var(--orange); }
.modal-original { padding:10px 12px; background:var(--surface-2); border-radius:var(--radius); font-size:12px; color:var(--text-sec); font-style:italic; word-break:break-all; }
.modal-actions { display:flex; gap:10px; margin-top:8px; }
.modal-actions .btn { flex:1; justify-content:center; padding:10px; }

/* 表单 */
.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.form-item { display:flex; flex-direction:column; gap:6px; }
.form-item.full { grid-column:1/-1; }
.form-item label { font-size:12px; color:var(--text-sec); font-weight:500; }
.form-item input[type=text], .form-item input[type=password], .form-item input[type=email], .form-item input[type=date], .form-item input[type=number], .form-item select, .form-item textarea { padding:8px 10px; border:1px solid var(--border); border-radius:var(--radius); font-size:13px; outline:none; transition:border .2s; background:var(--canvas); }
.form-item input:focus, .form-item select:focus, .form-item textarea:focus { border-color:var(--primary); }
.form-item textarea { resize:vertical; min-height:60px; }
.form-check { display:flex; align-items:center; gap:8px; font-size:13px; cursor:pointer; }
.form-check input { accent-color:var(--primary); }
.form-hint { font-size:11px; color:var(--text-sec); }
.member-check-grid { display:flex; flex-wrap:wrap; gap:8px; }
.member-check { display:flex; align-items:center; gap:6px; font-size:12px; border:1px solid var(--border); border-radius:14px; padding:4px 10px; cursor:pointer; user-select:none; transition:all .15s; }
.member-check.on { background:var(--primary-soft); border-color:var(--primary); color:var(--primary); }

/* 项目详情 Tabs */
.pd-tabs { display:flex; gap:4px; border-bottom:1px solid var(--border); margin-bottom:14px; }
.pd-tab { padding:8px 16px; cursor:pointer; font-size:13px; font-weight:500; color:var(--text-sec); border-radius:8px 8px 0 0; border-bottom:2px solid transparent; background:none; border-top:none; border-left:none; border-right:none; }
.pd-tab:hover { color:var(--text); }
.pd-tab.active { color:var(--primary); border-bottom-color:var(--primary); background:var(--primary-soft); }
.pd-tab .badge { display:inline-block; padding:0 6px; border-radius:10px; font-size:10px; background:var(--surface-2); color:var(--text-sec); margin-left:4px; }
.pd-list { display:flex; flex-direction:column; gap:8px; max-height:380px; overflow-y:auto; padding-right:4px; }
.pd-item { display:flex; align-items:center; gap:10px; padding:10px 12px; background:var(--surface); border-radius:var(--radius); font-size:13px; }
.pd-item .pd-t { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pd-wb { display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:var(--radius); font-size:12px; }
.pd-wb.note { background:var(--note-yellow); }
.pd-wb.request { background:var(--note-blue); }
.pd-wb.file { background:var(--note-gray); }
.pd-tl { position:relative; padding-left:14px; margin-left:4px; max-height:380px; overflow-y:auto; }
.pd-tl::before { content:''; position:absolute; left:2px; top:4px; bottom:4px; width:2px; background:var(--border); }
.pd-tl-item { position:relative; padding:6px 0 6px 10px; font-size:12px; color:var(--text-sec); }
.pd-tl-item::before { content:''; position:absolute; left:-13px; top:11px; width:8px; height:8px; border-radius:50%; background:var(--primary); }
.pd-milestone { display:flex; align-items:flex-start; gap:10px; padding:10px 12px; background:var(--green-soft); border-radius:var(--radius); font-size:13px; }
.pd-milestone .ms-icon { font-size:16px; }

/* Toast */
#toast { position:fixed; bottom:60px; left:50%; transform:translateX(-50%) translateY(20px); background:#2C2C2B; color:#fff; padding:10px 20px; border-radius:8px; font-size:13px; z-index:400; opacity:0; transition:all .3s; pointer-events:none; max-width:80vw; box-shadow:0 4px 16px rgba(0,0,0,.2); }
#toast.show { opacity:1; transform:translateX(-50%) translateY(0); }

/* 空状态 */
.empty-state { text-align:center; padding:48px 20px; }
.empty-state .es-icon { font-size:44px; margin-bottom:12px; }
.empty-state .es-title { font-size:15px; font-weight:600; margin-bottom:6px; }
.empty-state .es-desc { font-size:13px; color:var(--text-sec); margin-bottom:16px; }
.loading { text-align:center; padding:40px; color:var(--text-sec); font-size:13px; }

/* 响应式 */
@media (max-width:1024px) {
  .dash-grid { grid-template-columns:1fr; }
  .kanban { grid-template-columns:repeat(2,1fr); }
  .stats-grid { grid-template-columns:1fr; }
  .kpi-row { grid-template-columns:repeat(2,1fr); }
  .wb-grid { grid-template-columns:repeat(2,1fr); }
  .team-summary { grid-template-columns:repeat(2,1fr); }
}
