/* 口述日历 Sayday —— 视觉基准 = 说话即日程-UI原型.html
   组件宪法（在原型 token 之上）：
   1) 蓝色白名单（其余一律灰阶）：实心=发送键/登录主按钮/开关ON；日历今天与选中；
      改后新值；每组 chips 至多一个主选项文字(.primary)；状态 tag(accent-soft 底)。
      节气/计数/图标/说明文字禁止用蓝。
   2) 中文字距 ≤ 0.02em
   3) 卡片行左缘对齐；行内小按钮靠右吸边；noicon 补位只在同卡存在图标行时使用
   4) 问题气泡与其选项收紧成组；组与组之间拉开（组内间距 < 组间间距）
   5) 毛玻璃顶栏必须配 ≥0.92 不透明底色兜底——blur 是增强，不是依赖
   6) chips 三级：primary 蓝 600 / 实义选项 ink 500 / 放弃类 ghost 灰 500 */
:root{
  --root-font-size:17.6px; /* 默认 110%；设置里可按 10% 一档调整 */
  --bg:#FBFBFD;
  --card:#FFFFFF;
  --text-primary:#1D1D1F;
  --text-secondary:#6E6E73;
  --text-tertiary:#AEAEB2;
  --accent:#0071E3;
  --accent-soft:rgba(0,113,227,0.08);
  --accent-tint:rgba(0,113,227,0.06);
  --danger:#FF3B30;
  --danger-soft:rgba(255,59,48,0.08);
  --divider:#E5E5EA;
  --surface:#F5F5F7;
  --surface-press:#ECECEE;
  --radius-lg:20px;
  --radius-md:14px;
  --radius-pill:999px;
  --font:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "PingFang SC", "Helvetica Neue", Arial, sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;}
html{height:100%;font-size:var(--root-font-size);}
body{height:100%;}
body{
  font-family:var(--font);
  background:#EDEDF0;
  color:var(--text-primary);
  -webkit-font-smoothing:antialiased;
  overflow:hidden;
}
button{font-family:inherit;border:none;background:none;cursor:pointer;color:inherit;}
input,textarea{font-family:inherit;}
[hidden]{display:none !important;}

.app{
  position:relative;
  height:100vh;
  height:100dvh;
  max-width:430px;
  margin:0 auto;
  background:var(--bg);
  display:flex;
  flex-direction:column;
  overflow:hidden;
  width:100%;
}
/* ≥768：还原手机使用体验——固定尺寸"手机卡片"居中，绝不整窗拉长 */
@media (min-width:768px){
  body{display:flex;align-items:center;justify-content:center;padding:2rem;}
  .app{height:min(880px,94vh);border-radius:2rem;box-shadow:0 40px 80px -30px rgba(0,0,0,0.28),0 0 0 1px rgba(0,0,0,0.04);}
}

/* ---------- 视图切换 ---------- */
.view{display:none;flex-direction:column;flex:1;min-height:0;position:relative;}
.view.active{display:flex;}

.dock-toggle{width:44px;height:44px;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--text-secondary);flex-shrink:0;}
.dock-toggle:active{background:#F0F0F2;}
.cal-live{width:1.5rem;height:1.5rem;border:1.6px solid currentColor;border-radius:0.4rem;position:relative;display:flex;align-items:flex-end;justify-content:center;box-sizing:border-box;}
.cal-live::before{content:"";position:absolute;top:0;left:0;right:0;height:0.36rem;background:currentColor;border-radius:0.26rem 0.26rem 0 0;opacity:0.9;}
.cal-live .d{font-size:0.66rem;font-weight:700;line-height:1;padding-bottom:0.14rem;letter-spacing:-0.02em;}

/* ---------- 顶部品牌栏（纯视觉分区；毛玻璃，内容从其下滑过） ---------- */
.app-topbar{
  position:absolute;top:0;left:0;right:0;z-index:6;
  display:flex;align-items:center;justify-content:center;gap:0.4rem;
  padding:calc(0.58rem + env(safe-area-inset-top, 0px)) 0 0.58rem;
  background:rgba(251,251,253,0.96); /* 宪法5：高不透明兜底，blur 失效也不许内容穿帮 */
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  border-bottom:0.5px solid rgba(0,0,0,0.06);
}
/* 不支持毛玻璃的内核（老 WebView / 无头评审仪）：直接近实底，杜绝穿字 */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .app-topbar{background:rgba(251,251,253,0.99);}
}
.tb-icon{width:1.15rem;height:1.15rem;border-radius:0.26rem;}
.tb-name{font-size:0.94rem;font-weight:600;letter-spacing:0.02em;color:var(--text-primary);}
.topbar-settings{position:absolute;right:calc(0.35rem + env(safe-area-inset-right,0px));top:calc(0.27rem + env(safe-area-inset-top,0px));width:44px;height:44px;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);border-radius:50%;}
.topbar-settings:active{background:var(--surface);}

/* ---------- 对话区（默认首屏） ---------- */
.chat-panel{flex:1;min-height:0;overflow-y:auto;padding:calc(3.15rem + env(safe-area-inset-top, 0px)) 1.1rem 1.1rem;display:flex;flex-direction:column;gap:0.6rem;-webkit-overflow-scrolling:touch;}

.bubble-user{align-self:flex-end;background:#E9E9EB;color:var(--text-primary);padding:0.6rem 0.9rem;border-radius:1.1rem 1.1rem 0.25rem 1.1rem;font-size:0.88rem;line-height:1.45;max-width:78%;word-break:break-word;}
.bubble-user img{max-width:100%;border-radius:0.6rem;display:block;margin-top:0.35rem;}
.bubble-user audio{max-width:100%;display:block;margin-top:0.35rem;}

.bubble-system{align-self:flex-start;color:var(--text-secondary);font-size:0.84rem;line-height:1.55;max-width:88%;padding:0.05rem 0.15rem;}
.bubble-user,.bubble-system,.card,.brief-card,.list-card,.day-note,.set-row{overflow-wrap:anywhere;min-width:0;}
.bubble-system .sub{font-size:0.75rem;color:var(--text-tertiary);margin-top:0.2rem;}
/* 选项行紧贴它的问题气泡，成为一组 */
.chips-msg{margin-top:-0.28rem;}
/* 宪法4：选项组结束后，与下一条消息拉开距离（组间 > 组内） */
.chips-msg + .bubble-system,.chips-msg + .card,.chips-msg + .bubble-user{margin-top:0.4rem;}

.card{align-self:flex-start;background:var(--card);border-radius:var(--radius-lg);padding:0.95rem 1.05rem;width:86%;box-shadow:0 1px 2px rgba(0,0,0,0.04),0 10px 26px -14px rgba(0,0,0,0.14);}
.card.clickable{cursor:pointer;}
.card.flash{animation:cardFlash 1.2s ease;}
@keyframes cardFlash{0%{box-shadow:0 0 0 2px var(--accent);}100%{box-shadow:0 1px 2px rgba(0,0,0,0.04),0 10px 26px -14px rgba(0,0,0,0.14);}}

.card-tag{display:inline-block;font-size:0.66rem;color:var(--accent);background:var(--accent-soft);padding:0.16rem 0.55rem;border-radius:var(--radius-pill);margin-bottom:0.55rem;font-weight:600;letter-spacing:0.02em;}
.card-tag.danger{color:var(--danger);background:var(--danger-soft);}

.card-date{display:flex;align-items:baseline;gap:0.4rem;margin-bottom:0.3rem;}
.card-date .num{font-size:1rem;font-weight:700;}
.card-date .week{font-size:0.78rem;color:var(--text-secondary);}

.card-title{font-size:0.96rem;font-weight:600;margin-bottom:0.45rem;}

.card-row{display:flex;align-items:center;gap:0.5rem;font-size:0.84rem;color:var(--text-secondary);padding:0.14rem 0;min-width:0;overflow-wrap:anywhere;}
.card-row svg{flex-shrink:0;color:var(--text-tertiary);}
.card-row > span:not(.qmark){flex:1;min-width:0;overflow-wrap:anywhere;}
.card-row.noicon{padding-left:1.375rem;}   /* 与带图标行的文字起点对齐 */
.card-row.strike{text-decoration:line-through;color:var(--text-tertiary);}
.card-row.new{color:var(--accent);font-weight:600;}
.card-row.lowconf{color:var(--text-tertiary);}
.card-row.lowconf .qmark{display:inline-block;font-size:0.7rem;color:var(--text-tertiary);border:1px solid var(--divider);border-radius:50%;width:0.95rem;height:0.95rem;line-height:0.85rem;text-align:center;margin-left:0.25rem;flex-shrink:0;}

/* 复制地址：中性小按钮，靠右吸边，不与正文抢戏 */
.copy-btn{display:inline-flex;align-items:center;gap:0.22rem;margin-left:auto;padding:0.16rem 0.55rem;border-radius:var(--radius-pill);background:var(--surface);color:var(--text-secondary);font-size:0.66rem;font-weight:500;flex-shrink:0;line-height:1.3;position:relative;}
.copy-btn::before{content:"";position:absolute;inset:-8px 0;border-radius:inherit;} /* 只纵向扩热区，避免窄屏产生不可见的横向溢出 */
.copy-btn svg{width:10px;height:10px;color:var(--text-tertiary);}
.copy-btn:active{background:var(--surface-press);}
.card-row.new .copy-btn{color:var(--text-secondary);font-weight:500;}

.reminder-list{display:flex;flex-direction:column;gap:0.4rem;margin-top:0.1rem;}
.reminder-chip{display:flex;align-items:center;gap:0.5rem;font-size:0.82rem;background:var(--surface);border-radius:0.7rem;padding:0.5rem 0.7rem;color:var(--text-primary);}
.reminder-chip svg{color:var(--text-tertiary);flex-shrink:0;} /* 宪法1：图标不占蓝 */

.btn-row{display:flex;gap:0.6rem;margin-top:0.85rem;flex-wrap:wrap;}
.btn-ghost{flex:1;padding:0.6rem 0;border-radius:var(--radius-md);background:var(--surface);color:var(--text-primary);font-size:0.86rem;font-weight:500;min-height:44px;}
.btn-danger{flex:1;padding:0.6rem 0;border-radius:var(--radius-md);background:var(--danger);color:#fff;font-size:0.86rem;font-weight:600;min-height:44px;}
.btn-row button{min-width:min(8rem,100%);white-space:normal;}
.btn-row button:disabled{opacity:0.45;}

/* 选项 chips：中性灰底；主选项=蓝字，弱选项=灰字——蓝底墙退场 */
.chip-row{display:flex;gap:0.5rem;margin-top:0.55rem;flex-wrap:wrap;}
/* 宪法6：chips 三级——primary(每组至多一个)蓝 / 实义选项黑 / 放弃类灰 */
.chip-btn{padding:0.4rem 0.85rem;border-radius:var(--radius-pill);background:var(--surface);color:var(--text-primary);font-size:0.8rem;font-weight:500;min-height:36px;line-height:1.2;}
.chip-btn:active{background:var(--surface-press);}
.chip-btn.primary{color:var(--accent);font-weight:600;}
.chip-btn.ghost{color:var(--text-secondary);}
.chip-btn:disabled{opacity:0.4;}

.edit-hint{font-size:0.7rem;color:var(--text-tertiary);margin-top:0.6rem;}

/* 实体归一弱化标注 */
.card-note{display:flex;align-items:center;gap:0.5rem;margin-top:0.6rem;font-size:0.68rem;color:var(--text-tertiary);}
.card-note .note-chip{font-size:0.68rem;color:var(--text-tertiary);text-decoration:underline;text-underline-offset:2px;min-height:auto;padding:0.1rem 0.2rem;}

/* 识别中骨架卡（禁 Spinner） */
.card.skeleton .sk{background:linear-gradient(90deg,#F0F0F2 25%,#FAFAFC 45%,#F0F0F2 65%);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:0.5rem;}
@keyframes shimmer{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
.card.skeleton .sk-tag{width:4.2rem;height:1.1rem;margin-bottom:0.6rem;}
.card.skeleton .sk-title{width:62%;height:1rem;margin-bottom:0.55rem;}
.card.skeleton .sk-row{width:44%;height:0.8rem;margin-bottom:0.4rem;}
.card.skeleton .sk-row2{width:56%;height:0.8rem;}
.card.skeleton .stage{font-size:0.72rem;color:var(--text-tertiary);margin-top:0.6rem;transition:opacity 0.3s;}

/* 简报卡片（每天第一次打开） */
.brief-card{align-self:stretch;background:var(--card);border-radius:var(--radius-lg);padding:0.95rem 1.05rem;box-shadow:0 1px 2px rgba(0,0,0,0.04),0 10px 26px -14px rgba(0,0,0,0.14);}
.brief-card .b-head{font-size:0.7rem;color:var(--text-tertiary);font-weight:500;letter-spacing:0.02em;margin-bottom:0.35rem;}
.brief-card .b-main{font-size:0.95rem;font-weight:600;line-height:1.5;}
.brief-card .b-sub{font-size:0.8rem;color:var(--text-secondary);margin-top:0.3rem;}

/* 查询结果列表卡 */
.list-card{align-self:flex-start;background:var(--card);border-radius:var(--radius-lg);padding:0.6rem 1.05rem;width:86%;box-shadow:0 1px 2px rgba(0,0,0,0.04),0 10px 26px -14px rgba(0,0,0,0.14);}
.list-day{padding:0.45rem 0;}
.list-day + .list-day{border-top:1px solid var(--divider);}
.list-day .ld-head{display:flex;align-items:baseline;gap:0.4rem;margin-bottom:0.15rem;}
.list-day .ld-head .num{font-size:0.85rem;font-weight:700;}
.list-day .ld-head .week{font-size:0.72rem;color:var(--text-secondary);}
.list-item{display:flex;gap:0.6rem;padding:0.22rem 0;font-size:0.83rem;align-items:baseline;cursor:pointer;}
.list-item .t{font-variant-numeric:tabular-nums;color:var(--text-secondary);min-width:2.9rem;}
.list-item .n{font-weight:500;}
.list-item .l{font-size:0.74rem;color:var(--text-tertiary);}
.list-item.done .n{text-decoration:line-through;color:var(--text-tertiary);font-weight:400;}

.undo-chip{margin-left:0.5rem;}

/* ---------- 输入栏 ---------- */
.input-dock{display:flex;align-items:flex-end;gap:6px;padding:0.65rem 12px calc(0.75rem + env(safe-area-inset-bottom, 0px));background:var(--bg);flex-shrink:0;}
.dock-icon-btn{width:44px;height:44px;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--text-secondary);}
.dock-icon-btn:active{background:#F0F0F2;}
.dock-input{flex:1;background:#F0F0F2;border-radius:1.35rem;padding:0.68rem 1.1rem;font-size:0.88rem;line-height:1.45;color:var(--text-primary);min-height:44px;height:44px;max-height:calc(10.15em + 1.36rem);display:block;border:none;outline:none;min-width:0;resize:none;overflow-y:hidden;white-space:pre-wrap;overflow-wrap:anywhere;scrollbar-width:thin;}
.dock-input.is-scrollable{overflow-y:auto;}
.dock-input::placeholder{color:var(--text-tertiary);}
.dock-send{width:44px;height:44px;min-width:44px;min-height:44px;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.dock-send:disabled{opacity:0.4;}

/* 附件预览（图文组合发送） */
.attach-bar{display:none;align-items:center;gap:0.6rem;padding:0.5rem 1rem;background:var(--bg);border-top:1px solid var(--divider);}
.attach-bar.show{display:flex;}
.attach-bar img{width:2.6rem;height:2.6rem;object-fit:cover;border-radius:0.5rem;}
.attach-bar .a-name{font-size:0.75rem;color:var(--text-secondary);flex:1;}
.attach-bar .a-x{width:1.8rem;height:1.8rem;min-width:44px;min-height:44px;color:var(--text-tertiary);} /* 34 是 44 的笔误：移除附件按钮热区要够手指点 */

/* ---------- 日历区 ---------- */
.cal-screen{display:flex;flex-direction:column;flex:1;min-height:0;}
.cal-panel{padding:1.1rem 1.1rem 0.4rem;flex-shrink:0;position:relative;}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:0.9rem;gap:0.2rem;}
.cal-title{font-size:1.05rem;font-weight:600;letter-spacing:0.01em;flex:1;min-width:0;text-align:center;cursor:pointer;white-space:nowrap;}
.cal-nav-btn{width:2.25rem;height:2.25rem;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--text-secondary);}
.cal-nav-btn:active{background:#F0F0F2;}
/* 月/周切换：轻胶囊可点感；视觉小、::before 扩出 44px 热区 */
.cal-mode{position:relative;font-size:0.76rem;color:var(--text-secondary);padding:0.34rem 0.75rem;border-radius:var(--radius-pill);background:var(--surface);}
.cal-mode::before{content:"";position:absolute;inset:-8px;border-radius:inherit;}
.cal-mode:active{background:var(--surface-press);}
.cal-gear{position:absolute;top:0.55rem;right:0.5rem;width:44px;height:44px;display:flex;align-items:center;justify-content:center;color:var(--text-tertiary);opacity:0.75;border-radius:50%;z-index:2;}
.cal-gear:active{background:#F0F0F2;}
.cal-head-wrap{padding-right:2.6rem;}

.cal-weekdays{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:0.72rem;color:var(--text-tertiary);margin-bottom:0.2rem;}

.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));row-gap:0.1rem;min-width:0;overflow:hidden;}
.day-cell{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:0.15rem;padding-top:0.3rem;min-height:50px;cursor:pointer;border-radius:0.6rem;}
.day-cell:active{background:#F0F0F2;}
.day-cell.other{opacity:0.35;}
/* 法定节假日：极浅品牌蓝底（用户选定"底色"方案；不加角标，避免与日期数字打架） */
.day-cell.legal{background:var(--accent-tint);}
.day-num-wrap{position:relative;width:1.6rem;height:1.6rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:0.85rem;}
.day-cell.today .day-num-wrap{box-shadow:inset 0 0 0 1.5px var(--accent);color:var(--accent);font-weight:600;}
.day-cell.selected .day-num-wrap{background:var(--accent);color:#fff;font-weight:600;}
.day-sub{font-size:0.58rem;max-width:100%;padding:0 1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2;}
.sub-term{color:var(--text-secondary);font-weight:500;} /* 宪法1：节气不占蓝色预算 */
.sub-holiday{color:var(--text-primary);font-weight:500;}
.sub-month{color:var(--text-secondary);font-weight:600;}
.sub-lunar{color:var(--text-tertiary);font-weight:400;}
/* 事件点挂在日期数字上（不挂格子角，宽格子里才不会飘离数字） */
.day-event-dot{position:absolute;top:0.05rem;right:-0.4rem;width:4px;height:4px;border-radius:50%;background:var(--accent);}

/* 全年视图：12 迷你月 */
/* grid-column:1/-1 必须有：#calGrid 本身是 7 列网格，年视图要横跨全部列，
   否则被挤进 1/7 轨道、迷你月塌缩成最小宽度（数字粘连事故 2026-07-03） */
.year-grid{grid-column:1 / -1;display:grid;grid-template-columns:repeat(3,1fr);gap:0.55rem;padding-bottom:0.5rem;}
.mini-month{background:var(--card);border-radius:0.85rem;padding:0.55rem 0.5rem 0.5rem;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,0.05);}
.mini-month:active{background:var(--surface);}
.mm-title{font-size:0.74rem;font-weight:600;margin:0 0 0.3rem 0.15rem;}
.mm-grid{display:grid;grid-template-columns:repeat(7,1fr);row-gap:2px;}
.mm-d{font-size:0.55rem;text-align:center;line-height:1.75;border-radius:0.28rem;color:var(--text-secondary);font-variant-numeric:tabular-nums;}
.mm-d.legal{background:var(--accent-tint);color:var(--accent);font-weight:600;}
.mm-d.today{background:var(--accent);color:#fff;font-weight:700;}

.day-detail{flex:1;min-height:0;overflow-y:auto;padding:0.4rem 1.1rem 1.5rem;border-top:1px solid var(--divider);-webkit-overflow-scrolling:touch;}
.day-header{display:flex;align-items:baseline;gap:0.55rem;margin:0.85rem 0 0.15rem;}
.day-header .num{font-size:1.25rem;font-weight:700;}
.day-header .meta{font-size:0.8rem;color:var(--text-secondary);}
.day-notes{display:flex;flex-direction:column;gap:0.5rem;margin-top:0.65rem;}
.day-note{background:var(--surface);border-radius:0.85rem;padding:0.6rem 0.8rem;font-size:0.78rem;color:var(--text-secondary);line-height:1.5;}
.day-note b{color:var(--text-primary);font-weight:600;}
.day-list{margin-top:0.6rem;}
.day-list-empty{color:var(--text-tertiary);font-size:0.83rem;padding:0.3rem 0;}
.day-list-item{display:flex;gap:0.75rem;padding:0.42rem 0;align-items:baseline;border-top:1px solid var(--divider);}
.day-list-item:first-child{border-top:none;}
.day-list-time{font-variant-numeric:tabular-nums;font-size:0.83rem;color:var(--text-secondary);min-width:3rem;}
.day-list-info{flex:1;min-width:0;}
.day-list-info .t{font-size:0.88rem;font-weight:500;}
.day-list-info .l{display:flex;align-items:center;font-size:0.76rem;color:var(--text-secondary);margin-top:0.15rem;gap:0.4rem;}
.day-list-item.done .t{text-decoration:line-through;color:var(--text-tertiary);font-weight:400;}
.day-list-item.done .day-list-time{color:var(--text-tertiary);}
.day-check{width:1.15rem;height:1.15rem;border-radius:50%;border:1.5px solid var(--divider);flex-shrink:0;align-self:center;display:flex;align-items:center;justify-content:center;color:#fff;font-size:0.7rem;padding:0;position:relative;}
.day-check::before{content:"";position:absolute;inset:-12px;border-radius:50%;} /* 勾选是日历里最高频的手势：18px 视觉 + 44px 热区 */
.day-list-item.done .day-check{background:var(--text-tertiary);border-color:var(--text-tertiary);}
/* 已完成条目的手动删除：灰色小按钮，二次点击进入 danger 确认态（宪法：danger 仅限删除确认） */
.day-del{margin-left:auto;flex-shrink:0;align-self:center;font-size:0.7rem;color:var(--text-secondary);background:var(--surface);border-radius:var(--radius-pill);padding:0.22rem 0.6rem;position:relative;}
.day-del::before{content:"";position:absolute;inset:-10px;border-radius:inherit;}
.day-del.arm{color:#fff;background:var(--danger);font-weight:600;}
.day-recur{font-size:0.68rem;color:var(--text-tertiary);margin-left:0.4rem;}
.day-rem{color:var(--text-tertiary);} /* 日详情里的提醒安排：铃铛+触发时刻，弱化不抢戏 */
.day-rem svg{flex-shrink:0;}

/* 待办池入口 */
.pool-pill{display:flex;align-items:center;gap:0.5rem;margin:0.7rem 0 0.1rem;padding:0.55rem 0.85rem;background:var(--surface);border-radius:var(--radius-md);font-size:0.8rem;color:var(--text-secondary);width:100%;text-align:left;min-height:44px;}
.pool-pill .n{font-weight:600;} /* 宪法1：计数不上色 */
.pool-pill svg{color:var(--text-tertiary);}
.pool-list{margin-top:0.4rem;}
.pool-item{display:flex;gap:0.6rem;padding:0.45rem 0;align-items:center;border-top:1px solid var(--divider);font-size:0.85rem;}
.pool-item:first-child{border-top:none;}
.pool-item .t{flex:1;}
.pool-hint{font-size:0.72rem;color:var(--text-tertiary);padding:0.4rem 0 0.2rem;line-height:1.5;}

/* ---------- 登录屏 ---------- */
.login-wrap{flex:1;display:flex;flex-direction:column;justify-content:center;padding:2rem 2rem calc(2rem + env(safe-area-inset-bottom,0px));gap:0.9rem;}
.login-logo{text-align:center;margin-bottom:1.6rem;}
.login-logo .app-mark{width:3.5rem;height:3.5rem;border-radius:0.85rem;margin:0 auto 0.9rem;display:block;box-shadow:0 8px 20px -8px rgba(0,113,227,0.45);}
.login-logo .cn{font-size:1.5rem;font-weight:700;letter-spacing:0.02em;}
.login-logo .en{font-size:0.72rem;color:var(--text-tertiary);margin-top:0.35rem;letter-spacing:0.3em;}
.login-input{width:100%;background:#F0F0F2;border:none;outline:none;border-radius:var(--radius-md);padding:0.85rem 1rem;font-size:0.95rem;min-height:48px;}
.login-row{display:flex;gap:0.6rem;}
.login-row .login-input{flex:1;min-width:0;}
.code-btn{flex-shrink:0;padding:0 0.9rem;border-radius:var(--radius-md);background:var(--surface);color:var(--accent);font-size:0.82rem;font-weight:600;min-height:48px;min-width:6.4rem;}
.code-btn:disabled{opacity:0.45;color:var(--text-tertiary);}
.login-btn{width:100%;padding:0.9rem 0;border-radius:var(--radius-md);background:var(--accent);color:#fff;font-size:0.95rem;font-weight:600;min-height:48px;margin-top:0.3rem;}
.login-btn:disabled{opacity:0.45;}
.login-err{font-size:0.78rem;color:var(--danger);min-height:1.1rem;text-align:center;}
.login-foot{text-align:center;font-size:0.72rem;color:var(--text-tertiary);margin-top:1rem;line-height:1.6;}
.login-foot a{color:var(--text-tertiary);}
.login-dev{text-align:center;font-size:0.72rem;color:var(--text-tertiary);} /* 信息不是动作，不占蓝 */

/* ---------- 设置浮层（半屏） ---------- */
.sheet-backdrop{position:absolute;inset:0;background:rgba(0,0,0,0.32);opacity:0;pointer-events:none;transition:opacity 0.25s;z-index:20;}
.sheet-backdrop.show{opacity:1;pointer-events:auto;}
.sheet{position:absolute;left:0;right:0;bottom:0;background:var(--bg);border-radius:1.2rem 1.2rem 0 0;transform:translateY(100%);transition:transform 0.3s cubic-bezier(0.32,0.72,0,1);z-index:21;max-height:78%;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom,0px);}
.sheet.show{transform:translateY(0);}
.sheet-grip{width:2.2rem;height:0.28rem;background:var(--divider);border-radius:var(--radius-pill);margin:0.6rem auto 0.2rem;flex-shrink:0;}
.sheet-title{font-size:1rem;font-weight:600;text-align:center;padding:0.5rem 0 0.8rem;flex-shrink:0;}
.sheet-body{overflow-y:auto;padding:0 1.2rem 1.4rem;-webkit-overflow-scrolling:touch;}
.set-group{background:var(--card);border-radius:var(--radius-md);overflow:hidden;margin-bottom:0.9rem;box-shadow:0 1px 2px rgba(0,0,0,0.03);}
.set-row{display:flex;align-items:center;gap:0.7rem;padding:0.85rem 1rem;min-height:52px;}
.set-row + .set-row{border-top:1px solid var(--divider);}
.set-row .s-label{flex:1;font-size:0.9rem;}
.set-row .s-cap{font-size:0.7rem;color:var(--text-tertiary);margin-top:0.18rem;line-height:1.5;}
.set-note{font-size:0.72rem;color:var(--text-tertiary);line-height:1.55;padding:0 0.4rem 0.8rem;}
.set-link{display:flex;align-items:center;justify-content:space-between;width:100%;text-align:left;font-size:0.9rem;padding:0.85rem 1rem;min-height:52px;}
.set-link svg{color:var(--text-tertiary);}
/* 文字大小：四个明确档位，整套 rem 布局按相同比例生长，不做浏览器页面缩放。 */
.font-scale-head{padding-bottom:0.62rem;}
.font-scale-value{font-size:0.82rem;color:var(--text-secondary);font-variant-numeric:tabular-nums;flex-shrink:0;}
.font-scale-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0.32rem;padding:0 0.65rem 0.72rem;}
.font-scale-btn{min-width:0;min-height:48px;border-radius:0.72rem;background:var(--surface);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.08rem;font-size:0.74rem;color:var(--text-secondary);line-height:1.2;padding:0.38rem 0.12rem;}
.font-scale-btn small{font-size:0.62rem;color:var(--text-tertiary);font-variant-numeric:tabular-nums;}
.font-scale-btn[aria-checked="true"]{background:var(--accent-soft);color:var(--accent);font-weight:600;box-shadow:inset 0 0 0 1px rgba(0,113,227,0.18);}
.font-scale-btn[aria-checked="true"] small{color:var(--accent);}
.font-scale-btn:active{background:var(--surface-press);}
/* 通知体检卡：列出手机系统里没打开的通知开关，一键带路去设置（仅安卓壳 v1.3+ 出现） */
.notify-health{margin:0 1rem 0.85rem;padding:0.6rem 0.75rem 0.75rem;background:var(--surface);border-radius:var(--radius-md);}
.nh-row{display:flex;align-items:center;gap:0.6rem;padding:0.42rem 0.15rem;}
.nh-row + .nh-row{border-top:1px solid rgba(0,0,0,0.05);}
.nh-main{flex:1;min-width:0;}
.nh-label{font-size:0.84rem;}
.nh-hint{font-size:0.7rem;color:var(--text-tertiary);margin-top:0.1rem;line-height:1.45;}
.nh-state{font-size:0.78rem;color:var(--danger);flex-shrink:0;}
.nh-btn{display:block;width:100%;margin-top:0.5rem;padding:0.6rem 0;border-radius:10px;background:var(--surface-press);color:var(--text-primary);font-size:0.84rem;font-weight:500;min-height:40px;}
.nh-btn:active{background:#E2E2E6;}
.nh-cap{margin-top:0.5rem;font-size:0.68rem;color:var(--text-tertiary);line-height:1.5;text-align:center;}

/* 开关：开=品牌蓝（整个产品只呼吸一种颜色） */
.switch{position:relative;width:2.9rem;height:1.75rem;flex-shrink:0;}
.switch input{opacity:0;width:100%;height:100%;position:absolute;margin:0;cursor:pointer;z-index:2;}
.switch .knob{position:absolute;inset:0;background:#E9E9EB;border-radius:var(--radius-pill);transition:background 0.2s;}
.switch .knob::after{content:"";position:absolute;top:0.14rem;left:0.14rem;width:1.47rem;height:1.47rem;background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,0.18);transition:transform 0.2s;}
.switch input:checked + .knob{background:var(--accent);}
.switch input:checked + .knob::after{transform:translateX(1.15rem);}
.switch input:disabled + .knob{opacity:0.5;}

/* toast */
.toast{position:absolute;left:50%;bottom:6.2rem;transform:translateX(-50%) translateY(8px);background:rgba(29,29,31,0.92);color:#fff;font-size:0.8rem;padding:0.55rem 1rem;border-radius:var(--radius-pill);opacity:0;pointer-events:none;transition:all 0.25s;z-index:40;max-width:86%;text-align:center;}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto;}
.toast .t-act{margin-left:0.7rem;color:#7CBCFF;font-weight:600;font-size:inherit;padding:0;}

@media (max-width:767px){
  .app{max-width:100%;}
}
