/* ============================================================
   AI 驾驶舱 · 自然松弛主题（家庭场景）
   ------------------------------------------------------------
   面向 14 岁以下：字更大、间距更松、圆角更圆、颜色更活。
   一个判断标准：如果一屏塞得下一个成年人能快速扫完的信息量，
   那对孩子就太密了——宁可让他多滚两下。
   只覆盖变量与观感，不改布局结构，也不碰任何数据逻辑。
   ============================================================ */
body[data-theme="family"]{
  /* 圆体优先，找不到再退回系统黑体 */
  --font:"Yuanti SC","Yuanti TC","YouYuan","Hiragino Sans GB","PingFang SC","Microsoft YaHei",-apple-system,sans-serif;
  --bg:#fbf7f0; --bg2:#f5efe2; --card:#fffdfa; --card2:#fdf9f2;
  --ink:#3b3229; --sub:#6f6152; --muted:#9c8b74; --line:#ece2d2; --line2:#dccbb2;
  --accent:#e0783c; --accent-soft:#fdeee0;
  --ok:#4f9d5f; --ok-soft:#eaf6ec;
  --warn:#d9922b; --warn-soft:#fdf4e0;
  --danger:#d9584a; --danger-soft:#fdecea;
  --ai:#9377cf; --ai-soft:#f3eefc;
  --shadow:0 2px 4px rgba(59,50,41,.04),0 8px 22px rgba(59,50,41,.06);
  --radius:20px;
  color-scheme:light;
  font-size:16px;
}
body[data-theme="family"]{
  background:
    radial-gradient(ellipse at 10% 0%,rgba(224,120,60,.07),transparent 40%),
    radial-gradient(ellipse at 90% 6%,rgba(147,119,207,.05),transparent 38%);
}
/* 四块地方各一个颜色 —— 不需要在这儿写：核心的 `installDomPalette()` 会读
   `packs/family/pack.js` 里 domains[].color 当场生成（见 assets/styles.css 顶部说明）。
   这里只放主题自己的事。（想给某块地方换个色，改 pack.js 里那个 color 就行，
   换一个场景包也一样，核心和主题都不用动。） */

/* ---------- 框架：导航与顶栏 ---------- */
/* 侧栏宽度是固定的：品牌名不缩字号就会被挤成两行 */
body[data-theme="family"] .brand{color:var(--accent);font-size:15.5px;gap:7px}
body[data-theme="family"] .brand-name{white-space:nowrap}
body[data-theme="family"] .brand-sub{font-size:10.5px;color:var(--muted);white-space:nowrap}
body[data-theme="family"] .sidebar{background:var(--bg2);padding:22px 12px}
body[data-theme="family"] .nav-item{font-size:15.5px;font-weight:700;padding:13px 15px;border-radius:15px;margin-bottom:5px;gap:9px}
body[data-theme="family"] .nav-item.active{box-shadow:inset 0 0 0 1.6px var(--accent-soft)}
body[data-theme="family"] .nav-item .dot{min-width:20px;height:20px;font-size:12px;border-radius:10px}
body[data-theme="family"] .side-foot{font-size:12px}
body[data-theme="family"] .topbar{background:rgba(251,247,240,.9);padding:15px 26px}
body[data-theme="family"] .topbar h1{font-size:21px}
body[data-theme="family"] .todaychip{font-size:13px;padding:7px 15px;border-radius:999px;background:var(--card)}
body[data-theme="family"] .content{padding:22px 26px 96px}

/* ---------- 卡片：大、松、圆 ---------- */
body[data-theme="family"] .card{padding:20px 22px;margin-bottom:18px}
body[data-theme="family"] .card h3{font-size:19px;margin-bottom:13px;letter-spacing:.2px}
body[data-theme="family"] .hint{font-size:13.5px;line-height:1.95}
body[data-theme="family"] .sec-title{font-size:13px;color:var(--accent);letter-spacing:.6px}
body[data-theme="family"] .empty{padding:46px 22px;font-size:15px;line-height:2;border-radius:20px}

/* ---------- 按钮、标签、输入框 ---------- */
body[data-theme="family"] .btn{min-height:42px;padding:0 18px;font-size:15px;border-radius:14px}
body[data-theme="family"] .btn.sm{min-height:34px;padding:0 13px;font-size:13.5px;border-radius:11px}
body[data-theme="family"] .tag{font-size:12.5px;padding:3px 12px;border-radius:999px;font-weight:700}
body[data-theme="family"] input[type=text],
body[data-theme="family"] input[type=time],
body[data-theme="family"] textarea,
body[data-theme="family"] select{font-size:15.5px;padding:11px 13px;border-radius:14px}

/* ---------- 今日共学：数字要大，眼睛先看到它 ---------- */
body[data-theme="family"] .status-grid{gap:14px;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));margin-bottom:18px}
/* 统计卡上色：像一堆积木块，不是一张表 */
body[data-theme="family"] .stat-card{padding:18px 20px;border:none;background:var(--sc,var(--card2));box-shadow:0 3px 0 rgba(59,50,41,.05)}
body[data-theme="family"] .stat-card .n{font-size:36px;line-height:1.15;color:var(--sc-ink,var(--accent))}
body[data-theme="family"] .stat-card .l{font-size:13.5px;font-weight:700;color:var(--sub);line-height:1.5}
body[data-theme="family"] .status-grid .stat-card:nth-child(1){--sc:#fdf1e0;--sc-ink:#c9691f}
body[data-theme="family"] .status-grid .stat-card:nth-child(2){--sc:#eaf6ec;--sc-ink:#3f8f5c}
body[data-theme="family"] .status-grid .stat-card:nth-child(3){--sc:#ecf3fa;--sc-ink:#3f74ad}
body[data-theme="family"] .status-grid .stat-card:nth-child(4){--sc:#f3eefc;--sc-ink:#8168c4}
body[data-theme="family"] .status-grid .stat-card:nth-child(5){--sc:#fdeef4;--sc-ink:#c9557f}
body[data-theme="family"] .status-grid .stat-card:nth-child(6){--sc:#e9f6f5;--sc-ink:#34938f}
/* 每条前面一条彩色小竖条：哪条是哪条，不用读标签也能分出来 */
body[data-theme="family"] .report-item{position:relative;border-radius:20px;border:none;border-left:none;padding:18px 20px 18px 24px;background:var(--card);box-shadow:var(--shadow)}
body[data-theme="family"] .report-item::before{content:'';position:absolute;left:0;top:16px;bottom:16px;width:7px;border-radius:0 7px 7px 0;background:var(--rc,var(--accent))}
body[data-theme="family"] .report-item:nth-child(2){--rc:#3f74ad}
body[data-theme="family"] .report-item:nth-child(3){--rc:#c9557f}
body[data-theme="family"] .report-item:nth-child(4){--rc:#3f8f5c}
body[data-theme="family"] .report-item:nth-child(5){--rc:#8168c4}
body[data-theme="family"] .report-item:nth-child(6){--rc:#34938f}
body[data-theme="family"] .report-item-top{gap:9px;margin-bottom:8px}
body[data-theme="family"] .report-title{font-size:19px;line-height:1.6}
body[data-theme="family"] .report-why{font-size:16px;line-height:2.05;margin-top:8px}
body[data-theme="family"] .report-meta{gap:9px;margin-bottom:14px}

/* ---------- 这周一步 ---------- */
body[data-theme="family"] .week-step{border-radius:18px;border-left-width:5px;padding:18px 20px;gap:14px}
body[data-theme="family"] .ws-mark{font-size:26px}
body[data-theme="family"] .ws-text{font-size:18px;line-height:1.8}
body[data-theme="family"] .ask-back{font-size:14px;line-height:1.9;margin-top:12px;padding-top:12px;border-top-style:dashed}
body[data-theme="family"] .step-inp{font-size:16.5px;line-height:1.95;padding:15px;border-radius:16px;min-height:110px}
body[data-theme="family"] .clue-line{font-size:15px;line-height:1.9;padding:11px 0;gap:10px}
body[data-theme="family"] .clue-at{font-size:12.5px}

/* ---------- 兴趣地图：坐标条与坐标卡 ---------- */
body[data-theme="family"] .bar-c{gap:10px;margin-bottom:18px}
body[data-theme="family"] .coor-chip{font-size:14px;padding:8px 17px;background:var(--card);border-width:1.5px}
body[data-theme="family"] .world-open{border-radius:20px;border-left-width:5px;padding:20px 22px;margin-bottom:18px}
body[data-theme="family"] .wo-quote{font-size:19px;line-height:1.85}
body[data-theme="family"] .coord-grid{gap:14px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
body[data-theme="family"] .coord-cell{border-radius:16px;border-width:1.5px;padding:15px 16px;background:var(--dbg,var(--card2));border-color:var(--dc,var(--line))}
body[data-theme="family"] .coord-cell .cc-dim{font-size:12.5px;color:var(--dc,var(--accent));letter-spacing:.4px}
body[data-theme="family"] .coord-cell .cc-level{font-size:19px;font-weight:800;margin-bottom:7px}
body[data-theme="family"] .coord-cell .cc-ev{font-size:13.5px;line-height:1.85;color:var(--sub)}
body[data-theme="family"] .coord-cell .cc-in{font-size:14.5px;padding:9px 11px;border-radius:11px}
body[data-theme="family"] .cc-dim-ico{font-size:19px;margin-right:5px}

/* ---------- 地形总览图 ---------- */
body[data-theme="family"] .wmap{min-width:660px}
body[data-theme="family"] .wmap-legend{font-size:13px;gap:8px;margin-top:14px;line-height:1.9}
body[data-theme="family"] .lg-dot{width:14px;height:14px;border-radius:5px}
body[data-theme="family"] .lg-tip{font-size:12px}

/* ---------- 走进版块 ---------- */
body[data-theme="family"] .zview{border-radius:20px;border-left-width:5px;padding:20px 22px;margin-bottom:18px}
body[data-theme="family"] .zv-title{font-size:24px;gap:12px}
body[data-theme="family"] .zv-line{font-size:15px;line-height:1.95;margin-top:9px}
body[data-theme="family"] .wz-stat{font-size:13px;padding:4px 13px;font-weight:800}
body[data-theme="family"] .wspot{border-radius:16px;border-width:1.5px;padding:14px 16px}
body[data-theme="family"] .wspot.life,
body[data-theme="family"] .wspot.source,
body[data-theme="family"] .wspot.direction{border-left-width:5px}
body[data-theme="family"] .ws-top b{font-size:16px}
body[data-theme="family"] .ws-done{font-size:12.5px}
body[data-theme="family"] .ws-note{font-size:14px;line-height:1.9;margin-top:7px;-webkit-line-clamp:4}
body[data-theme="family"] .ws-go{font-size:13px;margin-top:9px;font-weight:700}
body[data-theme="family"] .hop-grid{gap:12px}
body[data-theme="family"] .hop-card{border-radius:16px;border-left-width:5px;padding:14px 16px}
body[data-theme="family"] .hop-card b{font-size:16px}
body[data-theme="family"] .xedge{font-size:15px;padding:11px 0;gap:10px;line-height:1.7}
body[data-theme="family"] .xe-label{font-size:13.5px}
body[data-theme="family"] .spot-kid,
body[data-theme="family"] .spot-hop{border-radius:14px;padding:13px 15px;font-size:15px;line-height:1.7}
body[data-theme="family"] .spot-src{font-size:13.5px;line-height:1.85;border-radius:12px;padding:11px 14px}

/* ---------- 兴趣线索 ---------- */
body[data-theme="family"] .sig-item{border-radius:18px;border-left-width:5px;padding:18px 20px}
body[data-theme="family"] .sig-title{font-size:18px;line-height:1.6}
body[data-theme="family"] .sig-body{font-size:15.5px;line-height:1.95;margin-top:8px}
body[data-theme="family"] .sig-meta{gap:9px;margin-top:13px}
body[data-theme="family"] .fb-btn{font-size:13.5px;padding:5px 13px;border-radius:10px}
body[data-theme="family"] .notes-inp{font-size:14.5px;min-height:54px;border-radius:14px}

/* ---------- 要做的事 ---------- */
body[data-theme="family"] .kanban{gap:14px}
body[data-theme="family"] .kb-col{border-radius:18px;padding:13px}
body[data-theme="family"] .kb-col h3{font-size:14px;letter-spacing:.3px}
body[data-theme="family"] .kb-col .count{font-size:13px}
body[data-theme="family"] .kb-item{border-radius:15px;padding:13px 15px;margin-bottom:10px}
body[data-theme="family"] .kb-item .ki-text{font-size:15.5px;line-height:1.65}
body[data-theme="family"] .ki-btn{font-size:12.5px;padding:4px 10px;border-radius:8px}

/* ---------- 成长足迹：一条一条，像攒星星 ---------- */
body[data-theme="family"] .track-line{gap:6px}
body[data-theme="family"] .trk{gap:15px;padding:12px 0}
body[data-theme="family"] .trk-mark{width:42px;height:42px;font-size:20px;border-width:1.6px}
body[data-theme="family"] .trk.work .trk-mark{font-size:22px}
body[data-theme="family"] .trk-body{padding-bottom:12px}
body[data-theme="family"] .trk-top{gap:9px;margin-bottom:6px}
body[data-theme="family"] .trk-at{font-size:12.5px}
body[data-theme="family"] .trk-text{font-size:16px;line-height:1.85}

/* ---------- 弹窗与孩子档案 ---------- */
body[data-theme="family"] .modal{border-radius:24px;padding:26px}
body[data-theme="family"] .modal h3{font-size:21px;margin-bottom:16px}
body[data-theme="family"] .m-row label{font-size:13.5px}
body[data-theme="family"] .m-foot{gap:10px;margin-top:20px}
body[data-theme="family"] .child-head .ch-avatar{font-size:34px;width:64px;height:64px;border-radius:20px}
body[data-theme="family"] .kg-node{border-radius:14px;padding:13px 16px}
body[data-theme="family"] .kg-node .kg-name{font-size:15.5px}
body[data-theme="family"] .filemap{font-size:13.5px}
body[data-theme="family"] .filemap th,body[data-theme="family"] .filemap td{padding:10px 12px}

/* ---------- 接入提示词：字大一点，别让人眯眼 ---------- */
body[data-theme="family"] .connect-card .cc-lead{font-size:14px}
body[data-theme="family"] .pmt-block{border-radius:16px;padding:15px 17px}
body[data-theme="family"] .pmt-head b{font-size:16px}
body[data-theme="family"] .pmt-no{width:24px;height:24px;font-size:13px}
body[data-theme="family"] .pmt{font-size:14px;line-height:2;border-radius:13px;padding:14px 16px;max-height:360px}
body[data-theme="family"] .cc-tip{font-size:13.5px}
body[data-theme="family"] .path-row label{font-size:13.5px}
body[data-theme="family"] .path-row input{font-size:13.5px;padding:10px 12px;border-radius:13px}

/* ---------- 场景包选择器与部署步骤 ---------- */
body[data-theme="family"] .pack-opt{border-radius:18px;padding:16px}
body[data-theme="family"] .deploy-step{border-radius:18px;min-height:112px;padding:17px}
body[data-theme="family"] .deploy-step b{font-size:15.5px}
body[data-theme="family"] .deploy-step p{font-size:13px;line-height:1.75}
body[data-theme="family"] .deploy-hero{border-radius:22px;padding:24px 26px}
body[data-theme="family"] .deploy-hero h2{font-size:24px}
body[data-theme="family"] .deploy-hero p{font-size:14px;line-height:1.9}
body[data-theme="family"] .theme-opt{border-radius:18px}

/* ---------- 响应式 ---------- */
@media(max-width:820px){
  body[data-theme="family"] .coord-grid{grid-template-columns:1fr 1fr}
  body[data-theme="family"] .status-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:520px){
  body[data-theme="family"] .coord-grid{grid-template-columns:1fr}
  body[data-theme="family"] .content{padding:16px 14px 80px}
}

/* ============================================================
   自然松弛视觉层
   灵感：Refero 的 botanical / apothecary / warm editorial 方向。
   暖纸是底，不是装饰；苔藓绿只做行动与当前状态，陶土色只做少量语义提示。
   内容靠排版、纸面层次和留白成立，不靠霓虹、渐变和一堆彩色卡片。
   ============================================================ */
body[data-theme="family"]{
  --bg:#f4f1e9; --bg2:#ebe8de; --card:#faf9f4; --card2:#f0eee5;
  --ink:#2d352e; --sub:#657064; --muted:#8b9489; --line:#dfe1d6; --line2:#c9cec0;
  --accent:#687d61; --accent-soft:#e7eee3; --accent-ink:#4d6349;
  --ok:#5d8564; --ok-soft:#e8f1e7; --warn:#a77443; --warn-soft:#f5ede1;
  --danger:#aa6254; --danger-soft:#f5e7e3; --ai:#817263; --ai-soft:#eee9e1;
  --shadow:0 10px 30px rgba(62,69,57,.055); --radius:17px; --radius-sm:12px; --radius-lg:24px;
  --topbar-bg:rgba(244,241,233,.88);
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color-scheme:light;
}
body[data-theme="family"]{background-color:var(--bg);background-image:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,0));background-attachment:fixed}
body[data-theme="family"] .sidebar{background:rgba(235,232,222,.82);border-right-color:var(--line);backdrop-filter:blur(14px)}
body[data-theme="family"] .brand{color:var(--ink);text-shadow:none}
body[data-theme="family"] .brand-mark{color:var(--accent)}
body[data-theme="family"] .nav-item{font-size:15px;font-weight:650;border-radius:12px}
body[data-theme="family"] .nav-item:hover{background:rgba(250,249,244,.8);color:var(--ink)}
body[data-theme="family"] .nav-item.active{background:var(--card);color:var(--accent-ink);box-shadow:var(--shadow)}
body[data-theme="family"] .nav-item.active::before{background:var(--accent)}
body[data-theme="family"] .topbar{background:var(--topbar-bg);border-bottom-color:var(--line)}
body[data-theme="family"] .topbar h1{font-family:"Songti SC","STSong","Noto Serif CJK SC",serif;font-size:23px;letter-spacing:-.02em}
body[data-theme="family"] .todaychip{background:var(--card2);border-color:var(--line);color:var(--sub)}
body[data-theme="family"] .case-launcher{background:var(--card2);border-color:var(--line2);color:var(--sub)}
body[data-theme="family"] .case-launcher:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
body[data-theme="family"] .card{background:var(--card);border-color:var(--line);box-shadow:var(--shadow)}
body[data-theme="family"] .card h3,body[data-theme="family"] .deploy-hero h2{font-family:"Songti SC","STSong","Noto Serif CJK SC",serif;color:var(--ink)}
body[data-theme="family"] .btn{border-radius:999px;background:transparent;border-color:var(--line2);color:var(--sub)}
body[data-theme="family"] .btn:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink);box-shadow:none}
body[data-theme="family"] .btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:none}
body[data-theme="family"] .tag{background:var(--accent-soft);color:var(--accent-ink)}
body[data-theme="family"] .stat-card{box-shadow:none;border:1px solid var(--line);background:var(--card2)}
body[data-theme="family"] .status-grid .stat-card:nth-child(n){--sc:#f0eee5;--sc-ink:var(--accent-ink)}
body[data-theme="family"] .report-item,body[data-theme="family"] .sig-item{border:1px solid var(--line);border-left-width:1px;background:var(--card);box-shadow:none}
body[data-theme="family"] .report-item::before{display:none}
body[data-theme="family"] .kb-col{background:var(--card2);border-color:var(--line);box-shadow:none}
body[data-theme="family"] .kb-item{background:var(--card);border-color:var(--line);box-shadow:none}
body[data-theme="family"] .deploy-hero{background:var(--card);border-color:var(--line);box-shadow:none}
body[data-theme="family"] .empty{background:var(--card2);border-color:var(--line2)}
body[data-theme="family"] .theme-opt.sel{border-color:var(--accent);background:var(--accent-soft)}

/* 概览页：像打开一扇窗，背景承担自然感，玻璃层承担可读性。 */
body[data-theme="family"][data-view="brief"]{
  background:
    linear-gradient(180deg,rgba(244,241,233,.38),rgba(244,241,233,.72) 76%,rgba(244,241,233,.92)),
    url("nature-field-hero.png") center top/cover fixed no-repeat;
}
body[data-theme="family"][data-view="brief"] .main{background:transparent}
body[data-theme="family"][data-view="brief"] .topbar{background:rgba(244,241,233,.56);backdrop-filter:blur(18px);border-bottom-color:rgba(201,206,192,.75)}
body[data-theme="family"][data-view="brief"] .content{background:transparent}
body[data-theme="family"][data-view="brief"] .card,
body[data-theme="family"][data-view="brief"] .stat-card,
body[data-theme="family"][data-view="brief"] .report-item,
body[data-theme="family"][data-view="brief"] .pending-ai,
body[data-theme="family"][data-view="brief"] .personal-recent{
  background:rgba(250,249,244,.68);border-color:rgba(255,255,255,.62);
  box-shadow:0 12px 34px rgba(56,67,52,.09),inset 0 1px 0 rgba(255,255,255,.7);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
}
body[data-theme="family"][data-view="brief"] .empty{background:rgba(240,238,229,.5);border-color:rgba(157,166,149,.4)}
body[data-theme="family"][data-view="brief"] .stat-card{--sc:rgba(250,249,244,.62)!important}
body[data-theme="family"][data-view="brief"] .stat-card .n{color:var(--accent-ink)}
body[data-theme="family"][data-view="brief"] .deploy-hero{background:rgba(250,249,244,.66);backdrop-filter:blur(18px)}
@media(max-width:700px){
  body[data-theme="family"][data-view="brief"]{background-position:58% top;background-attachment:scroll}
}

/* ============================================================
   图形元素（不只是字号和配色）
   ------------------------------------------------------------
   孩子先认「形」，再认「字」。所以这一层的任务不是把字调大，
   而是让每一屏都有一个不需要读懂就能认出的东西：
   一个角色、一个带底的图形、一条路。
   ============================================================ */

/* ---------- 图标统一放大一号 ---------- */
body[data-theme="family"] .nav-item{padding-left:12px}
body[data-theme="family"] .nav-item .ni-ico{width:28px;justify-items:center;display:grid}
body[data-theme="family"] .nav-item .ni-ico svg{width:23px;height:23px}
body[data-theme="family"] .card h3 .ico{width:24px;height:24px;margin-right:9px}
body[data-theme="family"] .stat-card .sc-ico svg{width:27px;height:27px}
body[data-theme="family"] .stat-card .sc-ico{margin-bottom:4px}
body[data-theme="family"] .trk-mark svg{width:21px;height:21px}
body[data-theme="family"] .cc-dim-ico svg{width:19px;height:19px}
body[data-theme="family"] .cc-dim-ico{margin-right:7px}
body[data-theme="family"] .btn .ico{width:17px;height:17px;margin-right:4px}
body[data-theme="family"] .ki-btn .ico,body[data-theme="family"] .fb-btn .ico{width:15px;height:15px}
body[data-theme="family"] .ws-ico svg{width:19px;height:19px}
body[data-theme="family"] .ws-ico{color:var(--accent);display:grid;place-items:center}
body[data-theme="family"] .hop-ico svg{width:18px;height:18px}
body[data-theme="family"] .brand-mark svg{width:27px;height:27px}
body[data-theme="family"] .ch-avatar{display:grid;place-items:center;color:var(--accent)}

/* ---------- 开场卡：先看见一个「人」，再看见内容 ---------- */
body[data-theme="family"] .fz-hello{
  display:flex;align-items:center;gap:20px;position:relative;overflow:hidden;
  background:var(--card);border-radius:24px;padding:18px 24px;margin-bottom:18px;
  box-shadow:var(--shadow);
}
body[data-theme="family"] .fz-hello::after{
  content:'';position:absolute;right:-40px;top:-46px;width:170px;height:170px;border-radius:50%;
  background:radial-gradient(circle,rgba(224,120,60,.12),transparent 68%);pointer-events:none;
}
body[data-theme="family"] .fh-mascot{flex:none;animation:fz-float 4s ease-in-out infinite}
body[data-theme="family"] .fh-mascot svg{display:block}
@keyframes fz-float{0%,100%{transform:translateY(0) rotate(-1.5deg)}50%{transform:translateY(-7px) rotate(1.5deg)}}
body[data-theme="family"] .fh-hi{font-size:13px;font-weight:700;color:var(--muted);letter-spacing:.5px}
body[data-theme="family"] .fh-say{font-size:18px;font-weight:700;line-height:1.75;margin-top:5px}
body[data-theme="family"] .fh-note{font-size:12.5px;color:var(--muted);margin-top:7px}
@media(prefers-reduced-motion:reduce){body[data-theme="family"] .fh-mascot{animation:none}}

/* ---------- 空状态：放角色剪影，不是一句干巴巴的字 ---------- */
body[data-theme="family"] .empty{padding-top:26px}
body[data-theme="family"] .empty::before{
  content:'';display:block;width:76px;height:76px;margin:0 auto 14px;
  background:var(--accent);opacity:.3;
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120'><circle cx='60' cy='66' r='33' fill='none' stroke='black' stroke-width='7'/><path d='M60 34v-9' stroke='black' stroke-width='7' stroke-linecap='round'/><path d='M60 26c0-5 3.6-8.6 8.4-8.6 1 0 1.8.8 1.8 1.8 0 5-3.6 8.6-8.4 8.6Z' fill='black'/><ellipse cx='48' cy='61' rx='4.6' ry='5.8' fill='black'/><ellipse cx='72' cy='61' rx='4.6' ry='5.8' fill='black'/></svg>") center/contain no-repeat;
          mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120'><circle cx='60' cy='66' r='33' fill='none' stroke='black' stroke-width='7'/><path d='M60 34v-9' stroke='black' stroke-width='7' stroke-linecap='round'/><path d='M60 26c0-5 3.6-8.6 8.4-8.6 1 0 1.8.8 1.8 1.8 0 5-3.6 8.6-8.4 8.6Z' fill='black'/><ellipse cx='48' cy='61' rx='4.6' ry='5.8' fill='black'/><ellipse cx='72' cy='61' rx='4.6' ry='5.8' fill='black'/></svg>") center/contain no-repeat;
}

/* ---------- 地形图：块浮起来，路画成虚线路 ---------- */
body[data-theme="family"] .tnode .tn-box{filter:drop-shadow(0 3px 0 rgba(59,50,41,.07))}
body[data-theme="family"] .wroad{stroke:var(--muted);stroke-width:3.2;stroke-dasharray:10 8;opacity:.5}
body[data-theme="family"] .tnode .tn-ico{pointer-events:none}

/* ---------- 统计卡：图形 + 数字，不是两行字 ---------- */
body[data-theme="family"] .stat-card{display:flex;flex-direction:column}
body[data-theme="family"] .stat-card .n{font-size:38px;letter-spacing:-.5px}
body[data-theme="family"] .status-grid{gap:16px}

/* ---------- 卡片标题：图形和标题之间不留缝 ---------- */
body[data-theme="family"] .card h3{display:flex;align-items:center;line-height:1.45}

/* ---------- 足迹：图标占满整个圆点 ---------- */
body[data-theme="family"] .trk-mark{border-width:1.8px;background:var(--card)}
body[data-theme="family"] .trk.work .trk-mark{background:var(--ok-soft)}
body[data-theme="family"] .ws-mark{display:grid;place-items:center}
body[data-theme="family"] .ws-mark svg{width:27px;height:27px}

/* ---------- 足迹：圆点被一条虚线串起来，看着就是「走过的一条路」 ---------- */
body[data-theme="family"] .track-line{position:relative}
body[data-theme="family"] .track-line::before{
  content:'';position:absolute;left:19.5px;top:38px;bottom:34px;width:3px;border-radius:2px;
  background:repeating-linear-gradient(to bottom,var(--line2) 0 8px,transparent 8px 16px);
}
body[data-theme="family"] .trk{position:relative;z-index:1}
body[data-theme="family"] .trk-mark{background:var(--card)}

/* ---------- 地图顶端：进度环 + 指标 ---------- */
body[data-theme="family"] .world-top{display:flex;align-items:center;gap:22px;margin-bottom:18px;
  background:var(--card);border-radius:22px;padding:16px 22px;box-shadow:var(--shadow);flex-wrap:wrap}
body[data-theme="family"] .wt-ring{flex:none;text-align:center}
body[data-theme="family"] .wt-ring .ico-ring{display:block;margin:0 auto}
body[data-theme="family"] .wt-rl{font-size:12.5px;font-weight:700;color:var(--muted);margin-top:5px}
body[data-theme="family"] .world-top .bar-c{margin-bottom:0;flex:1;min-width:240px}
