/* ============================================================
   微光护老 · 可用版应用
   适老化原则：大字号、大按钮、高对比、语音 + 文字双通道
   ============================================================ */

html{ font-size:18px; }
html[data-size="large"]{ font-size:21px; }
html[data-size="huge"]{ font-size:24px; }

:root{
  --ink:#14201C;
  --ink-2:#43544D;
  --ink-3:#6E7E77;
  /* 底色改成暖米色系：整体更柔和、更有个家里灯光的温度 */
  --line:#EADBC6;
  --line-2:#D6C2A6;
  --bg:#FCF1E2;
  --card:#FFFCF6;
  --card-2:#F7EBDB;

  /* 主色：暖红（原来是墨绿）。变量名继续叫 green，方便全站一处换色。
     注意 #4E9A7E 那类绿色是"低风险"的语义色，保留不动。 */
  --green:#B4462E;
  --green-2:#C85C3D;
  --green-soft:#FBE9E2;
  --red:#9E2718;
  --red-2:#C0392B;
  --red-soft:#FBE8E4;
  --amber:#A96C0B;
  --amber-soft:#FAEFD8;
  --blue:#1D5A8A;
  --blue-soft:#E4EEF6;

  --r:20px;
  --r-sm:14px;
  --shadow:0 6px 20px -10px rgba(20,32,28,.35);
  --sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei",
         "PingFang SC", "Hiragino Sans GB", "Source Han Sans SC", sans-serif;
}

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

html,body{ height:100%; }

body{
  margin:0;
  font-family:var(--sans);
  font-size:1rem;
  line-height:1.65;
  color:var(--ink);
  background:linear-gradient(180deg, #FFF7EA 0%, #FBEFDD 55%, #F6E7D2 100%) fixed;
  -webkit-font-smoothing:antialiased;
  overscroll-behavior:none;
}

h1,h2,h3,h4{ margin:0; line-height:1.3; font-weight:800; }
p{ margin:0; }
ul,ol{ margin:0; padding:0; list-style:none; }
button{ font:inherit; color:inherit; cursor:pointer; border:none; background:none; }
a{ color:inherit; text-decoration:none; }
[hidden]{ display:none !important; }

/* ============================================================
   外壳
   ============================================================ */
.app{
  height:100dvh;
  display:flex;
  flex-direction:column;
  overflow:hidden;
}

/* ---------- 状态栏 ---------- */
.statusbar{
  flex:none;
  display:flex; align-items:center; justify-content:space-between;
  gap:16px;
  padding:14px 22px;
  padding-top:calc(14px + env(safe-area-inset-top));
  background:var(--green);
  color:#FBEDE7;
}
.sb-left{ display:flex; align-items:center; gap:12px; min-width:0; }
.sb-back{
  display:inline-flex; align-items:center; gap:4px;
  padding:7px 14px 7px 8px; border-radius:999px;
  background:rgba(255,255,255,.16); color:#fff;
  font-size:.95rem; font-weight:700;
}
.sb-back svg{ width:1.3rem; height:1.3rem; }
.sb-back:active{ background:rgba(255,255,255,.28); }
.sb-title{ font-size:1.05rem; font-weight:750; letter-spacing:.02em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sb-right{ display:flex; align-items:baseline; gap:10px; flex:none; }
.sb-clock{ font-size:1.15rem; font-weight:800; font-variant-numeric:tabular-nums; }
.sb-date{ font-size:.85rem; color:#F2C3B4; }

.sb-wake{
  display:inline-flex; align-items:center; gap:6px;
  padding:5px 12px; border-radius:999px;
  background:rgba(255,255,255,.15);
  font-size:.78rem; font-weight:700; color:#F8D2C5;
  white-space:nowrap;
}
.sb-wake-dot{
  width:7px; height:7px; border-radius:50%; background:#FFB49A;
  animation:micPulse 1.4s ease-in-out infinite;
}
@keyframes micPulse{ 0%,100%{ opacity:1; } 50%{ opacity:.25; } }

/* ---------- 内容舞台 ---------- */
.stage{
  flex:1;
  overflow-y:auto;
  overflow-x:hidden;
  -webkit-overflow-scrolling:touch;
  padding:22px;
  padding-bottom:32px;
}
.view{ display:none; max-width:920px; margin:0 auto; }
.view.is-active{ display:block; animation:viewIn .28s ease both; }
@keyframes viewIn{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }

/* ---------- 底部标签栏 ---------- */
.tabbar{
  flex:none;
  display:grid; grid-template-columns:repeat(7,1fr);
  background:var(--card);
  border-top:1px solid var(--line);
  padding-bottom:env(safe-area-inset-bottom);
}
.tab{
  display:flex; flex-direction:column; align-items:center; gap:3px;
  padding:10px 2px 11px;
  color:var(--ink-3);
  font-size:.72rem; font-weight:650;
  border-top:3px solid transparent;
  transition:color .15s, border-color .15s, background .15s;
}
.tab svg{ width:1.45rem; height:1.45rem; }
.tab.is-active{ color:var(--green); border-top-color:var(--green); background:var(--green-soft); }
.tab:active{ background:var(--card-2); }

/* ============================================================
   首页
   ============================================================ */
#view-home{
  position:relative;
  isolation:isolate;
  min-height:calc(100dvh - 8.5rem);
  overflow:hidden;
  border-radius:0 0 30px 30px;
}
#view-home > :not(.weather-scene){ position:relative; z-index:1; }

.weather-scene{
  --sky-top:#DCE9EC;
  --sky-bottom:#FBE9D4;
  --cloud:#FFFFFF;
  position:absolute;
  inset:-22px;
  z-index:0;
  overflow:hidden;
  pointer-events:none;
  background:
    radial-gradient(circle at 76% 20%, rgba(255,255,255,.75), transparent 29%),
    radial-gradient(circle at 18% 86%, rgba(255,241,211,.85), transparent 38%),
    linear-gradient(165deg,var(--sky-top),var(--sky-bottom));
  transition:background 1.2s ease;
}
.weather-scene[data-kind="clear"]{ --sky-top:#CFEAF6; --sky-bottom:#FFF1CE; }
.weather-scene[data-kind="partly"]{ --sky-top:#DCE9EC; --sky-bottom:#FBE9D4; }
.weather-scene[data-kind="cloudy"]{ --sky-top:#C9D5D8; --sky-bottom:#EEE7DF; --cloud:#F7F7F3; }
.weather-scene[data-kind="rain"]{ --sky-top:#AFC6D1; --sky-bottom:#DDE5E1; --cloud:#E8EEEF; }
.weather-scene[data-kind="storm"]{ --sky-top:#7E929D; --sky-bottom:#C9D1D1; --cloud:#D5DCDD; }
.weather-scene[data-kind="fog"]{ --sky-top:#DCE1DB; --sky-bottom:#F4EEE5; --cloud:#F8F7F1; }
.weather-scene[data-kind="snow"]{ --sky-top:#DCEBF0; --sky-bottom:#FAF4EB; --cloud:#FFFFFF; }
.weather-scene[data-phase="night"]{
  --sky-top:#405968;
  --sky-bottom:#9B8985;
  --cloud:#C9D4D4;
}
.weather-scene[data-phase="night"][data-kind="rain"],
.weather-scene[data-phase="night"][data-kind="storm"]{
  --sky-top:#273D4C;
  --sky-bottom:#66737A;
}

.ws-sky{
  position:absolute; inset:0;
  background:linear-gradient(180deg,rgba(255,255,255,.2),transparent 52%,rgba(255,240,213,.28));
}
.ws-sun{
  position:absolute; top:8%; right:11%;
  width:7rem; height:7rem; border-radius:50%;
  background:radial-gradient(circle at 38% 36%,#FFFBE1 0 18%,#FFD97B 42%,#F7AD42 72%);
  box-shadow:0 0 32px 14px rgba(255,205,91,.42),0 0 90px 40px rgba(255,194,85,.2);
  animation:sunBreathe 6s ease-in-out infinite;
}
.ws-sun::before{
  content:''; position:absolute; inset:-2.2rem; border-radius:50%;
  background:conic-gradient(from 12deg,transparent 0 7%,rgba(255,222,135,.33) 8% 10%,transparent 11% 20%);
  animation:sunRays 32s linear infinite;
}
.ws-moon,.ws-stars{ display:none; }
.weather-scene[data-phase="night"] .ws-sun{ display:none; }
.weather-scene[data-phase="night"] .ws-moon{
  display:block; position:absolute; top:10%; right:13%;
  width:5.2rem; height:5.2rem; border-radius:50%;
  background:#FFF7D9;
  box-shadow:-1.3rem .4rem 0 -.35rem var(--sky-top),0 0 32px rgba(255,244,200,.5);
  opacity:.9;
}
.weather-scene[data-phase="night"] .ws-stars{
  display:block; position:absolute; inset:0;
}
.ws-stars i{
  position:absolute; width:3px; height:3px; border-radius:50%;
  left:var(--x); top:var(--y); background:#FFF9D8;
  opacity:var(--o); box-shadow:0 0 8px rgba(255,249,216,.7);
  animation:twinkle var(--dur) ease-in-out infinite alternate;
}

.ws-cloud{
  position:absolute;
  width:16rem; height:4.6rem; border-radius:999px;
  background:var(--cloud); opacity:.8;
  filter:drop-shadow(0 14px 18px rgba(69,92,91,.12));
  animation:cloudDrift 34s linear infinite;
}
.ws-cloud::before,.ws-cloud::after{
  content:''; position:absolute; border-radius:50%; background:inherit;
}
.ws-cloud::before{ width:7.4rem; height:7.4rem; left:2.2rem; bottom:.2rem; }
.ws-cloud::after{ width:5.4rem; height:5.4rem; right:2rem; bottom:-.1rem; }
.ws-cloud-a{ top:24%; left:-18rem; animation-duration:42s; }
.ws-cloud-b{ top:38%; left:-26rem; transform:scale(.72); opacity:.55; animation-duration:56s; animation-delay:-18s; }
.ws-cloud-c{ top:11%; left:-34rem; transform:scale(.48); opacity:.42; animation-duration:68s; animation-delay:-35s; }
.weather-scene[data-kind="clear"] .ws-cloud{ opacity:.18; }
.weather-scene[data-kind="cloudy"] .ws-cloud,
.weather-scene[data-kind="rain"] .ws-cloud,
.weather-scene[data-kind="storm"] .ws-cloud{ opacity:.76; }

.ws-rain,.ws-snow{ display:none; position:absolute; inset:0; }
.weather-scene[data-kind="rain"] .ws-rain,
.weather-scene[data-kind="storm"] .ws-rain,
.weather-scene[data-kind="snow"] .ws-snow{ display:block; }
.ws-rain i{
  position:absolute; top:-18%; left:var(--x);
  width:2px; height:var(--len); border-radius:2px;
  background:linear-gradient(180deg,transparent,rgba(70,119,151,.65));
  animation:rainFall var(--dur) linear infinite;
  animation-delay:var(--delay);
}
.ws-snow i{
  position:absolute; top:-8%; left:var(--x);
  width:var(--size); height:var(--size); border-radius:50%;
  background:rgba(255,255,255,.9);
  box-shadow:0 0 6px rgba(255,255,255,.6);
  animation:snowFall var(--dur) linear infinite;
  animation-delay:var(--delay);
}
.ws-fog{ display:none; position:absolute; inset:30% -10% 8%; }
.weather-scene[data-kind="fog"] .ws-fog{ display:block; }
.ws-fog i{
  position:absolute; width:70%; height:5rem; border-radius:50%;
  background:rgba(255,255,255,.34); filter:blur(18px);
  animation:fogMove 16s ease-in-out infinite alternate;
}
.ws-fog i:nth-child(1){ top:0; left:0; }
.ws-fog i:nth-child(2){ top:30%; left:26%; animation-delay:-5s; animation-duration:21s; }
.ws-fog i:nth-child(3){ top:60%; left:-12%; animation-delay:-9s; animation-duration:18s; }
.ws-flash{
  position:absolute; inset:0; opacity:0; background:rgba(255,255,255,.8);
}
.weather-scene[data-kind="storm"] .ws-flash{ animation:stormFlash 9s linear infinite; }

.home-hello{
  text-align:center; padding:18px 18px 24px;
  border-radius:24px;
  background:linear-gradient(145deg,rgba(255,252,246,.76),rgba(255,248,235,.42));
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 18px 50px -32px rgba(29,54,48,.55);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
}
.hh-line{ font-size:1.05rem; color:var(--ink-2); }
.hh-time{
  font-size:3.6rem; font-weight:800; line-height:1.1;
  font-variant-numeric:tabular-nums; letter-spacing:.02em;
  color:var(--green); margin:6px 0 2px;
}
.hh-date{ font-size:1.05rem; color:var(--ink-3); }

.home-weather-pill{
  display:flex; align-items:center; justify-content:center; gap:8px;
  width:fit-content; max-width:100%; margin:16px auto 0; padding:9px 15px;
  border-radius:999px; border:1px solid rgba(255,255,255,.72);
  background:rgba(255,252,246,.64); color:var(--ink-2);
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  box-shadow:0 10px 25px -18px rgba(20,32,28,.65);
  font-size:.86rem; font-weight:700; line-height:1.35;
}
.home-weather-pill:active{ background:rgba(255,252,246,.88); }
.hwp-icon{ font-size:1.15rem; }

.agent-command{
  width:min(42rem,100%); margin:0 auto 20px; padding:16px 18px;
  border-radius:22px; border:1px solid rgba(255,255,255,.28);
  background:linear-gradient(145deg,rgba(20,48,41,.88),rgba(34,79,67,.76));
  color:#F7FBF9; box-shadow:0 20px 48px -28px rgba(10,30,25,.9);
  backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
}
.agent-command-head{ display:flex; align-items:center; gap:11px; }
.agent-command-head > div{ min-width:0; flex:1; }
.agent-command-head b{ display:block; font-size:1.02rem; letter-spacing:.02em; }
.agent-command-head span:not(.agent-orb){ display:block; margin-top:2px; color:#C9E2D8; font-size:.78rem; }
.agent-orb{
  position:relative; flex:none; width:2.2rem; height:2.2rem; border-radius:50%;
  background:radial-gradient(circle at 36% 34%,#FFF3D2,#E4A854 62%,#A95A2E);
  box-shadow:0 0 0 5px rgba(255,231,180,.1),0 0 22px rgba(255,207,126,.38);
}
.agent-orb::before{
  content:''; position:absolute; inset:-6px; border-radius:50%;
  border:1px solid rgba(255,234,190,.35);
  animation:agentOrb 2.4s ease-out infinite;
}
.agent-orb i{
  position:absolute; inset:7px; border-radius:50%;
  background:rgba(255,255,255,.3); animation:agentCore 2s ease-in-out infinite;
}
.agent-command.is-acting .agent-orb{ animation:agentBusy 1s ease-in-out infinite; }
.agent-command.is-alert{ background:linear-gradient(145deg,rgba(100,37,28,.92),rgba(151,71,48,.82)); }
.agent-trace-link{
  flex:none; padding:6px 10px; border-radius:999px;
  background:rgba(255,255,255,.12); color:#EAF5F0;
  border:1px solid rgba(255,255,255,.16); font-size:.74rem; font-weight:700;
}
.agent-trace-link:active{ background:rgba(255,255,255,.22); }
.agent-monitor-text{
  margin:11px 0 12px; color:#D8E8E1; font-size:.82rem; line-height:1.6;
}
.agent-goal-input{
  display:flex; align-items:center; gap:8px; padding:6px;
  border-radius:14px; background:rgba(255,255,255,.94);
}
.agent-goal-input input{
  flex:1; min-width:0; padding:7px 8px; border:0; outline:none;
  background:transparent; color:var(--ink); font:inherit; font-size:.86rem;
}
.agent-goal-input button{
  flex:none; padding:9px 13px; border-radius:10px;
  background:var(--green); color:#fff; font-size:.8rem; font-weight:800;
}
.agent-goal-chips{ display:flex; flex-wrap:wrap; gap:7px; margin-top:10px; }
.agent-goal-chips button{
  padding:6px 11px; border-radius:999px; background:rgba(255,255,255,.1);
  border:1px solid rgba(255,255,255,.15); color:#EAF5F0;
  font-size:.75rem; font-weight:650;
}
.agent-goal-chips button:active{ background:rgba(255,255,255,.2); }

@keyframes agentOrb{ 0%{ transform:scale(.86); opacity:.8; } 70%,100%{ transform:scale(1.24); opacity:0; } }
@keyframes agentCore{ 0%,100%{ transform:scale(.82); opacity:.55; } 50%{ transform:scale(1.08); opacity:1; } }
@keyframes agentBusy{ 0%,100%{ transform:scale(1); } 50%{ transform:scale(1.08); } }

#view-home.is-night .home-hello{
  background:linear-gradient(145deg,rgba(25,48,56,.58),rgba(64,71,69,.42));
  border-color:rgba(255,255,255,.18);
}
#view-home.is-night .hh-line,
#view-home.is-night .hh-date,
#view-home.is-night .home-mic-hint{ color:#F2EFE8; text-shadow:0 1px 8px rgba(0,0,0,.32); }
#view-home.is-night .hh-time{ color:#FFF6DE; text-shadow:0 2px 18px rgba(255,224,166,.25); }
#view-home.is-night .home-weather-pill{
  color:#F5F0E8; background:rgba(27,49,56,.55); border-color:rgba(255,255,255,.18);
}

.weather-scene[data-kind="cloudy"] .ws-cloud-a{ top:20%; }
.weather-scene[data-kind="rain"] .ws-sun,
.weather-scene[data-kind="storm"] .ws-sun,
.weather-scene[data-kind="fog"] .ws-sun,
.weather-scene[data-kind="snow"] .ws-sun{ opacity:.28; }

@keyframes sunBreathe{ 0%,100%{ transform:scale(1); filter:brightness(1); } 50%{ transform:scale(1.04); filter:brightness(1.08); } }
@keyframes sunRays{ to{ transform:rotate(360deg); } }
@keyframes twinkle{ from{ opacity:calc(var(--o) * .45); transform:scale(.8); } to{ opacity:var(--o); transform:scale(1.25); } }
@keyframes cloudDrift{ from{ translate:-8vw 0; } to{ translate:112vw 0; } }
@keyframes rainFall{ from{ transform:translateY(-10vh); } to{ transform:translateY(112vh); } }
@keyframes snowFall{ from{ transform:translate3d(0,-10vh,0) rotate(0deg); } to{ transform:translate3d(3rem,112vh,0) rotate(260deg); } }
@keyframes fogMove{ from{ transform:translateX(-8%); } to{ transform:translateX(12%); } }
@keyframes stormFlash{ 0%,82%,84%,100%{ opacity:0; } 83%{ opacity:.28; } }

/* ---------- 天气条 ---------- */
.home-weather{
  display:flex; align-items:center; gap:16px; flex-wrap:wrap;
  width:100%; margin-bottom:22px; padding:18px 22px;
  border-radius:var(--r);
  background:var(--card); border:2px solid var(--line);
  text-align:left; color:var(--ink);
  transition:border-color .2s, background .2s;
}
.home-weather:active{ background:var(--card-2); }
.home-weather.is-empty,
.home-weather.is-off{
  display:block; font-size:.95rem; color:var(--ink-2); line-height:1.7;
  border-style:dashed;
}
.home-weather.is-off{ border-color:#E8C9C2; background:var(--red-soft); color:#8A5F58; }
.home-weather b{ color:var(--green); font-weight:800; }

.hw-icon{ font-size:2.2rem; line-height:1; flex:none; }
.hw-main{ display:flex; flex-direction:column; flex:none; }
.hw-main b{ font-size:1.25rem; font-weight:800; }
.hw-sub{ font-size:.85rem; color:var(--ink-3); }
.hw-tip{
  flex:1; min-width:12rem;
  padding-left:16px; border-left:2px solid var(--line);
  font-size:.95rem; color:var(--ink-2); line-height:1.65;
}
.home-share{ margin-top:18px; width:100%; }

.home-actions{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }

.big-card{
  display:flex; flex-direction:column; align-items:flex-start; gap:6px;
  min-height:9rem;
  padding:24px 22px;
  border-radius:var(--r);
  background:var(--card);
  border:2px solid var(--line);
  box-shadow:var(--shadow);
  text-align:left;
  transition:transform .15s, box-shadow .15s;
}
.big-card:active{ transform:scale(.98); }
.big-card b{ font-size:1.4rem; font-weight:800; }
.big-card > span:last-child{ font-size:.9rem; color:var(--ink-3); }
.bc-icon{
  width:3.1rem; height:3.1rem; border-radius:1rem;
  display:grid; place-items:center; margin-bottom:6px;
  background:var(--green-soft); color:var(--green);
}
.bc-icon svg{ width:1.9rem; height:1.9rem; }

.card-green{ border-color:#EFC9BB; }
.card-green .bc-icon{ background:var(--green-soft); color:var(--green); }
.card-red{ border-color:#EFC7BF; }
.card-red .bc-icon{ background:var(--red-soft); color:var(--red); }
.card-red b{ color:var(--red); }
.card-amber{ border-color:#EFDCB4; }
.card-amber .bc-icon{ background:var(--amber-soft); color:var(--amber); }
.card-blue{ border-color:#C2D6E6; }
.card-blue .bc-icon{ background:var(--blue-soft); color:var(--blue); }

.home-status{
  margin-top:20px; padding:14px 18px;
  border-radius:var(--r-sm);
  background:var(--card-2);
  font-size:.85rem; color:var(--ink-2); line-height:1.7;
}
.home-status .warn{ color:var(--red); font-weight:700; }
.home-status .ok{ color:var(--green); font-weight:700; }

/* ---------- 平安看护状态条 ---------- */
.care-strip{
  margin-top:12px; padding:14px 18px;
  border-radius:var(--r-sm);
  background:var(--card); border:2px solid var(--line);
  font-size:.9rem; color:var(--ink-2); line-height:1.7;
}
.care-alert{ color:var(--red); font-weight:800; }
.divider{ height:1px; margin:20px 0; background:var(--line); }

/* ---------- 健康评估 ---------- */
.drop{
  margin-top:16px; padding:34px 22px;
  border:2px dashed var(--line-2); border-radius:var(--r);
  background:var(--card); text-align:center; cursor:pointer;
  transition:border-color .2s, background .2s;
}
.drop:hover{ border-color:var(--green-2); background:#FFF8F4; }
.drop.dragover{ border-color:var(--green); background:var(--green-soft); }
.drop-title{ font-size:1.05rem; font-weight:700; }
.drop-sub{ margin-top:8px; font-size:.86rem; color:var(--ink-3); line-height:1.6; }

.health-result{
  margin-top:22px; padding:24px;
  border-radius:var(--r); background:var(--card); border:2px solid var(--line);
  animation:viewIn .3s ease both;
}
.hr-status{
  display:inline-flex; align-items:center; gap:10px;
  padding:8px 18px; border-radius:999px;
  font-size:1.2rem; font-weight:800;
}
.hr-status.good{ background:var(--green-soft); color:var(--green); }
.hr-status.watch{ background:var(--amber-soft); color:var(--amber); }
.hr-status.care{ background:var(--red-soft); color:var(--red); }
.hr-items{ margin-top:18px; }
.hr-item{
  display:flex; gap:14px; padding:14px 0;
  border-top:1px dashed var(--line); align-items:flex-start;
}
.hr-item:first-child{ border-top:none; }
.hr-ico{
  flex:none; width:30px; height:30px; border-radius:50%;
  display:grid; place-items:center; font-size:.85rem; font-weight:800;
  background:var(--card-2); color:var(--ink-3);
}
.hr-ico.ok{ background:var(--green-soft); color:var(--green); }
.hr-ico.warn{ background:var(--amber-soft); color:var(--amber); }
.hr-ico.care{ background:var(--red-soft); color:var(--red); }
.hr-item-body{ flex:1; min-width:0; }
.hr-item-top{ display:flex; justify-content:space-between; gap:12px; align-items:baseline; }
.hr-item-top b{ font-size:1.02rem; }
.hr-item-top .val{ font-size:1rem; color:var(--ink-2); font-variant-numeric:tabular-nums; white-space:nowrap; }
.hr-item-body p{ margin-top:3px; font-size:.9rem; color:var(--ink-2); line-height:1.65; }
.hr-advice{
  margin-top:18px; padding:16px 18px;
  border-radius:var(--r-sm); background:var(--card-2);
}
.hr-advice h4{ font-size:.9rem; color:var(--ink-3); margin-bottom:8px; }
.hr-advice li{
  position:relative; padding:5px 0 5px 20px;
  font-size:.92rem; color:var(--ink-2); line-height:1.7;
}
.hr-advice li::before{ content:'·'; position:absolute; left:4px; font-weight:800; color:var(--green); }
.hr-meta{ margin-top:10px; font-size:.82rem; color:var(--ink-3); }
.hr-disclaimer{
  margin-top:18px; padding:12px 14px; border-radius:var(--r-sm);
  background:var(--amber-soft); font-size:.8rem; color:#8A5F14; line-height:1.6;
}

.health-history{ margin-top:22px; }
.health-history h3{ font-size:1.05rem; margin-bottom:12px; }
.hh-item{
  padding:16px 18px; margin-bottom:10px;
  border-radius:var(--r-sm); background:var(--card); border:1px solid var(--line);
}
.hh-item-top{ display:flex; justify-content:space-between; gap:12px; align-items:baseline; }
.hh-item-top b{ font-size:1rem; }
.hh-item-top span{ font-size:.82rem; color:var(--ink-3); }

/* ============================================================
   说话
   ============================================================ */
.talk-stage{ min-height:12rem; margin-bottom:22px; }
.talk-hint{
  padding:34px 20px; text-align:center;
  font-size:1.05rem; color:var(--ink-3);
  border:2px dashed var(--line-2); border-radius:var(--r);
  background:var(--card);
}
.talk-heard{
  padding:20px 22px; border-radius:var(--r);
  background:var(--card); border:2px solid var(--line);
  margin-bottom:14px;
}
.talk-heard .lbl{ font-size:.8rem; color:var(--ink-3); font-weight:700; letter-spacing:.06em; }
.talk-heard .txt{ font-size:1.25rem; font-weight:700; margin-top:6px; }
.talk-heard .nrm{ font-size:.9rem; color:var(--ink-2); margin-top:8px; padding-top:8px; border-top:1px dashed var(--line); }

.talk-answer{
  padding:22px; border-radius:var(--r);
  background:var(--green-soft); border:2px solid #EFC9BB;
}
.talk-answer .lbl{ font-size:.8rem; color:var(--green); font-weight:700; letter-spacing:.06em; }
.talk-answer .txt{ font-size:1.3rem; line-height:1.75; margin-top:8px; color:var(--ink); }

.talk-controls{ display:flex; flex-direction:column; align-items:center; gap:16px; }
.agent-text-row{
  display:flex; align-items:center; gap:10px; margin:16px 0 20px;
  padding:8px; border-radius:999px; border:1px solid var(--line);
  background:var(--card); box-shadow:var(--shadow);
}
.agent-text-row input{
  min-width:0; flex:1; border:0; outline:none; background:transparent;
  padding:10px 13px; color:var(--ink); font:inherit; font-size:.98rem;
}
.agent-text-row .btn-round{ flex:none; min-width:4.6rem; }

.mic-btn{
  position:relative;
  width:13rem; height:13rem;
  border-radius:50%;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px;
  background:radial-gradient(circle at 34% 28%, #C4573A, #8E3524);
  color:#fff;
  box-shadow:0 18px 40px -18px rgba(26,92,76,.9);
  transition:transform .15s, background .2s;
  user-select:none; -webkit-user-select:none; touch-action:manipulation;
}
.mic-btn svg{ width:3.4rem; height:3.4rem; }
.mic-btn b{ font-size:1.15rem; font-weight:800; }
.mic-btn:active{ transform:scale(.96); }
.mic-btn.is-live{
  background:radial-gradient(circle at 34% 28%, #D6503C, #A5251A);
  box-shadow:0 18px 40px -18px rgba(176,42,30,.9);
}
.mic-ring{
  position:absolute; inset:-10px; border-radius:50%;
  border:3px solid rgba(35,121,95,.35);
  animation:ringPulse 2s ease-out infinite;
  pointer-events:none;
}
.mic-btn.is-live .mic-ring{ border-color:rgba(206,67,49,.5); animation-duration:1.1s; }
@keyframes ringPulse{
  0%{ transform:scale(1); opacity:.85; }
  100%{ transform:scale(1.18); opacity:0; }
}

.btn-round{
  display:inline-flex; align-items:center; gap:8px;
  padding:12px 22px; border-radius:999px;
  background:var(--card); border:2px solid var(--line);
  font-size:1rem; font-weight:700; color:var(--ink-2);
}
.btn-round svg{ width:1.25rem; height:1.25rem; }
.btn-round:active{ background:var(--card-2); }
.btn-round-green{ background:var(--green); border-color:var(--green); color:#fff; }

.quick-ask{ margin-top:28px; padding-top:22px; border-top:1px solid var(--line); }
.qa-title{ font-size:.9rem; color:var(--ink-3); margin-bottom:12px; }
.qa-chips{ display:flex; flex-wrap:wrap; gap:10px; }
.qa-chip{
  padding:12px 18px; border-radius:999px;
  background:var(--card); border:2px solid var(--line);
  font-size:.95rem; font-weight:600;
}
.qa-chip:active{ background:var(--green-soft); border-color:#EFC9BB; }

/* ============================================================
   反诈
   ============================================================ */
.sec-say{ font-size:1rem; color:var(--ink-2); margin-bottom:14px; }

.fraud-input{ display:flex; gap:12px; align-items:stretch; }
.fraud-input textarea{
  flex:1; min-height:6rem;
  padding:16px 18px; border-radius:var(--r-sm);
  border:2px solid var(--line); background:var(--card);
  font-family:inherit; font-size:1.05rem; line-height:1.7;
  color:var(--ink); resize:vertical;
}
.fraud-input textarea:focus{ outline:none; border-color:var(--green-2); }
.fraud-input .btn-round{
  flex:none; flex-direction:column; justify-content:center;
  border-radius:var(--r-sm); padding:12px 18px;
}
.fraud-btns{ display:flex; gap:12px; margin-top:16px; flex-wrap:wrap; }

.btn-big{
  flex:1; min-width:9rem; min-height:3.6rem;
  padding:14px 24px; border-radius:var(--r-sm);
  font-size:1.1rem; font-weight:800;
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  transition:transform .15s, background .15s;
}
.btn-big:active{ transform:scale(.98); }
.btn-green{ background:var(--green); color:#fff; }
.btn-line{ background:var(--card); color:var(--ink-2); border:2px solid var(--line); }
.btn-danger{ color:var(--red); border-color:#EFC7BF; }
.btn-sm{ flex:none; min-width:auto; min-height:3rem; padding:10px 18px; font-size:1rem; }

.fraud-result{ margin-top:26px; animation:viewIn .3s ease both; }
.fr-head{
  display:flex; align-items:center; justify-content:space-between; gap:14px;
  padding:20px 22px; border-radius:var(--r) var(--r) 0 0;
  background:var(--card-2);
}
.fr-level{ font-size:1.5rem; font-weight:800; }
.fr-score{ font-size:.9rem; color:var(--ink-2); font-variant-numeric:tabular-nums; }
.fr-score b{ font-size:1.4rem; }
.fr-track{ height:14px; background:var(--card-2); }
.fr-bar{ height:100%; width:0; transition:width .7s cubic-bezier(.22,.61,.36,1), background .4s; background:#4E9A7E; }
.fr-advice{
  padding:20px 22px; background:var(--card);
  border-left:6px solid var(--line-2);
  font-size:1.15rem; font-weight:700; line-height:1.7;
}
.fr-hits{ padding:20px 22px; background:var(--card); border-top:1px solid var(--line); }
.fr-hits h4{ font-size:1rem; color:var(--ink-2); margin-bottom:12px; }
.fr-hits li{
  position:relative; padding:12px 0 12px 30px;
  border-top:1px dashed var(--line);
  font-size:.98rem;
}
.fr-hits li:first-child{ border-top:none; }
.fr-hits li::before{
  content:'!'; position:absolute; left:0; top:12px;
  width:20px; height:20px; border-radius:50%;
  background:var(--red); color:#fff;
  font-size:.75rem; font-weight:800; line-height:20px; text-align:center;
}
.fr-hits li b{ display:block; font-size:1.02rem; }
.fr-hits li span{ color:var(--ink-2); font-size:.9rem; }
.fr-actions{ display:flex; gap:12px; margin-top:18px; flex-wrap:wrap; }

/* 风险配色 */
.lv-low  .fr-level{ color:var(--green); }
.lv-low  .fr-bar{ background:#4E9A7E; }
.lv-low  .fr-advice{ border-left-color:#4E9A7E; }
.lv-mid  .fr-level{ color:var(--amber); }
.lv-mid  .fr-bar{ background:#D9A33C; }
.lv-mid  .fr-advice{ border-left-color:#D9A33C; }
.lv-high .fr-level{ color:var(--red); }
.lv-high .fr-bar{ background:var(--red); }
.lv-high .fr-advice{ border-left-color:var(--red); background:var(--red-soft); }

/* ============================================================
   用药 / 联系人
   ============================================================ */
.med-head{
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  margin-bottom:20px;
}
.med-head h2{ font-size:1.5rem; }

.med-list, .contact-list{ display:flex; flex-direction:column; gap:14px; }
.empty{
  padding:44px 20px; text-align:center;
  border:2px dashed var(--line-2); border-radius:var(--r);
  color:var(--ink-3); font-size:.95rem; background:var(--card);
}

.med-item{
  padding:20px 22px; border-radius:var(--r);
  background:var(--card); border:2px solid var(--line);
}
.mi-top{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; }
.mi-name{ font-size:1.3rem; font-weight:800; }
.mi-dose{ font-size:.95rem; color:var(--ink-2); }
.mi-times{ display:flex; flex-wrap:wrap; gap:10px; margin-top:14px; }
.mi-time{
  display:flex; flex-direction:column; align-items:center; gap:8px;
  padding:12px 18px; border-radius:var(--r-sm);
  background:var(--card-2); border:2px solid transparent;
}
.mi-time.is-done{ background:var(--green-soft); border-color:#EFC9BB; }
.mi-time .t{ font-size:1.3rem; font-weight:800; font-variant-numeric:tabular-nums; }
.mi-time .s{ font-size:.8rem; color:var(--ink-2); }
.mi-time .s.done{ color:var(--green); font-weight:700; }
.mi-time button{
  padding:8px 16px; border-radius:999px;
  background:var(--green); color:#fff;
  font-size:.9rem; font-weight:750;
}
.mi-time button:disabled{ background:var(--line); color:var(--ink-3); }
.mi-del{
  margin-top:14px; padding-top:12px;
  border-top:1px dashed var(--line);
  display:flex; gap:18px; flex-wrap:wrap;
}
.mi-del button{ font-size:.85rem; font-weight:700; }
.mi-del button[data-act="writecard"]{ color:var(--green); }
.mi-del button[data-act="delmed"]{ color:var(--red); }

/* ---------- NFC 贴卡 ---------- */
.nfc-bar{
  margin-bottom:18px; padding:18px 20px;
  border-radius:var(--r); background:var(--green-soft);
  border:2px solid #EFC9BB;
}
.nfc-bar .btn-big{ width:100%; margin-bottom:10px; }
.nfc-bar .set-note{ font-size:.88rem; color:var(--ink-2); line-height:1.7; margin:0; }
.btn-big.is-live{
  background:var(--red); color:#fff;
  animation:nfcPulse 1.6s ease-in-out infinite;
}
@keyframes nfcPulse{ 0%,100%{ box-shadow:0 0 0 0 rgba(176,42,30,.35); } 50%{ box-shadow:0 0 0 12px rgba(176,42,30,0); } }

.med-form{
  margin-top:22px; padding:24px;
  border-radius:var(--r); background:var(--card);
  border:2px solid var(--green-2);
}
.med-form h3{ font-size:1.15rem; margin-bottom:18px; }
.field{ display:block; margin-bottom:16px; }
.field span{ display:block; font-size:.9rem; font-weight:700; color:var(--ink-2); margin-bottom:7px; }
.field input{
  width:100%; padding:14px 16px;
  border-radius:var(--r-sm); border:2px solid var(--line);
  font-family:inherit; font-size:1.05rem; background:var(--bg); color:var(--ink);
}
.field input:focus{ outline:none; border-color:var(--green-2); background:#fff; }
.form-btns{ display:flex; gap:12px; margin-top:8px; flex-wrap:wrap; }

.contact-item{
  display:flex; align-items:center; gap:16px;
  padding:18px 22px; border-radius:var(--r);
  background:var(--card); border:2px solid var(--line);
}
.ci-avatar{
  width:3.4rem; height:3.4rem; flex:none; border-radius:50%;
  display:grid; place-items:center;
  background:var(--green-soft); color:var(--green);
  font-size:1.3rem; font-weight:800;
}
.ci-info{ flex:1; min-width:0; }
.ci-name{ font-size:1.25rem; font-weight:800; }
.ci-phone{ font-size:1rem; color:var(--ink-2); font-variant-numeric:tabular-nums; }
.ci-call{
  flex:none; display:inline-flex; align-items:center; gap:8px;
  padding:14px 24px; border-radius:var(--r-sm);
  background:var(--green); color:#fff;
  font-size:1.1rem; font-weight:800;
}
.ci-call svg{ width:1.3rem; height:1.3rem; }
.ci-del{ flex:none; padding:10px; color:var(--red); font-size:.9rem; font-weight:700; }

/* ============================================================
   记录
   ============================================================ */
.rec-tabs{ display:flex; gap:10px; margin-bottom:18px; }
.rec-tab{
  flex:1; padding:13px; border-radius:var(--r-sm);
  background:var(--card); border:2px solid var(--line);
  font-size:1rem; font-weight:700; color:var(--ink-2);
}
.rec-tab.is-active{ background:var(--green); border-color:var(--green); color:#fff; }
.rec-list{ display:flex; flex-direction:column; gap:12px; }
.rec-item{
  padding:18px 20px; border-radius:var(--r-sm);
  background:var(--card); border-left:6px solid var(--line-2);
}
.rec-item.r-high{ border-left-color:var(--red); }
.rec-item.r-mid{ border-left-color:var(--amber); }
.rec-item.r-low{ border-left-color:#4E9A7E; }
.rec-when{ font-size:.82rem; color:var(--ink-3); margin-bottom:6px; }
.rec-main{ font-size:1.02rem; font-weight:650; line-height:1.65; word-break:break-word; }
.rec-meta{ margin-top:8px; font-size:.88rem; color:var(--ink-2); }

/* ============================================================
   设置
   ============================================================ */
.set-block{
  padding:22px 24px; margin-bottom:16px;
  border-radius:var(--r); background:var(--card); border:2px solid var(--line);
}
.set-block h3{ font-size:1.15rem; margin-bottom:10px; }
.set-note{ font-size:.88rem; color:var(--ink-3); line-height:1.7; margin-bottom:14px; }
.set-btns{ display:flex; gap:12px; flex-wrap:wrap; }

.chips{ display:flex; flex-wrap:wrap; gap:10px; }
.chip{
  padding:12px 20px; border-radius:999px;
  background:var(--bg); border:2px solid var(--line);
  font-size:1rem; font-weight:700; color:var(--ink-2);
}
.chip.is-active{ background:var(--green); border-color:var(--green); color:#fff; }

.slider{ width:100%; height:2.4rem; accent-color:var(--green); }
.slider-row{ display:flex; justify-content:space-between; align-items:center; font-size:.85rem; color:var(--ink-3); }
.slider-row b{ font-size:1.1rem; color:var(--green); font-variant-numeric:tabular-nums; }

.diag li{
  display:flex; justify-content:space-between; gap:14px;
  padding:10px 0; border-top:1px dashed var(--line);
  font-size:.92rem;
}
.diag li:first-child{ border-top:none; }
.diag .ok{ color:var(--green); font-weight:700; }
.diag .no{ color:var(--red); font-weight:700; }
.diag .meh{ color:var(--amber); font-weight:700; }

.ok-text{ color:var(--green); font-weight:800; }

/* ---------- 家人端网址 ---------- */
.family-link{
  margin-top:14px; padding:18px 18px 16px;
  border-radius:var(--r-sm);
  background:var(--green-soft); border:2px solid #EFC9BB;
}
.fl-lbl{ display:block; font-size:.88rem; font-weight:700; color:var(--green); margin-bottom:9px; }
.fl-url{
  display:block; padding:12px 14px; margin-bottom:14px;
  border-radius:10px; background:#fff; border:1px solid #EFC9BB;
  font-size:1rem; font-weight:700; color:var(--ink);
  word-break:break-all; line-height:1.5;
}

/* ---------- 高级选项 ---------- */
.adv{ margin-top:16px; }
.adv summary{
  cursor:pointer; font-size:.9rem; font-weight:700; color:var(--ink-3);
  padding:6px 0; list-style:none;
}
.adv summary::-webkit-details-marker{ display:none; }
.adv summary::before{ content:'▸ '; }
.adv[open] summary::before{ content:'▾ '; }
.adv[open] summary{ color:var(--ink-2); }

/* ============================================================
   弹窗 / 提示
   ============================================================ */
.modal{
  position:fixed; inset:0; z-index:100;
  display:flex; align-items:center; justify-content:center;
  padding:24px;
  background:rgba(20,32,28,.55);
  backdrop-filter:blur(4px);
  animation:viewIn .25s ease both;
}
.modal-box{
  position:relative; width:100%; max-width:26rem;
  padding:38px 28px 28px; border-radius:28px;
  background:var(--card); text-align:center;
  box-shadow:0 30px 70px -20px rgba(0,0,0,.5);
}
.modal-ring{
  width:5rem; height:5rem; margin:0 auto 18px;
  border-radius:50%; background:var(--amber-soft);
  display:grid; place-items:center;
}
.modal-ring::after{
  content:''; width:2.4rem; height:2.4rem;
  background:var(--amber);
  clip-path:polygon(50% 0,100% 100%,0 100%);
  border-radius:3px;
}
.modal-box h3{ font-size:1.5rem; color:var(--amber); }
.modal-med{ font-size:2rem; font-weight:800; margin-top:14px; }
.modal-dose{ font-size:1.15rem; color:var(--ink-2); margin-top:4px; }
.pair-code-input{
  width:100%; margin-top:18px; padding:15px 16px; border-radius:12px;
  border:2px solid var(--line); background:#fff; color:var(--ink);
  font:inherit; font-size:1.7rem; font-weight:800; letter-spacing:.22em; text-align:center;
}
.modal-btns{ display:flex; flex-direction:column; gap:12px; margin-top:26px; }

/* ---------- 报平安卡片 ---------- */
.share-box{
  max-width:34rem; max-height:92vh; overflow-y:auto;
  padding:28px 26px 24px; text-align:center;
}
.share-box h3{ font-size:1.35rem; color:var(--green); }
.share-tip{ font-size:.88rem; color:var(--ink-2); margin:10px 0 16px; line-height:1.6; }
.share-img{
  border-radius:14px; overflow:hidden;
  border:1px solid var(--line); background:#F3F0E9;
  margin-bottom:18px;
}
.share-img img{ display:block; width:100%; height:auto; }
.share-box .modal-btns{ margin-top:0; }

.toast{
  position:fixed; left:50%; bottom:6rem; transform:translateX(-50%);
  z-index:120; max-width:80vw;
  padding:14px 26px; border-radius:999px;
  background:rgba(20,32,28,.92); color:#fff;
  font-size:1rem; font-weight:650; text-align:center;
  animation:viewIn .22s ease both;
}


/* ---------- 我的安排 ---------- */
/* ---------- 我的安排：说话结果 ---------- */
#view-plan #btnPlanVoice{ width:100%; margin-bottom:16px; }
.plan-answer{
  margin-bottom:18px; padding:18px 20px;
  border-radius:var(--r); background:var(--green-soft);
  border:2px solid #EFC9BB;
}
.plan-answer .lbl{ font-size:.8rem; font-weight:700; color:var(--green); letter-spacing:.06em; }
.plan-answer .txt{ font-size:1.15rem; font-weight:700; margin-top:4px; line-height:1.6; }
.fraud-hints{ margin-top:20px; }
.fraud-hints .qa-title{ font-size:.9rem; color:var(--ink-3); margin-bottom:10px; }

.plan-list{ display:flex; flex-direction:column; gap:12px; }
.plan-item{
  display:flex; align-items:center; gap:16px;
  padding:18px 20px; border-radius:var(--r);
  background:var(--card); border:2px solid var(--line);
}
.plan-item.is-past{ opacity:.55; }
.pi-when{
  flex:none; min-width:6.6rem;
  font-size:1.05rem; font-weight:800; color:var(--green);
  font-variant-numeric:tabular-nums;
}
.pi-text{ flex:1; min-width:0; font-size:1.15rem; font-weight:700; }
.pi-del{
  flex:none; padding:8px 14px; border-radius:999px;
  font-size:.85rem; font-weight:700; color:var(--red);
  background:var(--red-soft);
}

/* ============================================================
   平板 / 桌面
   ============================================================ */
@media (min-width:900px){
  .stage{ padding:34px 40px; }
  .home-actions{ grid-template-columns:1fr 1fr; gap:20px; }
  .big-card{ min-height:10rem; }
}

@media (max-width:560px){
  html{ font-size:16.5px; }
  .stage{ padding:16px; }
  .home-actions{ grid-template-columns:1fr; }
  .big-card{ min-height:auto; padding:20px; }
  .mic-btn{ width:11rem; height:11rem; }
  .tab{ font-size:.72rem; }
  .contact-item{ flex-wrap:wrap; }
  .ci-call{ width:100%; justify-content:center; }
}

@media (orientation:landscape) and (max-height:560px){
  .home-hello{ padding:0 0 14px; }
  .hh-time{ font-size:2.4rem; }
  .mic-btn{ width:9rem; height:9rem; }
  .mic-btn svg{ width:2.4rem; height:2.4rem; }
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
}

/* ---------- 按住说话：防止长按选中/弹菜单 ---------- */
#btnTalk, #btnPlanVoice, #btnFraudVoice{
  touch-action:none;
  -webkit-user-select:none; user-select:none;
  -webkit-touch-callout:none;
}

/* ---------- 健康评估：示例数据 ---------- */
.sample-row{ margin-bottom:20px; }
.sample-row .qa-title{ font-size:.9rem; color:var(--ink-3); margin-bottom:10px; }

/* ---------- 导航 ---------- */
.nav-input{ display:flex; gap:12px; margin-bottom:14px; }
.nav-input input{
  flex:1; min-width:0; padding:16px 18px; border-radius:var(--r-sm);
  border:2px solid var(--line); font-size:1.1rem; font-family:inherit; background:var(--card); color:var(--ink);
}
.nav-input input:focus{ outline:none; border-color:var(--green-2); }
.nav-input .btn-big{ flex:none; min-width:auto; padding:14px 22px; }
.nav-voice{ width:100%; margin-bottom:12px; }
.nav-result{ display:flex; flex-direction:column; gap:14px; }
.nav-dest{
  padding:18px 20px; border-radius:var(--r);
  background:var(--green-soft); border:2px solid #EFC9BB;
}
.nav-dest b{ display:block; font-size:1.3rem; }
.nd-addr{ display:block; margin-top:4px; font-size:.9rem; color:var(--ink-2); }
.nav-map{ width:100%; margin-top:14px; }
.nav-route{
  padding:18px 20px; border-radius:var(--r);
  background:var(--card); border:2px solid var(--line);
}
.nr-head{ display:flex; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.nr-mode{ font-size:1.15rem; font-weight:800; color:var(--green); }
.nr-best{ padding:3px 10px; border-radius:999px; background:var(--green); color:#fff; font-size:.78rem; font-weight:700; }
.nr-meta{ margin-left:auto; font-size:.95rem; color:var(--ink-2); font-variant-numeric:tabular-nums; }
.nr-steps{ margin:0; padding-left:22px; list-style:decimal; }
.nr-steps li{ font-size:.95rem; color:var(--ink-2); line-height:1.7; padding:3px 0; }

/* ---------- 网页内地图 ---------- */
.wgmap{ position:relative; overflow:hidden; background:#E8E4DB; border-radius:var(--r); }
.wgmap-tiles, .wgmap-svg, .wgmap-marks{ position:absolute; left:0; top:0; right:0; bottom:0; }
.wgmap-tile{ position:absolute; width:256px; height:256px; -webkit-user-drag:none; user-select:none; }
.wgmap-svg{ pointer-events:none; }
.wgmap-mark{ position:absolute; transform:translate(-50%,-50%); }
.wgmap-mark .wm-dot{
  display:block; width:18px; height:18px; border-radius:50%;
  background:var(--green); border:3px solid #fff; box-shadow:0 2px 8px rgba(0,0,0,.35);
}
.wgmap-mark.me .wm-dot{ background:#2C6FA8; }
.wgmap-mark.dest .wm-dot{ background:var(--red); }
.wgmap-mark .wm-label{
  position:absolute; left:22px; top:-3px; white-space:nowrap;
  padding:3px 9px; border-radius:8px;
  background:rgba(20,32,28,.88); color:#fff; font-size:.8rem; font-weight:700;
}
.wgmap-zoom{ position:absolute; right:10px; top:10px; display:flex; flex-direction:column; gap:6px; }
.wgmap-zoom button{
  width:38px; height:38px; border-radius:10px; border:1px solid var(--line);
  background:rgba(255,255,255,.94); color:var(--ink); font-size:1.2rem; font-weight:700;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
.wgmap-tip{
  position:absolute; left:10px; bottom:10px; padding:5px 11px; border-radius:8px;
  background:rgba(20,32,28,.82); color:#fff; font-size:.78rem;
}
.nav-map{ height:300px; }
.nav-map-box{ margin-bottom:16px; }
.nav-route.is-picked{ border-color:var(--green); background:var(--green-soft); }
.nr-pick{ display:block; margin-top:12px; font-size:.85rem; font-weight:700; color:var(--green); }

/* ---------- 给家人报平安（靠上，显眼） ---------- */
.peace-bar{
  width:100%; display:flex; align-items:center; gap:14px;
  padding:18px 20px; margin:18px 0 16px; border-radius:var(--r);
  background:linear-gradient(135deg,#C4573A,#8E3524); color:#fff; text-align:left;
  box-shadow:0 14px 28px -16px rgba(30,81,69,.95);
  transition:transform .15s, opacity .2s;
}
.peace-bar:active{ transform:scale(.99); }
.peace-bar:disabled{ opacity:.62; }
.pb-ico{ flex:none; width:2.7rem; height:2.7rem; border-radius:50%; display:grid; place-items:center; background:rgba(255,255,255,.18); }
.pb-ico svg{ width:1.5rem; height:1.5rem; }
.pb-text{ display:flex; flex-direction:column; min-width:0; }
.pb-text b{ font-size:1.25rem; font-weight:800; letter-spacing:.02em; }
.pb-text span{ font-size:.85rem; color:#F7C9B8; margin-top:3px; }

/* ---------- Agent 运行轨迹 ---------- */
.agent-live{
  margin:0 0 18px; padding:16px 18px; border:1px solid #C8D9D2;
  border-radius:var(--r-sm); background:linear-gradient(145deg,#F4FAF7,#EEF5F2);
  box-shadow:var(--shadow);
}
.agent-live-head{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.agent-kicker{
  padding:3px 8px; border-radius:999px; background:var(--green); color:#fff;
  font-size:.68rem; font-weight:850; letter-spacing:.08em;
}
.agent-live-head b{ font-size:1rem; color:var(--ink); }
.agent-risk{
  margin-left:auto; padding:3px 9px; border-radius:999px; font-size:.72rem; font-weight:750;
  background:#E5ECE9; color:var(--ink-2);
}
.agent-risk.urgent{ background:#FCE8E2; color:#A83D27; }
.agent-risk.caution{ background:#FFF1D8; color:#8C6117; }
.agent-plan-meta{ margin:8px 0 10px; color:var(--ink-3); font-size:.78rem; }
.agent-live-steps{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:7px; }
.agent-live-steps li{
  display:grid; grid-template-columns:14px minmax(5.8rem,auto) 1fr; align-items:baseline; gap:8px;
  font-size:.86rem; line-height:1.55;
}
.agent-live-steps b{ color:var(--ink-2); font-size:.84rem; }
.agent-live-steps small{ color:var(--ink-3); overflow-wrap:anywhere; }
.as-dot{
  width:9px; height:9px; border-radius:50%; background:#C2CECA; align-self:.42rem;
  box-shadow:0 0 0 3px rgba(194,206,202,.2);
}
.agent-live-steps li.is-running .as-dot{ background:var(--amber); animation:pulse 1s infinite; }
.agent-live-steps li.is-done .as-dot{ background:var(--green-2); }
.agent-live-steps li.is-failed .as-dot{ background:var(--red); }
.agent-live-steps li.is-waiting .as-dot{ background:#C58D21; animation:pulse 1.3s infinite; }
.agent-live-steps li.is-skipped{ opacity:.55; }
.agent-live-steps li.is-skipped .as-dot{ background:#B7C0BC; }
.agent-live-steps li.is-running small{ color:var(--ink-2); }
.agent-live-steps li.is-failed small{ color:var(--red); }
.agent-memory{
  margin:12px 0 16px; padding:14px 16px; border-radius:var(--r-sm);
  border:1px solid #D9E5E0; background:#F5FAF8;
}
.am-head{ display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; }
.am-head b{ font-size:.96rem; }
.am-head span{ color:var(--ink-3); font-size:.78rem; }
.agent-memory ul{ margin:10px 0 0; padding-left:20px; color:var(--ink-2); font-size:.86rem; line-height:1.7; }
.agent-memory p{ margin:9px 0 0; color:var(--ink-3); font-size:.82rem; }
.agent-memory .am-last{ color:var(--green); }

/* ============================================================
   首页：只留一个说话按钮
   天气、报平安、六个大卡片都放进 .home-more 里藏起来——
   留着是因为程序里还在用它们显示药量、联系人、安排这些摘要。
   其它功能改成用说话调出来：说"看吃药""我的日程"就直接跳过去。
   ============================================================ */
.home-more{ display:none !important; }
.home-mic{
  margin:26px auto 0;
  width:15rem; height:15rem;
}
.home-mic b{ font-size:1.15rem; }
.home-mic-hint{
  margin:18px auto 0; max-width:26rem; text-align:center;
  font-size:.92rem; line-height:1.8; color:var(--ink-3);
}

.trace-list{ display:flex; flex-direction:column; gap:14px; margin-top:6px; }
.trace-card{
  background:var(--card); border:1px solid var(--line);
  border-radius:var(--r-sm); padding:14px 16px; box-shadow:var(--shadow);
}
.tc-top{
  display:flex; align-items:center; justify-content:space-between;
  gap:10px; margin-bottom:8px;
}
.tc-via{
  font-size:.82rem; font-weight:750; color:var(--green);
  background:var(--green-soft); border-radius:999px; padding:3px 10px;
}
.tc-time{ font-size:.8rem; color:var(--ink-3); }
.tc-heard{
  font-size:1.02rem; font-weight:700; color:var(--ink);
  padding:8px 12px; border-radius:10px; background:var(--card-2);
  margin-bottom:10px; line-height:1.6;
}
.tc-agent{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  padding:9px 11px; margin-bottom:9px; border-radius:10px;
  background:#F2F8F5; border:1px solid #DCE8E3;
}
.tc-agent b{ font-size:.9rem; color:var(--ink); }
.tc-agent-type,.tc-risk{
  padding:2px 8px; border-radius:999px; font-size:.7rem; font-weight:750;
  background:var(--green-soft); color:var(--green);
}
.tc-risk.urgent{ background:#FCE8E2; color:#A83D27; }
.tc-risk.caution{ background:#FFF1D8; color:#8C6117; }
.tc-toolcount{ margin-left:auto; font-size:.74rem; color:var(--ink-3); }
.tc-safety{
  margin:-1px 0 10px; padding:7px 10px; border-left:3px solid var(--amber);
  background:#FFF8EA; color:#72541A; font-size:.78rem; line-height:1.55;
}
.tc-safety-agent{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  margin:0 0 10px; padding:8px 11px; border-radius:10px;
  background:#F4F7FA; border:1px solid #D5E0E8;
}
.tc-safety-agent b{ font-size:.82rem; color:#274F70; }
.tc-safety-agent span{
  padding:2px 8px; border-radius:999px; background:#E5EEF5; color:#275A79;
  font-size:.7rem; font-weight:750;
}
.tc-safety-agent span.needs-confirmation{ background:#FFF1D8; color:#8C6117; }
.tc-safety-agent span.needs-repair,
.tc-safety-agent span.block{ background:#FCE8E2; color:#A83D27; }
.tc-safety-agent small{ color:var(--ink-3); font-size:.74rem; }
.tc-steps{ list-style:none; margin:0; padding:0; }
.tc-steps li{
  display:flex; align-items:baseline; gap:8px; flex-wrap:wrap;
  padding:5px 0 5px 14px; position:relative;
  font-size:.92rem; line-height:1.65;
}
.tc-steps li::before{
  content:''; position:absolute; left:2px; top:.85rem;
  width:7px; height:7px; border-radius:50%; background:var(--line-2);
}
.tc-steps li.is-hear::before{ background:var(--blue); }
.tc-steps li.is-think::before{ background:var(--green-2); }
.tc-steps li.is-plan::before{ background:var(--green); }
.tc-steps li.is-guard::before{ background:var(--red); }
.tc-steps li.is-reflect::before{ background:#7B5AA6; }
.tc-steps li.is-observe::before{ background:var(--blue); }
.tc-steps li.is-act::before{ background:var(--amber); }
.ts-name{ font-weight:750; color:var(--ink-2); }
.ts-note{ color:var(--ink); }
.ts-ms{ margin-left:auto; font-size:.78rem; color:var(--ink-3); }
.tc-result{
  margin-top:10px; padding-top:10px; border-top:1px dashed var(--line);
  font-size:.95rem; line-height:1.7; color:var(--ink);
}
.tc-result b{ color:var(--ink-2); margin-right:6px; font-size:.85rem; }
.tc-ms{ margin-top:8px; font-size:.78rem; color:var(--ink-3); text-align:right; }
