/* ==========================================================================
   patch-548.css  v548  Elder typography scale regression + layout geometry
   Scope: zhihuijiayuan.cn 适老化精进
   Goal: lift the absolute px sizes locked by historical patch-544 back onto the
         body[data-scale] em / CSS-variable scale, so every level grows together
         when the user picks 1.0 / 1.2 / 1.4 / 1.6. No new feature, no font swap,
         no palette change. Legal footer text keeps its compliant small size.

   Scale base (body.elder-mode font-size):
     1.0 -> 20px   1.2 -> 22px   1.4 -> 24px   1.6 -> 26px
     --fs-m (primary action) 21 / 23 / 25 / 27
     --fs-s (body / secondary) 18 / 20 / 22 / 24
   ========================================================================== */

/* ---------- 0. Baseline rhythm ------------------------------------------------
   Readable line-height for the elder audience; prevents cramped leading. */
body.elder-mode { line-height: 1.6 !important; }
body.elder-mode p,
body.elder-mode .card,
body.elder-mode .entry-card,
body.elder-mode .care-card { line-height: 1.55 !important; }

/* ---------- 1. Container & navigation geometry ------------------------------
   Align the fixed bottom capsule with the app shell width; stop it covering the
   last card and the legal footer; keep safe bottom space on main content. */
body.elder-mode .elder-app {
  max-width: 620px !important;
  margin-inline: auto !important;
}
body.elder-mode .elder-nav {
  width: calc(100% - 32px) !important;
  max-width: 620px !important;
  bottom: 28px !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  gap: 4px !important;
}
@media (min-width: 900px) {
  body.elder-mode .elder-nav { max-width: 620px !important; }
}
body.elder-mode .elder-main {
  padding-left: 16px !important;
  padding-right: 16px !important;
  padding-bottom: 184px !important;
}
@media (max-width: 480px) {
  body.elder-mode .elder-main { padding-bottom: 176px !important; }
}

/* ---------- 2. Primary action buttons -> follow --fs-m ------------------------ */
body.elder-mode .btn,
body.elder-mode .btn-primary,
body.elder-mode .btn-ghost,
body.elder-mode .btn-soft,
body.elder-mode .btn-danger,
body.elder-mode .btn-success,
body.elder-mode .mode-btn,
body.elder-mode .entry-card button,
body.elder-mode .fav-act .btn,
body.elder-mode .say-btn,
body.elder-mode .retry-btn,
body.elder-mode .fam-empty a,
body.elder-mode .mn-actions .btn,
body.elder-mode .sos-drill-btn,
body.elder-mode .dest-chip,
body.elder-mode .voice-chip,
body.elder-mode .seg-btn,
body.elder-mode .ep-btn,
body.elder-mode .mini-btn,
body.elder-mode .op-btn,
body.elder-mode .like-btn,
body.elder-mode .kind-btn,
body.elder-mode .tpl-tab,
body.elder-mode .lesson-entry,
body.elder-mode .read-demo,
body.elder-mode .theme-btn,
body.elder-mode .fav-entry,
body.elder-mode .guard-entry,
body.elder-mode .mic-btn,
body.elder-mode .learn-card,
body.elder-mode .teach-feat,
body.elder-mode .tool-tabs button {
  font-size: var(--fs-m) !important;
  line-height: 1.35 !important;
}

/* ---------- 3. Secondary / small buttons -> follow --fs-s ---------------------
   .btn-sm previously locked at 13 / 15 px and never grew with the scale. */
body.elder-mode .btn-sm,
body.elder-mode .chip,
body.elder-mode .mood,
body.elder-mode .soft-mid button,
body.elder-mode .sc-opt,
body.elder-mode .cal-arrow,
body.elder-mode .scale-btn {
  font-size: var(--fs-s) !important;
  line-height: 1.35 !important;
}

/* ---------- 4. Body copy, card subtitles, status names -> follow --fs-s -------
   These were locked at 14 / 15 px absolute size and stayed tiny on 1.6x. */
body.elder-mode .wr-item small,
body.elder-mode .pf-cell span,
body.elder-mode .sym-row .care-copy span,
body.elder-mode .warn-box span,
body.elder-mode .si,
body.elder-mode .sc-opt span,
body.elder-mode .sc-date,
body.elder-mode .trend-sub,
body.elder-mode .ws-copy span,
body.elder-mode .sc-saved,
body.elder-mode .f-on,
body.elder-mode .b-os,
body.elder-mode .soft-mid span,
body.elder-mode .tw small,
body.elder-mode .trend-tip,
body.elder-mode .rec-time,
body.elder-mode .rec-note,
body.elder-mode .tlog,
body.elder-mode .med-times,
body.elder-mode .vl-tip,
body.elder-mode .entry-card .sub,
body.elder-mode .lc-tip,
body.elder-mode .care-card .care-copy span,
body.elder-mode .care-copy span,
body.elder-mode .pr-item .pr-name,
body.elder-mode .pr-item .pr-state,
body.elder-mode .top-name,
body.elder-mode .sos-btn span,
body.elder-mode .sos-btn b,
body.elder-mode .sos-btn .sos-text,
body.elder-mode .mh-step p,
body.elder-mode .mh-empty p,
body.elder-mode .lead,
body.elder-mode .dc-mid,
body.elder-mode .fc-mid,
body.elder-mode .top-sub,
body.elder-mode .hb-sub,
body.elder-mode .now-desc,
body.elder-mode .pr-sub,
body.elder-mode .care-tip,
body.elder-mode .dyn-copy span,
body.elder-mode .bd-mid span,
body.elder-mode .lc-mid span,
body.elder-mode .guard-copy span,
body.elder-mode .teach-copy p,
body.elder-mode .teach-copy a,
body.elder-mode .teach-copy b,
body.elder-mode .teach-copy span,
body.elder-mode .brand-hint p,
body.elder-mode .entry-card .entry-name,
body.elder-mode .wa-row,
body.elder-mode .sc-tip,
body.elder-mode .score-copy span,
body.elder-mode .score-ring span,
body.elder-mode .mn-info span,
body.elder-mode .mn-head,
body.elder-mode .wr-sub,
body.elder-mode .calc-tip,
body.elder-mode .tr-range,
body.elder-mode .med-note,
body.elder-mode .tt2,
body.elder-mode .lc-points,
body.elder-mode .entry-card small,
body.elder-mode .empty-tip,
body.elder-mode .empty-state p,
body.elder-mode .go-tip,
body.elder-mode .empty-copy,
/* tutorial card inner captions (component default 12-14px) */
body.elder-mode .qs-label,
body.elder-mode .qs-chip,
body.elder-mode .zj-tut-cats button,
body.elder-mode .daily-empty,
body.elder-mode .ge-mid span,
body.elder-mode .fe-mid span,
body.elder-mode .fav-item div span,
body.elder-mode .res-mid span,
body.elder-mode .model-item span,
body.elder-mode .t-mid span,
body.elder-mode .lc-copy span,
body.elder-mode .lc-tip,
body.elder-mode .recent-item span,
body.elder-mode .tool-chip,
body.elder-mode .hint,
body.elder-mode .voice-tip,
/* settings scale buttons inner text */
body.elder-mode .scale-btn span,
body.elder-mode .scale-btn em {
  font-size: var(--fs-s) !important;
  line-height: 1.55 !important;
}

/* Higher-specificity override for the hero banner subtitle (patch-544 line 480
   uses .hero-banner .hb-sub, which outranks the plain .hb-sub above). */
body.elder-mode .hero-banner .hb-sub {
  font-size: var(--fs-s) !important;
  line-height: 1.55 !important;
}

/* ---------- 4b. Weather / health / tools / chat component captions ---------
   Component defaults locked these at 12-15px; bind them to the scale variables. */
body.elder-mode .now-meta,
body.elder-mode .now-meta span,
body.elder-mode .day-range b,
body.elder-mode .fav-chip,
body.elder-mode .dress-row span,
body.elder-mode .care-mid span,
body.elder-mode .wr-item span,
body.elder-mode .warn-sug,
body.elder-mode .read-tip,
body.elder-mode .flash-box p,
body.elder-mode .cam-empty p,
body.elder-mode .ring-tip2,
body.elder-mode .conv-last,
body.elder-mode .hd-sub,
body.elder-mode .quick-chip,
body.elder-mode .ask-chip,
body.elder-mode .voice-status,
body.elder-mode .loc-copy span,
body.elder-mode .loc-go,
/* anti-fraud captions */
body.elder-mode .af-copy p,
body.elder-mode .dc-mid span,
body.elder-mode .fc-mid span,
body.elder-mode .dc-meta span,
body.elder-mode .da-num,
body.elder-mode .drill-tip p,
body.elder-mode .drill-fb p,
body.elder-mode .fc-sec h4,
body.elder-mode .fc-sec p,
body.elder-mode .qz-progress,
body.elder-mode .qz-cat,
body.elder-mode .qz-fb p,
body.elder-mode .quiz-done p,
/* board message meta and body */
body.elder-mode .care-card p,
body.elder-mode .msg-text,
body.elder-mode .msg-head strong,
body.elder-mode .msg-head span,
/* medication captions */
body.elder-mode .cf-row p,
body.elder-mode .str-copy p,
body.elder-mode .t-name span,
body.elder-mode .t-badge,
body.elder-mode .info-line span,
body.elder-mode .info-empty-line,
body.elder-mode .cal-cell b,
body.elder-mode .cal-cell span,
body.elder-mode .cal-legend,
body.elder-mode .wb-num,
body.elder-mode .wb-state,
body.elder-mode .vqa-sub,
body.elder-mode .vqa-hint,
body.elder-mode .curve-note,
body.elder-mode .cb-num,
body.elder-mode .cb-day {
  font-size: var(--fs-s) !important;
  line-height: 1.55 !important;
}

/* Chat message body, input and record button follow the primary size. */
body.elder-mode .bubble,
body.elder-mode .text-input,
body.elder-mode .rec-btn {
  font-size: var(--fs-m) !important;
  line-height: 1.6 !important;
}

/* Chat timestamps and date separators bind the variable directly (em inside a
   narrow bubble compounds down to ~11px). */
body.elder-mode .conv-time,
body.elder-mode .msg-time,
body.elder-mode .date-sep {
  font-size: var(--fs-s) !important;
  line-height: 1.5 !important;
}

/* ---------- 5. Auxiliary labels, timestamps, stat captions -> 0.85em ----------
   Minimum legible elder label: ~17px at 1.0x, grows with the scale. */
body.elder-mode .gva-fab-tip,
body.elder-mode .air-mid,
body.elder-mode .air-detail,
body.elder-mode .day-sun,
body.elder-mode .wsum-head span,
body.elder-mode .about.ver,
body.elder-mode .ws-cell span,
body.elder-mode .alarm-row span,
body.elder-mode .appr-item .appr-mid span,
body.elder-mode .n-time,
body.elder-mode .n-type,
body.elder-mode .gd-mid span,
body.elder-mode .sc-mid span,
body.elder-mode .upload-btn small,
body.elder-mode .ov-num span,
body.elder-mode .ov-row span,
body.elder-mode .sum-cell span,
body.elder-mode .st-mid span,
body.elder-mode .rh-copy span,
body.elder-mode .care-tag,
body.elder-mode .day-pop,
body.elder-mode .day-desc,
body.elder-mode .day-name,
body.elder-mode .d3-temp {
  font-size: 0.85em !important;
  line-height: 1.5 !important;
}

/* Help icon glyph follows the button size instead of shrinking twice.
   patch-544 line 385 locks .gv-help to 15px; restore it to fs-s and let the
   question glyph scale with the 44px circular button. */
body.elder-mode .gv-help {
  font-size: var(--fs-s) !important;
}
body.elder-mode .gv-help .gv-q {
  font-size: 1.1em !important;
}

/* Inner spans must NOT inherit another em multiplication: bind 1em to the
   container scale so the AQI / metric text does not shrink twice. */
body.elder-mode .air-mid span,
body.elder-mode .air-detail span {
  font-size: 1em !important;
  line-height: 1.5 !important;
}

/* ---------- 6. Bottom navigation labels -> follow scale (was locked 15px) -------- */
body.elder-mode .elder-nav .nav-label,
body.elder-mode .elder-nav button .nav-label {
  font-size: var(--fs-s) !important;
  line-height: 1.2 !important;
  letter-spacing: 0.01em !important;
}

/* Home grid entry labels: match patch-544's section.grid .g-card .g-label
   specificity so the override wins; these are primary entry names and must
   grow with the scale. */
body.elder-mode section.grid .g-card .g-label {
  font-size: var(--fs-s) !important;
  line-height: 1.3 !important;
}

/* ---------- 7. Weather metric row: breathing room, allow wrapping ------------- */
body.elder-mode .now-meta {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 10px 18px !important;
  line-height: 1.55 !important;
}
body.elder-mode .now-meta > span,
body.elder-mode .now-meta > div { line-height: 1.5 !important; }

/* ---------- 8. Voice floating button: align to the centered app container on
   wide screens, keep a safe edge on narrow phones; keep the label inside the
   62px circle and allow it to wrap instead of overflowing the viewport. */
body.elder-mode .gva-fab {
  right: max(14px, calc(50% - 326px)) !important;
  font-size: 1em !important;
}
body.elder-mode .gva-fab-tip {
  white-space: normal !important;
  width: 100% !important;
  max-width: 56px !important;
  text-align: center !important;
  font-size: 0.7em !important;
  line-height: 1.15 !important;
  word-break: keep-all !important;
}

/* ---------- 9. Return header button text follows scale ------------------------ */
body.elder-mode .v407-back { font-size: 1em !important; }

/* ---------- 10. Child-side density lift. The child shell renders WITHOUT the
   elder-mode body class (that class is only added on the elder route), so guard
   with body:not(.elder-mode). Raise child quick-card subtitles and bottom-nav
   labels to a readable 14px; card titles (.q-card strong) keep their own size. */
body:not(.elder-mode) .q-card div span { font-size: 14px !important; }
body:not(.elder-mode) .mobile-nav button,
body:not(.elder-mode) .mobile-nav button span { font-size: 14px !important; }
body:not(.elder-mode) .sec-sub { font-size: 14px !important; }
body:not(.elder-mode) .tw { font-size: 15px !important; }

/* ---- 10a. Child readable body / subtitle / summary / button text -> 14px ----
   The child shell renders WITHOUT the elder-mode body class, so guard with
   body:not(.elder-mode). Covers every child route's card middle column, body
   paragraph, note/tip, form label and compact action button. Chart axis numbers,
   stat digits, badges, legends and the legal footer intentionally stay small. */
body:not(.elder-mode) .sp-mid span,
body:not(.elder-mode) .sp-loc,
body:not(.elder-mode) .fc-mid span,
body:not(.elder-mode) .sc-mid span,
body:not(.elder-mode) .gd-mid span,
body:not(.elder-mode) .appr-mid span,
body:not(.elder-mode) .dyn-mid span,
body:not(.elder-mode) .fm-mid span,
body:not(.elder-mode) .pd-mid span,
body:not(.elder-mode) .st-mid span,
body:not(.elder-mode) .rh-copy span,
body:not(.elder-mode) .f-mid span,
body:not(.elder-mode) .pf-mid span,
body:not(.elder-mode) .map-empty span,
body:not(.elder-mode) .conv-last,
body:not(.elder-mode) .bc-steps,
body:not(.elder-mode) .hint,
body:not(.elder-mode) .mini-btn,
body:not(.elder-mode) .btn-sm,
body:not(.elder-mode) .page-sub,
body:not(.elder-mode) .lead,
body:not(.elder-mode) .n-mid p,
body:not(.elder-mode) .n-readall,
body:not(.elder-mode) .n-tab,
body:not(.elder-mode) .fence-meta,
body:not(.elder-mode) .state-card span,
body:not(.elder-mode) .state-time,
body:not(.elder-mode) .field-tip,
body:not(.elder-mode) .empty.small p,
body:not(.elder-mode) .wsum-head span,
/* remaining child routes: middle-column summaries */
body:not(.elder-mode) .a-mid span,
body:not(.elder-mode) .bill-mid span,
body:not(.elder-mode) .g-mid span,
body:not(.elder-mode) .r-mid span,
body:not(.elder-mode) .fb-mid span,
body:not(.elder-mode) .h-mid span,
body:not(.elder-mode) .wr-cell span,
body:not(.elder-mode) .lc-mid span,
body:not(.elder-mode) .le-mid span,
body:not(.elder-mode) .t-mid span,
body:not(.elder-mode) .s-mid span,
body:not(.elder-mode) .s-main span,
body:not(.elder-mode) .tl-main span,
body:not(.elder-mode) .sk-right span,
body:not(.elder-mode) .s-copy span,
body:not(.elder-mode) .w-item span:not(.wi-ico),
body:not(.elder-mode) .pf-cell span,
body:not(.elder-mode) .rc-main span,
body:not(.elder-mode) .feed span,
body:not(.elder-mode) .st span,
body:not(.elder-mode) .ph-dose,
body:not(.elder-mode) .ph-exp,
body:not(.elder-mode) .s-main b,
body:not(.elder-mode) .w-score span,
body:not(.elder-mode) .sum-card span,
body:not(.elder-mode) .w-day b,
body:not(.elder-mode) .s-num,
body:not(.elder-mode) .mo2-head span,
body:not(.elder-mode) .r-text,
body:not(.elder-mode) .sum-head span,
/* body paragraphs, notes, tips, advice, form labels, action buttons */
body:not(.elder-mode) .it-copy p,
body:not(.elder-mode) .list-note,
body:not(.elder-mode) .d-line span,
body:not(.elder-mode) .fld span,
body:not(.elder-mode) .k-row label,
body:not(.elder-mode) .field label,
body:not(.elder-mode) .d-dose,
body:not(.elder-mode) .lc-note,
body:not(.elder-mode) .dim2,
body:not(.elder-mode) .led-copy p,
body:not(.elder-mode) .care-sug,
body:not(.elder-mode) .ann-who span,
body:not(.elder-mode) .msg-head span,
body:not(.elder-mode) .msg-by,
body:not(.elder-mode) .ph-note,
body:not(.elder-mode) .help3 p,
body:not(.elder-mode) .low-tip p,
body:not(.elder-mode) .pts-kv span,
body:not(.elder-mode) .pts-tip,
body:not(.elder-mode) .budget-tip,
body:not(.elder-mode) .lr-sub,
body:not(.elder-mode) .s-cell span,
body:not(.elder-mode) .advice,
body:not(.elder-mode) .alert-item,
body:not(.elder-mode) .lr-empty,
body:not(.elder-mode) .s-tip,
body:not(.elder-mode) .wrep-cell span,
body:not(.elder-mode) .wrep-advice,
body:not(.elder-mode) .td-note,
body:not(.elder-mode) .td-state,
body:not(.elder-mode) .ov-cell span,
body:not(.elder-mode) .tl-by,
body:not(.elder-mode) .gc-tip,
body:not(.elder-mode) .as-tips,
body:not(.elder-mode) .as-empty,
body:not(.elder-mode) .dl-tip,
body:not(.elder-mode) .empty-small,
body:not(.elder-mode) .rec-go,
body:not(.elder-mode) .vrec-tip,
body:not(.elder-mode) .tpl-item,
body:not(.elder-mode) .tpl-tab,
body:not(.elder-mode) .tpl-toggle,
body:not(.elder-mode) .tips,
body:not(.elder-mode) .tips3 p,
body:not(.elder-mode) .cal-arrow,
body:not(.elder-mode) .cal-cell,
body:not(.elder-mode) .flt button,
body:not(.elder-mode) .op-btn,
body:not(.elder-mode) .it-act,
body:not(.elder-mode) .sk-left span { font-size: 14px !important; }

/* ---- 10b. Child timestamps, legends and secondary meta -> legible 13px ---- */
body:not(.elder-mode) .n-time,
body:not(.elder-mode) .ev-time,
body:not(.elder-mode) .o-time,
body:not(.elder-mode) .w-time,
body:not(.elder-mode) .tl-date,
body:not(.elder-mode) .w-date,
body:not(.elder-mode) .r-foot,
body:not(.elder-mode) .g-meta,
body:not(.elder-mode) .bar-label,
body:not(.elder-mode) .trend-legend,
body:not(.elder-mode) .cal-legend,
body:not(.elder-mode) .types-legend,
body:not(.elder-mode) .sd-date,
body:not(.elder-mode) .sd-score,
body:not(.elder-mode) .tl-main small { font-size: 13px !important; }

/* ---- 10c. Child role/state chips -> 13.5px (not below legible chip size) ---- */
body:not(.elder-mode) .tag,
body:not(.elder-mode) .n-type,
body:not(.elder-mode) .inten-tag,
body:not(.elder-mode) .as-chip,
body:not(.elder-mode) .cat-chip,
body:not(.elder-mode) .gb-chip,
body:not(.elder-mode) .a-tag,
body:not(.elder-mode) .d-cat,
body:not(.elder-mode) .r-cat,
body:not(.elder-mode) .s-kind,
body:not(.elder-mode) .tl-kind,
body:not(.elder-mode) .a-kind,
body:not(.elder-mode) .wr-cat,
body:not(.elder-mode) .dt-tag,
body:not(.elder-mode) .care-tag,
body:not(.elder-mode) .sc-badge,
body:not(.elder-mode) .ph-badge,
body:not(.elder-mode) .fb-badge { font-size: 13.5px !important; }

/* ---------- 11. Legal / registration footer: keep compliant small size ------
   Intentionally NOT enlarged. */
body.elder-mode .icp-footer a,
body.elder-mode .beian-link,
body.elder-mode .auth-footer,
.side-brand span,
.su-name { }

/* ==========================================================================
   patch-548 §12+  v548n  UI redesign P0 (warm paper · clay · sage)
   2026-11-02 · append-only · do not rebuild · do not touch brand-tutorial
   Rollback: restore patch-548.css.bak-548n + index.html.bak-548n
   ========================================================================== */

/* ---------- 12. Design tokens (map onto existing vars) ---------------------- */
:root {
  --bg: #F6F1EA !important;
  --surface: #FFFFFF !important;
  --surface-2: #EFE7DC !important;
  --line: #E6DCCF !important;
  --ink: #231A14 !important;
  --ink-2: #6E6258 !important;
  --primary: #C25E3F !important;
  --brand: #9E4A2F !important;
  --success: #5E7F63 !important;
  --warn: #B98A2F !important;
  --accent: #B98A2F !important;
  --danger: #B54A42 !important;
  --radius: 14px !important;
  --radius-lg: 22px !important;
  --space: 8px !important;
  --ph: #7E7266;
  --primary-tint: #F4E3DA;
  --success-tint: #E3EBE2;
  --warn-tint: #F5ECD8;
  --danger-tint: #F5E0DE;
  --info: #56708A;
  --info-tint: #E3E9EF;
  --head: #231A14;
  --e1: 0 1px 2px rgba(35, 26, 20, 0.05);
  --e2: 0 8px 24px rgba(35, 26, 20, 0.08);
  --e3: 0 16px 48px rgba(35, 26, 20, 0.14);
  --nav-h: 84px;
}
body {
  background: var(--bg) !important;
  color: var(--ink) !important;
}
body.elder-mode[data-scale="1.6"] { --nav-h: 96px; }
body.elder-mode[data-scale="1.4"] { --nav-h: 90px; }

/* ---------- 13. P0-1 Entry card titles follow --fs-m (HANDOVER §8-3) -------- */
body.elder-mode .elder-main .sos-banner .sos-copy strong,
body.elder-mode .elder-main .sos-banner .sos-copy b,
body.elder-mode .elder-main .care-card .care-copy strong,
body.elder-mode .sos-banner .sos-copy strong,
body.elder-mode .sos-banner .sos-copy b,
body.elder-mode .care-card .care-copy strong {
  font-size: var(--fs-m) !important;
  line-height: 1.35 !important;
  font-weight: 700 !important;
}
body.elder-mode .elder-main .sos-banner .sos-copy span,
body.elder-mode .elder-main .care-card .care-copy span,
body.elder-mode .sos-banner .sos-copy span,
body.elder-mode .care-card .care-copy span {
  font-size: var(--fs-s) !important;
  line-height: 1.55 !important;
}

/* ---------- 14. P0-2 Child typography lift (HANDOVER §8-4) ------------------ */
body:not(.elder-mode) .q-card div span,
body:not(.elder-mode) .sec-sub { font-size: 14.5px !important; }
body:not(.elder-mode) .sp-mid span,
body:not(.elder-mode) .sp-loc,
body:not(.elder-mode) .fc-mid span,
body:not(.elder-mode) .sc-mid span,
body:not(.elder-mode) .gd-mid span,
body:not(.elder-mode) .appr-mid span,
body:not(.elder-mode) .dyn-mid span,
body:not(.elder-mode) .fm-mid span,
body:not(.elder-mode) .pd-mid span,
body:not(.elder-mode) .st-mid span,
body:not(.elder-mode) .rh-copy span,
body:not(.elder-mode) .f-mid span,
body:not(.elder-mode) .pf-mid span,
body:not(.elder-mode) .map-empty span,
body:not(.elder-mode) .conv-last,
body:not(.elder-mode) .bc-steps,
body:not(.elder-mode) .hint,
body:not(.elder-mode) .mini-btn,
body:not(.elder-mode) .btn-sm,
body:not(.elder-mode) .page-sub,
body:not(.elder-mode) .lead,
body:not(.elder-mode) .n-mid p,
body:not(.elder-mode) .n-readall,
body:not(.elder-mode) .n-tab,
body:not(.elder-mode) .fence-meta,
body:not(.elder-mode) .state-card span,
body:not(.elder-mode) .state-time,
body:not(.elder-mode) .field-tip,
body:not(.elder-mode) .empty.small p,
body:not(.elder-mode) .wsum-head span,
body:not(.elder-mode) .a-mid span,
body:not(.elder-mode) .bill-mid span,
body:not(.elder-mode) .g-mid span,
body:not(.elder-mode) .r-mid span,
body:not(.elder-mode) .fb-mid span,
body:not(.elder-mode) .h-mid span,
body:not(.elder-mode) .wr-cell span,
body:not(.elder-mode) .lc-mid span,
body:not(.elder-mode) .le-mid span,
body:not(.elder-mode) .t-mid span,
body:not(.elder-mode) .s-mid span,
body:not(.elder-mode) .s-main span,
body:not(.elder-mode) .tl-main span,
body:not(.elder-mode) .sk-right span,
body:not(.elder-mode) .s-copy span,
body:not(.elder-mode) .w-item span:not(.wi-ico),
body:not(.elder-mode) .pf-cell span,
body:not(.elder-mode) .rc-main span,
body:not(.elder-mode) .feed span,
body:not(.elder-mode) .st span,
body:not(.elder-mode) .ph-dose,
body:not(.elder-mode) .ph-exp,
body:not(.elder-mode) .s-main b,
body:not(.elder-mode) .w-score span,
body:not(.elder-mode) .sum-card span,
body:not(.elder-mode) .w-day b,
body:not(.elder-mode) .s-num,
body:not(.elder-mode) .mo2-head span,
body:not(.elder-mode) .r-text,
body:not(.elder-mode) .sum-head span,
body:not(.elder-mode) .it-copy p,
body:not(.elder-mode) .list-note,
body:not(.elder-mode) .d-line span,
body:not(.elder-mode) .fld span,
body:not(.elder-mode) .k-row label,
body:not(.elder-mode) .field label,
body:not(.elder-mode) .d-dose,
body:not(.elder-mode) .lc-note,
body:not(.elder-mode) .dim2,
body:not(.elder-mode) .led-copy p,
body:not(.elder-mode) .care-sug,
body:not(.elder-mode) .ann-who span,
body:not(.elder-mode) .msg-head span,
body:not(.elder-mode) .msg-by,
body:not(.elder-mode) .ph-note,
body:not(.elder-mode) .help3 p,
body:not(.elder-mode) .low-tip p,
body:not(.elder-mode) .pts-kv span,
body:not(.elder-mode) .pts-tip,
body:not(.elder-mode) .budget-tip,
body:not(.elder-mode) .lr-sub,
body:not(.elder-mode) .s-cell span,
body:not(.elder-mode) .advice,
body:not(.elder-mode) .alert-item,
body:not(.elder-mode) .lr-empty,
body:not(.elder-mode) .s-tip,
body:not(.elder-mode) .wrep-cell span,
body:not(.elder-mode) .wrep-advice,
body:not(.elder-mode) .td-note,
body:not(.elder-mode) .td-state,
body:not(.elder-mode) .ov-cell span,
body:not(.elder-mode) .tl-by,
body:not(.elder-mode) .gc-tip,
body:not(.elder-mode) .as-tips,
body:not(.elder-mode) .as-empty,
body:not(.elder-mode) .dl-tip,
body:not(.elder-mode) .empty-small,
body:not(.elder-mode) .rec-go,
body:not(.elder-mode) .vrec-tip,
body:not(.elder-mode) .tpl-item,
body:not(.elder-mode) .tpl-tab,
body:not(.elder-mode) .tpl-toggle,
body:not(.elder-mode) .tips,
body:not(.elder-mode) .tips3 p,
body:not(.elder-mode) .cal-arrow,
body:not(.elder-mode) .cal-cell,
body:not(.elder-mode) .flt button,
body:not(.elder-mode) .op-btn,
body:not(.elder-mode) .it-act,
body:not(.elder-mode) .sk-left span {
  font-size: 15.5px !important;
  line-height: 1.6 !important;
}
body:not(.elder-mode) .n-time,
body:not(.elder-mode) .ev-time,
body:not(.elder-mode) .o-time,
body:not(.elder-mode) .w-time,
body:not(.elder-mode) .tl-date,
body:not(.elder-mode) .w-date,
body:not(.elder-mode) .r-foot,
body:not(.elder-mode) .g-meta,
body:not(.elder-mode) .bar-label,
body:not(.elder-mode) .trend-legend,
body:not(.elder-mode) .cal-legend,
body:not(.elder-mode) .types-legend,
body:not(.elder-mode) .sd-date,
body:not(.elder-mode) .sd-score,
body:not(.elder-mode) .tl-main small { font-size: 14px !important; }
body:not(.elder-mode) .tag,
body:not(.elder-mode) .n-type,
body:not(.elder-mode) .inten-tag,
body:not(.elder-mode) .as-chip,
body:not(.elder-mode) .cat-chip,
body:not(.elder-mode) .gb-chip,
body:not(.elder-mode) .a-tag,
body:not(.elder-mode) .d-cat,
body:not(.elder-mode) .r-cat,
body:not(.elder-mode) .s-kind,
body:not(.elder-mode) .tl-kind,
body:not(.elder-mode) .a-kind,
body:not(.elder-mode) .wr-cat,
body:not(.elder-mode) .dt-tag,
body:not(.elder-mode) .care-tag,
body:not(.elder-mode) .sc-badge,
body:not(.elder-mode) .ph-badge,
body:not(.elder-mode) .fb-badge { font-size: 14px !important; }

/* ---------- 15. P0-4 Bottom nav: warm white island, clay-tint selected ------ */
body.elder-mode .elder-nav {
  background: rgba(255, 253, 250, 0.92) !important;
  border: 1px solid var(--line) !important;
  box-shadow: var(--e2) !important;
  backdrop-filter: blur(16px) !important;
  -webkit-backdrop-filter: blur(16px) !important;
  border-radius: 28px !important;
  bottom: calc(16px + env(safe-area-inset-bottom, 0px)) !important;
}
body.elder-mode .elder-nav button {
  color: var(--ink-2) !important;
  background: transparent !important;
  box-shadow: none !important;
  font-weight: 500 !important;
}
body.elder-mode .elder-nav button.on {
  color: var(--primary) !important;
  background: var(--primary-tint) !important;
  box-shadow: none !important;
  font-weight: 700 !important;
  border-radius: 999px !important;
}
body.elder-mode .elder-nav button.on:after { display: none !important; }

/* ---------- 16. P0-5 / P0-6 FAB + bottom safe area -------------------------- */
body.elder-mode .elder-main {
  padding-left: 20px !important;
  padding-right: 20px !important;
  padding-bottom: calc(var(--nav-h) + 16px + env(safe-area-inset-bottom, 0px) + 72px) !important;
}
body.elder-mode .gva-fab {
  background: #fff !important;
  color: var(--primary) !important;
  border: 1px solid var(--line) !important;
  box-shadow: var(--e2) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  width: 56px !important;
  height: 56px !important;
  bottom: calc(16px + env(safe-area-inset-bottom, 0px) + var(--nav-h) + 12px) !important;
  right: max(14px, calc(50% - 310px)) !important;
}
body.elder-mode .gva-fab-tip {
  color: var(--ink-2) !important;
}
body:not(.elder-mode) .mobile-nav,
body:not(.elder-mode) .child-shell .mobile-nav {
  /* keep existing geometry; add clay tint for selected if present */
}
body:not(.elder-mode) main,
body:not(.elder-mode) .child-main,
body:not(.elder-mode) .page-main {
  padding-bottom: calc(88px + env(safe-area-inset-bottom, 0px)) !important;
}

/* ---------- 17. P0-7 Cards / grid unify ------------------------------------- */
body.elder-mode .card,
body.elder-mode .entry-card,
body.elder-mode .care-card,
body.elder-mode .welcome.card,
body.elder-mode .progress-card,
body.elder-mode .med-card,
body.elder-mode .guard-banner,
body.elder-mode section.grid .g-card {
  background: var(--surface) !important;
  border: 1px solid var(--line) !important;
  border-radius: var(--radius) !important;
  box-shadow: var(--e1) !important;
}
body.elder-mode .care-card {
  border-radius: var(--radius) !important;
  min-height: 88px !important;
}
body.elder-mode section.grid .g-card .g-ico,
body.elder-mode .care-card .care-ico,
body.elder-mode .teach-ways .tw-ico {
  background: var(--primary-tint) !important;
  border-radius: 14px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
body.elder-mode section.grid .g-card .g-ico img,
body.elder-mode .care-card .care-ico img,
body.elder-mode .teach-ways .tw-img {
  max-width: 28px !important;
  max-height: 28px !important;
  object-fit: contain !important;
}

/* ---------- 18. P0-8 Hero banner denoise ------------------------------------ */
body.elder-mode .hero-banner {
  border-radius: var(--radius-lg) !important;
  background: var(--head) !important;
}
body.elder-mode .hero-banner video.hb-img,
body.elder-mode .hero-banner .hb-img {
  height: 110px !important;
  opacity: 0.55 !important;
  filter: saturate(0.75) brightness(0.85) !important;
}
body.elder-mode .hero-banner .hb-copy {
  position: relative !important;
  z-index: 1 !important;
  background: linear-gradient(180deg, transparent, rgba(35,26,20,.72)) !important;
  padding: 12px 16px 14px !important;
}
body.elder-mode .hero-banner .hb-title {
  color: #fff !important;
  font-size: var(--fs-l) !important;
  font-weight: 700 !important;
  letter-spacing: 0.02em !important;
}
body.elder-mode .hero-banner .hb-sub {
  color: rgba(255,255,255,.88) !important;
  font-size: var(--fs-s) !important;
}
body.elder-mode .welcome.card {
  background: var(--surface) !important;
  border: 1px solid var(--line) !important;
}
body.elder-mode .welcome.card .w-btn {
  background: var(--info-tint) !important;
  border: 1px solid var(--line) !important;
  box-shadow: none !important;
}

/* ---------- 19. P0-9 SOS unique gradient + solid primary buttons ------------ */
body.elder-mode .sos-banner {
  background: linear-gradient(135deg, #C25E3F, #9E4A2F) !important;
  border: none !important;
  border-radius: var(--radius-lg) !important;
  color: #fff !important;
  min-height: 88px !important;
  box-shadow: var(--e2) !important;
}
body.elder-mode .sos-banner .sos-copy,
body.elder-mode .sos-banner .sos-copy strong,
body.elder-mode .sos-banner .sos-copy span,
body.elder-mode .sos-banner .sos-copy b {
  color: #fff !important;
}
body.elder-mode .btn-primary,
body.elder-mode .mode-btn.on,
body.elder-mode .seg-btn.on {
  background: var(--primary) !important;
  color: #fff !important;
  border: none !important;
  border-radius: var(--radius) !important;
  box-shadow: none !important;
}
body.elder-mode .btn-primary:hover,
body.elder-mode .btn-primary:focus-visible {
  background: var(--brand) !important;
}
body.elder-mode .btn-primary:active {
  transform: translateY(1px);
}
body.elder-mode .btn-ghost,
body.elder-mode .btn-soft {
  background: var(--surface) !important;
  color: var(--ink) !important;
  border: 1px solid var(--line) !important;
  border-radius: var(--radius) !important;
}
body.elder-mode .btn:focus-visible,
body.elder-mode .btn-primary:focus-visible,
body.elder-mode .btn-ghost:focus-visible,
body.elder-mode .elder-nav button:focus-visible,
body.elder-mode input:focus-visible,
body.elder-mode textarea:focus-visible {
  outline: 3px solid rgba(194, 94, 63, 0.45) !important;
  outline-offset: 2px !important;
}

/* ---------- 20. P0-10 Chat bubbles ------------------------------------------ */
body.elder-mode .bubble {
  max-width: 78% !important;
  min-width: 4em !important;
  word-break: normal !important;
  overflow-wrap: anywhere !important;
  border-radius: 18px !important;
  padding: 12px 14px !important;
}
body.elder-mode .msg.me .bubble,
body.elder-mode .msg.mine .bubble,
body.elder-mode .msg.self .bubble,
body.elder-mode .bubble.me,
body.elder-mode .bubble.mine {
  background: var(--primary) !important;
  color: #fff !important;
  border: none !important;
}
body.elder-mode .msg.other .bubble,
body.elder-mode .msg.them .bubble,
body.elder-mode .bubble.other {
  background: var(--surface) !important;
  color: var(--ink) !important;
  border: 1px solid var(--line) !important;
}

/* ---------- 21. P0-11 Inputs / placeholders --------------------------------- */
body.elder-mode input::placeholder,
body.elder-mode textarea::placeholder,
body:not(.elder-mode) input::placeholder,
body:not(.elder-mode) textarea::placeholder {
  color: var(--ph) !important;
  opacity: 1 !important;
}
body.elder-mode input,
body.elder-mode textarea,
body.elder-mode .text-input {
  border: 1.5px solid var(--line) !important;
  border-radius: 12px !important;
  background: var(--surface) !important;
  color: var(--ink) !important;
}
body.elder-mode input:focus,
body.elder-mode textarea:focus,
body.elder-mode .text-input:focus {
  border-color: var(--primary) !important;
  box-shadow: 0 0 0 3px var(--primary-tint) !important;
}

/* ---------- 22. P0-12 Top-bar help clip fix --------------------------------- */
body.elder-mode .elder-top,
body.elder-mode .top-bar,
body.elder-mode .page-head,
body.elder-mode header.elder-header {
  padding-right: max(16px, env(safe-area-inset-right, 0px)) !important;
  box-sizing: border-box !important;
}
body.elder-mode .sos-btn,
body.elder-mode .help-pill,
body.elder-mode .top-help {
  flex-shrink: 0 !important;
}

/* ---------- 23. P0-13 Dialogs ----------------------------------------------- */
body.elder-mode .modal,
body.elder-mode .dialog,
body.elder-mode .sheet,
body.elder-mode .overlay-card,
body.elder-mode .sos-modal,
body.elder-mode .zj-dialog {
  background: var(--surface) !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--e3) !important;
  border: 1px solid var(--line) !important;
}
body.elder-mode .modal .btn,
body.elder-mode .dialog .btn,
body.elder-mode .sheet .btn,
body.elder-mode .sos-modal .btn {
  min-height: 56px !important;
  width: 100% !important;
  border-radius: var(--radius) !important;
}

/* ---------- 24. P0-14 Login page: form over poster -------------------------- */
.auth-page {
  background: var(--bg) !important;
}
.auth-page::before {
  display: none !important;
  content: none !important;
}
body:has(.auth-page) .auth-mobile-hero {
  display: none !important;
}
.auth-card {
  background: var(--surface) !important;
  border: 1px solid var(--line) !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--e2) !important;
}
.auth-card .field,
.auth-card input {
  background: var(--surface) !important;
}
.auth-card .btn-primary {
  background: var(--primary) !important;
  color: #fff !important;
  border-radius: var(--radius) !important;
  box-shadow: none !important;
}
.auth-card .role-switch {
  background: var(--surface-2) !important;
  border-radius: 999px !important;
  border: 1px solid var(--line) !important;
}
.auth-card .role-switch .on,
.auth-card .role-switch button.on {
  background: var(--surface) !important;
  color: var(--primary) !important;
  font-weight: 700 !important;
  box-shadow: var(--e1) !important;
}
@media (max-width: 768px) {
  .auth-page {
    background: var(--bg) !important;
  }
  .auth-page::before {
    display: none !important;
  }
  .auth-card {
    background: var(--surface) !important;
    border: 1px solid var(--line) !important;
    box-shadow: var(--e2) !important;
  }
}

/* ---------- 25. P0-15 Child home density ------------------------------------ */
body:not(.elder-mode) .hero-banner,
body:not(.elder-mode) .child-hero,
body:not(.elder-mode) .home-banner {
  max-height: 100px !important;
  overflow: hidden !important;
  opacity: 0.9 !important;
}
body:not(.elder-mode) .q-card {
  background: var(--surface) !important;
  border: 1px solid var(--line) !important;
  border-radius: var(--radius) !important;
  box-shadow: var(--e1) !important;
}
body:not(.elder-mode) .q-card img,
body:not(.elder-mode) .q-card .q-ico {
  width: 40px !important;
  height: 40px !important;
  object-fit: contain !important;
  background: var(--primary-tint) !important;
  border-radius: 12px !important;
  padding: 6px !important;
  box-sizing: border-box !important;
}
@media (min-width: 1200px) {
  body:not(.elder-mode) .q-grid,
  body:not(.elder-mode) .quick-grid,
  body:not(.elder-mode) .home-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  }
}

/* ---------- 26. Progress / check-in state colors ---------------------------- */
body.elder-mode .pr-item.done,
body.elder-mode .pr-item.is-done,
body.elder-mode .pr-item[data-done="1"] {
  background: var(--success-tint) !important;
  border: 1px solid #c9d7c8 !important;
}
body.elder-mode .pr-item {
  background: var(--surface-2) !important;
  border: 1.5px dashed var(--line) !important;
}

/* Legal footer: intentionally untouched (small compliant size). */

/* ======================================================================
   v548o — P1 layout polish + safe P2 (2026-11-02)
   Scope rules:
   - Route classes come from index.html hash sync: html.rt-<seg>-<seg>,
     html.rt-teach / rt-tutorial (teaching + brand/model pages), rt-nofab.
   - Nothing here targets .brand-hint / .model-item or any tutorial content;
     global rules are guarded with html:not(.rt-teach).
   ====================================================================== */

/* ---------- 27. Elder top bar: never clip the 求助 button ---------------- */
body.elder-mode .elder-top {
  gap: 10px !important;
}
body.elder-mode .elder-top .top-left {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  overflow: hidden !important;
}
body.elder-mode .elder-top .top-left .avatar-fallback {
  flex: 0 0 auto !important;
}
body.elder-mode .elder-top .top-name {
  min-width: 0 !important;
  overflow: hidden !important;
}
body.elder-mode .elder-top .top-name strong,
body.elder-mode .elder-top .top-sub {
  display: block !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
body.elder-mode .elder-top .sos-btn {
  flex: 0 0 auto !important;
  width: auto !important;
  min-width: max-content !important;
  max-width: none !important;
  margin-left: auto !important;
  white-space: nowrap !important;
}
@media (max-width: 480px) {
  body.elder-mode[data-scale] .elder-top .top-sub { display: none !important; }
}

/* ---------- 28. Elder home: PDF 9.2 order (greeting → 打卡 → SOS → …) ---- */
html.rt-elder-home body.elder-mode .elder-main > .page {
  display: flex !important;
  flex-direction: column !important;
  gap: 16px !important;
}
html.rt-elder-home body.elder-mode .elder-main > .page > * {
  margin-top: 0 !important;
  margin-bottom: 0 !important;
}
html.rt-elder-home body.elder-mode .elder-main > .page > .modal-mask { order: 999; }
/* hero banner duplicates the greeting → removed from the first screen */
html.rt-elder-home body.elder-mode .elder-main > .page > .hero-banner { display: none !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .welcome       { order: 10; }
html.rt-elder-home body.elder-mode .elder-main > .page > .big-day       { order: 12; }
html.rt-elder-home body.elder-mode .elder-main > .page > .bind-tip      { order: 14; }
html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { order: 20; }
html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner    { order: 30; }
html.rt-elder-home body.elder-mode .elder-main > .page > .care-row      { order: 40; }
html.rt-elder-home body.elder-mode .elder-main > .page > .med-card      { order: 42; }
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row    { order: 50; }
html.rt-elder-home body.elder-mode .elder-main > .page > .love-card     { order: 52; }
html.rt-elder-home body.elder-mode .elder-main > .page > .morning       { order: 54; }
html.rt-elder-home body.elder-mode .elder-main > .page > .dyn-row       { order: 56; }
html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat    { order: 60; }
html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner  { order: 65; }
html.rt-elder-home body.elder-mode .elder-main > .page > .zg-search     { order: 80; }
html.rt-elder-home body.elder-mode .elder-main > .page > .grid          { order: 90; }

/* Greeting = first visual layer (ink header card, PDF 9.2) */
html.rt-elder-home body.elder-mode .page > .welcome {
  background: var(--head) !important;
  background-image: none !important;
  color: #fff !important;
  border: 0 !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--e2) !important;
  padding: 20px 20px 18px !important;
}
html.rt-elder-home body.elder-mode .page > .welcome::before,
html.rt-elder-home body.elder-mode .page > .welcome::after { display: none !important; }
html.rt-elder-home body.elder-mode .page > .welcome h2 {
  color: #fff !important;
  font-size: var(--fs-xl, 30px) !important;
  line-height: 1.25 !important;
  margin: 0 0 6px !important;
}
html.rt-elder-home body.elder-mode .page > .welcome .big-date,
html.rt-elder-home body.elder-mode .page > .welcome .big-date strong {
  color: rgba(255, 255, 255, .82) !important;
  font-weight: 600 !important;
}
html.rt-elder-home body.elder-mode .page > .welcome .wx-temp { color: #fff !important; }
html.rt-elder-home body.elder-mode .page > .welcome .wx-meta { color: rgba(255, 255, 255, .82) !important; }
html.rt-elder-home body.elder-mode .page > .welcome .dress-tip {
  display: inline-block !important;
  background: rgba(255, 255, 255, .12) !important;
  color: #fff !important;
  border: 0 !important;
  border-radius: 12px !important;
  padding: 6px 12px !important;
  margin-top: 8px !important;
}
html.rt-elder-home body.elder-mode .page > .welcome .w-btn {
  background: rgba(255, 255, 255, .10) !important;
  border: 0 !important;
  box-shadow: none !important;
}

/* 今日打卡: grid tiles, done vs. undone at a glance */
html.rt-elder-home body.elder-mode .progress-card .pr-head {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  flex-wrap: wrap !important;
  margin-bottom: 12px !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-head .pr-sub { margin-left: auto !important; }
html.rt-elder-home body.elder-mode .progress-card .zj-pr-count {
  order: 1;
  background: var(--success-tint) !important;
  color: var(--success) !important;
  font-weight: 700 !important;
  font-size: var(--fs-s, 17px) !important;
  border-radius: 999px !important;
  padding: 2px 12px !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-head .pr-sub { order: 2; }
@media (max-width: 480px) {
  html.rt-elder-home body.elder-mode .progress-card .pr-head .pr-sub { display: none !important; }
}
html.rt-elder-home body.elder-mode .progress-card .pr-row {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  gap: 10px !important;
  overflow: visible !important;
  width: 100% !important;
}
@media (min-width: 560px) {
  html.rt-elder-home body.elder-mode .progress-card .pr-row { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
}
html.rt-elder-home body.elder-mode .progress-card .pr-item {
  position: relative !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 6px !important;
  min-width: 0 !important;
  width: auto !important;
  padding: 12px 6px 10px !important;
  border-radius: var(--radius) !important;
  background: var(--surface-2) !important;
  border: 2px dashed var(--line) !important;
  box-shadow: none !important;
  text-align: center !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-ring {
  width: 56px !important;
  height: 56px !important;
  flex: 0 0 auto !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-ring-in { width: 46px !important; height: 46px !important; }
html.rt-elder-home body.elder-mode .progress-card .pr-ico { width: 30px !important; height: 30px !important; }
html.rt-elder-home body.elder-mode .progress-card .pr-name {
  font-size: var(--fs-m, 20px) !important;
  line-height: 1.2 !important;
  color: var(--ink) !important;
  white-space: nowrap !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-state {
  font-size: calc(var(--fs-s, 17px) * .86) !important;
  line-height: 1.25 !important;
  color: var(--ink-2) !important;
  word-break: break-all !important;
}
/* doing */
html.rt-elder-home body.elder-mode .progress-card .pr-item:has(.pr-state.doing),
html.rt-elder-home body.elder-mode .progress-card .pr-item[data-zj-state="doing"] {
  border-style: solid !important;
  border-color: var(--primary-tint) !important;
  background: var(--surface) !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-state.doing { color: var(--primary) !important; font-weight: 700 !important; }
/* done */
html.rt-elder-home body.elder-mode .progress-card .pr-item:has(.pr-state.done),
html.rt-elder-home body.elder-mode .progress-card .pr-item:has(.pr-ring[style*="success"]),
html.rt-elder-home body.elder-mode .progress-card .pr-item[data-zj-state="done"] {
  border: 2px solid var(--success) !important;
  background: var(--success-tint) !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-item:has(.pr-state.done)::after,
html.rt-elder-home body.elder-mode .progress-card .pr-item:has(.pr-ring[style*="success"])::after,
html.rt-elder-home body.elder-mode .progress-card .pr-item[data-zj-state="done"]::after {
  content: "✓";
  position: absolute;
  top: 6px;
  right: 6px;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--success);
  color: #fff;
  font-size: 15px;
  line-height: 24px;
  font-weight: 800;
  text-align: center;
}
html.rt-elder-home body.elder-mode .progress-card .pr-state.done { color: var(--success) !important; font-weight: 700 !important; }

/* Family row as one card (PDF: 家人单卡) */
html.rt-elder-home body.elder-mode .page > .family-row {
  background: var(--surface) !important;
  border: 1px solid var(--line) !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--e1) !important;
  padding: 14px !important;
  gap: 12px !important;
}
html.rt-elder-home body.elder-mode .family-row .f-card {
  background: var(--surface-2) !important;
  border: 0 !important;
  box-shadow: none !important;
}

/* 常用入口 density: horizontal tiles, 2 cols at big scale, 3 otherwise */
html.rt-elder-home body.elder-mode .page > .grid {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  gap: 10px !important;
}
html.rt-elder-home body.elder-mode[data-scale="1.4"] .page > .grid,
html.rt-elder-home body.elder-mode[data-scale="1.6"] .page > .grid,
html.rt-elder-home body.elder-mode[data-scale="1.8"] .page > .grid,
html.rt-elder-home body.elder-mode[data-scale="2"] .page > .grid {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
html.rt-elder-home body.elder-mode .page > .grid .g-card .g-label {
  white-space: normal !important;
  word-break: break-all !important;
  line-height: 1.25 !important;
  overflow: visible !important;
  text-overflow: clip !important;
}
html.rt-elder-home body.elder-mode .page > .grid .zg-more {
  grid-column: 1 / -1 !important;
}
html.rt-elder-home body.elder-mode .page > .grid .g-card {
  position: relative !important;
  min-height: 0 !important;
  height: auto !important;
  padding: 14px 8px 12px !important;
  gap: 8px !important;
  justify-content: flex-start !important;
}
html.rt-elder-home body.elder-mode .page > .grid .g-card .g-ico { margin: 0 auto !important; }
html.rt-elder-home body.elder-mode .page > .grid .g-card .zg-pin {
  position: absolute !important;
  top: 4px !important;
  right: 4px !important;
  margin: 0 !important;
  width: 36px !important;
  height: 36px !important;
  min-height: 0 !important;
  line-height: 36px !important;
  padding: 0 !important;
  font-size: 18px !important;
}

/* ---------- 29. FAB / nav avoidance on dial, SOS, forms, sims ----------- */
html.rt-nofab body.elder-mode .gva,
html.rt-nofab body.elder-mode .gva-fab,
html.rt-nofab .global-voice { display: none !important; }
body.elder-mode .gva-fab .gva-fab-tip { display: none !important; }
body.elder-mode .gva-fab .zj-fab-toggle {
  width: 26px !important;
  height: 26px !important;
  top: -6px !important;
  right: -6px !important;
}
html.rt-elder-dial body.elder-mode .elder-nav,
html.rt-elder-dialer body.elder-mode .elder-nav,
html.rt-elder-sos body.elder-mode .elder-nav { display: none !important; }
html.rt-elder-dial body.elder-mode .elder-main,
html.rt-elder-dialer body.elder-mode .elder-main,
html.rt-elder-sos body.elder-mode .elder-main { padding-bottom: 24px !important; }

/* ---------- 30. Child home: banner → text page header ------------------- */
html.rt-child-home .child-main .page > .hero-banner {
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  background: none !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 4px 2px 0 !important;
  margin: 0 0 4px !important;
  max-width: none !important;
  width: auto !important;
  overflow: visible !important;
  opacity: 1 !important;
}
html.rt-child-home .child-main .page > .hero-banner .hb-img,
html.rt-child-home .child-main .page > .hero-banner video,
html.rt-child-home .child-main .page > .hero-banner::before,
html.rt-child-home .child-main .page > .hero-banner::after { display: none !important; }
html.rt-child-home .child-main .page > .hero-banner .hb-copy {
  position: static !important;
  inset: auto !important;
  background: none !important;
  padding: 0 !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 4px !important;
  transform: none !important;
  border: 0 !important;
  margin: 0 !important;
  align-items: flex-start !important;
  text-align: left !important;
}
html.rt-child-home .child-main .page > .hero-banner .hb-title {
  color: var(--head) !important;
  font-size: 22px !important;
  font-weight: 800 !important;
  text-shadow: none !important;
}
html.rt-child-home .child-main .page > .hero-banner .hb-sub {
  color: var(--ink-2) !important;
  font-size: 15.5px !important;
  text-shadow: none !important;
}
html.rt-child-home .child-main .page { font-size: 15.5px; }
html.rt-child-home .child-main .page .card p,
html.rt-child-home .child-main .page .appr-item,
html.rt-child-home .child-main .page .gd-mid span { font-size: 15.5px !important; }

/* Unified cards */
html.rt-child-home .child-main .page > .card,
html.rt-child-home .child-main .stat-card,
html.rt-child-home .child-main .gd-card {
  border-radius: var(--radius-lg) !important;
  border: 1px solid var(--line) !important;
  box-shadow: var(--e1) !important;
  background: var(--surface) !important;
}

/* Quick grid: tiles, 3 cols narrow / 4 cols wide; groups from patch-549 */
html.rt-child-home .child-main .quick-grid {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  gap: 10px !important;
}
@media (min-width: 600px) {
  html.rt-child-home .child-main .quick-grid { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
}
html.rt-child-home .child-main .quick-grid .q-card {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: flex-start !important;
  text-align: center !important;
  gap: 8px !important;
  min-width: 0 !important;
  min-height: 104px !important;
  padding: 14px 8px 12px !important;
  border-radius: var(--radius) !important;
  border: 1px solid var(--line) !important;
  background: var(--surface) !important;
  box-shadow: none !important;
}
html.rt-child-home .child-main .quick-grid .q-card > svg { display: none !important; }
html.rt-child-home .child-main .quick-grid .q-card .q-ico {
  width: 44px !important;
  height: 44px !important;
  margin: 0 !important;
  border-radius: 12px !important;
  background: var(--primary-tint) !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: 0 0 auto !important;
}
html.rt-child-home .child-main .quick-grid .q-card .q-ico { padding: 0 !important; }
html.rt-child-home .child-main .quick-grid .q-card .q-img { width: 30px !important; height: 30px !important; padding: 0 !important; max-width: none !important; }
html.rt-child-home .child-main .quick-grid .q-card strong {
  display: block !important;
  font-size: 15.5px !important;
  line-height: 1.3 !important;
  color: var(--ink) !important;
  word-break: break-all !important;
}
html.rt-child-home .child-main .quick-grid .q-card div > span {
  display: block !important;
  font-size: 13px !important;
  color: var(--ink-3) !important;
  line-height: 1.3 !important;
}
@media (max-width: 599px) {
  html.rt-child-home .child-main .quick-grid .q-card div > span { display: none !important; }
}
html.rt-child-home .child-main .quick-grid .zcg-head {
  grid-column: 1 / -1;
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 12px 2px 0;
  border: 0;
  background: none;
  font: inherit;
  text-align: left;
  color: var(--ink);
}
html.rt-child-home .child-main .quick-grid .zcg-head strong { font-size: 18px; font-weight: 800; color: var(--head); }
html.rt-child-home .child-main .quick-grid .zcg-head .zcg-st { font-size: 14px; color: var(--ink-2); }
html.rt-child-home .child-main .quick-grid .zcg-head .zcg-tg {
  margin-left: auto;
  min-height: 40px;
  padding: 0 14px;
  border-radius: 999px;
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--primary);
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
}
html.rt-child-home .child-main .quick-grid .q-card.zcg-fold { display: none !important; }

/* ---------- 31. Dialogs: r-22, stacked full-width buttons, 48px close -- */
html:not(.rt-teach) .modal-mask > .modal {
  position: relative !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--e3) !important;
}
html:not(.rt-teach) .modal .sos-actions {
  display: flex !important;
  flex-direction: column-reverse !important;
  gap: 10px !important;
  width: 100% !important;
}
html:not(.rt-teach) .modal .sos-actions .btn {
  width: 100% !important;
  margin: 0 !important;
  min-height: 56px !important;
  border-radius: var(--radius) !important;
}
html:not(.rt-teach) .modal .zj-modal-x {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: 0;
  background: var(--surface-2);
  color: var(--ink-2);
  font-size: 28px;
  line-height: 48px;
  text-align: center;
  padding: 0;
  cursor: pointer;
  z-index: 5;
}
html:not(.rt-teach) .modal .zj-modal-x:hover { color: var(--ink); background: var(--line); }
html:not(.rt-teach) .modal .zj-modal-x:focus-visible { outline: 3px solid var(--primary); outline-offset: 2px; }

html:not(.rt-teach) .modal > .modal-head > button:last-child {
  min-width: 48px !important;
  min-height: 48px !important;
}

/* ---------- 31b. Login: solid form card over the poster (poster kept) -- */
html.rt-auth .auth-page .auth-card {
  background: var(--surface) !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
  border: 1px solid var(--line) !important;
  box-shadow: var(--e3) !important;
}
html.rt-auth .auth-page .auth-card .field {
  background: transparent !important;
}
html.rt-auth .auth-page .auth-card .field label {
  font-size: 15.5px !important;
  color: var(--ink) !important;
  font-weight: 600 !important;
}
html.rt-auth .auth-page .auth-mobile-brand {
  background: var(--surface) !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}

@media (min-width: 881px) {
  html.rt-auth .auth-page .auth-footer,
  html.rt-auth .auth-page .auth-footer a,
  html.rt-auth .auth-page .auth-footer span {
    color: var(--ink-3) !important;
    text-shadow: none !important;
  }
}

/* ---------- 32. P2: empty states (common classes only) ----------------- */
html:not(.rt-teach) .page .empty,
html:not(.rt-teach) .page .fam-empty {
  text-align: center !important;
  color: var(--ink-2) !important;
  background: var(--surface-2) !important;
  border: 1.5px dashed var(--line) !important;
  border-radius: var(--radius) !important;
  padding: 22px 16px !important;
}
html:not(.rt-teach) .page .empty.small { padding: 14px 12px !important; font-size: 15px !important; }

/* ---------- 33. P2: desktop elder — quiet paper sides ------------------- */
@media (min-width: 900px) {
  html.rt-elder:not(.rt-teach) body.elder-mode {
    background-color: var(--bg) !important;
    background-image: radial-gradient(rgba(35, 26, 20, .045) 1px, transparent 1.2px) !important;
    background-size: 18px 18px !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app {
    background: var(--bg) !important;
    box-shadow: 0 0 0 1px var(--line), var(--e2) !important;
  }
}
/* end v548o */

/* ==========================================================================
   v548p (2026-11-02)  Desktop landscape shell + voice panel anchoring
   - ≥1024px: elder app becomes a landscape shell (top bar / left nav rail /
     wide content), max 1200px. Phones (<1024) keep the portrait column.
   - Elder home ≥1024: 12-col dashboard grid (greeting / 打卡 full width,
     SOS + 报平安 + 待办 on one row, family + guard, 常用 4 cols).
   - Child ≥1200: content centered (max 1120), stat+guard in one row,
     quick entries as horizontal tiles.
   - Voice FAB pinned to the content shell corner; .global-voice (需要帮忙?)
     anchored above the FAB by patch-549.js (CSS fallback below).
   ========================================================================== */

/* ---------- 34. Elder desktop shell (≥1024) ---------------------------- */
@media (min-width: 1024px) {
  body.elder-mode { --zj-shell: min(1200px, calc(100% - 48px)); --zj-rail: 216px; }
  body.elder-mode .elder-app {
    display: grid !important;
    grid-template-columns: var(--zj-rail) minmax(0, 1fr) !important;
    grid-template-rows: auto 1fr !important;
    grid-template-areas: "top top" "nav main" !important;
    column-gap: 28px !important;
    width: min(1200px, calc(100% - 48px)) !important;
    max-width: 1200px !important;
    margin-inline: auto !important;
    padding: 0 28px !important;
    box-sizing: border-box !important;
    align-items: start !important;
  }
  body.elder-mode .elder-app > .elder-top { grid-area: top !important; padding-left: 4px !important; padding-right: 4px !important; }
  body.elder-mode .elder-app > .elder-main {
    grid-area: main !important;
    min-width: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    padding-top: 4px !important;
    padding-bottom: 56px !important;
  }
  body.elder-mode .elder-app > .gva { grid-area: main !important; }
  /* bottom capsule → left rail */
  body.elder-mode .elder-app > .elder-nav {
    grid-area: nav !important;
    position: sticky !important;
    top: 112px !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
    width: auto !important;
    max-width: none !important;
    height: auto !important;
    margin: 4px 0 0 !important;
    padding: 10px !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 6px !important;
    border-radius: 22px !important;
    background: var(--surface) !important;
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
    border: 1px solid var(--line) !important;
    box-shadow: var(--e1) !important;
  }
  body.elder-mode .elder-app > .elder-nav button {
    flex: 0 0 auto !important;
    flex-direction: row !important;
    justify-content: flex-start !important;
    align-items: center !important;
    gap: 14px !important;
    height: auto !important;
    min-height: 60px !important;
    padding: 10px 18px !important;
    border-radius: 16px !important;
    font-size: var(--fs-s, 18px) !important;
    text-align: left !important;
  }
  body.elder-mode .elder-app > .elder-nav button .nav-label { font-size: inherit !important; line-height: 1.2 !important; }
  body.elder-mode .elder-app > .elder-nav button svg { width: 28px !important; height: 28px !important; flex: 0 0 auto !important; }
  body.elder-mode .elder-app > .elder-nav button:not(.on):hover { background: var(--surface-2) !important; color: var(--ink) !important; }
  body.elder-mode .elder-app > .elder-nav button.on { border-radius: 16px !important; }
  /* routes that hide the nav on phones keep hiding it */
  html.rt-elder-dial body.elder-mode .elder-app > .elder-nav,
  html.rt-elder-dialer body.elder-mode .elder-app > .elder-nav,
  html.rt-elder-sos body.elder-mode .elder-app > .elder-nav { display: none !important; }
  html.rt-elder-dial body.elder-mode .elder-app > .elder-main,
  html.rt-elder-dialer body.elder-mode .elder-app > .elder-main,
  html.rt-elder-sos body.elder-mode .elder-app > .elder-main { grid-column: 1 / -1 !important; }

  /* shell surface: the whole app is one sheet, not a phone strip */
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app,
  body.elder-mode .elder-app {
    background: transparent !important;
    box-shadow: none !important;
    min-height: 100vh !important;
  }
  html.rt-elder body.elder-mode {
    background-image: none !important;
    background-color: var(--bg) !important;
  }
  body.elder-mode .elder-top {
    background: linear-gradient(var(--bg) 78%, rgba(246, 241, 234, 0)) !important;
  }

  /* teaching / sims: keep the proven phone-width content, centred in main */
  html.rt-teach body.elder-mode .elder-app > .elder-main > * {
    max-width: 760px !important;
    margin-left: auto !important;
    margin-right: auto !important;
  }
  html.rt-sim body.elder-mode .elder-app > .elder-main > * { max-width: 620px !important; }

  /* voice FAB: bottom-right corner of the content shell */
  body.elder-mode .gva-fab {
    right: calc((100% - min(1200px, calc(100% - 48px))) / 2 + 28px) !important;
    bottom: calc(28px + env(safe-area-inset-bottom, 0px)) !important;
  }
  /* fallback for the help stack before patch-549 anchors it */
  body.elder-mode .global-voice {
    right: calc((100% - min(1200px, calc(100% - 48px))) / 2 + 28px) !important;
    bottom: calc(28px + 56px + 14px) !important;
  }
  /* generic pages: two-up cards where a page is just a stack of cards */
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-main > .page { max-width: none !important; }
}

/* ---------- 35. Elder home dashboard (≥1024) --------------------------- */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page {
    display: grid !important;
    grid-template-columns: repeat(12, minmax(0, 1fr)) !important;
    gap: 20px !important;
    align-items: stretch !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > * { grid-column: 1 / -1 !important; min-width: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .modal-mask { grid-column: auto !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner {
    grid-column: span 6 !important;
    min-height: 0 !important;
    padding-top: 24px !important;
    padding-bottom: 24px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row {
    grid-column: span 6 !important;
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 14px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > * { margin: 0 !important; min-width: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { grid-column: span 7 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { grid-column: span 5 !important; order: 51 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .med-card { grid-column: span 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .love-card { grid-column: span 6 !important; }
  html.rt-elder-home body.elder-mode .page > .grid,
  html.rt-elder-home body.elder-mode[data-scale] .page > .grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 14px !important;
  }
  html.rt-elder-home body.elder-mode .progress-card .pr-row { gap: 14px !important; }
}
@media (min-width: 1024px) and (max-width: 1199px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner { grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row { grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode[data-scale="1.6"] .page > .grid,
  html.rt-elder-home body.elder-mode[data-scale="1.8"] .page > .grid,
  html.rt-elder-home body.elder-mode[data-scale="2"] .page > .grid { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}

/* ---------- 36. Child desktop (≥1200): centred wide content ------------- */
@media (min-width: 1200px) {
  body:not(.elder-mode) .child-shell .main-col > .topbar,
  body:not(.elder-mode) .child-shell .main-col > .child-main {
    max-width: 1120px !important;
    margin-left: auto !important;
    margin-right: auto !important;
    box-sizing: border-box !important;
  }
  body:not(.elder-mode) .child-shell .main-col > .topbar { width: 100% !important; }
  html.rt-child-home .child-main > .page {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    column-gap: 16px !important;
    row-gap: 16px !important;
  }
  html.rt-child-home .child-main > .page > * { grid-column: 1 / -1 !important; margin: 0 !important; min-width: 0 !important; }
  html.rt-child-home .child-main > .page > .stat-grid,
  html.rt-child-home .child-main > .page > .guard-row { grid-column: span 1 !important; }
  html.rt-child-home .child-main .stat-grid,
  html.rt-child-home .child-main .guard-row { gap: 16px !important; }
  html.rt-child-home .child-main .quick-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 12px !important;
  }
  html.rt-child-home .child-main .quick-grid .q-card {
    flex-direction: row !important;
    align-items: center !important;
    text-align: left !important;
    gap: 14px !important;
    min-height: 76px !important;
    padding: 14px 16px !important;
    transition: border-color .15s, box-shadow .15s, transform .15s !important;
  }
  html.rt-child-home .child-main .quick-grid .q-card > div { min-width: 0 !important; flex: 1 1 auto !important; }
  html.rt-child-home .child-main .quick-grid .q-card div > span {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    margin-top: 2px !important;
    font-size: 13.5px !important;
  }
  html.rt-child-home .child-main .quick-grid .q-card:hover {
    border-color: rgba(194, 94, 63, .35) !important;
    box-shadow: var(--e2) !important;
  }
  html.rt-child-home .child-main .quick-grid .q-card:active { transform: translateY(1px) !important; }
}
@media (min-width: 1440px) {
  html.rt-child-home .child-main .quick-grid { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
}

/* §37 (≥1024) 教学横幅限高 + 语音小帮手标签移到按钮左侧，不压内容 */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .teach-feat .teach-banner > img {
    height: 300px !important;
    max-height: 300px !important;
    width: 100% !important;
    object-fit: cover !important;
    object-position: center 35% !important;
  }
  body .global-voice .vl-btn .vl-tip {
    position: absolute !important;
    left: auto !important;
    right: calc(100% + 10px) !important;
    top: 50% !important;
    bottom: auto !important;
    transform: translateY(-50%) !important;
    white-space: nowrap !important;
    background: #fff !important;
    color: var(--ink, #2b211c) !important;
    padding: 4px 10px !important;
    border-radius: 999px !important;
    box-shadow: 0 2px 8px rgba(60, 40, 20, .12) !important;
    font-size: 14px !important;
    line-height: 1.4 !important;
  }
}
/* end v548p */

/* ==========================================================================
   §v548q (2026-11-02)  Visual rescue P0  (append-only, overrides §34–§37)
   1. Greeting card: light clay-tint paper, dark ink text (no more ink-black)
   2. Photos: no dim/desaturate filters; caption = light paper strip
   3. Desktop ≥1024: wider paper sheet (≤1440), NO left rail – warm-white
      floating bottom island like phones; wider dashboard
   4. Single voice FAB (drag restored in patch-549) → one 需要帮忙 panel
   5. Child desktop: centred wider shell; SOS strip = danger tint
   6. ICP footer back in page flow (never floats over content)
   Teaching / *-sim content untouched (rt-teach guarded).
   ========================================================================== */

/* ---------- q1. Greeting: light card, dark text ------------------------- */
html.rt-elder-home body.elder-mode .page > .welcome {
  background: linear-gradient(135deg, #FBF1EA 0%, #F4E3DA 100%) !important;
  background-image: linear-gradient(135deg, #FBF1EA 0%, #F4E3DA 100%) !important;
  color: var(--ink) !important;
  border: 1px solid #EBD5C8 !important;
  box-shadow: var(--e1) !important;
  padding: 18px 20px 16px !important;
}
html.rt-elder-home body.elder-mode .page > .welcome h2 { color: var(--ink) !important; }
html.rt-elder-home body.elder-mode .page > .welcome .big-date,
html.rt-elder-home body.elder-mode .page > .welcome .big-date strong,
html.rt-elder-home body.elder-mode .page > .welcome .wx-meta,
html.rt-elder-home body.elder-mode .page > .welcome .dim { color: var(--ink-2) !important; }
html.rt-elder-home body.elder-mode .page > .welcome .wx-temp { color: var(--brand) !important; }
html.rt-elder-home body.elder-mode .page > .welcome .dress-tip {
  background: rgba(255, 255, 255, .72) !important;
  color: var(--ink) !important;
  border: 1px solid #EBD5C8 !important;
}
html.rt-elder-home body.elder-mode .page > .welcome .w-btn {
  background: rgba(255, 255, 255, .78) !important;
  border: 1px solid #EBD5C8 !important;
  box-shadow: none !important;
}
html.rt-elder-home body.elder-mode .page > .welcome .w-btn::before,
html.rt-elder-home body.elder-mode .page > .welcome .w-btn::after { display: none !important; }
@media (max-width: 600px) {
  html.rt-elder-home body.elder-mode .page > .welcome { padding: 14px 16px 12px !important; }
  html.rt-elder-home body.elder-mode .page > .welcome h2 { margin-bottom: 2px !important; }
}

/* ---------- q2. Photos: natural brightness, light caption --------------- */
body.elder-mode .hero-banner { background: var(--surface-2) !important; }
body.elder-mode .hero-banner video.hb-img,
body.elder-mode .hero-banner .hb-img {
  opacity: 1 !important;
  filter: none !important;
  object-fit: cover !important;
}
body.elder-mode .hero-banner .hb-copy {
  background: rgba(255, 252, 248, .9) !important;
  -webkit-backdrop-filter: blur(6px) !important;
  backdrop-filter: blur(6px) !important;
}
body.elder-mode .hero-banner .hb-title { color: var(--ink) !important; }
body.elder-mode .hero-banner .hb-sub { color: var(--ink-2) !important; }
html:not(.rt-teach) body.elder-mode .teach-feat .teach-banner::after { display: none !important; }
html:not(.rt-teach) body.elder-mode .teach-feat .teach-banner > img {
  filter: none !important;
  opacity: 1 !important;
  object-fit: cover !important;
}
html:not(.rt-teach) body.elder-mode .teach-feat .teach-banner .teach-copy {
  background: rgba(255, 252, 248, .92) !important;
  -webkit-backdrop-filter: blur(6px) !important;
  backdrop-filter: blur(6px) !important;
  color: var(--ink) !important;
  border-top: 1px solid rgba(230, 220, 207, .8) !important;
}
html:not(.rt-teach) body.elder-mode .teach-feat .teach-banner .teach-copy h3 { color: var(--ink) !important; text-shadow: none !important; }
html:not(.rt-teach) body.elder-mode .teach-feat .teach-banner .teach-copy p { color: var(--ink-2) !important; text-shadow: none !important; }
html:not(.rt-teach) body.elder-mode .teach-feat .teach-banner .teach-copy b { color: var(--primary) !important; text-shadow: none !important; }

/* ---------- q3. Single voice FAB + one help panel ----------------------- */
body.elder-mode .gva-fab { touch-action: none !important; cursor: grab; }
body.elder-mode .gva-fab.zj-dragging { cursor: grabbing; transition: none !important; }
body.elder-mode .gva-fab .zj-fab-toggle,
body.elder-mode .global-voice > .gv-help,
body.elder-mode .global-voice > .voice-launcher { display: none !important; }
body.elder-mode .global-voice.zj-fab-open {
  width: 0 !important;
  height: 0 !important;
  gap: 0 !important;
  overflow: visible !important;
}
body.elder-mode .global-voice > .gv-panel {
  position: absolute !important;
  right: 0 !important;
  left: auto !important;
  bottom: 0 !important;
  top: auto !important;
  width: min(340px, calc(100vw - 24px)) !important;
  box-sizing: border-box !important;
  padding: 16px !important;
  background: #FFFDFA !important;
  border: 1px solid var(--line) !important;
  border-radius: 22px !important;
  box-shadow: var(--e3) !important;
  color: var(--ink) !important;
}
body.elder-mode .global-voice[data-zj-side="left"] > .gv-panel { left: 0 !important; right: auto !important; }
body.elder-mode .global-voice[data-zj-below="1"] > .gv-panel { top: 0 !important; bottom: auto !important; }
body.elder-mode .global-voice > .gv-panel .gv-p-title {
  display: block !important;
  font-size: 20px !important;
  font-weight: 800 !important;
  color: var(--ink) !important;
  margin: 2px 4px 12px !important;
}
body.elder-mode .global-voice > .gv-panel .gv-item {
  display: flex !important;
  align-items: center !important;
  width: 100% !important;
  min-height: 60px !important;
  margin: 0 0 10px !important;
  padding: 10px 14px !important;
  border-radius: 16px !important;
  background: var(--surface-2) !important;
  border: 1px solid transparent !important;
  color: var(--ink) !important;
  text-align: left !important;
  font-size: 19px !important;
  font-weight: 700 !important;
  line-height: 1.3 !important;
  cursor: pointer;
}
body.elder-mode .global-voice > .gv-panel .gv-item:last-child { margin-bottom: 0 !important; }
body.elder-mode .global-voice > .gv-panel .gv-item:hover { border-color: rgba(194, 94, 63, .35) !important; background: var(--primary-tint) !important; }
body.elder-mode .global-voice > .gv-panel .gv-item > span { display: block !important; font-size: inherit !important; color: var(--ink) !important; }
body.elder-mode .global-voice > .gv-panel .gv-item small {
  display: block !important;
  margin-top: 2px !important;
  font-size: 16px !important;
  font-weight: 500 !important;
  color: var(--ink-2) !important;
}
body.elder-mode .global-voice > .gv-panel .gv-item.zj-gv-voice { background: var(--primary-tint) !important; }
body.elder-mode .global-voice > .gv-panel .gv-item.zj-gv-voice > span { color: var(--brand) !important; }

/* ---------- q4. ICP footer: in page flow, never floating ---------------- */
body.elder-mode .icp-footer {
  position: static !important;
  transform: none !important;
  z-index: 0 !important;
  background: transparent !important;
  text-align: center !important;
  padding: 4px 0 calc(var(--nav-h, 84px) + 28px) !important;
  margin: 0 !important;
  pointer-events: auto !important;
}

/* ---------- q5. Desktop elder (≥1024): wide paper sheet, bottom island --- */
@media (min-width: 1024px) {
  html.rt-elder body.elder-mode,
  body.elder-mode {
    background-color: #EEE6DA !important;
    background-image: none !important;
  }
  body.elder-mode .elder-app,
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app {
    display: block !important;
    grid-template-columns: none !important;
    grid-template-areas: none !important;
    width: min(1440px, calc(100% - 32px)) !important;
    max-width: 1440px !important;
    margin: 0 auto !important;
    padding: 0 36px !important;
    box-sizing: border-box !important;
    background: #FAF6F0 !important;
    box-shadow: 0 0 0 1px var(--line), 0 10px 40px rgba(35, 26, 20, .06) !important;
    min-height: 100vh !important;
  }
  body.elder-mode .elder-top {
    background: linear-gradient(#FAF6F0 78%, rgba(250, 246, 240, 0)) !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
  body.elder-mode .elder-app > .elder-main {
    padding: 6px 0 calc(var(--nav-h) + 56px + env(safe-area-inset-bottom, 0px)) !important;
    min-width: 0 !important;
  }
  /* left rail → warm-white floating island at the bottom (phone IA) */
  body.elder-mode .elder-app > .elder-nav {
    position: fixed !important;
    top: auto !important;
    bottom: calc(18px + env(safe-area-inset-bottom, 0px)) !important;
    left: 50% !important;
    right: auto !important;
    transform: translateX(-50%) !important;
    width: min(760px, calc(100% - 64px)) !important;
    max-width: 760px !important;
    height: var(--nav-h) !important;
    margin: 0 !important;
    padding: 8px !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: stretch !important;
    justify-content: space-between !important;
    gap: 6px !important;
    border-radius: 28px !important;
    background: rgba(255, 253, 250, .94) !important;
    -webkit-backdrop-filter: blur(16px) !important;
    backdrop-filter: blur(16px) !important;
    border: 1px solid var(--line) !important;
    box-shadow: 0 12px 32px rgba(35, 26, 20, .12) !important;
    z-index: 900 !important;
  }
  body.elder-mode .elder-app > .elder-nav button {
    flex: 1 1 0 !important;
    flex-direction: column !important;
    justify-content: center !important;
    align-items: center !important;
    gap: 4px !important;
    height: auto !important;
    min-height: 0 !important;
    padding: 4px 6px !important;
    border-radius: 999px !important;
    text-align: center !important;
  }
  body.elder-mode .elder-app > .elder-nav button.on { border-radius: 22px !important; }
  body.elder-mode .elder-app > .elder-nav button svg { width: 28px !important; height: 28px !important; }
  html.rt-elder-dial body.elder-mode .elder-app > .elder-nav,
  html.rt-elder-dialer body.elder-mode .elder-app > .elder-nav,
  html.rt-elder-sos body.elder-mode .elder-app > .elder-nav { display: none !important; }

  /* voice FAB default: in the bottom dock row (beside the island), at the
     sheet's inner right edge – never sits on top of content cards */
  body.elder-mode .gva-fab {
    right: calc((100% - min(1440px, calc(100% - 32px))) / 2 + 36px) !important;
    bottom: calc(18px + (var(--nav-h) - 56px) / 2 + env(safe-area-inset-bottom, 0px)) !important;
  }
  body.elder-mode .global-voice {
    right: calc((100% - min(1440px, calc(100% - 32px))) / 2 + 36px) !important;
    bottom: calc(18px + var(--nav-h) + 12px) !important;
  }

  /* teaching / sims keep their proven reading width, centred */
  html.rt-teach body.elder-mode .elder-app > .elder-main > * {
    max-width: 860px !important;
    margin-left: auto !important;
    margin-right: auto !important;
  }
  html.rt-sim body.elder-mode .elder-app > .elder-main > * { max-width: 620px !important; }

  /* generic (non-home, non-teach) pages: comfortable reading column */
  html.rt-elder:not(.rt-teach):not(.rt-elder-home) body.elder-mode .elder-main > .page {
    max-width: 1080px !important;
    margin-left: auto !important;
    margin-right: auto !important;
  }
}

/* ---------- q6. Desktop elder home dashboard ---------------------------- */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page { gap: 20px !important; }
  html.rt-elder-home body.elder-mode .teach-feat {
    display: grid !important;
    grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr) !important;
    gap: 16px !important;
    align-items: stretch !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
  }
  html.rt-elder-home body.elder-mode .teach-feat .teach-banner { margin: 0 !important; min-height: 0 !important; }
  html.rt-elder-home body.elder-mode .teach-feat .teach-banner > img { height: 280px !important; max-height: 280px !important; }
  html.rt-elder-home body.elder-mode .teach-feat .teach-ways {
    display: flex !important;
    flex-direction: column !important;
    gap: 12px !important;
    margin: 0 !important;
    padding: 0 !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
  }
  html.rt-elder-home body.elder-mode .teach-feat .teach-ways .tw {
    flex: 1 1 0 !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 16px !important;
    text-align: left !important;
    padding: 14px 20px !important;
    background: var(--surface) !important;
    border: 1px solid var(--line) !important;
    border-radius: var(--radius) !important;
    box-shadow: var(--e1) !important;
  }
  html.rt-elder-home body.elder-mode .teach-feat .teach-ways .tw .tw-ico { width: 52px !important; height: 52px !important; flex: 0 0 52px !important; }
  html.rt-elder-home body.elder-mode .teach-feat .teach-ways .tw strong { font-size: var(--fs-m) !important; }
  html.rt-elder-home body.elder-mode .teach-feat .teach-ways .tw small { font-size: var(--fs-s) !important; color: var(--ink-2) !important; }
}
@media (min-width: 1280px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { grid-column: span 5 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { grid-column: span 7 !important; }
  html.rt-elder-home body.elder-mode .page > .grid,
  html.rt-elder-home body.elder-mode[data-scale] .page > .grid { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; }
  html.rt-elder-home body.elder-mode[data-scale="1.8"] .page > .grid,
  html.rt-elder-home body.elder-mode[data-scale="2"] .page > .grid { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
}

/* ---------- q7. Child desktop: centred wider shell, tinted SOS strip ---- */
@media (min-width: 1200px) {
  body:not(.elder-mode) .child-shell .main-col > .topbar,
  body:not(.elder-mode) .child-shell .main-col > .child-main { max-width: 1240px !important; }
  html.rt-child-home .child-main .quick-grid .q-card div > span { font-size: 14px !important; }
}
@media (min-width: 1600px) {
  body:not(.elder-mode) { background-color: #EEE6DA !important; }
  body:not(.elder-mode) .child-shell {
    max-width: 1600px !important;
    margin-left: auto !important;
    margin-right: auto !important;
    background: var(--bg) !important;
    box-shadow: 0 0 0 1px var(--line), 0 10px 40px rgba(35, 26, 20, .06) !important;
  }
}
html.rt-child-home .child-main .page > .sos-panel {
  background: var(--danger-tint, #F5E0DE) !important;
  background-image: none !important;
  border: 1px solid rgba(181, 74, 66, .22) !important;
  border-left: 4px solid #B54A42 !important;
  box-shadow: none !important;
}
html.rt-child-home .child-main .page > .sos-panel .sp-head { color: #B54A42 !important; }
/* end §v548q */

/* ==========================================================================
   §v548r (2026-11-02)  Enterprise visual bar  (append-only, overrides ≤§v548q)
   r0 tokens locked · r1 line icons (home only) · r2 elder home hierarchy
   r3 elder desktop = website shell (top nav, no phone island) [non-teach]
   r4 child home: todo bar, family hero, 4 group panels ≤4 each
   r5 child shell ≥1200 centred 1440 (240 + 1fr)
   Teaching / *-sim pages untouched (every rule guarded or home-scoped).
   ========================================================================== */

/* ---------- r0. Locked tokens ------------------------------------------- */
:root, body, body.elder-mode {
  --r-8: 8px; --r-14: 14px; --r-22: 22px; --r-99: 999px;
  --radius: 14px !important;
  --radius-lg: 22px !important;
  --e1: 0 1px 2px rgba(35, 26, 20, .05) !important;
  --e2: 0 8px 24px rgba(35, 26, 20, .08) !important;
  --e3: 0 16px 48px rgba(35, 26, 20, .14) !important;
  --zr-line: #E6DCCF;
  --zr-paper: #F6F1EA;
}

/* ---------- r1. Line icons (svg.zj-li injected by patch-549) ------------- */
svg.zj-li {
  width: 26px; height: 26px; flex: 0 0 auto;
  fill: none !important; stroke: currentColor; stroke-width: 1.8;
  stroke-linecap: round; stroke-linejoin: round;
  display: block;
}
img.zj-li-off { display: none !important; }

/* ======================= r2. ELDER HOME (all widths) ===================== */
html.rt-elder-home body.elder-mode .elder-main > .page > .zg-search { display: none !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { order: 55 !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat   { order: 70 !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .grid         { order: 90 !important; }
/* P0-4: only the big SOS on home – top 求助 hidden on phones, ghost on desktop */
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-top .sos-btn { display: none !important; }
}
html.rt-elder-home body.elder-mode .elder-top .sos-btn {
  background: #fff !important; background-image: none !important;
  color: #B54A42 !important; border: 1.5px solid rgba(181, 74, 66, .45) !important;
  box-shadow: none !important; animation: none !important;
}
html.rt-elder-home body.elder-mode .elder-top .sos-btn * { color: #B54A42 !important; }
html.rt-elder-home body.elder-mode .elder-top .sos-btn::before,
html.rt-elder-home body.elder-mode .elder-top .sos-btn::after { display: none !important; }

/* card baseline */
html.rt-elder-home body.elder-mode .page > .progress-card,
html.rt-elder-home body.elder-mode .page > .family-row,
html.rt-elder-home body.elder-mode .page > .guard-banner,
html.rt-elder-home body.elder-mode .page > .care-row > .care-card,
html.rt-elder-home body.elder-mode .page > .teach-feat {
  background: #fff !important;
  border: 1px solid var(--zr-line) !important;
  border-radius: 22px !important;
  box-shadow: var(--e1) !important;
}

/* 打卡: compact, high-contrast line icons */
html.rt-elder-home body.elder-mode .progress-card .pr-head strong { font-size: var(--fs-m, 21px) !important; font-weight: 800 !important; color: var(--ink) !important; }
html.rt-elder-home body.elder-mode .progress-card .pr-ring {
  width: 56px !important; height: 56px !important;
  background: transparent !important; padding: 0 !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-ring-in {
  width: 56px !important; height: 56px !important;
  display: flex !important; align-items: center !important; justify-content: center !important;
  border-radius: 16px !important;
  background: #fff !important;
  border: 1.5px solid #D9CBBB !important;
  color: #8A5A3F !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-ring-in svg.zj-li { width: 30px; height: 30px; stroke-width: 2; }
html.rt-elder-home body.elder-mode .progress-card .pr-item {
  border: 1.5px dashed #D9CBBB !important;
  background: #FBF8F4 !important;
  gap: 6px !important;
  padding: 14px 6px 12px !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-item[data-zj-state="doing"] .pr-ring-in { border-color: var(--primary) !important; color: var(--primary) !important; background: var(--primary-tint) !important; }
html.rt-elder-home body.elder-mode .progress-card .pr-item[data-zj-state="done"] .pr-ring-in { border-color: var(--success) !important; background: var(--success) !important; color: #fff !important; }
html.rt-elder-home body.elder-mode .progress-card .pr-state { color: #5E534A !important; }

/* SOS: the one heavy element */
html.rt-elder-home body.elder-mode .page > .sos-banner {
  border-radius: 22px !important;
  background: linear-gradient(135deg, #C25E3F 0%, #9E4A2F 100%) !important;
  box-shadow: 0 12px 28px rgba(158, 74, 47, .28) !important;
  border: 0 !important;
}
html.rt-elder-home body.elder-mode .page > .sos-banner > svg.zj-li {
  width: 64px; height: 64px; padding: 14px; box-sizing: border-box;
  border-radius: 999px; background: rgba(255, 255, 255, .18);
  color: #fff; stroke-width: 2; flex: 0 0 64px;
}
html.rt-elder-home body.elder-mode .page > .sos-banner .sos-copy strong { font-size: calc(var(--fs-l, 25px) * 1.04) !important; font-weight: 800 !important; color: #fff !important; }
html.rt-elder-home body.elder-mode .page > .sos-banner .sos-copy span { color: rgba(255, 255, 255, .92) !important; }

/* care: 报平安 / 待办 secondary rows */
html.rt-elder-home body.elder-mode .page > .care-row > .care-card .care-ico {
  width: 52px !important; height: 52px !important; flex: 0 0 52px !important;
  border-radius: 14px !important; display: flex !important; align-items: center !important; justify-content: center !important;
  background: var(--primary-tint) !important; color: var(--brand) !important; border: 0 !important;
}
html.rt-elder-home body.elder-mode .page > .care-row > .care-card .care-ico svg { width: 28px !important; height: 28px !important; color: var(--brand) !important; }
html.rt-elder-home body.elder-mode .page > .care-row > .care-card.checkin .care-ico { background: var(--success-tint) !important; color: var(--success) !important; }
html.rt-elder-home body.elder-mode .page > .care-row > .care-card.checkin .care-ico svg { color: var(--success) !important; }
html.rt-elder-home body.elder-mode .page > .care-row > .care-card .care-arrow,
html.rt-elder-home body.elder-mode .page > .guard-banner .guard-arrow { color: #A8998A !important; }

/* family: one tidy card, no blank field */
html.rt-elder-home body.elder-mode .page > .family-row {
  display: flex !important; flex-wrap: wrap !important; align-items: center !important;
  gap: 12px !important; padding: 16px 20px !important; min-height: 0 !important; height: auto !important;
}
html.rt-elder-home body.elder-mode .page > .family-row::before {
  content: "家人"; flex: 0 0 100%;
  font-size: var(--fs-m, 21px); font-weight: 800; color: var(--ink); line-height: 1.3;
}
html.rt-elder-home body.elder-mode .page > .family-row > .f-card {
  display: grid !important;
  grid-template-columns: auto 1fr auto !important;
  align-items: center !important;
  column-gap: 14px !important;
  flex: 1 1 260px !important; width: auto !important; max-width: none !important;
  min-height: 0 !important; height: auto !important;
  padding: 12px 14px !important;
  background: #FBF8F4 !important; border: 1px solid var(--zr-line) !important;
  border-radius: 14px !important; box-shadow: none !important; text-align: left !important;
}
html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-av { width: 56px !important; height: 56px !important; margin: 0 !important; }
html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-name { margin: 0 !important; font-size: var(--fs-m, 21px) !important; font-weight: 700 !important; color: var(--ink) !important; text-align: left !important; }
html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-acts { display: flex !important; gap: 10px !important; margin: 0 !important; width: auto !important; }
html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-acts button {
  width: 52px !important; height: 52px !important; border-radius: 999px !important;
  background: var(--success-tint) !important; color: var(--success) !important; border: 0 !important;
}
html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-acts button + button { background: var(--primary-tint) !important; color: var(--brand) !important; }
html.rt-elder-home body.elder-mode .page > .family-row > .f-card.add {
  flex: 0 0 auto !important; display: flex !important; flex-direction: row !important; gap: 8px !important;
  background: transparent !important; border: 1.5px dashed #D9CBBB !important; color: var(--ink-2) !important;
  padding: 10px 16px !important; align-self: stretch !important;
}
html.rt-elder-home body.elder-mode .page > .family-row > .f-card.add svg { width: 24px !important; height: 24px !important; }
html.rt-elder-home body.elder-mode .page > .family-row > .f-card.add .f-name { font-size: var(--fs-s, 18px) !important; color: var(--ink-2) !important; }

/* 防骗: one line */
html.rt-elder-home body.elder-mode .page > .guard-banner {
  display: flex !important; align-items: center !important; gap: 16px !important;
  padding: 16px 20px !important; min-height: 0 !important;
}
html.rt-elder-home body.elder-mode .page > .guard-banner > svg.zj-li {
  width: 52px; height: 52px; padding: 12px; box-sizing: border-box; flex: 0 0 52px;
  border-radius: 14px; background: var(--success-tint); color: var(--success);
}
html.rt-elder-home body.elder-mode .page > .guard-banner .guard-copy strong { font-size: var(--fs-m, 21px) !important; font-weight: 700 !important; color: var(--ink) !important; }
html.rt-elder-home body.elder-mode .page > .guard-banner .guard-copy span { color: var(--ink-2) !important; }

/* 教学: one primary CTA only (three ways live on the 教学 page) */
html.rt-elder-home body.elder-mode .page > .teach-feat .teach-ways { display: none !important; }
html.rt-elder-home body.elder-mode .page > .teach-feat { overflow: hidden !important; padding: 0 !important; }
html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner { margin: 0 !important; border-radius: 0 !important; }
html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy b {
  display: inline-flex !important; align-items: center !important; min-height: 48px !important;
  padding: 0 20px !important; border-radius: 14px !important;
  background: var(--primary) !important; color: #fff !important;
}

/* 常用 grid: ≤6, quiet tiles with tint+line icons */
html.rt-elder-home body.elder-mode .page > .grid:not(.zg-all):not(.zg-search-open) > .g-card.zj-over { display: none !important; }
html.rt-elder-home body.elder-mode .page > .grid::before {
  content: "常用功能"; grid-column: 1 / -1; order: -1;
  font-size: var(--fs-m, 21px); font-weight: 800; color: var(--ink); padding: 4px 2px 0;
}
html.rt-elder-home body.elder-mode .page > .grid > .g-card {
  background: #fff !important; border: 1px solid var(--zr-line) !important;
  border-radius: 14px !important; box-shadow: var(--e1) !important;
}
html.rt-elder-home body.elder-mode .page > .grid > .g-card .g-ico {
  width: 56px !important; height: 56px !important; border-radius: 14px !important;
  background: var(--primary-tint) !important; color: var(--brand) !important;
  display: flex !important; align-items: center !important; justify-content: center !important;
  box-shadow: none !important; border: 0 !important;
}
html.rt-elder-home body.elder-mode .page > .grid > .g-card .g-ico svg.zj-li { width: 30px; height: 30px; }
html.rt-elder-home body.elder-mode .page > .grid > .g-card .zg-pin { opacity: .55 !important; font-size: 16px !important; color: #B98A2F !important; }
html.rt-elder-home body.elder-mode .page > .grid > .zg-more {
  grid-column: 1 / -1 !important; min-height: 56px !important;
  font-size: var(--fs-s, 18px) !important; font-weight: 700 !important;
  background: #fff !important; color: var(--brand) !important;
  border: 1px solid var(--zr-line) !important; border-radius: 14px !important; box-shadow: none !important;
}

/* phones: breathing single column */
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-main > .page { gap: 16px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-row {
    display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 10px !important;
  }
  html.rt-elder-home body.elder-mode .progress-card .pr-item { min-height: 0 !important; height: auto !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-state { word-break: keep-all !important; text-align: left !important; white-space: nowrap !important; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
  html.rt-elder-home body.elder-mode .page > .grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 12px !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner > img { height: 150px !important; max-height: 150px !important; object-fit: cover !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy { position: static !important; padding: 14px 18px 18px !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy .tag { display: none !important; }
  html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-av { width: 48px !important; height: 48px !important; }
  html.rt-elder-home body.elder-mode .page > .family-row > .f-card .f-acts button { width: 48px !important; height: 48px !important; }
}

/* ============== r3. ELDER DESKTOP ≥1024 = website shell (non-teach) ====== */
@media (min-width: 1024px) {
  html.rt-elder:not(.rt-teach) body.elder-mode { background: var(--zr-paper) !important; background-image: none !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app {
    width: 100% !important; max-width: none !important; margin: 0 !important;
    padding: 0 !important; background: transparent !important; box-shadow: none !important;
  }
  /* full-bleed top bar, centred 1280 container */
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-top {
    position: sticky !important; top: 0 !important; z-index: 880 !important;
    height: 76px !important; min-height: 76px !important; box-sizing: border-box !important;
    padding: 0 max(32px, calc((100% - 1280px) / 2)) !important;
    display: flex !important; align-items: center !important; justify-content: space-between !important;
    background: rgba(255, 253, 250, .96) !important; background-image: none !important;
    -webkit-backdrop-filter: blur(12px) !important; backdrop-filter: blur(12px) !important;
    border-bottom: 1px solid var(--zr-line) !important; box-shadow: none !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-top .avatar-fallback.big { width: 44px !important; height: 44px !important; font-size: 20px !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-top .top-name strong { font-size: 20px !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-top .top-sub { display: none !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-top .sos-btn { height: 44px !important; min-height: 44px !important; padding: 0 18px !important; font-size: 18px !important; }
  /* main nav moves into the top bar */
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav {
    position: fixed !important; top: 14px !important; bottom: auto !important;
    left: 50% !important; right: auto !important; transform: translateX(-50%) !important;
    width: auto !important; max-width: none !important; height: 48px !important;
    padding: 4px !important; gap: 4px !important; margin: 0 !important;
    display: flex !important; flex-direction: row !important; align-items: stretch !important;
    background: #F3ECE3 !important; border: 1px solid var(--zr-line) !important;
    border-radius: 999px !important; box-shadow: none !important;
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    z-index: 890 !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button {
    flex: 0 0 auto !important; flex-direction: row !important; gap: 8px !important;
    height: 38px !important; min-height: 0 !important; min-width: 0 !important; width: auto !important;
    padding: 0 20px !important; border-radius: 999px !important;
    background: transparent !important; box-shadow: none !important; color: var(--ink-2) !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button svg { width: 22px !important; height: 22px !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button .nav-label { font-size: 18px !important; line-height: 1 !important; font-weight: 600 !important; color: inherit !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button.on {
    background: #fff !important; color: var(--brand) !important; box-shadow: 0 1px 3px rgba(35, 26, 20, .10) !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button.on .nav-label { font-weight: 800 !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button::before,
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-nav button::after { display: none !important; }
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-main {
    padding: 32px max(32px, calc((100% - 1280px) / 2)) 48px !important;
    box-sizing: border-box !important;
  }
  /* voice FAB: plain bottom-right corner (no bottom island any more) */
  html.rt-elder:not(.rt-teach) body.elder-mode .gva-fab {
    right: max(24px, calc((100% - 1280px) / 2 - 72px)) !important;
    bottom: 32px !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .global-voice {
    right: max(24px, calc((100% - 1280px) / 2 - 72px)) !important;
    bottom: 100px !important;
  }
  html.rt-elder:not(.rt-teach) body.elder-mode .icp-footer { padding: 8px 0 32px !important; }

  /* home: 12-column dashboard, 5/7 rhythm, equal heights */
  html.rt-elder-home body.elder-mode .elder-main > .page {
    display: grid !important;
    grid-template-columns: repeat(12, minmax(0, 1fr)) !important;
    gap: 24px !important; align-items: stretch !important;
    max-width: 1280px !important; margin: 0 auto !important; padding: 0 !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > * { grid-column: 1 / -1 !important; margin: 0 !important; min-width: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome,
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner,
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { grid-column: span 5 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card,
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row,
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { grid-column: span 7 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { order: 10 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { order: 20 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner { order: 30 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row { order: 40 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { order: 50 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { order: 55 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome,
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { height: auto !important; min-height: 236px !important; box-sizing: border-box !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { padding: 28px 32px !important; display: flex !important; align-items: center !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome > div:first-child { flex: 1 1 auto !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { padding: 22px 24px !important; display: flex !important; flex-direction: column !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-row {
    flex: 1 1 auto !important; display: grid !important;
    grid-template-columns: repeat(5, minmax(0, 1fr)) !important; gap: 12px !important;
  }
  html.rt-elder-home body.elder-mode .progress-card .pr-item { height: auto !important; min-height: 0 !important; justify-content: center !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner { min-height: 168px !important; padding: 24px 28px !important; gap: 20px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row {
    display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 24px !important;
    background: none !important; border: 0 !important; box-shadow: none !important; padding: 0 !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card {
    height: auto !important; min-height: 168px !important; margin: 0 !important;
    padding: 24px !important; display: grid !important;
    grid-template-columns: 1fr auto !important; grid-template-rows: auto 1fr !important;
    align-items: start !important; gap: 14px 12px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card .care-ico { grid-column: 1 !important; grid-row: 1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card .care-copy { grid-column: 1 / -1 !important; grid-row: 2 !important; align-self: end !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card .care-arrow { grid-column: 2 !important; grid-row: 1 !important; align-self: center !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row,
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { min-height: 132px !important; box-sizing: border-box !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { padding: 20px 24px !important; align-content: center !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { padding: 20px 28px !important; align-self: stretch !important; }
  /* 教学: horizontal feature strip, one CTA */
  html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat { display: block !important; order: 70 !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner {
    display: grid !important; grid-template-columns: 5fr 7fr !important; align-items: stretch !important;
    min-height: 220px !important; height: auto !important;
  }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner > img {
    position: static !important; width: 100% !important; height: 100% !important; max-height: none !important; min-height: 220px !important; object-fit: cover !important;
  }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy {
    position: static !important; inset: auto !important; transform: none !important;
    display: flex !important; flex-direction: column !important; justify-content: center !important; align-items: flex-start !important;
    gap: 10px !important; padding: 28px 40px !important;
    background: #fff !important; border: 0 !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
  }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy h3 { font-size: var(--fs-l, 25px) !important; margin: 0 !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy p { margin: 0 !important; font-size: var(--fs-s, 18px) !important; }
  /* 常用: one row of six */
  html.rt-elder-home body.elder-mode .page > .grid,
  html.rt-elder-home body.elder-mode[data-scale] .page > .grid {
    grid-template-columns: repeat(6, minmax(0, 1fr)) !important; gap: 16px !important;
  }
  html.rt-elder-home body.elder-mode .page > .grid > .g-card { min-height: 132px !important; }
}

/* ======================= r4. CHILD HOME =================================== */
/* todo bar (先给结论) */
html.rt-child-home .child-main > .page > .zj-todo {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 16px 14px 18px; margin: 0 0 16px;
  background: #F5ECD8; border: 1px solid rgba(185, 138, 47, .30); border-left: 4px solid #B98A2F;
  border-radius: 14px; color: var(--ink); order: -5;
}
html.rt-child-home .child-main > .page > .zj-todo.ok { background: var(--success-tint); border-color: rgba(94, 127, 99, .3); border-left-color: var(--success); }
html.rt-child-home .child-main > .page > .zj-todo .zj-todo-ico {
  width: 40px; height: 40px; flex: 0 0 40px; border-radius: 999px; background: #fff;
  display: flex; align-items: center; justify-content: center; color: #8C6516;
}
html.rt-child-home .child-main > .page > .zj-todo.ok .zj-todo-ico { color: var(--success); }
html.rt-child-home .child-main > .page > .zj-todo .zj-todo-ico svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
html.rt-child-home .child-main > .page > .zj-todo .zj-todo-txt { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
html.rt-child-home .child-main > .page > .zj-todo .zj-todo-txt strong { font-size: 16px; font-weight: 800; color: #5C4310; }
html.rt-child-home .child-main > .page > .zj-todo.ok .zj-todo-txt strong { color: #3E5A43; }
html.rt-child-home .child-main > .page > .zj-todo .zj-todo-txt span { font-size: 14.5px; color: #6E5A33; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html.rt-child-home .child-main > .page > .zj-todo .zj-todo-go {
  flex: 0 0 auto; height: 40px; padding: 0 18px; border-radius: 999px; border: 0;
  background: #8C6516; color: #fff; font-size: 15px; font-weight: 700; cursor: pointer;
}
html.rt-child-home .child-main > .page > .zj-todo.ok .zj-todo-go { display: none; }

/* typography floor */
html.rt-child-home .child-main .quick-grid .q-card strong { font-size: 16px !important; font-weight: 700 !important; }
html.rt-child-home .child-main .quick-grid .q-card div > span { font-size: 14px !important; color: var(--ink-2) !important; }
html.rt-child-home .child-main .stat-card strong,
html.rt-child-home .child-main .gd-card strong { font-size: 16px !important; font-weight: 700 !important; }
html.rt-child-home .child-main .stat-card span,
html.rt-child-home .child-main .gd-card .gd-mid span { font-size: 14.5px !important; color: var(--ink-2) !important; }

/* quiet icons: clay-tint squares with line icons */
html.rt-child-home .child-main .quick-grid .q-card .q-ico,
html.rt-child-home .child-main .gd-card .gd-ico {
  width: 44px !important; height: 44px !important; flex: 0 0 44px !important;
  border-radius: 12px !important; display: flex !important; align-items: center !important; justify-content: center !important;
  background: var(--primary-tint) !important; color: var(--brand) !important; border: 0 !important; box-shadow: none !important;
}
html.rt-child-home .child-main .quick-grid .q-card .q-ico svg.zj-li,
html.rt-child-home .child-main .gd-card .gd-ico svg.zj-li { width: 24px; height: 24px; }
html.rt-child-home .child-main .quick-grid .q-card[data-zcg="safe"] .q-ico { background: var(--success-tint) !important; color: var(--success) !important; }
html.rt-child-home .child-main .quick-grid .q-card[data-zcg="talk"] .q-ico { background: var(--info-tint, #E3E9EF) !important; color: var(--info, #56708A) !important; }
html.rt-child-home .child-main .quick-grid .q-card[data-zcg="tool"] .q-ico { background: #EFE7DC !important; color: #6E6258 !important; }
html.rt-child-home .child-main .gd-card .gd-ico { background: var(--warn-tint, #F5ECD8) !important; color: #8C6516 !important; }

/* uniform cards */
html.rt-child-home .child-main > .page > .card,
html.rt-child-home .child-main .stat-card,
html.rt-child-home .child-main .gd-card {
  background: #fff !important; border: 1px solid var(--zr-line) !important;
  border-radius: 14px !important; box-shadow: var(--e1) !important;
}
html.rt-child-home .child-main > .page > .card.pad:has(.fam-cards) { border-radius: 22px !important; }

/* group heads: title + status + 全部 N 项 */
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head { align-items: center !important; }
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head strong { font-size: 18px !important; font-weight: 800 !important; color: var(--ink) !important; }
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head .zcg-st { font-size: 14px !important; color: var(--ink-2) !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head[data-zcg="safe"] .zcg-st:not(:empty) { color: #8C6516 !important; font-weight: 700 !important; }
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head .zcg-tg {
  margin-left: auto !important; min-height: 32px !important; height: 32px !important; padding: 0 12px !important;
  border: 0 !important; background: transparent !important; color: var(--primary) !important;
  font-size: 14.5px !important; font-weight: 700 !important; white-space: nowrap !important; flex: 0 0 auto !important;
}
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head .zcg-tg::after { content: " ›"; }
html.rt-child-home .child-main .quick-grid.zj-r .zcg-head.zj-open .zcg-tg::after { content: ""; }

/* phones / tablets: stacked groups, 2×2 tiles */
@media (max-width: 1023px) {
  html.rt-child-home .child-main .quick-grid.zj-r {
    display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 10px !important;
  }
  html.rt-child-home .child-main .quick-grid.zj-r .zcg-head { grid-column: 1 / -1 !important; padding: 14px 2px 2px !important; }
  html.rt-child-home .child-main .quick-grid.zj-r .q-card:not(.zcg-fold) {
    display: flex !important; flex-direction: row !important; align-items: center !important; gap: 10px !important;
    min-height: 64px !important; padding: 10px 12px !important; text-align: left !important;
  }
  html.rt-child-home .child-main .quick-grid.zj-r .q-card .q-ico { width: 40px !important; height: 40px !important; flex-basis: 40px !important; }
  html.rt-child-home .child-main .quick-grid.zj-r .q-card div > span { display: none !important; }
  html.rt-child-home .child-main .stat-grid .stat-card,
  html.rt-child-home .child-main .guard-row .gd-card { padding: 14px !important; }
}

/* desktop: four group panels side by side, list rows inside */
@media (min-width: 1024px) {
  html.rt-child-home .child-main .quick-grid.zj-r,
  html.rt-child-home .child-main .quick-grid.zj-r.zj-open {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    grid-template-rows: 60px !important;
    grid-auto-rows: 64px !important;
    column-gap: 20px !important; row-gap: 0 !important;
    padding-bottom: 12px !important;
  }
  html.rt-child-home .child-main .quick-grid.zj-r > .zcg-head {
    grid-column: var(--zc) !important;
    grid-row: 1 / span var(--zspan, 5) !important;
    align-self: stretch !important; align-items: flex-start !important;
    margin: 0 0 -12px !important;
    padding: 16px 12px 0 18px !important; height: auto !important;
    background: #fff !important; border: 1px solid var(--zr-line) !important;
    border-radius: 22px !important; box-shadow: var(--e1) !important;
    display: flex !important; flex-wrap: wrap !important; column-gap: 8px !important; row-gap: 2px !important;
    z-index: 0 !important; position: relative !important;
  }
  html.rt-child-home .child-main .quick-grid.zj-r > .zcg-head strong { line-height: 28px !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .zcg-head .zcg-st { flex: 1 1 100% !important; order: 3 !important; line-height: 20px !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .zcg-head .zcg-tg { order: 2 !important; height: 28px !important; min-height: 28px !important; margin-top: 0 !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .q-card:not(.zcg-fold) {
    grid-column: var(--zc) !important; grid-row: var(--zr) !important;
    position: relative !important; z-index: 1 !important;
    margin: 4px 8px !important; min-height: 0 !important; height: 56px !important;
    padding: 6px 10px !important; gap: 12px !important;
    display: flex !important; flex-direction: row !important; align-items: center !important; text-align: left !important;
    background: transparent !important; border: 0 !important; border-radius: 12px !important; box-shadow: none !important;
  }
  html.rt-child-home .child-main .quick-grid.zj-r > .q-card:not(.zcg-fold):hover { background: #FBF6F1 !important; box-shadow: none !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .q-card .q-ico { width: 40px !important; height: 40px !important; flex-basis: 40px !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .q-card > div { min-width: 0 !important; flex: 1 1 auto !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .q-card div > span { text-align: left !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; margin-top: 1px !important; }
}

/* child desktop page composition */
@media (min-width: 1200px) {
  html.rt-child-home .child-main > .page {
    display: grid !important;
    grid-template-columns: repeat(12, minmax(0, 1fr)) !important;
    column-gap: 24px !important; row-gap: 24px !important;
    max-width: 1120px !important; margin: 0 auto !important;
  }
  html.rt-child-home .child-main > .page > * { grid-column: 1 / -1 !important; margin: 0 !important; }
  html.rt-child-home .child-main > .page > .hero-banner { order: -10 !important; }
  html.rt-child-home .child-main > .page > .zj-todo { order: -5 !important; margin: 0 !important; }
  html.rt-child-home .child-main > .page > .card.pad:has(.fam-cards) { grid-column: span 5 !important; grid-row: span 2 !important; order: 1 !important; display: flex !important; flex-direction: column !important; }
  html.rt-child-home .child-main > .page > .stat-grid,
  html.rt-child-home .child-main > .page > .guard-row { grid-column: span 7 !important; order: 2 !important; }
  html.rt-child-home .child-main > .page > .guard-row { order: 3 !important; }
  html.rt-child-home .child-main > .page > .quick-grid { order: 10 !important; }
  html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)) { order: 20 !important; }
  html.rt-child-home .child-main .stat-grid,
  html.rt-child-home .child-main .guard-row { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 24px !important; }
  html.rt-child-home .child-main .stat-card,
  html.rt-child-home .child-main .gd-card { min-height: 104px !important; padding: 18px 20px !important; }
  /* family hero: single elder fills the card */
  html.rt-child-home .child-main .fam-cards { flex: 1 1 auto !important; display: flex !important; flex-direction: column !important; gap: 12px !important; }
  html.rt-child-home .child-main .fam-cards .fam-card {
    width: 100% !important; max-width: none !important; flex: 1 1 auto !important; box-sizing: border-box !important;
    display: grid !important; grid-template-columns: auto 1fr !important; grid-template-rows: auto auto !important;
    align-items: center !important; gap: 14px 14px !important; padding: 18px !important;
    background: #FBF8F4 !important; border: 1px solid var(--zr-line) !important; border-radius: 14px !important;
  }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-av { width: 56px !important; height: 56px !important; font-size: 22px !important; }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-mid strong { font-size: 18px !important; }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts {
    grid-column: 1 / -1 !important; display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 10px !important; width: 100% !important;
  }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button {
    width: 100% !important; height: 44px !important; border-radius: 12px !important;
    background: #fff !important; border: 1px solid var(--zr-line) !important; color: var(--brand) !important;
  }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button:first-child { background: var(--primary) !important; border-color: var(--primary) !important; color: #fff !important; }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button svg { width: 20px !important; height: 20px !important; }
}

/* ======================= r5. CHILD SHELL ≥1200 ============================ */
@media (min-width: 1200px) {
  body:not(.elder-mode) { background-color: #EEE6DA !important; }
  body:not(.elder-mode) .child-shell {
    display: grid !important; grid-template-columns: 240px minmax(0, 1fr) !important;
    max-width: 1440px !important; margin: 0 auto !important;
    background: var(--zr-paper) !important;
    box-shadow: 0 0 0 1px var(--zr-line), 0 10px 40px rgba(35, 26, 20, .06) !important;
    min-height: 100vh !important;
  }
  body:not(.elder-mode) .child-shell > .side {
    position: sticky !important; top: 0 !important; left: auto !important;
    height: 100vh !important; width: 240px !important; box-sizing: border-box !important;
    background: #FFFDFA !important; border-right: 1px solid var(--zr-line) !important;
  }
  body:not(.elder-mode) .child-shell > .main-col { margin-left: 0 !important; width: auto !important; min-width: 0 !important; }
  body:not(.elder-mode) .child-shell .main-col > .topbar,
  body:not(.elder-mode) .child-shell .main-col > .child-main { max-width: none !important; }
  body:not(.elder-mode) .child-shell .main-col > .topbar {
    padding-left: max(32px, calc((100% - 1120px) / 2)) !important; padding-right: max(32px, calc((100% - 1120px) / 2)) !important;
    border-bottom: 1px solid var(--zr-line) !important; background: rgba(255, 253, 250, .9) !important;
  }
  body:not(.elder-mode) .child-shell .side-nav button { font-size: 16px !important; height: 46px !important; border-radius: 12px !important; }
  body:not(.elder-mode) .child-shell .side-nav button.on { background: var(--primary-tint) !important; color: var(--brand) !important; font-weight: 800 !important; }
}
/* end §v548r */
/* r2b. bind-tip / weather icons, layout fallbacks */
html.rt-elder-home body.elder-mode .elder-main > .page > .bind-tip { order: 5 !important; display: flex !important; align-items: center !important; gap: 16px !important; border-left: 4px solid #B98A2F !important; background: #FFFBF3 !important; border-radius: 14px !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .bind-tip > svg.zj-li { width: 48px; height: 48px; padding: 11px; box-sizing: border-box; flex: 0 0 48px; border-radius: 999px; background: #F5ECD8; color: #8C6516; }
html.rt-elder-home body.elder-mode .welcome .w-btn { display: flex !important; align-items: center !important; justify-content: center !important; color: #B98A2F !important; background: #fff !important; }
html.rt-elder-home body.elder-mode .welcome .w-btn svg.zj-li { width: 36px; height: 36px; }
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page:not(:has(> .family-row)) > .guard-banner,
  html.rt-elder-home body.elder-mode .elder-main > .page:not(:has(> .guard-banner)) > .family-row { grid-column: 1 / -1 !important; }
}
/* end §v548r-b */
/* r4b. child group head + family action labels */
@media (min-width: 1024px) {
  html.rt-child-home .child-main .quick-grid.zj-r,
  html.rt-child-home .child-main .quick-grid.zj-r.zj-open { grid-template-rows: 80px !important; }
  html.rt-child-home .child-main .quick-grid.zj-r > .zcg-head { align-content: flex-start !important; padding-top: 18px !important; }
}
html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button { gap: 6px !important; font-size: 15px !important; font-weight: 700 !important; display: inline-flex !important; align-items: center !important; justify-content: center !important; }
@media (min-width: 1200px) {
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button:nth-child(1)::after { content: "打电话"; }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button:nth-child(2)::after { content: "视频"; }
  html.rt-child-home .child-main .fam-cards .fam-card .fc-acts button:nth-child(3)::after { content: "留言"; }
}
html.rt-child-home .child-main .quick-grid.zj-r > .q-card.zcg-fold { display: none !important; }
/* end §v548r-c */
/* r2c. phone first screen: SOS visible above the nav */
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { padding: 16px 18px !important; min-height: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome h2 { font-size: calc(var(--fs-l, 25px) * 1.1) !important; line-height: 1.25 !important; margin: 0 0 4px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome p.dim { display: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome .w-btn { width: 60px !important; height: 60px !important; }
  html.rt-elder-home body.elder-mode .progress-card { padding: 14px 14px 16px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-item { padding: 10px 4px 8px !important; gap: 4px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-ring,
  html.rt-elder-home body.elder-mode .progress-card .pr-ring-in { width: 46px !important; height: 46px !important; border-radius: 14px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-ring-in svg.zj-li { width: 26px; height: 26px; }
  html.rt-elder-home body.elder-mode .progress-card .pr-row { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; gap: 6px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-name { font-size: 19px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-state { font-size: 14px !important; }
}
@media (max-width: 359px) {
  html.rt-elder-home body.elder-mode .progress-card .pr-row { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome .dress-tip { display: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome h2 br { display: none !important; }
  html.rt-elder-home body.elder-mode .gva-fab { bottom: calc(var(--nav-h, 84px) + 28px + env(safe-area-inset-bottom, 0px)) !important; }
}
/* end §v548r-d */

/* ==========================================================================
   §v548s (2026-11-02)  Empty-block cleanup · phone SOS clearance · teach shell
   s1 elder home: content-driven heights (no min-height padding-to-align)
   s2 child home: compact family / empty state / phone stat cards / badges
   s3 phone: SOS + content always above the bottom island and voice FAB
   s4 elder ≥1024 teach routes: same top-nav website shell (content untouched)
   ========================================================================== */

/* ---------- s1. Elder home – all widths ---------------------------------- */
/* family: title row「家人 …… + 更多」, member card below; no stretched blank */
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row {
  position: relative !important; display: flex !important; flex-wrap: wrap !important;
  align-items: flex-start !important; align-content: flex-start !important;
  gap: 12px !important; padding: 16px 20px 20px !important;
  min-height: 0 !important; height: auto !important;
}
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row::before { line-height: 44px !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) { flex: 1 1 100% !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card.add {
  position: absolute !important; top: 16px !important; right: 20px !important;
  height: 44px !important; min-height: 44px !important; padding: 0 14px !important;
  border: 1px solid var(--zr-line) !important; border-radius: 999px !important;
  background: #fff !important; align-items: center !important; align-self: auto !important;
}
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card.add svg { width: 20px !important; height: 20px !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card.add .f-name { font-size: 17px !important; line-height: 1 !important; }
/* several members: a tidy 2-up grid instead of one long column */
html.rt-elder-home body.elder-mode .elder-main > .page > .family-row:has(> .f-card:not(.add) ~ .f-card:not(.add)) > .f-card:not(.add) { flex: 1 1 calc(50% - 6px) !important; }

/* SOS copy: one block, no narrow 3-line wrap */
html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner .sos-copy { flex: 1 1 auto !important; min-width: 0 !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner .sos-copy span { display: block !important; max-width: none !important; width: auto !important; }

/* teach strip: copy tight to the image, no reserved blank */
html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat { min-height: 0 !important; height: auto !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat .teach-banner { min-height: 0 !important; height: auto !important; }

/* ---------- s1b. Elder home desktop ≥1024: rows sized by content -------- */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page { gap: 24px !important; align-items: stretch !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome,
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { min-height: 0 !important; height: auto !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { padding: 24px 28px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome h2 { margin: 0 0 6px !important; line-height: 1.25 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome p { margin: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome p.dim { margin-top: 4px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card { padding: 20px 24px !important; gap: 14px !important; justify-content: flex-start !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card .pr-head { margin: 0 !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-row { flex: 0 0 auto !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-item { padding: 12px 6px 10px !important; }

  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner { min-height: 0 !important; padding: 24px 28px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card { min-height: 0 !important; padding: 20px 24px !important; gap: 10px 12px !important; }

  /* family | 防骗: equal row, both filled */
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row,
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { min-height: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { padding: 16px 24px 20px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card.add { right: 24px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner {
    display: grid !important; grid-template-columns: auto 1fr auto !important;
    grid-template-rows: auto auto !important; align-items: center !important; align-content: center !important;
    column-gap: 18px !important; row-gap: 0 !important; padding: 20px 28px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner > svg.zj-li { grid-row: 1 / span 2; width: 60px; height: 60px; flex-basis: 60px; padding: 14px; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy { grid-column: 2 !important; grid-row: 1 / span 2 !important; display: flex !important; flex-direction: column !important; gap: 4px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-arrow {
    grid-column: 3 !important; grid-row: 1 / span 2 !important;
    width: 48px !important; height: 48px !important; border-radius: 999px !important;
    display: flex !important; align-items: center !important; justify-content: center !important;
    background: var(--success-tint) !important; color: var(--success) !important; font-size: 22px !important;
  }

  /* teach strip: image height = content height (no 220px reserve) */
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner { grid-template-columns: 5fr 7fr !important; min-height: 0 !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner > img { min-height: 0 !important; height: 100% !important; aspect-ratio: auto !important; max-height: 220px !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy { padding: 28px 36px !important; gap: 8px !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner .teach-copy b { margin-top: 6px !important; }

  html.rt-elder-home body.elder-mode .page > .grid > .g-card { min-height: 112px !important; height: auto !important; padding: 16px 10px !important; }
  html.rt-elder-home body.elder-mode .page > .grid > .g-card .zg-pin { opacity: .28 !important; }
}

/* ---------- s3. Elder phone: compact cards, SOS above island & FAB ------- */
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-app > .elder-main,
  html.rt-elder:not(.rt-teach) body.elder-mode .elder-app > .elder-main {
    padding-bottom: calc(var(--nav-h, 84px) + 24px + 24px + env(safe-area-inset-bottom, 0px)) !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page { gap: 14px !important; padding-bottom: 0 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { padding: 14px 18px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome .w-btn { width: 56px !important; height: 56px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome .wx-row { margin-top: 2px !important; }
  html.rt-elder-home body.elder-mode .progress-card .pr-head { margin-bottom: 10px !important; }
  /* SOS: one compact bar – icon · 紧急求助 + one-line hint · arrow */
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner {
    min-height: 0 !important; height: auto !important; padding: 16px 18px !important; gap: 14px !important; align-items: center !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner > svg.zj-li { width: 56px; height: 56px; flex-basis: 56px; padding: 13px; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner .sos-copy { display: flex !important; flex-direction: column !important; gap: 2px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner .sos-copy strong { font-size: 27px !important; line-height: 1.2 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner .sos-copy span { font-size: 18px !important; line-height: 1.4 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner .sos-arrow { font-size: 24px !important; }
  /* 报平安 / 待办: two lines max */
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row { gap: 14px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card { min-height: 0 !important; height: auto !important; padding: 14px 16px !important; gap: 14px !important; align-items: center !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card .care-copy span { font-size: 18px !important; line-height: 1.4 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { padding: 14px 16px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy span { font-size: 18px !important; line-height: 1.4 !important; display: block !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { padding: 12px 16px 16px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card.add { top: 12px !important; right: 16px !important; }
  /* voice FAB sits above the island at the right edge, never on the SOS copy */
  html.rt-elder:not(.rt-teach) body.elder-mode .gva-fab {
    bottom: calc(var(--nav-h, 84px) + 30px + env(safe-area-inset-bottom, 0px)) !important;
    right: 14px !important; width: 52px !important; height: 52px !important;
  }
}

/* ---------- s2. Child home ----------------------------------------------- */
/* notification badges: small pill (18px) instead of a 46px blob */
body:not(.elder-mode) .topbar .bell { position: relative !important; }
body:not(.elder-mode) .topbar .bell .badge,
body:not(.elder-mode) .mobile-nav .badge,
body:not(.elder-mode) .side-nav .badge {
  position: absolute !important; top: 2px !important; right: 0 !important; left: auto !important;
  min-width: 18px !important; width: auto !important; height: 18px !important; padding: 0 5px !important;
  box-sizing: border-box !important; border-radius: 999px !important;
  font-size: 11px !important; font-weight: 700 !important; line-height: 18px !important; font-style: normal !important;
  text-align: center !important; color: #fff !important; background: #C2453B !important;
  border: 2px solid #fff !important; box-shadow: none !important; transform: none !important;
  font-variant-numeric: tabular-nums;
}
body:not(.elder-mode) .topbar .bell .badge { top: 3px !important; right: 3px !important; transform: translate(40%, -30%) !important; }
body:not(.elder-mode) .mobile-nav button { position: relative !important; }
body:not(.elder-mode) .mobile-nav .badge { top: 6px !important; right: calc(50% - 22px) !important; }
body:not(.elder-mode) .side-nav button { position: relative !important; }
body:not(.elder-mode) .side-nav .badge { position: static !important; margin-left: auto !important; }

/* 最近动态 empty: one quiet row (icon · sentence), no white board */
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) {
  display: flex !important; flex-wrap: wrap !important; align-items: center !important;
  gap: 8px 16px !important; padding: 16px 20px !important;
}
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) > .sec-head { display: contents !important; }
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) > .sec-head h2 { order: 1 !important; margin: 0 !important; flex: 0 0 auto !important; font-size: 17px !important; }
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) > .empty {
  order: 2 !important; flex: 1 1 200px !important; min-width: 0 !important;
  display: flex !important; align-items: center !important; gap: 10px !important;
  padding: 0 !important; margin: 0 !important; min-height: 0 !important;
  background: transparent !important; border: 0 !important; text-align: left !important;
  color: var(--ink-2) !important;
}
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) > .empty::before {
  content: ""; flex: 0 0 8px; width: 8px; height: 8px; border-radius: 99px; background: #CDBFAE;
}
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) > .empty p { margin: 0 !important; font-size: 15px !important; color: var(--ink-2) !important; }
html.rt-child-home .child-main > .page > .card.pad:not(:has(.fam-cards)):has(> .empty) > .sec-head .btn { order: 3 !important; margin-left: auto !important; height: 36px !important; min-height: 36px !important; }

/* family card: single elder = compact, actions in one row at the bottom */
@media (min-width: 1200px) {
  html.rt-child-home .child-main > .page > .card.pad:has(.fam-cards) { padding: 18px 20px 20px !important; }
  html.rt-child-home .child-main > .page > .card.pad:has(.fam-cards) .sec-head { margin-bottom: 12px !important; }
  html.rt-child-home .child-main .fam-cards .fam-card { align-content: space-between !important; }
  html.rt-child-home .child-main .stat-card,
  html.rt-child-home .child-main .gd-card { min-height: 0 !important; }
  /* panels: rows sized by items, no empty tail */
  html.rt-child-home .child-main .quick-grid.zj-r,
  html.rt-child-home .child-main .quick-grid.zj-r.zj-open { padding-bottom: 8px !important; }
}

/* child phone: status cards two columns, ≤2 text lines, no crush */
@media (max-width: 1023px) {
  html.rt-child-home .child-main { padding-bottom: calc(80px + 28px + env(safe-area-inset-bottom, 0px)) !important; }
  html.rt-child-home .child-main .stat-grid,
  html.rt-child-home .child-main .guard-row { gap: 10px !important; }
  html.rt-child-home .child-main .stat-grid .stat-card,
  html.rt-child-home .child-main .guard-row .gd-card {
    display: grid !important; grid-template-columns: auto 1fr !important; align-items: center !important;
    column-gap: 10px !important; row-gap: 0 !important; padding: 12px !important; min-height: 0 !important; height: auto !important;
  }
  html.rt-child-home .child-main .stat-grid .stat-card > svg { width: 40px !important; height: 40px !important; }
  html.rt-child-home .child-main .stat-grid .stat-card .sc-big { font-size: 18px !important; min-width: 28px !important; text-align: center !important; }
  html.rt-child-home .child-main .stat-grid .stat-card .sc-mid,
  html.rt-child-home .child-main .guard-row .gd-card .gd-mid { min-width: 0 !important; }
  html.rt-child-home .child-main .stat-grid .stat-card .sc-mid strong,
  html.rt-child-home .child-main .guard-row .gd-card .gd-mid strong { font-size: 15px !important; line-height: 1.35 !important; text-align: left !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; display: block !important; }
  html.rt-child-home .child-main .stat-grid .stat-card .sc-mid span,
  html.rt-child-home .child-main .guard-row .gd-card .gd-mid span {
    font-size: 13px !important; line-height: 1.4 !important;
    display: -webkit-box !important; -webkit-line-clamp: 2 !important; -webkit-box-orient: vertical !important; overflow: hidden !important;
  }
  html.rt-child-home .child-main .guard-row .gd-card .gd-ico { width: 36px !important; height: 36px !important; flex-basis: 36px !important; }
  html.rt-child-home .child-main .guard-row .gd-card .gd-go { display: none !important; }
  html.rt-child-home .child-main .fam-cards .fam-card { padding: 12px !important; }
}

/* ---------- s4. Elder ≥1024 teach routes: same website shell ------------ */
@media (min-width: 1024px) {
  html.rt-elder.rt-teach body.elder-mode { background: var(--zr-paper) !important; background-image: none !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app {
    width: 100% !important; max-width: none !important; margin: 0 !important;
    padding: 0 !important; background: transparent !important; box-shadow: none !important;
  }
  html.rt-elder.rt-teach body.elder-mode .elder-top {
    position: sticky !important; top: 0 !important; z-index: 880 !important;
    height: 76px !important; min-height: 76px !important; box-sizing: border-box !important;
    padding: 0 max(32px, calc((100% - 1280px) / 2)) !important;
    display: flex !important; align-items: center !important; justify-content: space-between !important;
    background: rgba(255, 253, 250, .96) !important; background-image: none !important;
    -webkit-backdrop-filter: blur(12px) !important; backdrop-filter: blur(12px) !important;
    border-bottom: 1px solid var(--zr-line) !important; box-shadow: none !important;
  }
  html.rt-elder.rt-teach body.elder-mode .elder-top .top-left { padding: 0 !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-top .avatar-fallback.big { width: 44px !important; height: 44px !important; font-size: 20px !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-top .top-name strong { font-size: 20px !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-top .top-sub { display: none !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-top .sos-btn {
    height: 44px !important; min-height: 44px !important; padding: 0 18px !important; font-size: 18px !important;
    background: #fff !important; background-image: none !important; color: #B54A42 !important;
    border: 1.5px solid rgba(181, 74, 66, .45) !important; box-shadow: none !important; animation: none !important;
  }
  html.rt-elder.rt-teach body.elder-mode .elder-top .sos-btn * { color: #B54A42 !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-top .sos-btn::before,
  html.rt-elder.rt-teach body.elder-mode .elder-top .sos-btn::after { display: none !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav {
    position: fixed !important; top: 14px !important; bottom: auto !important;
    left: 50% !important; right: auto !important; transform: translateX(-50%) !important;
    width: auto !important; max-width: none !important; height: 48px !important;
    padding: 4px !important; gap: 4px !important; margin: 0 !important;
    display: flex !important; flex-direction: row !important; align-items: stretch !important;
    background: #F3ECE3 !important; border: 1px solid var(--zr-line) !important;
    border-radius: 999px !important; box-shadow: none !important;
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    z-index: 890 !important;
  }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button {
    flex: 0 0 auto !important; flex-direction: row !important; gap: 8px !important;
    height: 38px !important; min-height: 0 !important; min-width: 0 !important; width: auto !important;
    padding: 0 20px !important; border-radius: 999px !important;
    background: transparent !important; box-shadow: none !important; color: var(--ink-2) !important;
  }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button svg { width: 22px !important; height: 22px !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button .nav-label { font-size: 18px !important; line-height: 1 !important; font-weight: 600 !important; color: inherit !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button.on { background: #fff !important; color: var(--brand) !important; box-shadow: 0 1px 3px rgba(35, 26, 20, .10) !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button.on .nav-label { font-weight: 800 !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button::before,
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-nav button::after { display: none !important; }
  html.rt-elder.rt-teach body.elder-mode .elder-app > .elder-main {
    padding: 28px max(32px, calc((100% - 1280px) / 2)) 48px !important; box-sizing: border-box !important;
  }
  html.rt-elder.rt-teach body.elder-mode .gva-fab { right: max(24px, calc((100% - 1280px) / 2 - 72px)) !important; bottom: 32px !important; }
  html.rt-elder.rt-teach body.elder-mode .global-voice { right: max(24px, calc((100% - 1280px) / 2 - 72px)) !important; bottom: 100px !important; }
}
/* end §v548s */
/* s5. follow-ups: teach image fills its strip · phone greeting one line ·
       unbound family = one-line empty row · child sidebar column continuous */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner { grid-template-rows: auto !important; }
  html.rt-elder-home body.elder-mode .page > .teach-feat .teach-banner > img {
    align-self: stretch !important; height: auto !important; min-height: 100% !important; max-height: none !important;
    width: 100% !important; object-fit: cover !important; display: block !important;
  }
}
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome h2 { font-size: 28px !important; text-align: left !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome .big-date strong { font-size: 18px !important; }
}
@media (max-width: 359px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome h2 { font-size: 24px !important; }
}
html.rt-child-home .child-main .fam-empty {
  display: flex !important; align-items: center !important; justify-content: flex-start !important; gap: 10px !important;
  min-height: 0 !important; padding: 12px 16px !important; margin: 0 !important;
  background: #FBF8F4 !important; border: 1px dashed #D9CBBB !important; border-radius: 12px !important;
  text-align: left !important; font-size: 15px !important; color: var(--ink-2) !important;
}
html.rt-child-home .child-main .fam-empty a,
html.rt-child-home .child-main .fam-empty button { margin-left: auto !important; font-weight: 700 !important; color: var(--primary) !important; text-decoration: none !important; }
@media (min-width: 1200px) {
  html.rt-child-home .child-main > .page > .card.pad:has(.fam-empty) { grid-column: 1 / -1 !important; grid-row: auto !important; }
  html.rt-child-home .child-main > .page > .card.pad:has(.fam-empty) .sec-head { margin-bottom: 10px !important; }
  body:not(.elder-mode) .child-shell { background: linear-gradient(to right, #FFFDFA 0, #FFFDFA 239px, var(--zr-line) 239px, var(--zr-line) 240px, var(--zr-paper) 240px) !important; }
}
/* end §v548s-b */
@media (max-width: 1023px) {
  html.rt-child-home .child-main .stat-grid .stat-card { column-gap: 8px !important; padding: 12px 10px !important; }
  html.rt-child-home .child-main .stat-grid .stat-card > svg.ring { width: 34px !important; height: 34px !important; }
  html.rt-child-home .child-main .stat-grid .stat-card .sc-mid span { font-size: 12.5px !important; }
  body:not(.elder-mode) .mobile-nav .badge { top: 4px !important; right: calc(50% - 24px) !important; }
}
/* end §v548s-c */

/* ==========================================================================
   §v548t (2026-11-02)  Fill family/guard rows · homepage shell for teach hub,
   sims, health, settings(更多), chat.  Append-only.
   Frozen: html.rt-phone-tutorial (手机教程 brand/model state inside
   /elder/tutorial, set by index.html when .entry-row is absent) keeps the
   v548s shell only — no content rules here target .brand-* / .model-*.
   ========================================================================== */

/* ---------- t1. Elder home ≥1024: pairs never split, extras after ------- */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .bind-tip     { order: 5 !important;  grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .big-day      { order: 6 !important;  grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome      { order: 10 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card{ order: 11 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner   { order: 30 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row     { order: 31 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row   { order: 50 !important; grid-column: span 5 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { order: 51 !important; grid-column: span 7 !important; }
  /* whichever of the pair is missing, the other takes the full row */
  html.rt-elder-home body.elder-mode .elder-main > .page:not(:has(> .guard-banner)) > .family-row,
  html.rt-elder-home body.elder-mode .elder-main > .page:not(:has(> .family-row)) > .guard-banner { grid-column: 1 / -1 !important; }
  /* info strips (晨报 / 关怀 / 用药 / 动态) always after the pair, full row */
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning   { order: 60 !important; grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .love-card { order: 62 !important; grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .med-card  { order: 64 !important; grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .dyn-row   { order: 66 !important; grid-column: 1 / -1 !important; }
  /* 晨报 + 关怀 together: share one row 7|5 */
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .morning):has(> .love-card) > .morning   { grid-column: span 7 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .morning):has(> .love-card) > .love-card { grid-column: span 5 !important; order: 61 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat { order: 70 !important; }

  /* family | guard: both cards same height, content centred, no orphan look */
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row,
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { align-self: stretch !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { align-content: center !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { padding: 24px 32px !important; column-gap: 22px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy strong,
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy b,
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy h3 { font-size: 24px !important; line-height: 1.3 !important; }

  /* 晨报 strip: tag · items · hint · play — one horizontal row */
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning {
    display: flex !important; flex-wrap: wrap !important; align-items: center !important;
    gap: 10px 28px !important; padding: 16px 24px !important; min-height: 0 !important; height: auto !important;
    background: #fff !important; border: 1px solid var(--zr-line) !important; border-radius: 22px !important; box-shadow: var(--e1) !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning > .mo-head { display: contents !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning .mo-tag { order: 0 !important; margin: 0 !important; font-size: 17px !important; font-weight: 800 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning .mo-row { order: 1 !important; margin: 0 !important; flex: 0 1 auto !important; display: flex !important; align-items: center !important; gap: 8px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning .mo-row p { margin: 0 !important; font-size: 17px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning .mo-hint { order: 8 !important; margin: 0 0 0 auto !important; font-size: 15px !important; color: var(--ink-3, #8A7B6C) !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .morning .mo-play { order: 9 !important; margin: 0 !important; flex: 0 0 auto !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .love-card,
  html.rt-elder-home body.elder-mode .elder-main > .page > .med-card {
    min-height: 0 !important; height: auto !important; padding: 16px 24px !important;
    border: 1px solid var(--zr-line) !important; border-radius: 22px !important; box-shadow: var(--e1) !important;
  }
}

/* ---------- t2. Elder ≥1024: one top-bar SOS style on every page -------- */
@media (min-width: 1024px) {
  html.rt-elder body.elder-mode .elder-top .sos-btn {
    height: 44px !important; min-height: 44px !important; padding: 0 18px !important; font-size: 18px !important;
    background: #fff !important; background-image: none !important; color: #B54A42 !important;
    border: 1.5px solid rgba(181, 74, 66, .45) !important; box-shadow: none !important; animation: none !important;
  }
  html.rt-elder body.elder-mode .elder-top .sos-btn * { color: #B54A42 !important; }
  html.rt-elder body.elder-mode .elder-top .sos-btn::before,
  html.rt-elder body.elder-mode .elder-top .sos-btn::after { display: none !important; }
}

/* ---------- t3. 教学 hub (/elder/tutorial with .entry-row) ≥1024 -------- */
@media (min-width: 1024px) {
  html.rt-elder.rt-teach-hub body.elder-mode .elder-app > .elder-main > * { max-width: 1280px !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) {
    display: grid !important; grid-template-columns: 7fr 5fr !important;
    grid-template-rows: auto auto auto auto 1fr !important;
    column-gap: 24px !important; row-gap: 20px !important; align-items: start !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > * { grid-column: 1 / -1; margin: 0 !important; min-width: 0 !important; }
  /* search + categories: one toolbar row */
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .zj-tut-bar {
    grid-row: 1 !important; grid-column: 1 / -1 !important;
    display: flex !important; align-items: center !important; gap: 16px !important;
    padding: 12px !important; background: #fff !important; border: 1px solid var(--zr-line) !important;
    border-radius: 22px !important; box-shadow: var(--e1) !important; position: static !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .zj-tut-bar .zj-tut-search { flex: 0 0 320px !important; margin: 0 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .zj-tut-bar .zj-tut-search input {
    height: 48px !important; border-radius: 999px !important; background: #FBF8F4 !important; border: 1px solid var(--zr-line) !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .zj-tut-bar .zj-tut-cats {
    flex: 1 1 auto !important; display: flex !important; flex-wrap: nowrap !important; gap: 6px !important;
    margin: 0 !important; padding: 0 !important; min-width: 0 !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .zj-tut-bar .zj-tut-cats > button {
    flex: 1 1 0 !important; min-width: 0 !important; width: auto !important; height: 48px !important; margin: 0 !important;
    padding: 0 8px !important; border-radius: 999px !important; font-size: 18px !important; white-space: nowrap !important;
  }
  /* title + today/learning on the left, video on the right */
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .page-head,
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .daily-empty,
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .task-card,
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .learn-card { grid-column: 1 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .head-illu {
    grid-column: 2 !important; grid-row: 2 / span 4 !important;
    width: 100% !important; height: auto !important; min-height: 280px !important; max-height: none !important; aspect-ratio: auto !important;
    align-self: stretch !important;
    object-fit: cover !important; border-radius: 22px !important; display: block !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .daily-empty,
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .task-card,
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .learn-card {
    background: #fff !important; border: 1px solid var(--zr-line) !important; border-radius: 22px !important;
    box-shadow: var(--e1) !important; padding: 20px 24px !important;
  }
  /* entries: 4-up horizontal cards (icon · title/sub) */
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row {
    display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 16px !important;
    width: 100% !important; max-width: none !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card {
    display: flex !important; flex-direction: row !important; align-items: center !important; justify-content: flex-start !important;
    gap: 14px !important; width: auto !important; min-height: 92px !important; height: auto !important; margin: 0 !important;
    padding: 16px 18px !important; text-align: left !important;
    background: #fff !important; border: 1px solid var(--zr-line) !important; border-radius: 18px !important; box-shadow: var(--e1) !important;
    transition: border-color .15s, box-shadow .15s !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card:not(.show).zj-tut-card { display: none !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card:hover { border-color: rgba(194, 94, 63, .45) !important; box-shadow: var(--e2) !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card.on { border-color: var(--zr-line) !important; background: #fff !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card > span:first-child {
    flex: 0 0 56px !important; width: 56px !important; height: 56px !important; margin: 0 !important;
    display: flex !important; align-items: center !important; justify-content: center !important;
    border-radius: 16px !important; background: #FBF3EC !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card > span:first-child img { width: 36px !important; height: 36px !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card > div {
    display: flex !important; flex-direction: column !important; align-items: flex-start !important; gap: 2px !important; min-width: 0 !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card strong { font-size: 20px !important; line-height: 1.3 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card small { font-size: 15px !important; line-height: 1.35 !important; color: var(--ink-2) !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > .guard-entry {
    border-radius: 22px !important; border: 1px solid var(--zr-line) !important; box-shadow: var(--e1) !important;
  }
}
@media (min-width: 1360px) {
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
}

/* ---------- t4. *-sim ≥1024: practice lab — phone left, task right ------ */
@media (min-width: 1024px) {
  html.rt-elder.rt-sim body.elder-mode .elder-app > .elder-main > *:has(> .sim-phone):has(> .teach-bar) {
    max-width: 1080px !important;
    display: grid !important; grid-template-columns: 440px minmax(0, 1fr) !important;
    grid-template-rows: auto auto auto auto auto 1fr !important;
    column-gap: 32px !important; row-gap: 16px !important; align-items: start !important;
  }
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > * { grid-column: 2; margin: 0 !important; min-width: 0 !important; }
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .v407-back,
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .page-head,
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .lead { grid-column: 1 / -1 !important; }
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .v407-back { justify-self: start !important; }
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .sim-phone {
    grid-column: 1 !important; grid-row: 4 / span 3 !important; justify-self: center !important;
  }
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .teach-bar,
  html.rt-elder.rt-sim body.elder-mode .elder-main > *:has(> .sim-phone):has(> .teach-bar) > .stages {
    background: #fff !important; border-radius: 22px !important; box-shadow: var(--e1) !important;
  }
}

/* ---------- t5. 健康 ≥1024: dashboard grid ------------------------------- */
@media (min-width: 1024px) {
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) {
    max-width: 1280px !important; margin: 0 auto !important;
    display: grid !important; grid-template-columns: repeat(12, minmax(0, 1fr)) !important; gap: 20px 24px !important; align-items: stretch !important;
  }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > * { grid-column: 1 / -1; margin: 0 !important; min-width: 0 !important; max-width: none !important; width: auto !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .page-head {
    display: flex !important; flex-wrap: nowrap !important; align-items: center !important; gap: 12px !important; padding: 0 !important;
  }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .page-head .page-title { margin: 0 auto 0 0 !important; white-space: nowrap !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .page-head > .btn {
    flex: 0 0 auto !important; width: auto !important; height: 48px !important; min-height: 48px !important; margin: 0 !important;
    padding: 0 22px !important; border-radius: 999px !important; font-size: 18px !important; box-shadow: none !important;
  }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .page-head > .btn-primary { background: var(--primary) !important; background-image: none !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .page-head > .btn-ghost { background: #fff !important; border: 1px solid var(--zr-line) !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .hero-banner { grid-column: span 5 !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; border-radius: 22px !important; border: 1px solid var(--zr-line) !important; box-shadow: var(--e1) !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .hero-banner .hb-img { flex: 1 1 auto !important; width: 100% !important; height: auto !important; min-height: 150px !important; object-fit: cover !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .score-card { grid-column: span 7 !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .week-say { grid-column: span 5 !important; display: flex !important; align-items: center !important; justify-content: space-between !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .wr-card { grid-column: span 7 !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .sym-row { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 20px 24px !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .sym-row > .care-card { margin: 0 !important; min-height: 0 !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > div:has(> .med-sec) { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 20px 24px !important; align-items: stretch !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > div:has(> .med-sec) > * { max-width: none !important; width: auto !important; margin: 0 !important; }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > section.card,
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > div > section.card,
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .sym-row > .care-card {
    border-radius: 22px !important; border: 1px solid var(--zr-line) !important; box-shadow: var(--e1) !important; background: #fff !important;
  }
}

/* ---------- t6. 更多 / 设置 ≥1024: two balanced columns ------------------ */
@media (min-width: 1024px) {
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) {
    max-width: 1280px !important; margin: 0 auto !important;
    display: block !important; columns: 2 !important; column-gap: 24px !important;
  }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > .page-head { column-span: all !important; margin: 0 0 20px !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section {
    display: block; break-inside: avoid !important; -webkit-column-break-inside: avoid !important;
    width: 100% !important; max-width: none !important; margin: 0 0 24px !important; box-sizing: border-box !important;
    border-radius: 22px !important; border: 1px solid var(--zr-line) !important; box-shadow: var(--e1) !important; background: #fff !important;
  }
}

/* ---------- t7. 聊天 ≥1024: one framed panel like the home cards -------- */
@media (min-width: 1024px) {
  html.rt-elder-chat body.elder-mode .elder-main .chat-page {
    background: #fff !important; border: 1px solid var(--zr-line) !important; border-radius: 22px !important;
    box-shadow: var(--e1) !important; overflow: hidden !important;
    height: calc(100vh - 76px - 28px - 77px - 48px) !important; min-height: 520px !important;
  }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > .conv-pane {
    background: #FBF8F4 !important; border: 0 !important; border-right: 1px solid var(--zr-line) !important; border-radius: 0 !important; box-shadow: none !important;
  }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > section { background: #fff !important; border: 0 !important; box-shadow: none !important; border-radius: 0 !important; }
}
/* end §v548t */

/* ==========================================================================
   §v548u (2026-11-02)  Densify 家人 / 防骗课堂 card interiors (≥1024)
   u1 family: member = full-bleed tinted strip; call/video → wide filled pills
   u2 guard: icon | copy | arrow-panel; soft tinted right zone + faint shield
   (no copy change; 手机教程 untouched; phone layout untouched)
   ========================================================================== */
@media (min-width: 1024px) {
  /* u1 — family member strip */
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row { padding: 16px 20px 20px !important; gap: 12px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) {
    flex: 1 1 100% !important; width: 100% !important; max-width: none !important; box-sizing: border-box !important;
    display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: center !important; justify-content: flex-start !important; text-align: left !important; gap: 14px !important;
    height: auto !important; min-height: 84px !important; padding: 12px 12px 12px 14px !important;
    background: linear-gradient(90deg, #FBF3EC 0%, #FDF8F3 100%) !important;
    border: 1px solid #F0E2D6 !important; border-radius: 18px !important; box-shadow: none !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-av {
    width: 60px !important; height: 60px !important; flex: 0 0 60px !important; font-size: 26px !important;
    box-shadow: 0 0 0 3px #fff !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-name {
    flex: 1 1 auto !important; min-width: 0 !important; font-size: 27px !important; font-weight: 700 !important;
    text-align: left !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-acts {
    display: flex !important; flex: 0 0 auto !important; gap: 10px !important; margin-left: auto !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-acts > button {
    width: 76px !important; min-width: 76px !important; height: 56px !important; border-radius: 16px !important;
    display: inline-flex !important; align-items: center !important; justify-content: center !important;
    border: 0 !important; box-shadow: 0 1px 0 rgba(0,0,0,.04) !important; cursor: pointer;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-acts > button:first-child { background: var(--success-tint) !important; color: var(--success) !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-acts > button:last-child:not(:first-child) { background: #F6DED6 !important; color: #B4532F !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-acts > button svg { width: 26px !important; height: 26px !important; }
  /* 2+ members: compact 2-up, smaller pills so names still fit */
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row:has(> .f-card:not(.add) ~ .f-card:not(.add)) > .f-card:not(.add) { flex: 1 1 calc(50% - 6px) !important; width: auto !important; min-height: 76px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row:has(> .f-card:not(.add) ~ .f-card:not(.add)) > .f-card:not(.add) .f-acts > button { width: 52px !important; min-width: 52px !important; height: 52px !important; }

  /* u2 — guard banner: filled row, no dead centre */
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner {
    position: relative !important; overflow: hidden !important; isolation: isolate;
    grid-template-columns: auto minmax(0, 1fr) auto !important; column-gap: 22px !important;
    padding: 22px 22px 22px 30px !important;
    background: linear-gradient(90deg, #fff 0%, #fff 42%, #F1F5EF 72%, var(--success-tint) 100%) !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner::after {
    content: "" !important; position: absolute !important; z-index: -1 !important; pointer-events: none !important;
    right: 120px !important; top: 50% !important; width: 150px !important; height: 150px !important; transform: translateY(-50%) rotate(-8deg) !important;
    background: url("/assets/h-guard-D3DhLONT.png") center / contain no-repeat !important; opacity: .13 !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner > svg.zj-li { width: 64px !important; height: 64px !important; padding: 15px !important; background: var(--success-tint) !important; border-radius: 18px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy strong { font-size: 27px !important; line-height: 1.25 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-copy span { font-size: 22px !important; line-height: 1.4 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-arrow {
    width: 64px !important; height: 72px !important; min-height: 0 !important; align-self: center !important; border-radius: 18px !important;
    background: var(--success) !important; color: #fff !important; font-size: 26px !important; font-weight: 700 !important;
    box-shadow: 0 6px 16px rgba(94,127,99,.25) !important;
  }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-acts > button { width: 56px !important; min-width: 56px !important; height: 52px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) .f-av { width: 52px !important; height: 52px !important; flex-basis: 52px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner::after { right: 96px !important; width: 120px !important; height: 120px !important; }
}
/* end §v548u */

/* ==========================================================================
   §v548v (2026-11-02)  Cohesive home: fewer floating boxes, 3 zones
   v1 ≥1024 zone 1 "今天" = ONE white sheet behind welcome/progress/SOS/
      care/family/guard (.page::before, explicit placement), hairline
      (.page::after) under greeting row; inner blocks become frameless or
      quiet tinted wells. SOS stays the terracotta anchor.
   v2 zone 2 手机教学 strip: same sheet chrome, aligned to zone edges.
   v3 zone 3 常用功能: .grid = one board; tiles = tinted wells, no frames.
   v4 phone: welcome/progress/care/grid quieter chrome only (no layout move).
   v5 健康/更多/聊天/教学 hub ≥1024: same quiet chrome (no shadow, soft line).
   Append-only. 手机教程 (rt-phone-tutorial) untouched. No copy change.
   ========================================================================== */
:root { --zv-line: #EEE5DA; --zv-well: #FAF5EF; --zv-sheet-sh: 0 1px 2px rgba(35,26,20,.035), 0 10px 30px rgba(35,26,20,.045); }

/* ---------- v1. zone 1 sheet (only when the standard set is present) ---- */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) {
    row-gap: 18px !important; padding-top: 22px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day))::before {
    content: "" !important; display: block !important; order: -1 !important;
    grid-row: 1 / 4 !important; grid-column: 1 / -1 !important; z-index: 0 !important;
    margin: -22px -22px -22px !important; pointer-events: none !important;
    background: #fff !important; border: 1px solid var(--zv-line) !important; border-radius: 28px !important; box-shadow: var(--zv-sheet-sh) !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)):not(:has(> .family-row)):not(:has(> .guard-banner))::before { grid-row: 1 / 3 !important; }
  /* hairline under the greeting row */
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day))::after {
    content: "" !important; display: block !important; order: -1 !important;
    grid-row: 2 !important; grid-column: 1 / -1 !important; align-self: start !important; z-index: 0 !important;
    height: 1px !important; margin: -10px 0 0 !important; background: var(--zv-line) !important; pointer-events: none !important;
  }
  /* explicit placement so the sheet may overlap (core six only) */
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > :is(.welcome, .progress-card, .sos-banner, .care-row, .family-row, .guard-banner) { z-index: 1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > .welcome       { grid-row: 1 !important; grid-column: 1 / 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > .progress-card { grid-row: 1 !important; grid-column: 6 / 13 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > .sos-banner    { grid-row: 2 !important; grid-column: 1 / 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > .care-row      { grid-row: 2 !important; grid-column: 6 / 13 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > .family-row    { grid-row: 3 !important; grid-column: 1 / 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > .guard-banner  { grid-row: 3 !important; grid-column: 6 / 13 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)):not(:has(> .guard-banner)) > .family-row,
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)):not(:has(> .family-row)) > .guard-banner { grid-column: 1 / -1 !important; }
  /* whatever follows the sheet clears its 22px bleed */
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)) > :is(.morning, .love-card, .med-card, .dyn-row, .teach-feat) { margin-top: 30px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day)):has(> :is(.morning, .love-card, .med-card, .dyn-row)) > .teach-feat { margin-top: 6px !important; }

  /* inner blocks: frameless / quiet wells */
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome {
    background: transparent !important; background-image: none !important; border: 0 !important; box-shadow: none !important; padding-left: 8px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome .w-btn { background: var(--zv-well) !important; border-color: transparent !important; box-shadow: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .progress-card {
    background: transparent !important; border: 0 !important; box-shadow: none !important; border-radius: 0 !important;
    padding-right: 4px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row { gap: 18px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card,
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row {
    background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 20px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > .f-card:not(.add) { background: #fff !important; border-color: var(--zv-line) !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row .zj-fam-more,
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > header button,
  html.rt-elder-home body.elder-mode .elder-main > .page > .family-row > div:first-child button { background: #fff !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner { border: 0 !important; box-shadow: none !important; border-radius: 20px !important;
    background: linear-gradient(90deg, var(--zv-well) 0%, #F4F3EC 45%, #EBF1E9 75%, var(--success-tint) 100%) !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner > svg.zj-li { background: #fff !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .guard-banner .guard-arrow { box-shadow: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .sos-banner { border-radius: 20px !important; box-shadow: 0 8px 20px rgba(181, 74, 50, .18) !important; }

  /* ---------- v2. zone 2 手机教学 strip, same sheet chrome ---------------- */
  html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat { margin-left: -22px !important; margin-right: -22px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat > .teach-banner {
    border: 1px solid var(--zv-line) !important; border-radius: 28px !important; box-shadow: var(--zv-sheet-sh) !important; overflow: hidden !important;
  }
  /* other full-row strips after the sheet: align + quiet */
  html.rt-elder-home body.elder-mode .elder-main > .page > :is(.morning, .love-card, .med-card, .dyn-row) {
    margin-left: -22px !important; margin-right: -22px !important; border-color: var(--zv-line) !important; box-shadow: none !important; border-radius: 22px !important;
  }

  /* ---------- v3. zone 3 常用功能 = one board ----------------------------- */
  html.rt-elder-home body.elder-mode .elder-main > .page > .grid {
    margin: 10px -22px 0 !important; padding: 22px 22px 18px !important;
    background: #fff !important; border: 1px solid var(--zv-line) !important; border-radius: 28px !important; box-shadow: var(--zv-sheet-sh) !important;
    gap: 12px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .grid::before { margin: 0 0 4px 6px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .grid > .zg-more { margin-top: 4px !important; }
}

/* ---------- v3/v4. board + wells at every width ------------------------- */
html.rt-elder-home body.elder-mode .elder-main > .page > .grid > .g-card {
  background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 18px !important;
  transition: background-color .15s ease !important;
}
html.rt-elder-home body.elder-mode .elder-main > .page > .grid > .g-card:hover { background: #F5ECE2 !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .grid > .g-card .g-ico { background: #fff !important; }
html.rt-elder-home body.elder-mode .elder-main > .page > .grid > .zg-more {
  background: transparent !important; border: 0 !important; border-top: 1px solid var(--zv-line) !important; border-radius: 0 !important; box-shadow: none !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-item {
  background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 16px !important;
}
html.rt-elder-home body.elder-mode .progress-card .pr-item .pr-ring-in { background: #fff !important; }
@media (max-width: 1023px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .grid {
    padding: 16px 14px 10px !important; background: #fff !important; border: 1px solid var(--zv-line) !important; border-radius: 22px !important; box-shadow: none !important; gap: 10px !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > :is(.progress-card, .care-row > .care-card, .family-row, .guard-banner, .teach-feat > .teach-banner, .morning, .love-card, .med-card) {
    border-color: var(--zv-line) !important; box-shadow: none !important;
  }
  html.rt-elder-home body.elder-mode .elder-main > .page > .care-row > .care-card { border-color: var(--zv-line) !important; box-shadow: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .welcome { border-color: transparent !important; box-shadow: none !important; }
}

/* ---------- v5. other elder pages ≥1024: quiet chrome ------------------- */
@media (min-width: 1024px) {
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) section.card,
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) .care-card,
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .score-card,
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section,
  html.rt-elder-chat body.elder-mode .elder-main .chat-page,
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div:has(> .entry-row) > :is(.zj-tut-bar, .daily-empty, .task-card, .learn-card, .guard-entry),
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card {
    border-color: var(--zv-line) !important; box-shadow: none !important;
  }
  html.rt-elder-health body.elder-mode .elder-main > div:has(> .score-card) > .score-card,
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section,
  html.rt-elder-chat body.elder-mode .elder-main .chat-page { box-shadow: var(--zv-sheet-sh) !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div > .entry-row > .entry-card:hover { box-shadow: 0 4px 14px rgba(35,26,20,.06) !important; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):not(:has(> .bind-tip)):not(:has(> .big-day))::before { margin: -16px -14px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > :is(.teach-feat, .morning, .love-card, .med-card, .dyn-row) { margin-left: -14px !important; margin-right: -14px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .grid { margin-left: -14px !important; margin-right: -14px !important; padding: 18px 14px 14px !important; }
}
/* v1b. same sheet when the 还没有绑定家人 tip is shown: tip sits on top, inside */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) { row-gap: 18px !important; padding-top: 22px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day))::before { content: "" !important; display: block !important; grid-row: 1 / 5 !important; grid-column: 1 / -1 !important; z-index: 0 !important; margin: -22px !important; pointer-events: none !important; background: #fff !important; border: 1px solid var(--zv-line) !important; border-radius: 28px !important; box-shadow: var(--zv-sheet-sh) !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)):not(:has(> .family-row)):not(:has(> .guard-banner))::before { grid-row: 1 / 4 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day))::after { content: "" !important; display: block !important; grid-row: 3 !important; grid-column: 1 / -1 !important; align-self: start !important; z-index: 0 !important; height: 1px !important; margin: -10px 0 0 !important; background: var(--zv-line) !important; pointer-events: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > :is(.bind-tip, .welcome, .progress-card, .sos-banner, .care-row, .family-row, .guard-banner) { z-index: 1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .bind-tip { grid-row: 1 !important; grid-column: 1 / -1 !important; box-shadow: none !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .welcome       { grid-row: 2 !important; grid-column: 1 / 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .progress-card { grid-row: 2 !important; grid-column: 6 / 13 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .sos-banner    { grid-row: 3 !important; grid-column: 1 / 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .care-row      { grid-row: 3 !important; grid-column: 6 / 13 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .family-row    { grid-row: 4 !important; grid-column: 1 / 6 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > .guard-banner  { grid-row: 4 !important; grid-column: 6 / 13 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)):not(:has(> .guard-banner)) > .family-row,
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)):not(:has(> .family-row)) > .guard-banner { grid-column: 1 / -1 !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)) > :is(.morning, .love-card, .med-card, .dyn-row, .teach-feat) { margin-top: 30px !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day)):has(> :is(.morning, .love-card, .med-card, .dyn-row)) > .teach-feat { margin-top: 6px !important; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder-home body.elder-mode .elder-main > .page:has(> .welcome):has(> .progress-card):has(> .sos-banner):has(> .care-row):has(> .bind-tip):not(:has(> .big-day))::before { margin: -16px -14px !important; }
}
/* v2b. teach strip: one frame only (outer), no double edge */
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat { border: 1px solid var(--zv-line) !important; border-radius: 28px !important; box-shadow: var(--zv-sheet-sh) !important; overflow: hidden !important; background: #fff !important; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .teach-feat > .teach-banner { border: 0 !important; box-shadow: none !important; border-radius: 0 !important; }
}
/* end §v548v */

/* ==========================================================================
   §v548w (2026-11-02)  Zones beyond home + home rail + 晨报 pager
   w1 首页 ≥1024: left vertical index rail (#zj-side-rail, own node in body):
      常用 报平安/求助/家人/教学/健康 + 收藏 (first 3 ★ tiles).
   w2 首页 ≥1024: 「今日晨报」 = page switcher. Page 1 = 今天 zone, bar sits
      at the viewport bottom; page 2 = 教学 + 常用功能, bar sticks under the
      header. html scroll-snap (mandatory; proximity when 更多功能 expanded).
   w3 教学 hub: 今日学 = one sheet (search/cats + today + illu); one board
      with 学一学 band (4 core) + 练一练 (模拟, first 12, 展开全部).
   w4 健康: 3 sheets (今天评分 / 活动与自评 / 本周与用药), inner = wells.
   w5 更多: two grouped sheets (我的设置 | 家人与服务), hairline rows.
   Append-only. 手机教程 (rt-phone-tutorial) untouched. No copy change.
   ========================================================================== */

/* ---------- w1. home left rail ---------------------------------------- */
.zj-side-rail { display: none; }
@media (min-width: 1024px) {
  html.rt-elder-home.zj-has-rail:not(.rt-teach) body.elder-mode .elder-app > .elder-main { padding-left: max(136px, calc((100% - 1280px) / 2)) !important; }
  html.rt-elder-home.zj-has-rail body.elder-mode > .zj-side-rail:not([hidden]) {
    display: flex !important; flex-direction: column; align-items: stretch; gap: 4px;
    position: fixed; z-index: 860; left: var(--zj-rail-l, 20px); top: calc(76px + (100vh - 76px) / 2); transform: translateY(-50%);
    width: 84px; max-height: calc(100vh - 100px); overflow-y: auto; scrollbar-width: none; box-sizing: border-box;
    padding: 10px 6px; background: #fff; border: 1px solid var(--zv-line); border-radius: 26px; box-shadow: var(--zv-sheet-sh);
  }
  .zj-side-rail::-webkit-scrollbar { display: none; }
  .zj-side-rail .zj-sr-cap { font-size: 14px; font-weight: 700; color: var(--ink-3, #8A7B6C); text-align: center; letter-spacing: 2px; padding: 2px 0 4px; }
  .zj-side-rail .zj-sr-it {
    appearance: none; border: 0; background: transparent; cursor: pointer; font: inherit; color: var(--ink-1, #2B211A);
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
    min-height: 64px; padding: 6px 2px; border-radius: 18px; transition: background-color .15s ease;
  }
  .zj-side-rail .zj-sr-it:hover, .zj-side-rail .zj-sr-it:focus-visible { background: var(--zv-well); outline: none; }
  .zj-side-rail .zj-sr-it:active { background: #F3E8DC; }
  .zj-side-rail .zj-sr-ico { width: 30px; height: 30px; padding: 7px; box-sizing: content-box; border-radius: 14px; background: var(--zv-well); color: #9A6A4B; }
  .zj-side-rail .zj-sr-it span { font-size: 16px; font-weight: 700; line-height: 1.2; white-space: nowrap; }
  .zj-side-rail .zj-sr-checkin .zj-sr-ico { background: var(--success-tint, #E7F0E6); color: var(--success, #5E7F63); }
  .zj-side-rail .zj-sr-sos .zj-sr-ico { background: #F6DED6; color: #B4532F; }
  .zj-side-rail .zj-sr-sos span { color: #B4532F; }
  .zj-side-rail .zj-sr-sep { display: flex; flex-direction: column; align-items: center; gap: 6px; margin: 4px 0 2px; }
  .zj-side-rail .zj-sr-sep i { display: block; width: 40px; height: 1px; background: var(--zv-line); }
  .zj-side-rail .zj-sr-sep span { font-size: 14px; font-weight: 700; color: var(--ink-3, #8A7B6C); letter-spacing: 2px; }
  .zj-side-rail .zj-sr-fav .zj-sr-ico { background: #fff; box-shadow: inset 0 0 0 1px var(--zv-line); }
  .zj-side-rail.zj-sr-nofav .zj-sr-sep { display: none; }
  html.rt-elder-home body.elder-mode .elder-main .family-row.zj-flash { box-shadow: 0 0 0 3px rgba(196,112,74,.45) !important; transition: box-shadow .3s ease; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder-home.zj-has-rail:not(.rt-teach) body.elder-mode .elder-app > .elder-main { padding-left: 108px !important; padding-right: 28px !important; }
  html.rt-elder-home.zj-has-rail body.elder-mode > .zj-side-rail:not([hidden]) { width: 74px; padding: 8px 4px; }
  .zj-side-rail .zj-sr-it { min-height: 62px; }
  .zj-side-rail .zj-sr-ico { width: 26px; height: 26px; }
  .zj-side-rail .zj-sr-it span { font-size: 15px; }
}
@media (max-height: 760px) and (min-width: 1024px) {
  .zj-side-rail .zj-sr-it { min-height: 58px; padding: 5px 2px; }
  .zj-side-rail .zj-sr-ico { width: 24px; height: 24px; padding: 6px; }
}

/* ---------- w2. 晨报 pager / two pages ------------------------------- */
html.rt-elder-home body.elder-mode .elder-main > .page > .zj-pgbar-fb {
  order: 60; grid-column: 1 / -1; display: flex; align-items: center; gap: 14px; min-height: 64px; box-sizing: border-box;
  padding: 10px 14px 10px 22px; background: #fff; border: 1px solid var(--zv-line); border-radius: 22px; box-shadow: none;
}
html.rt-elder-home body.elder-mode .elder-main > .page > .zj-pgbar-fb .zj-fb-tag { font-size: 17px; font-weight: 800; color: #9A6A4B; }
html.rt-elder-home body.elder-mode .elder-main > .page > .zj-pgbar-fb .zj-fb-line { font-size: 17px; color: var(--ink-2, #5A4A3E); }
.zj-pager { display: none; }
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .zj-pgbar-fb { margin-left: -22px; margin-right: -22px; margin-top: 30px; }
  html.rt-elder-home body.elder-mode .elder-main > .page > .zj-pgbar > .zj-pager {
    display: flex !important; align-items: center; gap: 8px; order: 10; margin-left: 8px; flex: 0 0 auto;
  }
  .zj-pager .zj-pg-dots { display: flex; flex-direction: column; gap: 5px; margin-right: 4px; }
  .zj-pager .zj-pg-dots i { display: block; width: 7px; height: 7px; border-radius: 50%; background: #E3D6C8; transition: background-color .2s, height .2s; }
  html:not(.zj-pg2) .zj-pager .zj-pg-dots i:first-child, html.zj-pg2 .zj-pager .zj-pg-dots i:last-child { background: #C4704A; height: 16px; border-radius: 4px; }
  .zj-pager .zj-pg-btn {
    appearance: none; cursor: pointer; font: inherit; display: inline-flex; align-items: center; gap: 6px;
    height: 52px; min-width: 120px; justify-content: center; padding: 0 18px; border-radius: 16px;
    border: 1px solid var(--zv-line); background: var(--zv-well); color: var(--ink-1, #2B211A); font-size: 18px; font-weight: 700;
  }
  .zj-pager .zj-pg-btn b { font-size: 16px; color: #C4704A; }
  .zj-pager .zj-pg-btn:hover { background: #F5ECE2; }
  html:not(.zj-pg2) .zj-pager .zj-pg-up, html.zj-pg2 .zj-pager .zj-pg-dn { display: none; }
  html:not(.zj-pg2) .zj-pager .zj-pg-dn { background: #C4704A; border-color: #C4704A; color: #fff; }
  html:not(.zj-pg2) .zj-pager .zj-pg-dn b { color: #fff; }
  html:not(.zj-snap) .zj-pager { display: none !important; }

  /* snap only when 今天 zone + bar fit one screen (JS sets html.zj-snap) */
  html.rt-elder-home.zj-snap { scroll-snap-type: y mandatory; }
  html.rt-elder-home.zj-snap.zj-pg-all { scroll-snap-type: y proximity; }
  html.rt-elder-home.zj-snap body { scroll-snap-align: start; }
  html.rt-elder-home.zj-snap body.elder-mode .elder-main > .page > .zj-p2first { scroll-snap-align: start; scroll-margin-top: var(--zj-p2m, 180px); }
  html.rt-elder-home.zj-snap body.elder-mode .elder-main > .page > .grid { scroll-snap-align: end; scroll-margin-bottom: 24px; }
  html.rt-elder-home.zj-snap body.elder-mode .elder-main > .page > .zj-pgbar {
    position: sticky !important; top: var(--zj-bar-top, 86px) !important; z-index: 840 !important;
    grid-column: 1 / -1 !important; align-self: start !important;
    background: rgba(255,255,255,.96) !important; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
    border: 1px solid var(--zv-line) !important; box-shadow: 0 6px 22px rgba(35,26,20,.07) !important;
    padding-top: 10px !important; padding-bottom: 10px !important; min-height: 72px !important;
  }
  html.rt-elder-home.zj-snap body.elder-mode .elder-main > .page:has(> .zj-pgbar):has(> .love-card) > .love-card { grid-column: 1 / -1 !important; }
  html.rt-elder-home.zj-snap body.elder-mode .elder-main > .page > .morning.zj-pgbar .mo-hint { margin-left: auto !important; }
}

/* ---------- w3. 教学 hub ------------------------------------------- */
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-board > .zj-th { display: none; }
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-board > .zj-tmore { display: none; }
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-board.zj-tfold > .entry-card.zj-tf-x { display: none !important; }
html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .zj-th {
  display: flex !important; align-items: baseline; flex-wrap: wrap; gap: 4px 14px; grid-column: 1 / -1 !important; position: relative; z-index: 1;
  padding: 4px 6px 0; margin: 0;
}
.zj-th-board > .zj-th b { font-size: 24px; font-weight: 800; color: var(--ink-1, #2B211A); letter-spacing: 1px; }
.zj-th-board > .zj-th span { font-size: 17px; color: var(--ink-3, #8A7B6C); }
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-board > .zj-tmore:not(.zj-hide) {
  display: flex !important; grid-column: 1 / -1 !important; order: 99 !important; align-items: center; justify-content: center;
  appearance: none; cursor: pointer; font: inherit; font-size: 19px; font-weight: 700; color: #9A6A4B;
  min-height: 60px; margin: 2px 0 0; border: 0; border-top: 1px solid var(--zv-line); background: transparent; border-radius: 0;
}
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-board > .zj-tmore:hover { color: #C4704A; }
/* the board: one white surface, cards become wells */
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-wrap > .zj-th-board {
  position: relative; background: #fff !important; border: 1px solid var(--zv-line) !important; border-radius: 28px !important;
  box-shadow: var(--zv-sheet-sh) !important; padding: 20px 22px 8px !important; box-sizing: border-box; isolation: isolate;
}
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .entry-card {
  background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 20px !important; position: relative; z-index: 1;
}
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .entry-card:hover { background: #F5ECE2 !important; box-shadow: none !important; }
html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .zj-th-learn { grid-row: 1 !important; }
html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .entry-card[data-zj-teach="learn"] { grid-row: 2 !important; background: #fff !important; box-shadow: 0 1px 0 rgba(35,26,20,.03), inset 0 0 0 1px #F0E2D6 !important; }
html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .entry-card[data-zj-teach="learn"]:hover { background: #FFFBF7 !important; }
html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .zj-th-prac { grid-row: 3 !important; margin-top: 14px !important; }
html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board::before {
  content: "" !important; display: block !important; grid-row: 1 / 3 !important; grid-column: 1 / -1 !important; z-index: 0 !important;
  margin: -20px -22px -14px !important; border-radius: 28px 28px 0 0 !important; pointer-events: none !important;
  background: linear-gradient(180deg, #FBF1E8 0%, #FCF6F0 100%) !important; border-bottom: 1px solid #F1E4D7 !important;
}
@media (min-width: 1024px) {
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .entry-card[data-zj-li="1"] { grid-column: 1 !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .entry-card[data-zj-li="2"] { grid-column: 2 !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .entry-card[data-zj-li="3"] { grid-column: 3 !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board > .entry-card[data-zj-li="4"] { grid-column: 4 !important; }
  /* 今日学 sheet: search/cats + heading + today + learn + illustration */
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap { position: relative; isolation: isolate; row-gap: 18px !important; padding-top: 22px !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap::before {
    content: "" !important; display: block !important; align-self: stretch !important; grid-row: 1 / 6 !important; grid-column: 1 / -1 !important; z-index: 0 !important;
    margin: -22px !important; pointer-events: none !important;
    background: #fff !important; border: 1px solid var(--zv-line) !important; border-radius: 28px !important; box-shadow: var(--zv-sheet-sh) !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > :not(.zj-th-board):not(.guard-entry) { position: relative; z-index: 1; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div.zj-th-wrap > .zj-tut-bar { grid-row: 1 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div.zj-th-wrap > .page-head { grid-row: 2 !important; grid-column: 1 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div.zj-th-wrap > :is(.daily-empty, .task-card) { grid-row: 3 !important; grid-column: 1 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div.zj-th-wrap:has(> .daily-empty) > .task-card { grid-row: 5 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div.zj-th-wrap > .learn-card { grid-row: 4 !important; grid-column: 1 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > div.zj-th-wrap > .head-illu { grid-row: 2 / 6 !important; grid-column: 2 !important; align-self: stretch !important; object-fit: cover !important; height: 100% !important; width: 100% !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .zj-th-board { grid-row: 6 !important; grid-column: 1 / -1 !important; margin: 30px -22px 0 !important; width: auto !important; max-width: none !important; justify-self: stretch !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .guard-entry { grid-row: 7 !important; grid-column: 1 / -1 !important; margin: 6px -22px 0 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .zj-tut-bar {
    background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 20px !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .zj-tut-bar input { background: #fff !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > :is(.daily-empty, .task-card, .learn-card) {
    background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 20px !important;
  }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .page-head { padding-left: 6px !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .head-illu { border-radius: 22px !important; box-shadow: none !important; border: 0 !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .guard-entry {
    border: 0 !important; box-shadow: none !important; border-radius: 22px !important;
    background: linear-gradient(90deg, var(--zv-well) 0%, #F4F3EC 45%, #EBF1E9 80%, var(--success-tint, #E7F0E6) 100%) !important;
  }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap::before { margin: -16px -14px !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .zj-th-board { margin-left: -14px !important; margin-right: -14px !important; padding: 18px 14px 6px !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main > .zj-th-wrap > .guard-entry { margin-left: -14px !important; margin-right: -14px !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board::before { margin: -18px -14px -12px !important; }
}
@media (max-width: 1023px) {
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main .zj-th-wrap > .zj-th-board { padding: 14px 12px 4px !important; border-radius: 22px !important; box-shadow: none !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-board::before { margin: -14px -12px -10px !important; border-radius: 22px 22px 0 0 !important; }
  .zj-th-board > .zj-th b { font-size: 21px; }
  .zj-th-board > .zj-th span { font-size: 15px; }
}

/* ---------- w4. 健康: three sheets ------------------------------------ */
.zj-zbg { display: none; }
@media (min-width: 1024px) {
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz {
    position: relative; isolation: isolate; row-gap: 0 !important;
    grid-template-rows: auto 30px auto 68px auto 18px auto 68px auto 18px auto 22px !important;
  }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > * { position: relative; z-index: 1; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .page-head { grid-row: 1 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .score-card { grid-row: 3 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .hero-banner { grid-row: 5 !important; grid-column: 1 / 6 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .selfcheck { grid-row: 5 !important; grid-column: 6 / 13 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .sym-row { grid-row: 7 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .week-say { grid-row: 9 !important; grid-column: 1 / 6 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .wr-card { grid-row: 9 !important; grid-column: 6 / 13 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > div:has(> .med-sec) { grid-row: 11 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .zj-zbg {
    display: block !important; z-index: 0 !important; grid-column: 1 / -1 !important; margin: -22px !important; pointer-events: none;
    background: #fff; border: 1px solid var(--zv-line); border-radius: 28px; box-shadow: var(--zv-sheet-sh);
  }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .zj-zbg[data-z="1"] { grid-row: 3 !important; background: linear-gradient(100deg, #fff 0%, #fff 55%, #FBF4ED 100%); }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .zj-zbg[data-z="2"] { grid-row: 5 / 8 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .zj-zbg[data-z="3"] { grid-row: 9 / 12 !important; }
  /* inner: frameless in zone 1, wells elsewhere */
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .score-card { background: transparent !important; border: 0 !important; box-shadow: none !important; padding-top: 4px !important; padding-bottom: 4px !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .selfcheck { background: transparent !important; border: 0 !important; box-shadow: none !important; padding-top: 6px !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .hero-banner { border: 0 !important; box-shadow: none !important; border-radius: 22px !important; overflow: hidden !important; background: var(--zv-well) !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .sym-row > .care-card,
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > :is(.week-say, .wr-card),
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > div:has(> .med-sec) > section.card {
    background: var(--zv-well) !important; border: 0 !important; box-shadow: none !important; border-radius: 20px !important;
  }
}
@media (min-width: 1024px) {
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .score-card .score-main { flex-wrap: nowrap !important; align-items: center !important; gap: 22px !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .score-card .score-copy { flex: 1 1 auto !important; width: auto !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .score-card .score-main > .btn { flex: 0 0 auto !important; width: auto !important; min-width: 240px !important; padding: 0 28px !important; margin: 0 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .score-card .score-items { margin-top: 14px !important; padding-top: 14px !important; border-top: 1px solid var(--zv-line) !important; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > .zj-zbg { margin: -16px -14px !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz { grid-template-rows: auto 24px auto 52px auto 18px auto 52px auto 18px auto 16px !important; }
}

/* ---------- w5. 更多 / 设置: two grouped sheets ------------------------- */
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section {
  margin-top: 0 !important; margin-bottom: 0 !important; border-radius: 0 !important; box-shadow: none !important;
  border: 1px solid var(--zv-line) !important; border-top-width: 0 !important; background: #fff !important;
}
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section.profile-card,
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(.code-box) {
  border-top-width: 1px !important; border-radius: 28px 28px 0 0 !important;
}
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(+ section .code-box),
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:last-of-type {
  border-radius: 0 0 28px 28px !important; margin-bottom: 0 !important;
}
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section.profile-card { background: linear-gradient(180deg, #FBF3EC 0%, #fff 100%) !important; }
html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(.code-box) { background: linear-gradient(180deg, #F3F6F1 0%, #fff 100%) !important; }
@media (max-width: 1023px) {
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) { row-gap: 0 !important; gap: 0 !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section { border-radius: 0 !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section.profile-card { border-radius: 22px 22px 0 0 !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(.code-box) { margin-top: 18px !important; border-radius: 22px 22px 0 0 !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(+ section .code-box),
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:last-of-type { border-radius: 0 0 22px 22px !important; }
}
@media (min-width: 1024px) {
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) { column-gap: 32px !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(.code-box) { break-before: column !important; -webkit-column-break-before: always !important; }
  html.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section { box-shadow: none !important; }
}
/* w3b phone: flow by order instead of fixed rows */
@media (max-width: 1023px) {
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > * { order: 5; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .zj-th-learn { order: 1 !important; grid-row: auto !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .entry-card[data-zj-teach="learn"] { order: 2 !important; grid-row: auto !important; grid-column: auto !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .zj-th-prac { order: 3 !important; grid-row: auto !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .zj-tmore { order: 9 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board::before { display: none !important; }
  html.rt-elder.rt-teach-hub:not(.zj-tfilt) body.elder-mode .elder-main .zj-th-wrap > .zj-th-board > .zj-th { flex-wrap: wrap; }
}
/* end §v548w */

/* ===== v548x 极简模式: exit sheet on elder home + injected 更多 nav item ===== */
body.elder-mode .elder-main > .page > .zj-sm-exit {
  order: 12;
  display: flex; align-items: center; gap: 14px;
  margin: 0; padding: 16px 18px;
  background: linear-gradient(135deg, #FBEEE7, #F7E3D8);
  border: 1px solid #EDCDBE; border-radius: var(--radius-lg, 22px);
  box-shadow: none; color: #5A3226;
}
.zj-sm-exit .zj-smx-ico {
  flex: 0 0 auto; width: 48px; height: 48px; border-radius: 14px;
  display: grid; place-items: center; background: #fff; color: #B85A3C;
  border: 1px solid #F0D6C9;
}
.zj-sm-exit .zj-smx-ico svg { width: 26px; height: 26px; }
.zj-sm-exit .zj-smx-txt { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.zj-sm-exit .zj-smx-txt strong { font-size: 1.15em; line-height: 1.3; color: #4A281D; }
.zj-sm-exit .zj-smx-txt small { font-size: .9em; line-height: 1.4; color: #8A5C4C; }
.zj-sm-exit .zj-smx-btn {
  flex: 0 0 auto; min-height: 56px; padding: 0 22px; border: 0; border-radius: 16px;
  background: #B85A3C; color: #fff; font: inherit; font-size: 1.08em; font-weight: 700;
  letter-spacing: .02em; cursor: pointer; white-space: nowrap;
  box-shadow: 0 4px 12px rgba(158, 74, 47, .22);
}
.zj-sm-exit .zj-smx-btn:hover { background: #A44F34; }
.zj-sm-exit .zj-smx-btn:focus-visible { outline: 3px solid #E9A88F; outline-offset: 3px; }
.zj-sm-exit .zj-smx-btn.zj-busy { opacity: .6; cursor: progress; }
@media (min-width: 1024px) {
  html.rt-elder-home body.elder-mode .elder-main > .page > .zj-sm-exit { order: 4; grid-column: 1 / -1 !important; padding: 14px 20px; }
}
@media (max-width: 520px) {
  body.elder-mode .elder-main > .page > .zj-sm-exit { flex-wrap: wrap; padding: 16px; gap: 12px; }
  .zj-sm-exit .zj-smx-txt { flex-basis: calc(100% - 62px); }
  .zj-sm-exit .zj-smx-btn { flex: 1 1 100%; min-height: 58px; }
}
/* injected 更多 nav item: same look as Vue's nav buttons */
body.elder-mode .elder-nav > .zj-sm-more { cursor: pointer; }

/* ==========================================================================
   §v548y (2026-11-02)  Phone safe-area + FAB avoidance + restore top 求助
   y1 ≤1023 elder: every route with the bottom island reserves island + FAB
      (+24px + safe-area) below content. --zj-nav-occ = measured distance from
      the island's top to the viewport bottom (set by patch-549 §v548y).
   y2 ≤1023 voice FAB: default above the island at the right edge; patch-549
      picks a free slot (right / left / raised) when it would sit on a CTA.
   y3 ≤1023 top-bar 求助 restored on home (was display:none → testers saw a
      ghost and there was no header help). Big SOS card on home unchanged.
   y4 chat chips: scrollable with edge fade + snap. y5 health head buttons
      (desktop) never stretch. y6 health note placeholder ellipsis.
   ========================================================================== */
@media (max-width: 1023px) {
  /* y1 */
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-app > .elder-main,
  html.rt-elder.rt-elder.rt-teach body.elder-mode.elder-mode .elder-app > .elder-main,
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-app > .elder-main {
    padding-bottom: calc(var(--zj-nav-occ, calc(var(--nav-h, 84px) + 34px + env(safe-area-inset-bottom, 0px))) + 52px + 28px) !important;
  }
  html.rt-elder.rt-elder.rt-nofab body.elder-mode.elder-mode .elder-app > .elder-main {
    padding-bottom: calc(var(--zj-nav-occ, calc(var(--nav-h, 84px) + 34px + env(safe-area-inset-bottom, 0px))) + 24px) !important;
  }
  /* chat keeps its own composer layout (FAB is not rendered there) */
  html.rt-elder.rt-elder.rt-elder-chat body.elder-mode.elder-mode .elder-app > .elder-main {
    padding-bottom: calc(var(--zj-nav-occ, calc(var(--nav-h, 84px) + 34px + env(safe-area-inset-bottom, 0px))) + 16px) !important;
  }
  /* y2: default slot – right edge, 14px above the island */
  html.rt-elder.rt-elder body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]),
  html.rt-elder.rt-elder.rt-teach body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]),
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]) {
    position: fixed !important; top: auto !important; left: auto !important;
    right: 14px !important; width: 52px !important; height: 52px !important;
    bottom: calc(var(--zj-nav-occ, calc(var(--nav-h, 84px) + 34px + env(safe-area-inset-bottom, 0px))) + 14px) !important;
    transition: left .18s ease, right .18s ease, bottom .18s ease !important;
  }
  html.zj-fab-l.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]) { right: auto !important; left: 14px !important; }
  html.zj-fab-u.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]) {
    bottom: calc(var(--zj-nav-occ, calc(var(--nav-h, 84px) + 34px + env(safe-area-inset-bottom, 0px))) + 14px + var(--zj-fab-up, 76px)) !important; /* v548z: lift set by JS (38/76/140) */
  }
  /* y3: real, tappable 求助 pill in the phone header on every elder route */
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-top .sos-btn,
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-top .sos-btn {
    display: inline-flex !important; visibility: visible !important; opacity: 1 !important;
    align-items: center !important; justify-content: center !important; gap: 6px !important;
    flex: 0 0 auto !important; width: auto !important; min-width: 96px !important;
    height: 48px !important; min-height: 48px !important; padding: 0 16px !important;
    font-size: 19px !important; pointer-events: auto !important; position: relative !important; z-index: 2 !important;
  }
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-top .sos-btn .sos-img { width: 26px !important; height: 26px !important; flex: 0 0 26px !important; }
}
/* y4: chat quick replies – visible scroll affordance, first chip never clipped */
body.elder-mode.elder-mode .chat-pane > .quick-bar,
body.elder-mode.elder-mode .chat-pane .ask-scroll {
  overflow-x: auto !important; overflow-y: hidden !important; flex-wrap: nowrap !important;
  scroll-snap-type: x proximity; scroll-padding-left: 4px; overscroll-behavior-x: contain;
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 36px), transparent 100%);
          mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 36px), transparent 100%);
  padding-right: 32px !important; scrollbar-width: none;
}
body.elder-mode.elder-mode .chat-pane > .quick-bar::-webkit-scrollbar,
body.elder-mode.elder-mode .chat-pane .ask-scroll::-webkit-scrollbar { display: none; }
body.elder-mode.elder-mode .chat-pane > .quick-bar > .quick-chip,
body.elder-mode.elder-mode .chat-pane .ask-scroll > .ask-chip { flex: 0 0 auto !important; white-space: nowrap !important; scroll-snap-align: start; }
body.elder-mode.elder-mode .chat-pane > .ask-bar { min-width: 0 !important; }
body.elder-mode.elder-mode .chat-pane > .ask-bar > .ask-scroll { flex: 1 1 auto !important; min-width: 0 !important; }
/* y5: health page head – title left, two fixed-width pills right (any wrapper) */
@media (min-width: 769px) {
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head {
    display: flex !important; flex-wrap: nowrap !important; align-items: center !important; gap: 12px !important;
  }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head .page-title { margin: 0 auto 0 0 !important; white-space: nowrap !important; flex: 0 1 auto !important; min-width: 0 !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head > .btn {
    flex: 0 0 auto !important; width: auto !important; max-width: 240px !important; height: 48px !important; min-height: 48px !important;
    margin: 0 !important; padding: 0 22px !important; border-radius: 999px !important; font-size: 18px !important; white-space: nowrap !important;
  }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head > .btn-ghost { margin-left: auto !important; }
}
/* y6: health note input – placeholder ellipsis, never mid-glyph clip */
html.rt-elder.rt-elder-health body.elder-mode.elder-mode .selfcheck input.input {
  width: 100% !important; min-width: 0 !important; box-sizing: border-box !important; text-overflow: ellipsis !important;
}
html.rt-elder.rt-elder-health body.elder-mode.elder-mode .selfcheck input.input::placeholder { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
/* end §v548y */

/* ================= v548z (2026-11-02): tester retest of v548y – 3 non-blocking fixes =================
   z1 (JS) phone FAB left/raised slot no longer chosen when it would sit on a heading/label (patch-549.js pickSlot).
   z2 desktop ≥1024: FAB centred in the right page margin when it fits (≥8px clear of content), JS --zj-fab-dr;
      otherwise raised (zj-fab-u → translate) while a CTA is within 8px.
   z3 phone 教学 hub 「练一练/学一学」 board: 2 equal columns that fit (no right-column clip).
   Scope: elder routes only; 手机教程 (rt-phone-tutorial) untouched. */
@media (min-width: 1024px) {
  html.zj-fab-dr.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]) {
    right: var(--zj-fab-dr, 24px) !important; left: auto !important;
    transition: right .18s ease, translate .18s ease !important;
  }
  html.zj-fab-u.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]) {
    translate: 0 calc(-1 * var(--zj-fab-up, 76px)) !important;
  }
}
@media (max-width: 1023px) {
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .zj-th-board,
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    max-width: 100% !important; min-width: 0 !important; box-sizing: border-box !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card {
    min-width: 0 !important; max-width: 100% !important; box-sizing: border-box !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card :is(strong, small) {
    min-width: 0 !important; max-width: 100% !important; overflow-wrap: anywhere !important;
  }
}

/* ==========================================================================
   §v548aa (2026-11-03)  PHONE-ONLY layout pass (≤768px). Nothing here applies
   at ≥769px — PC/tablet-landscape rules untouched.
   aa1 home 「今天做了啥」: 5 cramped columns → 3 + 2 grid, state text wraps
       (no 「今天…」 ellipsis), name/state sizes capped so 1.4–1.8× stays readable.
   aa2 bottom island: compact (≈68px), near-opaque, label size capped; the
       island top is re-measured by patch-549 (--zj-nav-occ) so content
       padding + FAB follow automatically.
   aa3 no sideways scroll on elder pages (overflow-x: clip at the viewport).
   aa4 teach hub board: full-width, 2 equal columns (548z fit kept; still
       fits at 360px/1.6× so no 1-column fallback).
   ========================================================================== */
@media (max-width: 768px) {
  /* aa1 */
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main .progress-card .pr-row {
    display: grid !important; grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
    gap: 8px !important; width: 100% !important;
  }
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main .progress-card .pr-row > .pr-item {
    grid-column: span 2 !important; min-width: 0 !important;
    padding: 10px 6px 10px !important; gap: 4px !important; justify-content: flex-start !important;
  }
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main .progress-card .pr-row > .pr-item:nth-child(n+4) {
    grid-column: span 3 !important;
  }
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main .progress-card .pr-name {
    font-size: min(var(--fs-m, 21px), 21px) !important; line-height: 1.2 !important; white-space: nowrap !important;
  }
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main .progress-card .pr-state {
    font-size: min(var(--fs-s, 18px), 16px) !important; line-height: 1.25 !important;
    white-space: normal !important; overflow: visible !important; text-overflow: clip !important;
    text-align: center !important; word-break: keep-all !important; overflow-wrap: anywhere !important;
    max-width: 100% !important;
  }
  /* aa2 */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-app > .elder-nav {
    left: 12px !important; right: 12px !important; width: auto !important; max-width: none !important;
    transform: none !important; translate: none !important;
    bottom: calc(10px + env(safe-area-inset-bottom, 0px)) !important;
    height: auto !important; min-height: 0 !important; padding: 6px !important; gap: 4px !important;
    background: rgba(255, 253, 250, .97) !important; border-radius: 24px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-app > .elder-nav > button {
    flex: 1 1 0 !important; min-width: 0 !important; width: auto !important;
    height: auto !important; min-height: 56px !important; padding: 6px 2px 5px !important; gap: 3px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-app > .elder-nav > button svg {
    width: 26px !important; height: 26px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-app > .elder-nav > button .nav-label {
    font-size: min(var(--fs-s, 18px), 19px) !important; line-height: 1.1 !important; white-space: nowrap !important;
  }
  /* aa3 */
  html.rt-elder body.elder-mode { overflow-x: clip !important; }
  html.rt-elder body.elder-mode .elder-app > .elder-main { max-width: 100vw !important; box-sizing: border-box !important; }
  /* aa4 */
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board {
    width: 100% !important; margin-left: 0 !important; margin-right: 0 !important;
  }
}

/* ==========================================================================
   §v548ab (2026-11-03)  PHONE-ONLY calm layout pass (≤768px). Every rule below
   is inside @media (max-width: 768px) → nothing applies at ≥769px (PC untouched).
   ab1 rhythm: 16px page gutters, 16px gaps between zones on home; page titles
       capped (28px @1.0×, 34px @1.6×) so a header never eats the first screen.
   ab2 教学 hub: category chips = ONE swipeable row (fade edge) instead of a 2×4
       block; intro video capped; 「学一学/练一练」 cards become full-width list rows
       (icon · title/sub · ›) on ≤430 — no clipped 2nd column, no fat gutter.
   ab3 健康: title on its own line, 导出/给医生看 a tidy 2-up row; 「播放」 not clipped;
       head actions (导出 CSV / 记一笔) compact.
   ab4 实用工具: 4 tool tabs fit without crowding; voice FAB hidden on the
       calculator page (it sat on the keypad).
   ab5 chips/segmented rows elsewhere wrap or scroll, never overflow.
   (FAB: patch-549 §v548ab treats SOS + primary buttons as must-avoid on ≤768.)
   ========================================================================== */
@media (max-width: 768px) {
  /* ab1 rhythm */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-app > .elder-main {
    padding-left: 16px !important; padding-right: 16px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .page-head {
    margin-bottom: 16px !important; padding-right: 0 !important; row-gap: 12px !important; column-gap: 10px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .page-head .page-title {
    font-size: calc(var(--fs-m, 21px) + 7px) !important; line-height: 1.25 !important; letter-spacing: .5px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .page-head .page-ico {
    width: 30px !important; height: 30px !important; flex: 0 0 30px !important;
  }
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page { gap: 16px !important; row-gap: 16px !important; }
  /* SOS sits right under the greeting: always on the first screen, and out of the FAB/island band */
  html.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner { order: 15 !important; }

  /* ab2 教学 hub (手机教程 excluded) */
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-bar { margin-bottom: 14px !important; }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-search input {
    min-height: 52px !important; border-radius: 16px !important; font-size: min(var(--fs-s, 18px), 20px) !important;
  }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-cats {
    display: flex !important; flex-wrap: nowrap !important; overflow-x: auto !important; overflow-y: hidden !important;
    gap: 10px !important; padding: 12px 24px 4px 0 !important; margin-right: -16px !important;
    scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; scrollbar-width: none;
    -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 36px), transparent);
            mask-image: linear-gradient(90deg, #000 calc(100% - 36px), transparent);
  }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-cats::-webkit-scrollbar { display: none; }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-cats > button {
    flex: 0 0 auto !important; width: auto !important; min-width: 72px !important; min-height: 48px !important;
    padding: 8px 18px !important; white-space: nowrap !important; scroll-snap-align: start;
    font-size: min(var(--fs-s, 18px), 21px) !important;
  }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .head-illu {
    height: 150px !important; max-height: 150px !important; width: 100% !important; object-fit: cover !important;
    border-radius: 20px !important; margin-bottom: 16px !important; display: block !important;
  }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > :is(.daily-empty, .task-card, .learn-card) {
    margin-top: 0 !important; margin-bottom: 16px !important; border-radius: 20px !important;
  }
  html.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .daily-empty {
    padding: 14px 16px !important; font-size: min(var(--fs-s, 18px), 20px) !important; line-height: 1.5 !important;
  }
}
@media (max-width: 430px) {
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .zj-th-board,
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board {
    grid-template-columns: minmax(0, 1fr) !important; row-gap: 10px !important; column-gap: 0 !important;
    padding: 16px 12px 6px !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card:not(.zj-tf-x):not(.zj-hide) {
    display: grid !important; grid-template-columns: 48px minmax(0, 1fr) 16px !important; grid-template-rows: auto !important;
    align-items: center !important; justify-items: start !important; column-gap: 14px !important; row-gap: 0 !important;
    min-height: 76px !important; height: auto !important; padding: 12px 14px !important; text-align: left !important;
    border-radius: 18px !important; grid-column: 1 / -1 !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board.zj-tfold > .entry-card.zj-tf-x,
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .entry-row > .entry-card.zj-tut-card:not(.show) { display: none !important; }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card::after {
    content: "›"; grid-column: 3; justify-self: end; font-size: 26px; line-height: 1; color: #B79E8A; font-weight: 400;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > .entry-ico {
    grid-column: 1 !important; width: 48px !important; height: 48px !important; margin: 0 !important; justify-self: center !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > .entry-ico img {
    width: 40px !important; height: 40px !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > div {
    grid-column: 2 !important; width: 100% !important; min-width: 0 !important; text-align: left !important;
    display: flex !important; flex-direction: column !important; align-items: flex-start !important; gap: 2px !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > div > strong {
    font-size: var(--fs-m, 21px) !important; line-height: 1.3 !important; text-align: left !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > div > small {
    font-size: min(var(--fs-s, 18px), 21px) !important; line-height: 1.35 !important; text-align: left !important;
  }
}
@media (max-width: 768px) {
  /* ab3 健康 */
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head {
    display: grid !important; grid-template-columns: 30px minmax(0, 1fr) !important; align-items: center !important;
  }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head > .page-title { grid-column: 2 !important; margin: 0 !important; }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head > .btn {
    grid-column: auto !important; min-height: 52px !important; height: auto !important; padding: 10px 12px !important;
    font-size: min(var(--fs-s, 18px), 20px) !important; white-space: nowrap !important; width: 100% !important; margin: 0 !important;
  }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head:has(> .btn) {
    grid-template-columns: 30px minmax(0, 1fr) minmax(0, 1fr) !important;
  }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head:has(> .btn) > .page-title { grid-column: 2 / -1 !important; }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head:has(> .btn) > .btn:nth-of-type(1) { grid-column: 1 / 3 !important; }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .page-head:has(> .btn) > .btn:nth-of-type(2) { grid-column: 3 !important; }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .week-say > .btn {
    padding: 10px 16px !important; min-width: 84px !important; flex: 0 0 auto !important; white-space: nowrap !important; overflow: visible !important;
  }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .head-acts .btn {
    padding: 10px 14px !important; min-height: 48px !important; height: auto !important;
  }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .hero-banner { margin-bottom: 16px !important; }
  html.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main section.card { margin-bottom: 16px !important; }

  /* ab4 实用工具 */
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .tool-tabs { gap: 8px !important; }
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .tool-tabs button {
    min-width: 0 !important; padding: 10px 4px !important; font-size: min(var(--fs-s, 18px), 19px) !important; white-space: nowrap !important;
  }
  html.rt-elder-tools.rt-elder body.elder-mode.elder-mode .gva-fab { display: none !important; }

  /* ab5 no overflowing rows */
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main :is(.scale-row, .theme-row, .score-items, .sc-options) { flex-wrap: wrap !important; min-width: 0 !important; }
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main :is(img, video) { max-width: 100% !important; }
}
/* end §v548ab */

/* ==========================================================================
   §v548ac (2026-11-03)  PHONE-ONLY fit & proportion pass. Every rule is inside
   @media (max-width: 768px) / (max-width: 430px) → nothing applies ≥769px.
   ac1 type caps on phone: 1.6×/1.8×/2× scales capped to body 24 / title 32 class.
   ac2 首页: compact greeting + 紧急求助 + 报平安 on first screen; 「今天做了啥」
       moved below the fold (after 家人); zone gaps 20px.
   ac3 教学: ALL board cards (incl. the ones revealed by 「展开全部练习」, .zj-tf-x)
       are list rows icon · title/sub · › (min-h 68), never tall blocks.
   ac4 健康: records = icon | label+value (nowrap) | time | 播放 grid; trend tabs
       on their own swipeable row; section heads wrap.
   ac5 聊天: grid track minmax(0,1fr) → long previews ellipsis, nothing pushed off.
   ac6 设置: 护眼 options stacked full width (no clipped 「自动（晚8点起）」);
       switches 88×52 (= 「求助」 pill height), knob 44.
   ac7 generic: page titles never clipped; flex/grid children min-width 0.
   ========================================================================== */
@media (max-width: 768px) {
  /* ac1 phone type caps (user picked 大字 → still big, but phone-sized) */
  html.rt-elder.rt-elder body.elder-mode.elder-mode:is([data-scale="1.6"], [data-scale="1.8"], [data-scale="2"], [data-scale="2.0"]) {
    --fs: 24px !important; --fs-s: 22px !important; --fs-m: 25px !important; --fs-l: 28px !important; --fs-xl: 32px !important;
    font-size: 24px !important;
  }
  html.rt-elder.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .page-head .page-title {
    font-size: min(calc(var(--fs-m, 21px) + 7px), 32px) !important;
    overflow: visible !important; text-overflow: clip !important; white-space: normal !important;
    min-width: 0 !important; max-width: 100% !important; padding-right: .15em !important; word-break: keep-all; overflow-wrap: anywhere;
  }

  /* ac2 首页 IA */
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page { gap: 20px !important; row-gap: 20px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome { order: 10 !important; padding: 14px 18px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome h2 {
    font-size: min(calc(var(--fs-m, 21px) + 5px), 30px) !important; line-height: 1.25 !important; margin: 0 0 4px !important;
  }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .big-date { margin: 0 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .big-date strong { font-size: min(var(--fs-s, 18px), 21px) !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .wx-row { margin-top: 2px !important; gap: 10px !important; align-items: baseline !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .wx-temp { font-size: 32px !important; line-height: 1.15 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .wx-meta { font-size: min(var(--fs-s, 18px), 21px) !important; white-space: nowrap !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner { order: 15 !important; padding: 14px 18px !important; min-height: 0 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner .sos-copy { min-width: 0 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner .sos-copy strong { font-size: min(calc(var(--fs-m, 21px) + 6px), 30px) !important; line-height: 1.2 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner .sos-copy span { font-size: min(var(--fs-s, 18px), 21px) !important; line-height: 1.35 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .care-row { order: 20 !important; gap: 12px !important; row-gap: 12px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .care-row .care-card { min-height: 76px !important; padding: 12px 16px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .care-row .care-copy { min-width: 0 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .care-row .care-copy strong { font-size: min(var(--fs-m, 21px), 24px) !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .care-row .care-copy span { font-size: min(var(--fs-s, 18px), 20px) !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .family-row { order: 30 !important; }
  /* 「今天做了啥」 below the fold, after 家人 */
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .progress-card { order: 52 !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .progress-card .pr-name { white-space: nowrap !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .progress-card .pr-state { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; max-width: 100% !important; }

  /* ac4 健康 */
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .sec-head { flex-wrap: wrap !important; row-gap: 10px !important; min-width: 0 !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .trend-sec .trend-tabs {
    flex: 1 1 100% !important; width: 100% !important; max-width: 100% !important; min-width: 0 !important;
    display: flex !important; flex-wrap: nowrap !important; overflow-x: auto !important; overflow-y: hidden !important;
    gap: 8px !important; scrollbar-width: none; -webkit-overflow-scrolling: touch;
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .trend-sec .trend-tabs::-webkit-scrollbar { display: none; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .trend-sec .trend-tabs > button { flex: 0 0 auto !important; white-space: nowrap !important; min-height: 44px !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item {
    display: grid !important; grid-template-columns: 40px minmax(0, 1fr) auto 44px !important; align-items: center !important;
    column-gap: 10px !important; row-gap: 2px !important; min-height: 68px !important; padding: 10px 12px !important;
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-ico { grid-column: 1 !important; width: 40px !important; height: 40px !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-mid {
    grid-column: 2 !important; min-width: 0 !important; width: auto !important; flex: none !important;
    display: flex !important; flex-direction: column !important; align-items: flex-start !important; gap: 2px !important;
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-mid > strong {
    white-space: nowrap !important; word-break: keep-all !important; font-size: min(var(--fs-m, 21px), 24px) !important; line-height: 1.3 !important;
    max-width: 100% !important; overflow: hidden !important; text-overflow: ellipsis !important;
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-mid > span {
    font-size: min(var(--fs-s, 18px), 20px) !important; max-width: 100% !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important;
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-time {
    grid-column: 3 !important; white-space: nowrap !important; text-align: right !important; font-size: min(var(--fs-s, 18px), 18px) !important; color: var(--ink-3, #8a7f74);
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-speak { grid-column: 4 !important; width: 44px !important; height: 44px !important; justify-self: end !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .stat-row { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 10px !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .stat-row > * { min-width: 0 !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .stat-row :is(strong, b) { white-space: nowrap !important; }

  /* ac5 聊天 */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page { grid-template-columns: minmax(0, 1fr) !important; min-width: 0 !important; max-width: 100% !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page > * { min-width: 0 !important; max-width: 100% !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-head { flex-wrap: wrap !important; gap: 8px !important; min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-head .tag { white-space: nowrap !important; flex: 0 0 auto !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-item { min-width: 0 !important; max-width: 100% !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-mid { min-width: 0 !important; flex: 1 1 0 !important; overflow: hidden !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-mid > * { max-width: 100% !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-right { flex: 0 0 auto !important; white-space: nowrap !important; }

  /* ac6 设置 */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .theme-row {
    display: grid !important; grid-template-columns: minmax(0, 1fr) !important; gap: 10px !important; flex-wrap: initial !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .theme-row > .theme-btn {
    width: 100% !important; min-width: 0 !important; min-height: 56px !important; padding: 12px 18px !important;
    text-align: left !important; white-space: normal !important; font-size: min(var(--fs-s, 18px), 22px) !important; border-radius: 16px !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main button.switch {
    width: 88px !important; min-width: 88px !important; height: 52px !important; min-height: 52px !important; max-height: 52px !important;
    flex: 0 0 88px !important; border-radius: 999px !important; padding: 0 !important; position: relative !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main button.switch > .knob {
    width: 44px !important; height: 44px !important; top: 4px !important; left: 4px !important; border-radius: 50% !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main button.switch.on > .knob { left: 40px !important; }

  /* ac7 generic */
  html.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main :is(.sec-head, .head-acts) > * { min-width: 0; }
}
@media (max-width: 430px) {
  /* ac3 教学 board: every visible card is a list row (incl. expanded .zj-tf-x) */
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card:not(.zj-hide) {
    display: grid !important; grid-template-columns: 44px minmax(0, 1fr) 16px !important; grid-template-rows: auto !important;
    align-items: center !important; justify-items: start !important; column-gap: 14px !important; row-gap: 0 !important;
    min-height: 68px !important; height: auto !important; padding: 10px 14px !important; text-align: left !important;
    border-radius: 18px !important; grid-column: 1 / -1 !important; width: 100% !important;
  }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board.zj-tfold > .entry-card.zj-tf-x { display: none !important; }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > .entry-ico {
    grid-column: 1 !important; width: 44px !important; height: 44px !important; margin: 0 !important; justify-self: center !important;
  }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > .entry-ico img { width: 36px !important; height: 36px !important; }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > div {
    grid-column: 2 !important; width: 100% !important; min-width: 0 !important; text-align: left !important;
    display: flex !important; flex-direction: column !important; align-items: flex-start !important; gap: 2px !important;
  }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > div > strong {
    font-size: min(var(--fs-m, 21px), 24px) !important; line-height: 1.3 !important; text-align: left !important;
  }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card > div > small {
    font-size: min(var(--fs-s, 18px), 19px) !important; line-height: 1.35 !important; text-align: left !important;
    display: block !important; max-width: 100% !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important;
  }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-board > .entry-card::after {
    content: "›"; grid-column: 3; justify-self: end; font-size: 26px; line-height: 1; color: #B79E8A; font-weight: 400;
  }
  /* 健康 records on narrow phones: time drops under the value, value never wraps */
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item {
    grid-template-columns: 40px minmax(0, 1fr) 44px !important;
  }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-ico { grid-row: 1 / span 2 !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-mid { grid-row: 1 !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-time { grid-column: 2 !important; grid-row: 2 !important; text-align: left !important; font-size: min(var(--fs-s, 18px), 17px) !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-speak { grid-column: 3 !important; grid-row: 1 / span 2 !important; }
}
@media (max-width: 768px) {
  /* ac8 audit leftovers: 天气 / 语音助手 / 心情日历 / 症状自查 */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .care-card.air { flex-wrap: wrap !important; row-gap: 12px !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .care-card.air > .care-mid { min-width: 0 !important; flex: 1 1 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .care-card.air > .care-tell { flex: 1 1 100% !important; width: 100% !important; min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .day-row { flex-wrap: wrap !important; row-gap: 4px !important; min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .day-row > * { min-width: 0 !important; white-space: nowrap !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .day-row > .day-sun { order: 9 !important; flex: 1 1 100% !important; text-align: left !important; padding-left: 46px !important; opacity: .85; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .vcmd-grid { grid-template-columns: minmax(0, 1fr) !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .vcmd-grid > .vcmd-item { min-width: 0 !important; flex-wrap: wrap !important; column-gap: 8px !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .vcmd-grid > .vcmd-item > * { min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .cal-grid { grid-template-columns: repeat(7, minmax(0, 1fr)) !important; gap: 4px !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .cal-grid > * { min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .sym-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .sym-grid > .sym-card { min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .sym-grid > .sym-card > div { min-width: 0 !important; flex: 1 1 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .sc-options { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 8px !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .sc-options > .sc-opt { min-width: 0 !important; width: 100% !important; padding: 10px 6px !important; white-space: normal !important; word-break: keep-all; overflow-wrap: anywhere; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-mid > .conv-last { font-size: min(var(--fs-s, 18px), 20px) !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-mid > :first-child { font-size: min(var(--fs-m, 21px), 24px) !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-time { font-size: min(var(--fs-s, 18px), 17px) !important; }
}
@media (max-width: 430px) {
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-mid > strong { font-size: min(var(--fs-m, 21px), 22px) !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .mode-row { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .mode-row > .mode-btn { min-width: 0 !important; white-space: normal !important; word-break: keep-all; overflow-wrap: anywhere; padding-left: 6px !important; padding-right: 6px !important; font-size: min(var(--fs-s, 18px), 20px) !important; }
  /* switch rows: text column may shrink, switch never pushed out */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main :has(> button.switch) > :not(button.switch) { min-width: 0 !important; flex-shrink: 1 !important; }
  /* 教学 「我的学习」 card: points pill drops under the copy instead of squeezing it */
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .learn-card > .lc-main { flex-wrap: wrap !important; row-gap: 8px !important; }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .learn-card > .lc-main > .lc-copy { flex: 1 1 calc(100% - 62px) !important; min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .learn-card > .lc-main > .lc-points { margin-left: 58px !important; white-space: nowrap !important; }
  /* 首页 narrow: SOS sub ≤2 lines, weather button smaller */
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner .sos-copy span { font-size: min(var(--fs-s, 18px), 19px) !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .sos-banner > svg { width: 48px !important; height: 48px !important; padding: 11px !important; flex: 0 0 48px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .w-btn { width: 48px !important; height: 48px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome .w-btn svg { width: 30px !important; height: 30px !important; }
  html.rt-elder-home.rt-elder-home.rt-elder-home body.elder-mode.elder-mode .elder-main > .page > .welcome > div:first-child { min-width: 0 !important; }
}
/* end §v548ac */

/* ================= §v548ad — continuous polish (mobile + PC) ================= */
/* ad1 健康趋势: fixed 180px boxes clipped the chart (x-axis dates + fill spilled into the next card) */
html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main :is(.trend, .trend-item) { height: auto !important; min-height: 0 !important; max-height: none !important; overflow: visible !important; }
/* ad2 trend SVG labels: undo the preserveAspectRatio=none stretch (k set by patch-549 trendText) + readable size */
html.rt-elder-health body.elder-mode .elder-main svg.tr-svg { overflow: visible !important; }
html.rt-elder-health body.elder-mode .elder-main svg.tr-svg text { transform-box: fill-box; transform-origin: center; transform: scaleX(var(--zj-tx, 1)); font-size: 13px !important; }
html.rt-elder-health body.elder-mode .elder-main svg.tr-svg text[text-anchor="end"] { transform-origin: right center; }
html.rt-elder-health body.elder-mode .elder-main svg.tr-svg text[text-anchor="start"], html.rt-elder-health body.elder-mode .elder-main svg.tr-svg text:not([text-anchor]) { transform-origin: left center; }
/* ad3 empty placeholder div left a blank band above 服药日历 */
html.rt-elder-health body.elder-mode .elder-main .med-sec .empty.small:empty { display: none !important; }
/* ad4 本周健康 「播放」 never truncated */
html.rt-elder-health body.elder-mode .elder-main .week-say .btn { flex: 0 0 auto !important; min-width: max-content !important; white-space: nowrap !important; overflow: visible !important; text-overflow: clip !important; }
/* ad5 stat-card label 12px -> 15px */
html.rt-elder-health body.elder-mode .elder-main .stat-row .stat-card span { font-size: max(calc(var(--fs-s, 18px) * 0.84), 1em) !important; }
/* ad6 PC: the 30-day trend card (only when records exist) had no grid row -> auto-placed into the 30px gap row and overlaid score/hero */
@media (min-width: 1024px) {
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz:has(> section.card .trend-item) { grid-template-rows: auto 30px auto 68px auto 18px auto 68px auto 18px auto 18px auto 22px !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz > section.card:has(.trend-item) { grid-row: 11 !important; grid-column: 1 / -1 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz:has(> section.card .trend-item) > div:has(> .med-sec) { grid-row: 13 !important; }
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz:has(> section.card .trend-item) > .zj-zbg[data-z="3"] { grid-row: 9 / 14 !important; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  html.rt-elder.rt-elder-health body.elder-mode .elder-main > div.zj-hz:has(> section.card .trend-item) { grid-template-rows: auto 24px auto 52px auto 18px auto 52px auto 18px auto 18px auto 16px !important; }
}
/* ad7 phone: five trend tabs fit the row (体温 was cut at the right edge) */
@media (max-width: 768px) {
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .trend-sec .trend-tabs { gap: 6px !important; overflow-x: visible !important; }
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .trend-sec .trend-tabs > button { flex: 1 1 0 !important; min-width: 0 !important; padding-left: 2px !important; padding-right: 2px !important; justify-content: center !important; text-align: center !important; }
}
/* ad8 小字 -> ≥15px at 1.0, scaled with --fs-s (18/20/22/24) so 1.2–1.6 still grow (assistant / mood / today / exercise / sleep / hydration / chat badge) */
html.rt-elder body.elder-mode .elder-main :is(.b-name, .b-read) { font-size: calc(var(--fs-s, 18px) * 0.84) !important; }
html.rt-elder-assistant body.elder-mode .elder-main button:not(.btn-primary):not(.b-read) { font-size: max(calc(var(--fs-s, 18px) * 0.84), 1em); }
html.rt-elder body.elder-mode .elder-main :is(.cal-sum span, .h-date span, .h-mood) { font-size: calc(var(--fs-s, 18px) * 0.84) !important; }
html.rt-elder body.elder-mode .elder-main :is(.hd-week, .hd-mon) { font-size: calc(var(--fs-s, 18px) * 0.84) !important; }
html.rt-elder body.elder-mode .elder-main :is(p.tip, p.bar-tip, p.ws-advice, p.form-tip, p.weather-line) { font-size: calc(var(--fs-s, 18px) * 0.84) !important; }
html.rt-elder-exercise body.elder-mode .elder-main :is(strong, .sec-sub) { font-size: max(calc(var(--fs-s, 18px) * 0.84), 1em) !important; }
html.rt-elder:is(.rt-elder-exercise, .rt-elder-sleep) body.elder-mode .elder-main label { font-size: calc(var(--fs-s, 18px) * 0.89) !important; }
html.rt-elder body.elder-mode .elder-main :is(.bar-day, .bar-label) { font-size: calc(var(--fs-s, 18px) * 0.78) !important; white-space: nowrap !important; }
html.rt-elder body.elder-mode .elder-main em.unread { font-size: calc(var(--fs-s, 18px) * 0.72) !important; min-width: 22px !important; }
/* ad9 empty states: no second illustration under the hero; 我的用药 steps as compact icon-left rows */
html.rt-elder body.elder-mode .elder-main div:has(> .mm-hero) > .empty > .empty-illu,
html.rt-elder body.elder-mode .elder-main .todo-page:has(> .td-hero) > .empty > img { display: none !important; }
html.rt-elder body.elder-mode .elder-main .todo-page:has(> .td-hero) > .empty { padding-top: 22px !important; padding-bottom: 22px !important; min-height: 0 !important; }
@media (max-width: 1023px) {
  html.rt-elder body.elder-mode .elder-main div:has(> .mm-hero) > .empty { padding: 14px 0 8px !important; min-height: 0 !important; }
  html.rt-elder body.elder-mode .elder-main .med-how { gap: 4px !important; padding: 8px 10px !important; width: 100% !important; max-width: none !important; box-sizing: border-box !important; }
  html.rt-elder body.elder-mode .elder-main .med-how > .mh-arrow { display: none !important; }
  html.rt-elder body.elder-mode .elder-main .med-how > .mh-step { display: grid !important; grid-template-columns: 44px minmax(0, 1fr) !important; column-gap: 12px !important; row-gap: 2px !important; align-items: center !important; text-align: left !important; padding: 10px 6px !important; width: 100% !important; box-sizing: border-box !important; min-height: 0 !important; height: auto !important; }
  html.rt-elder body.elder-mode .elder-main .med-how > .mh-step > .mh-ico { grid-row: 1 / span 2 !important; grid-column: 1 !important; margin: 0 !important; align-self: center !important; }
  html.rt-elder body.elder-mode .elder-main .med-how > .mh-step > :is(b, p) { grid-column: 2 !important; margin: 0 !important; text-align: left !important; width: auto !important; }
}
/* ad10 天气 phone: 收藏 / 朗读 / 告诉家人 were narrow left-stacked pills under a full-width CTA */
@media (max-width: 768px) {
  html.rt-elder body.elder-mode .elder-main .now-card .fav-act { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 10px !important; width: 100% !important; }
  html.rt-elder body.elder-mode .elder-main .now-card .fav-act > .btn { width: 100% !important; min-width: 0 !important; margin: 0 !important; justify-content: center !important; white-space: nowrap !important; }
  html.rt-elder body.elder-mode .elder-main .now-card .fav-act > .btn:first-child:nth-last-child(3) { grid-column: 1 / -1 !important; }
}
/* ================= end §v548ad ================= */

/* v548ad-11: mood calendar cell label was hard-cut to 2 chars ("还不") and overflowed the 43px cell;
   show it as a mood-coloured dot (colour matches the .cal-sum legend below) */
html.rt-elder.rt-elder-mood .cal-cell.has > span{font-size:0!important;width:14px!important;height:14px!important;min-width:0!important;padding:0!important;border-radius:50%!important;display:block!important;margin:2px auto 0!important;box-shadow:inset 0 0 0 1.5px currentColor!important;overflow:hidden!important}

/* v548ad-12: 今日安排 hero card — the generic elder ".card{background:var(--surface)!important}" wiped the
   component's gradient, leaving white date/greeting/weather text on a white card (invisible). Restore a warm clay fill. */
html.rt-elder body.elder-mode .elder-main section.card.hero:has(> .hero-date){background:linear-gradient(140deg,#d98a64 0%,#c4613f 55%,#a94c30 100%)!important;border-color:transparent!important;color:#fff!important}
html.rt-elder body.elder-mode .elder-main section.card.hero:has(> .hero-date) .weather-line{color:#fff!important;opacity:.95!important}

/* v548ad-13 (≤768): 防骗每日一测 card — the 140px button squeezed the copy into a 114px column
   ("每天 5 / 道情景题，/ 练出…"); let the button drop to its own full-width row */
@media (max-width:768px){
  html.rt-elder.rt-elder-anti-fraud body.elder-mode .daily-card{flex-wrap:wrap!important;row-gap:12px!important}
  html.rt-elder.rt-elder-anti-fraud body.elder-mode .daily-card > .dc-mid{flex:1 1 calc(100% - 70px)!important;min-width:0!important}
  html.rt-elder.rt-elder-anti-fraud body.elder-mode .daily-card > .btn{flex:1 1 100%!important;width:100%!important;white-space:nowrap!important}
}

/* v548ad-14: mood picker labels were a fixed 15px at every 字号 scale */
html.rt-elder.rt-elder-mood body.elder-mode .mood-btn > span{font-size:max(calc(var(--fs-s,18px)*0.89),1em)!important;white-space:nowrap!important}

/* ===== v548ae (≤768 only): FAB edge-dock — when no full slot is clear of buttons/text, patch-549 sets html.zj-fab-p
   and the mic button tucks half off the right edge (26px visible, still tappable); PC untouched ===== */
@media (max-width: 768px) {
  html.zj-fab-p.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .gva-fab:not([data-zj-dragged]) {
    left: auto !important; right: -26px !important; opacity: .94 !important;
    box-shadow: -2px 2px 10px rgba(60,40,20,.22) !important;
  }
  html.zj-fab-p body.elder-mode { overflow-x: clip; }
}
/* v548ae (≤768): health record note wraps to 2 lines instead of an ellipsis that eats the last 1–2 chars on 360px */
@media (max-width: 768px) {
  html.rt-elder-health.rt-elder-health.rt-elder-health body.elder-mode.elder-mode .elder-main .rec-list .rec-item > .rec-mid > span.rec-note {
    white-space: normal !important; overflow: hidden !important; text-overflow: clip !important; word-break: break-word !important;
    display: -webkit-box !important; -webkit-box-orient: vertical !important; -webkit-line-clamp: 2 !important; line-height: 1.35 !important;
  }
}

/* ================= v548af — Gemini (web, Argon) punch list =================
   1 settings a11y above profile (≤768) · 2 nav backdrop + main pad (≤768)
   3 teach illu/chips/learn stats (≤768) · 4 chat 2-row items (≤768)
   5 health selfcheck/pills + single-point trends (≤768)
   6 PC settings switches / unbind / 更多服务 (≥769) · 7 home 0-todo soften
   ========================================================================== */
@media (max-width: 768px) {
  /* 1 settings: 字体/护眼/高对比/极简/语音 first, profile form after */
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main > div:has(> .profile-card) {
    display: flex !important; flex-direction: column !important;
  }
  html.rt-elder.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > .page-head { order: -10 !important; }
  html.rt-elder.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(> .scale-row .scale-btn > em) { order: -9 !important; }
  html.rt-elder.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(> .theme-row) { order: -8 !important; }
  html.rt-elder.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(+ .simple-card) { order: -7 !important; }
  html.rt-elder.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section.simple-card { order: -6 !important; }
  html.rt-elder.rt-elder-settings body.elder-mode .elder-main > div:has(> .profile-card) > section:has(> .sec-head > .switch):has(> .scale-row) { order: -5 !important; }

  /* 2 bottom island: page bg fades in under/around the floating nav so no half-cut lines
     show in the side/bottom gaps; main always clears the island */
  html.rt-elder body.elder-mode.elder-mode .elder-main {
    padding-bottom: max(calc(var(--zj-nav-occ, 96px) + 40px), 124px) !important;
  }
  html.rt-elder:not(.on-chat-page) body.elder-mode.elder-mode:has(.elder-nav)::after {
    content: ""; position: fixed; left: 0; right: 0; bottom: 0; z-index: 59; pointer-events: none;
    height: calc(var(--zj-nav-occ, 96px) + 14px);
    background: linear-gradient(to bottom, transparent 0, color-mix(in srgb, var(--bg, #FAF6F0) 94%, transparent) 16px, var(--bg, #FAF6F0) 26px);
  }

  /* 3 teach hub (手机教程 excluded) */
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .head-illu {
    height: 104px !important; max-height: 104px !important; object-position: center 35% !important; margin-bottom: 14px !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-bar .zj-tut-cats {
    display: grid !important; grid-template-columns: repeat(auto-fill, minmax(70px, 1fr)) !important;
    gap: 8px !important; overflow: visible !important; padding: 12px 0 2px !important; margin-right: 0 !important;
    -webkit-mask-image: none !important; mask-image: none !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-tut-bar .zj-tut-cats > button {
    width: 100% !important; min-width: 0 !important; padding: 8px 4px !important; text-align: center !important;
  }
  html.rt-elder.rt-elder.rt-teach-hub:not(.rt-phone-tutorial) body.elder-mode.elder-mode .elder-main .zj-th-wrap > .zj-tut-bar { height: auto !important; }
  html.rt-elder.rt-teach-hub body.elder-mode .elder-main .learn-card .lc-copy > span {
    text-wrap: balance; word-break: keep-all; line-height: 1.45 !important;
  }

  /* 4 chat list: row1 name + time, row2 preview (2 lines) + unread */
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-item {
    display: grid !important; grid-template-columns: 48px minmax(0, 1fr) auto !important;
    grid-template-areas: "av name time" "av last unread" !important;
    column-gap: 12px !important; row-gap: 4px !important; align-items: center !important; height: auto !important; min-height: 84px !important;
    padding: 14px 14px !important; text-align: left !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-item > .conv-av { grid-area: av !important; align-self: start !important; margin-top: 2px !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-item > .conv-mid,
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-item > .conv-right { display: contents !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-mid > strong { grid-area: name !important; min-width: 0 !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-mid > .conv-last {
    grid-area: last !important; white-space: normal !important; text-overflow: clip !important;
    display: -webkit-box !important; -webkit-box-orient: vertical !important; -webkit-line-clamp: 2 !important; line-clamp: 2;
    overflow: hidden !important; font-size: 18px !important; line-height: 1.4 !important; max-height: 2.8em !important; color: #7A6A5C !important;
  }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-right > .conv-time { grid-area: time !important; justify-self: end !important; align-self: center !important; white-space: nowrap !important; }
  html.rt-elder.rt-elder.rt-elder body.elder-mode.elder-mode .elder-main .chat-page .conv-right > .unread { grid-area: unread !important; justify-self: end !important; align-self: start !important; margin: 4px 0 0 !important; }

  /* 5 health: pills/heads wrap, selfcheck options top-aligned (一般 no longer drops) */
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main :is(.tr-head, .sec-head, .head-acts, .page-head) { flex-wrap: wrap !important; height: auto !important; row-gap: 8px !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .sc-options { align-items: stretch !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .sc-opt {
    display: flex !important; flex-direction: column !important; justify-content: flex-start !important; align-items: center !important;
    gap: 4px !important; padding-top: 18px !important; height: auto !important;
  }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .sc-opt > svg { margin: 0 0 6px !important; flex: 0 0 auto !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .sc-opt { padding-left: 4px !important; padding-right: 4px !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .sc-opt > span { white-space: nowrap !important; font-size: min(var(--fs-s, 18px), 16px) !important; letter-spacing: 0 !important; line-height: 1.35 !important; }
  /* single-point trend: no empty grid, short friendly note instead */
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .tr-chart.zj-tr-one {
    height: auto !important; min-height: 0 !important;
  }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .tr-chart.zj-tr-one > svg.tr-svg { display: none !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main .tr-chart.zj-tr-one::after {
    content: "目前只有 1 次记录，多记几次就能看到变化"; display: block; padding: 12px 14px; margin-top: 4px;
    border-radius: 14px; background: #F6EFE6; color: #7A6A5C; font-size: 17px; line-height: 1.45;
  }

  /* 7 home: 0 件事 card softened */
  html.rt-elder.rt-elder-home body.elder-mode.elder-mode .elder-main .care-card.remind.zj-zero {
    min-height: 0 !important; padding-top: 12px !important; padding-bottom: 12px !important; background: rgba(255,255,255,.55) !important; box-shadow: none !important;
  }
  html.rt-elder.rt-elder-home body.elder-mode.elder-mode .elder-main .care-card.remind.zj-zero strong { color: #8A7868 !important; font-weight: 600 !important; }
  html.rt-elder.rt-elder-home body.elder-mode.elder-mode .elder-main .care-card.remind.zj-zero .care-ico { opacity: .7 !important; transform: scale(.86) !important; }
}

/* 6 PC settings */
@media (min-width: 769px) {
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main button.switch {
    width: 72px !important; min-width: 72px !important; height: 40px !important; min-height: 40px !important; max-height: 40px !important;
    flex: 0 0 72px !important; border-radius: 999px !important; padding: 0 !important; position: relative !important;
  }
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main button.switch > .knob {
    width: 32px !important; height: 32px !important; top: 4px !important; left: 4px !important; border-radius: 50% !important;
  }
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main button.switch.on > .knob { left: 36px !important; }
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main .list-btn {
    font-size: 18px !important; min-height: 60px !important;
  }
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main section:has(> .list-btn > .li-ico) {
    display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important; column-gap: 18px !important; align-content: start !important;
  }
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main section:has(> .list-btn > .li-ico) > :not(.list-btn) { grid-column: 1 / -1 !important; }
  html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main section:has(> .list-btn > .li-ico) > .list-btn .li-ico { width: 34px !important; height: 34px !important; }
}
/* 6b unbind ×: clearer labelled hit target (all widths) */
html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main .bound-item > .mini-btn.danger {
  width: auto !important; min-width: 84px !important; height: 48px !important; padding: 0 14px !important; gap: 6px !important;
  display: inline-flex !important; align-items: center !important; justify-content: center !important; border-radius: 14px !important; flex: 0 0 auto !important;
}
html.rt-elder.rt-elder-settings body.elder-mode.elder-mode .elder-main .bound-item > .mini-btn.danger::after {
  content: "解绑"; font-size: 17px; font-weight: 600; line-height: 1; white-space: nowrap;
}
/* 7b PC home 0-todo soften */
@media (min-width: 769px) {
  html.rt-elder.rt-elder-home body.elder-mode.elder-mode .elder-main .care-card.remind.zj-zero strong { color: #8A7868 !important; }
  html.rt-elder.rt-elder-home body.elder-mode.elder-mode .elder-main .care-card.remind.zj-zero .care-ico { opacity: .75 !important; }
}

/* ==========================================================================
   v548ag — Gemini (web, Argon task mode) live acceptance fixes (2026-11-03)
   1 modals opaque + darker backdrop · 2/3 record modal sticky head/save, 85dvh
   4 chat composer never cut (PC pane fits frame; phone mic in tool row, no 170px gap)
   5 toast below top bar, click-through · 7/8 teach chips nowrap+wrap · 9 health ≤768 gaps
   ========================================================================== */
/* 1. modals: solid card, darker backdrop (no ghosting of the page behind) */
.modal-mask {
  background: rgba(28, 24, 20, .65) !important;
  -webkit-backdrop-filter: blur(6px) saturate(.85) !important; backdrop-filter: blur(6px) saturate(.85) !important;
}
.modal-mask > .modal {
  background: #FFFDF9 !important; opacity: 1 !important;
  max-height: 85vh !important; max-height: 85dvh !important; overflow-y: auto !important; overscroll-behavior: contain;
  box-shadow: 0 24px 64px rgba(20, 14, 10, .30) !important;
}
.modal-mask > .modal > .modal-head { position: sticky !important; top: 0 !important; z-index: 3 !important; background: #FFFDF9 !important; }
/* 3. long forms (health 记一笔): primary save button stays on screen at the bottom of the scrolling card */
.modal-mask > .modal > .modal-body > .btn-block.btn-primary:last-child,
.modal-mask > .modal > .modal-body > .modal-foot:last-child,
.modal-mask > .modal > .modal-foot {
  position: sticky !important; bottom: 12px !important; z-index: 3 !important;
  box-shadow: 0 0 0 12px #FFFDF9, 0 -14px 10px 2px #FFFDF9 !important;
}
.modal-mask > .modal > .modal-body { padding-bottom: 14px !important; }
.modal-mask > .modal > .modal-body > .field:last-of-type { margin-bottom: 18px !important; }
@media (max-width: 768px) {
  .modal-mask { padding: 12px !important; padding-bottom: max(12px, env(safe-area-inset-bottom, 0px)) !important; }
  .modal-mask > .modal { max-height: 85vh !important; max-height: 85dvh !important; }
}

/* 4. chat — PC frame: pane fills the framed panel instead of its own 100vh min-height (composer was cut off) */
@media (min-width: 1024px) {
  html.rt-elder-chat body.elder-mode .elder-main .chat-page { grid-template-rows: minmax(0, 1fr) !important; min-height: 540px !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > .chat-pane,
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > .conv-pane { min-height: 0 !important; height: auto !important; max-height: 100% !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > .conv-pane { overflow-y: auto !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > .chat-pane > .msgs { min-height: 120px !important; }
}
/* chips: room for the full pill + focus ring (overflow-x scroller clips vertically) */
body.elder-mode.elder-mode .chat-pane > .quick-bar { padding-top: 8px !important; padding-bottom: 8px !important; flex-shrink: 0 !important; }
body.elder-mode.elder-mode .chat-pane > .ask-bar { flex-shrink: 0 !important; }
body.elder-mode.elder-mode .chat-pane .ask-scroll { padding-top: 4px !important; padding-bottom: 6px !important; }
body.elder-mode.elder-mode .chat-pane > .chat-head,
body.elder-mode.elder-mode .chat-pane > .chat-input { flex-shrink: 0 !important; }
/* phone: no 170px dead band under the composer; mic joins the tool row; pane fills the screen above the island */
@media (max-width: 768px) {
  html.rt-elder-chat body.elder-mode.elder-mode .elder-main .chat-page > .chat-pane {
    padding-bottom: 0 !important;
    /* whole pane (head→composer) sits above the bottom island without scrolling */
    height: max(440px, calc(100vh - 178px - var(--zj-nav-occ, 96px))) !important;
    height: max(440px, calc(100dvh - 178px - var(--zj-nav-occ, 96px))) !important;
    min-height: 0 !important; max-height: none !important;
  }
  html.rt-elder-chat body.elder-mode.elder-mode .elder-main .chat-page { height: auto !important; min-height: 0 !important; grid-template-rows: auto !important; }
  html.rt-elder-chat body.elder-mode.elder-mode .elder-main .chat-page > .chat-pane > .msgs { min-height: 110px !important; }
  html.rt-elder-chat body.elder-mode.elder-mode .chat-pane > .chat-input > .vi-btn { order: 2 !important; width: 44px !important; height: 44px !important; }
  html.rt-elder-chat body.elder-mode.elder-mode .chat-pane > .chat-input > .ip-btn,
  html.rt-elder-chat body.elder-mode.elder-mode .chat-pane > .chat-input > .send-btn { width: 44px !important; height: 44px !important; }
}
/* tablet / zoomed PC (769–1023): empty-state copy stays inside its pane */
@media (min-width: 769px) and (max-width: 1023px) {
  html.rt-elder-chat body.elder-mode .elder-main .chat-page { grid-template-columns: minmax(170px, 32%) minmax(0, 1fr) !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page > .chat-pane { min-width: 0 !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page .chat-empty { min-width: 0 !important; max-width: 100% !important; box-sizing: border-box !important; padding-left: 16px !important; padding-right: 16px !important; text-align: center !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-page .chat-empty :is(h3, p) { max-width: 100% !important; white-space: normal !important; overflow-wrap: anywhere !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-head .hd-mid { min-width: 4.5em !important; flex: 1 1 auto !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-head .hd-mid > * { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; }
  html.rt-elder-chat body.elder-mode .elder-main .chat-head .hd-actions { flex-shrink: 0 !important; gap: 6px !important; }
}

/* 5. toast: below the top bar / phone header, never blocks taps on the nav */
.toast-wrap {
  top: calc(84px + env(safe-area-inset-top, 0px)) !important; pointer-events: none !important;
  width: max-content !important; max-width: min(86vw, 560px) !important;
}
.toast-wrap > .toast { pointer-events: none !important; text-align: center; overflow-wrap: anywhere; }
@media (max-width: 768px) { .toast-wrap { top: calc(96px + env(safe-area-inset-top, 0px)) !important; } }

/* 7/8. teach hub (not 手机教程): category chips never break inside a word; row wraps instead of squeezing */
html.rt-elder.rt-teach-hub body.elder-mode .elder-main :is(.qs-chip, .tool-chip, .cat-chip, .cat-tab, .tab-chip) { white-space: nowrap !important; flex-shrink: 0 !important; max-width: 100% !important; overflow: hidden !important; text-overflow: ellipsis !important; }
html.rt-elder.rt-teach-hub body.elder-mode .elder-main :is(.qs-row, .cat-row, .cat-tabs, .chip-row) { display: flex !important; flex-wrap: wrap !important; align-items: center !important; gap: 8px 10px !important; overflow: visible !important; }
html.rt-elder.rt-teach-hub body.elder-mode .elder-main .qs-row > .qs-label { white-space: nowrap !important; flex-basis: auto !important; }

/* 9. health ≤768: one clear column, more air between blocks */
@media (max-width: 768px) {
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main > div > :is(section, .card) + :is(section, .card) { margin-top: 18px !important; }
  html.rt-elder.rt-elder-health body.elder-mode.elder-mode .elder-main :is(.grid-2, .two-col, .health-grid) { grid-template-columns: minmax(0, 1fr) !important; }
}
/* light: helper copy readable (≥16px) on contacts / calendar */
html.rt-elder body.elder-mode .elder-main :is(.contact-tip, .tip, .hint, .helper, .sub-hint, .form-hint) { font-size: max(16px, 1em) !important; line-height: 1.5 !important; }
/* end v548ag */
