/* ==========================================================================
   部门工作台 · style.css
   暖调书桌：米白纸面 + 琥珀棕强调，几乎无阴影，卡内虚线分区。
   配色与规范见《部门工作台·项目交接说明书》§8
   ========================================================================== */

:root{
  /* ---------- 画布与容器：暖中性（灰里带黄棕底，不是冷灰） ----------
     口径来自 docs/DESIGN.md（Notion 纸感）。改这里 = 全站改，
     所以别在某个组件里写死颜色——写死了下一次换肤就换不动。 */
  --bg:#FFFFFF;              /* 纯白画布 */
  --bg-canvas:#F7F6F5;       /* 页面底色，比卡片暗一档，用来"托住"卡片 */
  --panel:#F6F5F4;           /* 侧栏 / 顶栏 */
  --card:#FFFFFF;            /* 卡片 */
  --line:rgba(0,0,0,.10);    /* 耳语级边框 —— Notion 的灵魂，看得见但没重量 */
  --line-soft:rgba(0,0,0,.06);
  --track:#F1EFEE;           /* 轨道 / 分段控件底 */

  /* 墨：近黑不纯黑 */
  --ink:rgba(0,0,0,.95);
  --muted:#615D59;           /* 暖灰 500：次要文字 */
  --muted-2:#7E766C;         /* 再深一档；手机小字别再往淡里走，会看不见 */
  --placeholder:#A39E98;

  /* 强调：全站只有这一种饱和色 */
  --accent:#0075DE;          /* Notion Blue */
  --accent-active:#005BAB;   /* 按下 */
  --accent-bg:#F2F9FF;       /* pill 底 */
  --accent-ink:#097FE8;      /* pill 上的字（比底色深，保证读得清） */
  --focus:#097FE8;

  /* 语义色：只在有语义处出现 */
  --neg:#C1493F;             /* 风险 / 超期 / A 级 */
  --pos:#1A7F37;             /* 正常 / 已解决 / 正向结余 */
  --warn:#DD5B00;            /* 关注 / 待办 / 超 48h */
  --internal:#8A6A3B;        /* 内部备注（员工端由服务端剔除，红线⑨） */
  --good:#5F7A5A;
  --idea:#2A6F9E;            /* 经验沉淀：冷蓝，与风险色区分 */

  /* 圆角：Notion 刻意偏小 —— 圆角一大就变"App 味"，我们要的是"文档味" */
  --r-lg:12px;               /* 卡片 */
  --r-md:8px;                /* 小件 */
  --r-sm:6px;
  --r-xs:4px;                /* 按钮 / 输入框 */
  --r-pill:999px;

  /* 阴影：感觉得到但看不见（累计不透明度 < 0.05） */
  --sh-card:0 1px 2px rgba(0,0,0,.03), 0 4px 12px rgba(0,0,0,.03);
  --sh-deep:0 1px 3px rgba(0,0,0,.01), 0 7px 15px rgba(0,0,0,.02),
            0 14px 28px rgba(0,0,0,.04);

  --font-body:"Inter","NotionInter",-apple-system,BlinkMacSystemFont,"Segoe UI",
              "PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --font-num:"Inter","SF Mono","Cascadia Mono",Consolas,Menlo,monospace;
}

*,*::before,*::after{box-sizing:border-box;}

html,body{height:100%;}

body{
  margin:0;
  font-family:var(--font-body);
  font-size:14px;
  line-height:1.6;
  color:var(--ink);
  background:var(--bg);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

/* ============================== 通用件 ============================== */

.card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:16px 18px;
}

.card-title{
  margin:0 0 12px;
  font-size:13px;
  font-weight:600;
  letter-spacing:.02em;
  color:var(--ink);
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:8px;
}

.card-meta{
  font-size:12px;
  font-weight:400;
  color:var(--muted);
}

/* 卡内虚线分区 */
.dash-div{
  border:0;
  border-top:1px dashed var(--line);
  margin:12px 0;
}

/* 灯色：只三色 */
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:0 0 8px;}
.dot.green{background:#7FA37A;}
.dot.yellow{background:#D9A441;}
.dot.red{background:var(--neg);}

.tag{
  display:inline-block;
  padding:1px 7px;
  border-radius:999px;
  font-size:11px;
  line-height:1.7;
  background:var(--track);
  color:var(--muted);
  white-space:nowrap;
}
.tag.high{background:#F5E3DF;color:var(--neg);}
.tag.mid{background:#FAF0DC;color:#96702A;}
.tag.low{background:#EDF0EA;color:#5F7A5A;}

/* 进度条：标签｜进度条｜数值｜百分比 四列 */
.prog-row{
  display:grid;
  grid-template-columns:88px 1fr 66px 44px;
  align-items:center;
  gap:10px;
  padding:6px 0;
  font-size:13px;
}
.prog-label{color:var(--ink);}
.prog-track{
  height:8px;
  background:var(--track);
  border-radius:999px;
  overflow:hidden;
}
.prog-track > i{
  display:block;
  height:100%;
  background:var(--accent);
  border-radius:999px;
}
.prog-num{font-family:var(--font-num);font-size:12px;color:var(--muted);text-align:right;}
.prog-pct{font-family:var(--font-num);font-size:12px;color:var(--ink);text-align:right;}

/* 周目标：目标文本独占一行，进度条第二行（长文本不被挤压） */
.goal-line{font-size:13px;margin:2px 0 4px;}
.goal-track{display:grid;grid-template-columns:1fr 96px 48px;gap:10px;align-items:center;}
.goal-track .prog-num,.goal-track .prog-pct{font-family:var(--font-num);font-size:12px;text-align:right;}
.goal-track .prog-num{color:var(--muted);}
.goal-track .prog-pct{color:var(--ink);}

/* 行列表（谁在等谁 / 项目 / 问题池） */
.rowlist{display:flex;flex-direction:column;}

.row{
  display:grid;
  align-items:center;
  gap:10px;
  padding:9px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.row:first-child{border-top:0;}

.row-main{min-width:0;}
.row-name{
  display:block;
  font-weight:500;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.row-next{
  display:block;
  font-size:12px;
  color:var(--muted);
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.row-side{
  font-family:var(--font-num);
  font-size:12px;
  color:var(--muted);
  white-space:nowrap;
  flex:0 0 auto;
}

.empty{
  padding:18px 0;
  text-align:center;
  color:var(--muted);
  font-size:13px;
}

/* ============================== 顶栏（角色 + 日期） ============================== */

.topbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:14px 20px;
  background:var(--panel);
  border-bottom:1px solid var(--line);
}

.topbar-left{display:flex;align-items:baseline;gap:12px;}

.date-day{
  font-family:var(--font-num);
  font-size:48px;
  line-height:1;
  font-weight:600;
  color:var(--ink);
}
.date-meta{display:flex;flex-direction:column;font-size:12px;color:var(--muted);}

.topbar-right{display:flex;align-items:center;gap:14px;font-size:13px;color:var(--muted);}
.greet{color:var(--ink);font-weight:500;}

.role-switch{display:flex;gap:6px;}
.role-btn{
  border:1px solid var(--line);
  background:var(--card);
  color:var(--muted);
  border-radius:999px;
  padding:4px 12px;
  font-size:12px;
  cursor:pointer;
  font-family:inherit;
}
.role-btn.is-active{background:var(--accent);border-color:var(--accent);color:#fff;}

/* ============================== 今日条 ============================== */

.todaybar{
  display:grid;
  grid-template-columns:1fr auto;
  align-items:center;
  gap:16px;
  padding:12px 20px;
  background:var(--accent-bg);
  border-bottom:1px solid var(--line);
}
.todaybar-nums{display:flex;gap:22px;font-size:13px;}
.todaybar-nums b{font-family:var(--font-num);font-size:17px;margin-right:3px;}
.todaybar-nums .warn b{color:var(--neg);}
.todaybar-nums .ok b{color:var(--pos);}
.todaybar-time{font-size:12px;color:var(--muted);font-family:var(--font-num);}

.ai-line{
  padding:10px 20px;
  font-size:13px;
  color:var(--ink);
  background:var(--card);
  border-bottom:1px solid var(--line);
  display:flex;
  gap:8px;
  align-items:flex-start;
}
.ai-line .ai-tag{
  flex:0 0 auto;
  font-size:11px;
  padding:1px 7px;
  border-radius:999px;
  background:var(--accent);
  color:#fff;
  margin-top:2px;
}

/* ============================== 廖端 / 总监端 布局 ============================== */

.board{
  padding:16px 20px 24px;
  display:flex;
  flex-direction:column;
  gap:14px;
}

.grid-3{
  display:grid;
  grid-template-columns:1fr 1.15fr 1fr;
  gap:14px;
  align-items:start;
}

.grid-2{
  display:grid;
  grid-template-columns:1.6fr 1fr;
  gap:14px;
  align-items:start;
}

.stack{display:flex;flex-direction:column;gap:14px;}

/* 域卡头部指标 */
.domain-metrics{
  display:flex;
  gap:18px;
  padding:4px 0 10px;
}
.metric{display:flex;flex-direction:column;gap:1px;}
.metric-num{font-family:var(--font-num);font-size:20px;line-height:1.1;color:var(--ink);}
.metric-label{font-size:11px;color:var(--muted);}

/* 关键结果列表 */
.kr{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:5px 0;font-size:13px;}
.kr-num{font-family:var(--font-num);font-size:12px;color:var(--muted);}
.kr.is-done{color:var(--muted);}
.kr.is-done .kr-name::before{content:"✓ ";color:var(--pos);}

/* 今日清单 */
.today-list{display:flex;flex-direction:column;}
.tli{
  display:flex;
  gap:9px;
  align-items:flex-start;
  padding:7px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.tli:first-child{border-top:0;}
.tli-box{
  flex:0 0 14px;
  width:14px;height:14px;
  margin-top:4px;
  border:1.5px solid var(--accent);
  border-radius:4px;
  display:flex;align-items:center;justify-content:center;
  font-size:10px;color:var(--accent);
}
.tli.is-done .tli-box{background:var(--accent);color:#fff;}
.tli.is-done .tli-text{color:var(--muted);text-decoration:line-through;}

/* 复盘 */
.review{font-size:13px;color:var(--ink);}
.review-label{font-size:11px;color:var(--muted);display:block;margin-bottom:4px;}

/* 经验池 */
.exp{display:flex;flex-direction:column;}
.exp-item{
  display:grid;
  grid-template-columns:1fr auto;
  gap:8px;
  align-items:start;
  padding:8px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.exp-item:first-child{border-top:0;}
.exp-text{line-height:1.5;}
.exp-meta{font-size:11px;color:var(--muted);white-space:nowrap;padding-top:2px;}

/* 钱 */
.money-grid{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:14px;
}
.money-cell{display:flex;flex-direction:column;gap:2px;}
.money-num{font-family:var(--font-num);font-size:22px;line-height:1.15;color:var(--ink);}
.money-num.gap{color:var(--neg);}
.money-label{font-size:11px;color:var(--muted);}
.money-note{
  margin-top:12px;
  padding-top:10px;
  border-top:1px dashed var(--line);
  font-size:12px;
  color:var(--muted);
}

/* ============================== 手机端（员工端） ============================== */

.phone-wrap{
  max-width:min(430px, 100%);
  margin:0 auto;
  padding:0 0 28px;
  background:var(--bg);
  min-height:100vh;
}

.phone-head{
  padding:20px 18px 14px;
  background:var(--panel);
  border-bottom:1px solid var(--line);
}
.phone-head-row{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;}
/* min-width:0：不加的话左边的"你好，某某 / 日期 · 部门"会把右侧角色按钮顶出屏幕，
   文字右边被裁掉一截（430px 视口下最明显） */
.phone-head-row > div:first-child{min-width:0;}
.phone-hello{font-size:19px;font-weight:600;overflow-wrap:anywhere;}
.phone-sub{
  font-size:12px;
  color:var(--muted-2);            /* 比 --muted 深一档：手机上要看得清 */
  margin-top:2px;
  overflow-wrap:anywhere;
}
.role-switch.mini{flex:0 0 auto;padding-top:2px;}
.role-switch.mini .role-btn{padding:3px 9px;font-size:11px;}

.phone-body{padding:14px;display:flex;flex-direction:column;gap:12px;}

.voice-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:16px;
  text-align:center;
}
.voice-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  width:100%;
  padding:14px;
  border:1px dashed var(--accent);
  border-radius:var(--r-md);
  background:var(--accent-bg);
  color:var(--accent);
  font-size:14px;
  font-weight:500;
  font-family:inherit;
  cursor:pointer;
}
.voice-hint{font-size:11px;color:var(--muted);margin-top:8px;}

.phone-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:14px 16px;
}
.phone-card-title{
  font-size:12px;
  font-weight:600;
  color:var(--muted);
  letter-spacing:.04em;
  margin:0 0 10px;
  display:flex;justify-content:space-between;align-items:baseline;
}

.deliver{
  display:grid;
  grid-template-columns:16px minmax(0,1fr) auto;
  gap:10px;
  align-items:start;
  padding:9px 0;
  border-top:1px dashed var(--line);
  font-size:14px;
}
.deliver:first-of-type{border-top:0;}
.deliver > div{min-width:0;overflow:hidden;}
.deliver-when{font-size:11px;color:var(--muted);white-space:nowrap;padding-top:3px;}
.deliver-sub{font-size:11px;color:var(--muted);margin-top:1px;}

.feed{
  display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;
  gap:9px;
  align-items:baseline;
  padding:8px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.feed:first-of-type{border-top:0;}
.feed > span:nth-child(2){min-width:0;overflow:hidden;text-overflow:ellipsis;}
.feed-date{font-family:var(--font-num);font-size:11px;color:var(--muted);}
.feed-status{font-size:11px;color:var(--accent);white-space:nowrap;}

.reply{
  display:flex;gap:9px;align-items:baseline;
  padding:8px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.reply:first-of-type{border-top:0;}
.reply-date{font-family:var(--font-num);font-size:11px;color:var(--muted);white-space:nowrap;}

/* ============================== 登录页 / 错误页 ============================== */

.login-wrap{
  min-height:100vh;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:var(--bg);
}
.login-card{
  width:100%;
  max-width:340px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:32px 28px 26px;
  text-align:center;
}
.login-brand{
  font-size:20px;
  font-weight:600;
  letter-spacing:.04em;
  color:var(--ink);
}
.login-sub{
  font-size:12px;
  color:var(--muted);
  margin-top:6px;
}
.login-input{
  width:100%;
  margin-top:22px;
  padding:11px 14px;
  border:1px solid var(--line);
  border-radius:var(--r-md);
  background:var(--bg);
  color:var(--ink);
  font-size:15px;
  font-family:inherit;
  text-align:center;
  letter-spacing:.1em;
  outline:none;
}
.login-input:focus{border-color:var(--accent);}
.login-btn{
  width:100%;
  margin-top:12px;
  padding:11px;
  border:1px solid var(--accent);
  border-radius:var(--r-md);
  background:var(--accent);
  color:#fff;
  font-size:14px;
  font-weight:500;
  font-family:inherit;
  cursor:pointer;
}
.login-btn:disabled{opacity:.6;cursor:default;}
.login-err{
  min-height:18px;
  margin-top:10px;
  font-size:12px;
  color:var(--neg);
}

/* server 模式身份标签 */
.role-chip{
  padding:3px 12px;
  border-radius:999px;
  background:var(--accent-bg);
  color:var(--accent);
  font-size:12px;
}

/* ============================== 页脚 ============================== */

.foot{
  padding:10px 20px;
  border-top:1px solid var(--line);
  background:var(--panel);
  font-size:12px;
  color:var(--muted);
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
}
.foot-time{font-family:var(--font-num);}

/* ============================== 隐藏页 ============================== */

.page{display:none;}
.page.is-active{display:block;}

/* ==========================================================================
   v0.2 / v0.3 新增：页签、语音、日历、任务柱状图、计划树、表单
   ========================================================================== */

/* ------------------------------ 灯色补齐（灰 / 琥珀） ------------------------------ */

.dot.grey{background:#9B938A;}
.dot.amber{background:var(--accent);}
.c-red{color:var(--neg);}
.c-amber{color:var(--accent);}

.warn-line{
  padding:10px 14px;
  border-radius:var(--r-md);
  background:var(--accent-bg);
  border:1px solid var(--line);
  color:#7A5A38;
  font-size:12.5px;
  margin-bottom:12px;
}

/* ------------------------------ 页签 ------------------------------ */

.tabs{
  display:flex;
  gap:4px;
  padding:0 20px;
  background:var(--panel);
  border-bottom:1px solid var(--line);
}
.tab{
  appearance:none;
  border:0;
  background:transparent;
  font-family:inherit;
  font-size:13.5px;
  color:var(--muted);
  padding:11px 14px;
  cursor:pointer;
  border-bottom:2px solid transparent;
  margin-bottom:-1px;
}
.tab:hover{color:var(--ink);}
.tab.is-active{
  color:var(--accent);
  border-bottom-color:var(--accent);
  font-weight:500;
}

/* 手机端：等宽分段 */
.tabs-mobile{
  display:grid;
  grid-auto-flow:column;
  grid-auto-columns:1fr;
  gap:0;
  padding:0 12px;
  position:sticky;
  top:0;
  z-index:5;
}
.tabs-mobile .tab{
  text-align:center;
  padding:10px 6px;
  font-size:13px;
}

/* ------------------------------ 语音 ------------------------------ */

.voice-card{
  padding:14px 18px;
  background:var(--panel);
  border-bottom:1px solid var(--line);
}
.voice-bar{padding:14px 20px 0;}
.voice-bar .voice-card{
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  background:var(--card);
}
.voice-btn{
  width:100%;
  padding:13px;
  border:1px solid var(--accent);
  border-radius:var(--r-md);
  background:var(--accent);
  color:#fff;
  font-family:inherit;
  font-size:15px;
  font-weight:500;
  letter-spacing:.02em;
  cursor:pointer;
  touch-action:none;          /* 按住说话要吃掉滚动手势 */
  user-select:none;
}
.voice-btn:hover{background:#A87C4E;}
.voice-btn.is-live{background:var(--neg);border-color:var(--neg);}
.voice-btn:disabled{opacity:.65;cursor:default;}
.voice-file{
  display:block;
  margin-top:8px;
  text-align:center;
  font-size:12px;
  color:var(--accent);
  cursor:pointer;
  text-decoration:underline;
}
.voice-hint{
  margin-top:7px;
  font-size:11.5px;
  color:var(--muted);
  text-align:center;
  line-height:1.5;
}
.voice-msg{
  margin-top:9px;
  padding:8px 11px;
  border-radius:var(--r-sm);
  font-size:12px;
  background:var(--track);
  color:var(--ink);
}
.voice-msg.ok{background:#E9F0E9;color:#4E6B4E;}
.voice-msg.warn{background:#F6EEDD;color:#7A5A38;}
.voice-msg.err{background:#F5E5E2;color:var(--neg);}
.voice-msg.live{background:var(--accent-bg);color:#7A5A38;}
.voice-pending{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px;}
.voice-pending-label{font-size:11px;color:var(--muted);margin-bottom:4px;}
.voice-pending-row{
  display:flex;justify-content:space-between;
  font-size:12px;color:var(--ink);
  padding:3px 0;
}
.voice-pending-state{color:var(--muted);font-size:11px;}

/* ------------------------------ 日历 ------------------------------ */

.cal-nav{
  display:flex;
  align-items:center;
  justify-content:space-between;
  margin-bottom:10px;
}
.cal-nav-btn{
  appearance:none;
  border:1px solid var(--line);
  background:var(--bg);
  border-radius:var(--r-sm);
  font-family:inherit;
  font-size:12.5px;
  color:var(--ink);
  padding:4px 12px;
  cursor:pointer;
}
.cal-nav-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent);}
.cal-nav-btn:disabled{opacity:.4;cursor:default;}
.cal-nav-cur{font-family:var(--font-num);font-size:13.5px;color:var(--ink);}

.cal-head{
  display:grid;
  grid-template-columns:repeat(7,1fr);
  gap:5px;
  margin-bottom:5px;
}
.cal-head span{
  text-align:center;
  font-size:11.5px;
  color:var(--muted);
}

.cal-grid{
  display:grid;
  grid-template-columns:repeat(7,1fr);
  gap:5px;
}
.cal-cell{
  position:relative;
  appearance:none;
  border:1px solid var(--line);
  border-radius:var(--r-sm);
  background:var(--card);
  font-family:inherit;
  padding:6px 6px 5px;
  min-height:52px;
  text-align:left;
  cursor:pointer;
  color:var(--ink);
}
.cal-cell.is-blank{border:0;background:transparent;cursor:default;min-height:52px;}
.cal-cell:disabled{color:var(--muted);cursor:default;}
.cal-cell.has-data{background:var(--bg);}
.cal-cell.has-data:hover{border-color:var(--accent);}
.cal-cell.is-today{border-color:var(--accent);}
.cal-cell.is-sel{border-color:var(--accent);background:var(--accent-bg);}
.cal-num{
  display:block;
  font-family:var(--font-num);
  font-size:12.5px;
  line-height:1.2;
}
.cal-dot{
  position:absolute;
  left:6px;
  bottom:6px;
  width:7px;height:7px;
  border-radius:50%;
}
.cal-dot.green{background:#6B8E6B;}
.cal-dot.yellow{background:var(--accent);}
.cal-dot.red{background:var(--neg);}
.cal-badge{
  position:absolute;
  right:5px;
  bottom:5px;
  min-width:16px;
  padding:0 4px;
  border-radius:999px;
  background:var(--accent);
  color:#fff;
  font-family:var(--font-num);
  font-size:10.5px;
  line-height:15px;
  text-align:center;
}

.cal-legend{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:14px;
  margin-top:12px;
  padding-top:10px;
  border-top:1px dashed var(--line);
  font-size:11.5px;
  color:var(--muted);
}
.cal-legend span{display:flex;align-items:center;gap:5px;}
.cal-legend-asof{margin-left:auto;font-family:var(--font-num);}

.cal-detail{margin-top:14px;}
.cal-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;}
.cal-chip{
  padding:2px 9px;
  border-radius:999px;
  background:var(--track);
  font-size:11.5px;
  color:var(--ink);
}
.cal-type{color:var(--muted);margin-right:5px;}
.cal-level{
  display:inline-block;
  min-width:15px;
  padding:0 4px;
  margin-right:5px;
  border-radius:3px;
  background:var(--accent-bg);
  color:var(--accent);
  font-family:var(--font-num);
  font-size:10.5px;
  text-align:center;
}

@media (max-width:640px){
  .cal-cell{min-height:44px;padding:5px 5px 4px;}
  .cal-cell.is-blank{min-height:44px;}
  .cal-num{font-size:11.5px;}
  .cal-dot{width:6px;height:6px;bottom:5px;left:5px;}
  .cal-badge{font-size:10px;line-height:14px;}
  .cal-legend{gap:10px;font-size:11px;}
}

/* ------------------------------ 任务柱状图 ------------------------------ */

.chart-wrap{margin-top:6px;overflow:hidden;}
.bar-svg{width:100%;height:auto;display:block;}
.bar-grid{stroke:var(--line);stroke-width:1;}
.bar-base{stroke:#DFD6C9;stroke-width:1.2;}
.bar-axis{fill:var(--muted);font-size:11px;font-family:var(--font-num);}
.bar-month{fill:var(--muted);font-size:11.5px;}
.bar-unit{fill:var(--muted);font-size:11px;}
.bar-rect{transition:opacity .12s;}
.bar-rect:hover{opacity:.78;}
.bar-empty{fill:var(--track);stroke:#DFD6C9;stroke-width:1;stroke-dasharray:3 3;}
.bar-empty-text{fill:var(--muted);font-size:11px;}

.chart-legend{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px;}
.lg-item{
  display:flex;align-items:center;gap:6px;
  appearance:none;
  border:1px solid var(--line);
  background:var(--bg);
  border-radius:999px;
  font-family:inherit;
  font-size:12px;
  color:var(--ink);
  padding:3px 11px 3px 8px;
  cursor:pointer;
}
.lg-item i{width:9px;height:9px;border-radius:2px;display:inline-block;}
.lg-item:hover{border-color:var(--accent);}
.lg-item.is-off{opacity:.38;}
.chart-legend-hint{font-size:11px;color:var(--muted);margin-bottom:8px;}

/* ------------------------------ 按钮 / 表单 ------------------------------ */

.btn{
  appearance:none;
  border:1px solid var(--line);
  background:var(--bg);
  border-radius:var(--r-md);
  font-family:inherit;
  font-size:13px;
  color:var(--ink);
  padding:7px 14px;
  cursor:pointer;
}
.btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent);}
.btn:disabled{opacity:.6;cursor:default;}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;}
.btn-primary:hover:not(:disabled){background:#A87C4E;color:#fff;}
.btn-mini{font-size:11.5px;padding:3px 9px;border-radius:var(--r-sm);}

.edit-bar{
  display:flex;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
}
.edit-hint{font-size:11.5px;color:var(--muted);}
.edit-msg{
  margin-top:10px;
  padding:8px 12px;
  border-radius:var(--r-sm);
  background:var(--track);
  font-size:12px;
  color:var(--ink);
}

.met-form{margin-top:4px;}
.maker-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:12px;
  flex-wrap:wrap;
  margin-bottom:10px;
  font-size:14px;
  font-weight:500;
}
.met-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:10px;
}
.met-form-row{margin-bottom:10px;}
.met-row{display:flex;flex-direction:column;gap:4px;min-width:0;}
.met-row.grow2{grid-column:span 2;}
.met-row-label{font-size:11.5px;color:var(--muted);}
.met-input{
  width:100%;
  padding:7px 10px;
  border:1px solid var(--line);
  border-radius:var(--r-sm);
  background:var(--bg);
  font-family:inherit;
  font-size:13px;
  color:var(--ink);
  outline:none;
}
.met-input:focus{border-color:var(--accent);}
.met-actions{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  margin-top:12px;
}

@media (max-width:820px){
  .met-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .met-row.grow2{grid-column:span 2;}
}

/* ------------------------------ 计划草稿 ------------------------------ */

.draft-list{
  margin-top:14px;
  padding-top:10px;
  border-top:1px dashed var(--line);
}
.draft-row{
  display:flex;
  align-items:center;
  gap:10px;
  padding:7px 0;
  border-bottom:1px dashed var(--line);
  font-size:12.5px;
}
.draft-field{color:var(--muted);white-space:nowrap;}
.draft-field.grow{flex:1;min-width:0;color:var(--ink);overflow:hidden;text-overflow:ellipsis;}

/* ------------------------------ 进度树 ------------------------------ */

.dept-switch{display:flex;gap:4px;margin-bottom:12px;}

.tree-group-label{
  font-size:11.5px;
  color:var(--muted);
  margin:8px 0 6px;
}
.tree-month{margin-bottom:4px;}
.tree-person{
  padding:10px 0;
  border-top:1px dashed var(--line);
}
.tree-person:first-of-type{border-top:0;}
.tree-person-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:12px;
  margin-bottom:6px;
}
.tree-who{font-size:13.5px;font-weight:500;}
.tree-meta{font-size:11.5px;color:var(--muted);}

.goal-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:12px;
  align-items:start;
  padding:9px 0;
  border-top:1px dashed var(--line);
}
.goal-row:first-child{border-top:0;}
.goal-row.is-indent{padding-left:14px;}
.goal-row.is-dropped .goal-name{text-decoration:line-through;color:var(--muted);}
.goal-main{min-width:0;display:flex;flex-direction:column;gap:2px;}
.goal-name{font-size:13.5px;}
.goal-kr{font-size:11.5px;color:var(--muted);}
.goal-parent{font-size:11px;color:var(--muted);}
.goal-level{
  margin-left:7px;
  padding:1px 7px;
  border-radius:999px;
  background:var(--track);
  font-size:10.5px;
  color:var(--muted);
}
.tag.self{
  margin-left:7px;
  padding:1px 7px;
  border-radius:999px;
  background:var(--accent-bg);
  color:var(--accent);
  font-size:10.5px;
}
.goal-side{
  display:flex;
  align-items:center;
  gap:9px;
  white-space:nowrap;
}
.goal-num{font-family:var(--font-num);font-size:12px;color:var(--ink);}
.goal-noprog{font-size:11px;color:var(--muted);}
.goal-status{font-size:11.5px;color:var(--muted);min-width:44px;text-align:right;}
.goal-track-mini{
  display:inline-block;
  width:64px;height:6px;
  border-radius:999px;
  background:var(--track);
  overflow:hidden;
  vertical-align:middle;
}
.goal-track-mini i{
  display:block;height:100%;
  background:var(--accent);
}

/* ==========================================================================
   第 3/4 批 · 明细视图（我的今日 / 复盘 / 本周 / 部门 / 摘要 / 待协调）
   这些块的类名由 js/report.js 产出；此前只写了 HTML 没配样式，
   明细页会渲染成"一堆没排版的字"。

   三条硬规矩（手机上踩过，别再犯）：
     ① 所有 flex/grid 的文字列必须 min-width:0 —— 否则长标题把卡片顶出屏幕，
        右边被裁掉一截（430px 视口最明显）；
     ② 卡内次要文字用 --muted-2（比 --muted 深一档），--muted 在白卡上对比度太低，
        手机上看着像没写字；
     ③ 可点区域不小于 32px 高，拇指才点得准。
   ========================================================================== */

:root{
  --muted-2:#7E766C;         /* 卡内次要文字（比 --muted 深，专供明细页） */
  --internal:#8A6A3B;        /* 内部备注：琥珀深色，一眼与正文区分 */
  --good:#5F7A5A;            /* 已解决/已关闭：低饱和苔绿，不抢眼 */
}

/* ------------------------------ 数字小结 ------------------------------ */

.stat-row{
  display:grid;
  grid-auto-flow:column;
  grid-auto-columns:1fr;
  gap:8px;
  margin:0 0 12px;
}
.stat{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-md);
  padding:10px 12px;
  min-width:0;
}
.stat-n{
  display:block;
  font-family:var(--font-num);
  font-size:22px;
  line-height:1.15;
  color:var(--ink);
}
.stat-l{
  display:block;
  font-size:11px;
  color:var(--muted-2);
  margin-top:2px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

/* ------------------------------ 明细列表 ------------------------------ */

.rlist{display:block;}
.rlist > * + *{margin-top:6px;}

.rrow{
  border:1px solid var(--line);
  border-radius:var(--r-md);
  background:var(--card);
  overflow:hidden;
}
.rrow.is-open{border-color:var(--accent);}

.rrow-head{
  display:flex;
  align-items:flex-start;
  gap:9px;
  width:100%;
  padding:10px 12px;
  border:0;
  background:transparent;
  font-family:inherit;
  font-size:14px;
  color:var(--ink);
  text-align:left;
  cursor:pointer;
  min-height:44px;                 /* ③ 可点区域 */
}
.rrow-date{
  font-family:var(--font-num);
  font-size:11px;
  color:var(--muted-2);
  white-space:nowrap;
  padding-top:3px;
  flex:0 0 auto;
}
.rrow-main{flex:1 1 auto;min-width:0;}      /* ① 关键：不加这行长标题会撑破卡片 */
.rrow-title{
  display:block;
  font-size:14px;
  line-height:1.45;
  overflow-wrap:anywhere;                    /* 长英文/无空格串也不会溢出 */
}
.rrow-sub{
  display:block;
  font-size:11.5px;
  color:var(--muted-2);
  margin-top:2px;
  overflow-wrap:anywhere;
}
.rrow-side{flex:0 0 auto;}

.rrow-body{
  padding:10px 12px 12px;
  border-top:1px dashed var(--line);
  background:var(--bg);
}
.rblock{
  font-size:13px;
  line-height:1.6;
  color:var(--ink);
  overflow-wrap:anywhere;
}
.rblock + .rblock{margin-top:7px;}
.rblock > b{
  display:block;
  font-size:11px;
  font-weight:600;
  letter-spacing:.04em;
  color:var(--muted-2);
  margin-bottom:2px;
}

/* 内部备注（红线⑨）：只给总监/廖总看。样式上刻意"不像正文"——
   虚线琥珀边 + 浅底，避免有人误以为这是员工也能看到的内容。 */
.rblock.is-internal{
  margin:6px 12px 0;
  padding:8px 10px;
  border:1px dashed var(--internal);
  border-radius:var(--r-sm);
  background:#FBF5EA;
  color:var(--internal);
  font-size:12.5px;
}
.rblock.is-inline{ /* 不折叠的那种：贴着行显示，右侧留一点空隙 */ }
.rblock.is-internal > b{color:var(--internal);}

/* ------------------------------ 状态 pill ------------------------------ */

.pill{
  display:inline-block;
  padding:2px 8px;
  border-radius:999px;
  font-size:11px;
  line-height:1.6;
  white-space:nowrap;
  background:var(--track);
  color:var(--muted-2);
  border:1px solid transparent;
}
.pill.doing{background:var(--accent-bg);color:var(--accent);border-color:#E6D5BE;}
.pill.warn{background:#F7E7E3;color:var(--neg);border-color:#EBD3CD;}
.pill.ok{background:#EDF1EA;color:var(--good);border-color:#D9E2D4;}

/* ------------------------------ 动作条 ------------------------------ */

.rrow-acts{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  padding:0 12px 10px;
}
.mini-btn{
  padding:6px 11px;
  min-height:32px;                 /* ③ */
  border:1px solid var(--accent);
  border-radius:999px;
  background:var(--accent);
  color:#fff;
  font-family:inherit;
  font-size:12px;
  cursor:pointer;
  white-space:nowrap;
}
.mini-btn.ghost{
  background:transparent;
  color:var(--accent);
}
.mini-btn.ghost:hover{background:var(--accent-bg);}
.mini-btn:disabled{
  background:var(--track);
  border-color:var(--line);
  color:var(--muted-2);
  cursor:default;
}

/* ------------------------------ 行内小表单（回复/备注/呈报） ------------------------------ */

.iform{
  margin:0 12px 12px;
  padding:11px 12px;
  border:1px solid var(--line);
  border-radius:var(--r-md);
  background:var(--bg);
}
.iform-title{
  font-size:12px;
  font-weight:600;
  color:var(--muted-2);
  margin-bottom:8px;
}
.iform-text{
  width:100%;
  min-height:74px;
  padding:9px 10px;
  border:1px solid var(--line);
  border-radius:var(--r-sm);
  background:var(--card);
  color:var(--ink);
  font-family:inherit;
  font-size:13.5px;
  line-height:1.6;
  resize:vertical;
  outline:none;
}
.iform-text:focus{border-color:var(--accent);}
.iform-acts{display:flex;gap:8px;margin-top:9px;}

/* 纠错类型选择（1-5） */
.flag-kinds{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:9px;}
.flag-kinds .mini-btn{padding:5px 10px;}

/* ------------------------------ 我要的答复 ------------------------------ */

.wait{
  padding:9px 11px;
  border:1px solid var(--line);
  border-radius:var(--r-md);
  background:var(--card);
}
.wait + .wait{margin-top:6px;}
.wait.dim{background:var(--bg);border-style:dashed;}
.wait-main{
  font-size:13.5px;
  line-height:1.5;
  overflow-wrap:anywhere;
}
.wait-sub{
  font-size:11.5px;
  color:var(--muted-2);
  margin-top:3px;
  overflow-wrap:anywhere;
}
.wait-over{
  display:inline-block;
  margin-top:5px;
  padding:1px 7px;
  border-radius:999px;
  background:#F7E7E3;
  color:var(--neg);
  font-size:11px;
}

/* ------------------------------ 修正痕迹（实名） ------------------------------ */

.fixrow{
  display:flex;
  align-items:baseline;
  gap:8px;
  padding:8px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.fixrow:first-child{border-top:0;}
.fixrow-k{
  flex:0 0 auto;
  padding:1px 7px;
  border-radius:999px;
  background:var(--accent-bg);
  color:var(--accent);
  font-size:11px;
  white-space:nowrap;
}
.fixrow-t{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;}
.fixrow-s{
  flex:0 0 auto;
  font-family:var(--font-num);
  font-size:11px;
  color:var(--muted-2);
  white-space:nowrap;
}
.fix{display:block;font-size:12.5px;color:var(--ink);}
.fix > i{
  display:block;
  font-style:normal;
  font-family:var(--font-num);
  font-size:11px;
  color:var(--muted-2);
  margin-top:1px;
}

/* ------------------------------ 复盘：3 件值得回看的事 ------------------------------ */

.review-list{display:block;}
.review-item{
  position:relative;
  padding:9px 11px 9px 26px;
  border:1px solid var(--line);
  border-radius:var(--r-md);
  background:var(--card);
  font-size:13.5px;
  line-height:1.55;
  overflow-wrap:anywhere;
}
.review-item + .review-item{margin-top:6px;}
.review-item::before{
  content:"";
  position:absolute;
  left:11px;top:15px;
  width:7px;height:7px;
  border-radius:999px;
  background:var(--muted);
}
.review-item.ok::before{background:var(--good);}
.review-item.warn::before{background:var(--neg);}
.review-item.idea::before{background:var(--accent);}

/* 无记录日的"中性提示"（不催报） */
.phone-card.calm{
  background:var(--panel);
  border-style:dashed;
  text-align:center;
  padding:22px 18px;
}
.calm-t1{font-size:14.5px;color:var(--ink);}
.calm-t2{font-size:12.5px;color:var(--muted-2);margin-top:5px;line-height:1.6;}
.calm-t3{
  font-size:11.5px;
  color:var(--muted-2);
  margin-top:10px;
  padding-top:10px;
  border-top:1px dashed var(--line);
  overflow-wrap:anywhere;
}

/* ------------------------------ 摘要的 kv 行 ------------------------------ */

.kv-line{
  display:flex;
  flex-wrap:wrap;
  gap:6px 12px;
  margin-top:10px;
  font-size:12px;
  color:var(--muted-2);
}
.kv{white-space:nowrap;}

/* ------------------------------ 行式列表（廖总端"总监动过手没有"） ------------------------------ */

.row{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:10px;
  padding:8px 0;
  border-top:1px dashed var(--line);
  font-size:13px;
}
.row:first-child{border-top:0;}
.row-main{flex:1 1 auto;min-width:0;}
.row-name{font-size:13.5px;color:var(--ink);}
.row-next{
  display:block;
  font-size:11.5px;
  color:var(--muted-2);
  margin-top:1px;
}

/* ------------------------------ 待协调 ------------------------------ */

.up{
  padding:10px 12px;
  border:1px solid var(--line);
  border-left:3px solid var(--neg);
  border-radius:var(--r-md);
  background:var(--card);
}
.up + .up{margin-top:6px;}
.up-title{font-size:13.5px;line-height:1.5;overflow-wrap:anywhere;}
.up-meta{
  display:flex;
  flex-wrap:wrap;
  gap:4px 10px;
  font-size:11.5px;
  color:var(--muted-2);
  margin-top:4px;
}
.up-reason{
  margin-top:6px;
  padding:6px 9px;
  border-radius:var(--r-sm);
  background:var(--bg);
  font-size:12.5px;
  color:var(--muted-2);
  overflow-wrap:anywhere;
}
.up-acts{display:flex;gap:7px;margin-top:8px;}

/* ------------------------------ 提示条 / 浮动提示 ------------------------------ */

.warn-line{
  padding:9px 11px;
  margin-bottom:10px;
  border:1px dashed var(--accent);
  border-radius:var(--r-md);
  background:var(--accent-bg);
  color:var(--accent);
  font-size:12.5px;
  line-height:1.55;
  overflow-wrap:anywhere;
}

.hint{
  margin-top:9px;
  padding-top:9px;
  border-top:1px dashed var(--line);
  font-size:11.5px;
  line-height:1.6;
  color:var(--muted-2);
  overflow-wrap:anywhere;
}

.toast{
  position:fixed;
  left:50%;
  bottom:76px;
  transform:translateX(-50%);
  max-width:calc(100vw - 40px);
  padding:9px 15px;
  border-radius:999px;
  background:rgba(58,52,46,.92);
  color:#fff;
  font-size:12.5px;
  z-index:60;
  pointer-events:none;
}

/* 紧急卡（超 48 小时没人回）：左侧一条实心竖线，扫一眼就知道要先看它 */
.card.urgent{border-left:3px solid var(--neg);}

/* 桌面端（总监/廖总）：明细卡之间留出间距 */
@media (min-width:761px){
  .rlist > * + *{margin-top:5px;}
  .rrow-head{padding:9px 14px;}
  .rrow-body{padding:11px 14px 13px;}
  .rrow-acts{padding:0 14px 11px;}
  .iform{margin:0 14px 12px;}
}

/* 桌面端明细页排成两栏：一张卡横跨 1440px 时行太长、读着累，
   也与「看板」页的栏式语言对不上。
   只作用于 .board-report —— 员工端的明细页不套这层壳（它在 430px 的手机壳里，
   而媒体查询看的是**视口**宽度，宽屏桌面上打开也会命中，那就被排成两栏了）。 */
@media (min-width:1080px){
  .board-report{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:14px;
    align-items:start;
  }
  /* 要"一眼扫完"的卡（数字小结 / 超 48 小时 / 修正痕迹 / 待协调）占满整行 */
  .board-report > .card.is-wide{grid-column:1 / -1;}
}

/* ------------------------------ 我的沉淀 ------------------------------ */

.sink{
  display:grid;
  grid-template-columns:auto 1fr auto 1fr;
  gap:8px;
  align-items:baseline;
}
.sink-num{
  font-family:var(--font-num);
  font-size:24px;
  color:var(--accent);
  line-height:1.1;
}
.sink-label{font-size:11.5px;color:var(--muted);}


/* ==========================================================================
   Notion 组件层（2026-09-20）
   --------------------------------------------------------------------------
   放最后是有意的：这一层**盖住**早期那版「琥珀棕」里写死的颜色。
   老类名一个没删，业务样式不会因为这次换肤失效；
   新视觉的口径写在 docs/DESIGN.md，改之前先看那份。

   这层做的事只有三件：
     ① 换掉残留的琥珀/旧灯色；
     ② 统一圆角、阴影、边框到"耳语级"；
     ③ 把标题字距、数字等高这些排版细节做对。
   ========================================================================== */

/* ---- ① 基础排版：纸 ---- */
body{
  background:var(--bg-canvas);
  color:var(--ink);
  font-feature-settings:"lnum" 1,"locl" 1;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

/* Notion 的 "compression at scale"：字号越大字距越紧 */
.phone-hello,
h1,h2,h3{
  margin:0;
  letter-spacing:-0.015em;
}
.phone-hello{letter-spacing:-0.02em;}
h1{letter-spacing:-0.02em;}

/* 数字一律等高，表格里才不会上下跳 */
[class*="-num"],.prog-num,.prog-pct,.cal-nav-cur{
  font-feature-settings:"tnum" 1,"lnum" 1;
}

/* ---- ② 卡片：白 + 耳语边框 + 几乎看不见的阴影 ---- */
.card,
.phone-card,
.login-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  box-shadow:var(--sh-card);
}
.card{padding:16px 18px;}

/* 手机上靠留白分组，不要又描边又打影 */
@media (max-width:760px){
  .card,.phone-card{border-radius:12px;padding:14px 15px;box-shadow:none;}
  .phone-body{gap:12px;background:var(--bg-canvas);}
}

.card-title{
  font-size:13px;
  font-weight:600;
  letter-spacing:-0.005em;
  color:var(--ink);
}
.card-meta,.card-title > span{color:var(--muted);font-weight:400;}

/* ---- ③ 灯色与徽标：颜色永远配文字，不靠颜色单独传意 ---- */
.dot.green,.cal-dot.green{background:var(--pos);}
.dot.yellow{background:var(--warn);}
.dot.red{background:var(--neg);}
.dot.grey{background:var(--placeholder);}

.tag{
  background:var(--track);
  color:var(--muted);
  border:1px solid transparent;
}
.tag.high{background:#FBECEA;color:var(--neg);}
.tag.mid{background:#FCEFE2;color:var(--warn);}
.tag.low{background:#E9F3EC;color:var(--pos);}

.pill{border:1px solid var(--line-soft);}
.pill.doing{background:var(--accent-bg);color:var(--accent-ink);border-color:#D6E9FA;}
.pill.warn{background:#FBECEA;color:var(--neg);border-color:#F3D9D5;}
.pill.ok{background:#E9F3EC;color:var(--good);border-color:#D5E6DA;}

/* ---- ④ 内部备注（红线⑨）：保留"不像正文"的视觉警告 ---- */
.rblock.is-internal{
  border:1px dashed var(--internal);
  background:#FCF6EF;
  color:var(--internal);
}

/* ---- ⑤ 按钮 ---- */
.role-btn,.voice-btn,.btn-primary,.login-btn,.cal-nav-btn{
  border-radius:var(--r-xs);
  border:1px solid var(--line);
  transition:background-color .12s ease,color .12s ease,transform .08s ease;
}
.btn-primary,.login-btn{
  background:var(--accent);
  border-color:transparent;
  color:#fff;
}
.btn-primary:hover:not(:disabled),
.login-btn:hover:not(:disabled){background:var(--accent-active);}
.btn-primary:active:not(:disabled),
.login-btn:active:not(:disabled){transform:scale(.98);}
.login-btn:disabled{opacity:.55;}

/* 「按住说话」是**次**操作，不是主 CTA：
   原先整条实心蓝（换成 Notion 蓝之后尤其吵），一进页面就把眼睛吸走了。
   现在默认是安静的中性底，只有真的在录音（.is-live）才变蓝——
   这样"蓝色 = 正在发生的事"这条规则在全站是一致的。 */
.voice-btn{
  background:rgba(0,0,0,.05);
  border:1px solid transparent;
  color:var(--ink);
  font-weight:500;
  letter-spacing:0;
}
.voice-btn:hover:not(:disabled){background:rgba(0,0,0,.08);}
.voice-btn.is-live{
  background:var(--accent);
  border-color:transparent;
  color:#fff;
}
.voice-btn:disabled{opacity:.55;}
/* 桌面上别拉满整行 —— 一屏只有它一个元素会显得像广告位 */
@media (min-width:761px){
  .voice-btn{max-width:420px;margin:0 auto;}
}

.role-btn.is-active,.tab.is-active{
  background:var(--accent);
  border-color:transparent;
  color:#fff;
}
.role-btn:hover:not(.is-active){background:rgba(0,0,0,.05);color:var(--ink);}

/* 聚焦环：蓝环，不再偷偷换配色 */
.login-input:focus,.met-input:focus,textarea:focus,input:focus,select:focus{
  outline:2px solid var(--focus);
  outline-offset:1px;
  border-color:var(--accent);
}
.login-input,.met-input,input[type="text"],textarea,select{
  border:1px solid #DDDDDD;
  border-radius:var(--r-xs);
  background:#fff;
  color:rgba(0,0,0,.9);
}
::placeholder{color:var(--placeholder);}

/* ---- ⑥ 提示条 ---- */
.voice-msg.ok{background:#E9F3EC;color:var(--good);}
.voice-msg.warn{background:#FCEFE2;color:var(--warn);}
.voice-msg.err{background:#FBECEA;color:var(--neg);}
.voice-msg.live{background:var(--accent-bg);color:var(--accent-ink);}
.wait-over{background:#FBECEA;color:var(--neg);}

/* ---- ⑦ 图表与进度条：借一笔干净 ---- */
.bar-base{stroke:rgba(0,0,0,.12);stroke-width:1.2;}
.bar-empty{fill:var(--track);stroke:rgba(0,0,0,.08);stroke-width:1;stroke-dasharray:3 3;}
.prog-track{background:var(--track);}
.prog-track > i{background:var(--accent);}

/* ---- ⑧ 日历：今天是蓝色描边（取代原来的琥珀） ---- */
.cal-day.is-today,.cal-cell.is-today{
  border-color:var(--accent);
  box-shadow:inset 0 0 0 1px var(--accent);
}
.cal-nav-btn:hover:not(:disabled){border-color:var(--accent);color:var(--accent);}

/* ---- ⑨ 细节校准 ---- */

/* 指标卡：Notion 的数字卡是「大数字 + 小标签」，别把两行做成一样重 */
.stat{
  border:1px solid var(--line);
  border-radius:var(--r-md);
  box-shadow:none;          /* 小卡片不需要阴影，边框够了 */
  padding:12px 14px;
}
.stat-n{
  font-size:24px;
  font-weight:600;
  line-height:1.15;
  letter-spacing:-0.02em;
  font-feature-settings:"tnum" 1,"lnum" 1;
}

/* 空态：一行淡字就够，别撑成一大片空白 */
.empty{padding:10px 0;font-size:12.5px;color:var(--placeholder);}

/* 双栏明细页：卡片**各自到自己该有的高度**。
   原来默认会被拉伸到与同行最高者等高，于是「0 条」的卡片变成一个空盒子。 */
.board-report{align-items:start;}

/* 卡片间隔用留白，不靠加粗边框 */
.card + .card{margin-top:0;}

/* 页脚：把「数据源」这句压到最轻，它不该跟内容抢注意力 */
.foot,.phone-foot{color:var(--placeholder);}

