/* ==========================================================================
   家庭成长计划 · 学生端 / 家长端 / 每日提醒共用样式
   ========================================================================== */

:root {
  --fp-serif: "Songti SC", "STSong", "Noto Serif SC", Georgia, serif;
  --fp-game: #f59e0b;
  --fp-game-d: #b45309;
  --fp-game-l: #fff7e8;
  --fp-game-b: #fde4b0;
  --fp-chore: #0d9488;
  --fp-chore-d: #0f766e;
  --fp-chore-l: #e6f7f4;
  --fp-chore-b: #b8e6df;
  --fp-study: #4f46e5;
  --fp-study-d: #4338ca;
  --fp-study-l: #eef0ff;
  --fp-study-b: #cfd3ff;
  --fp-done: #15803d;
  --fp-done-l: #ecfdf3;
  --fp-done-b: #c4ecd1;
}

.fp-wrap { max-width: 1060px; margin: 0 auto; padding: 22px 22px 96px; }

/* ---------------------------------------------------------------- 顶部问候 */
.fp-hero {
  position: relative; overflow: hidden;
  display: flex; align-items: center; gap: 18px;
  padding: 18px 22px; border-radius: 22px;
  border: 1px solid #e0e8f7;
  background:
    radial-gradient(520px 260px at 92% -18%, rgba(139, 92, 246, .16), transparent 68%),
    radial-gradient(420px 220px at 0% 120%, rgba(245, 158, 11, .14), transparent 70%),
    linear-gradient(135deg, #eef4ff 0%, #fbf9ff 54%, #fff9ee 100%);
  box-shadow: var(--shadow);
}
.fp-hero::after {
  content: ""; position: absolute; right: -42px; top: -56px;
  width: 170px; height: 170px; border-radius: 50%;
  border: 18px solid rgba(79, 70, 229, .06);
  pointer-events: none;
}
.fp-hero-main { flex: 1; min-width: 0; position: relative; z-index: 1; }
.fp-hero-kicker {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11.5px; font-weight: 700; color: var(--fp-study-d);
  background: rgba(79, 70, 229, .09); border: 1px solid var(--fp-study-b);
  border-radius: 999px; padding: 1px 9px;
}
.fp-hero h1 {
  margin: 5px 0 2px; font-size: 21px; letter-spacing: -.3px; line-height: 1.28;
  text-wrap: balance;
}
.fp-hero p { margin: 0; color: var(--text-2); font-size: 12.5px; line-height: 1.55; }
.fp-hero-actions { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.fp-hero-side { display: flex; align-items: center; gap: 14px; position: relative; z-index: 1; }

/* 进度环 */
.fp-ring {
  --p: 0;
  width: 92px; height: 92px; border-radius: 50%; flex: none;
  background: conic-gradient(var(--fp-study) calc(var(--p) * 1%), #e6ebf7 0);
  display: grid; place-items: center;
  box-shadow: 0 10px 28px rgba(79, 70, 229, .16);
  transition: background .5s ease;
}
.fp-ring-in {
  width: 72px; height: 72px; border-radius: 50%; background: #fff;
  display: grid; place-items: center; text-align: center; line-height: 1.15;
}
.fp-ring-in b { font-size: 20px; letter-spacing: -.5px; font-variant-numeric: tabular-nums; }
.fp-ring-in span { display: block; font-size: 10px; color: var(--muted); font-weight: 600; }

.fp-hero-stats { display: flex; gap: 8px; flex-wrap: wrap; }
.fp-mini {
  background: rgba(255, 255, 255, .78); border: 1px solid var(--border);
  border-radius: 12px; padding: 6px 10px; min-width: 76px;
}
.fp-mini b { display: block; font-size: 16px; line-height: 1.2; font-variant-numeric: tabular-nums; }
.fp-mini span { font-size: 10.5px; color: var(--muted); font-weight: 600; }
.fp-mini.warn b { color: var(--fp-game-d); }

/* ---------------------------------------------------------------- 本周小日历 */
.fp-weekbar {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  margin: 12px 0 6px; font-size: 11.5px; font-weight: 600; color: var(--muted);
}
.fp-weeknav {
  width: 26px; height: 26px; padding: 0; border-radius: 8px;
  border: 1px solid var(--border); background: #fff; color: var(--text-2);
  font: inherit; font-size: 16px; line-height: 1; cursor: pointer;
  display: grid; place-items: center;
  transition: border-color .15s, color .15s, background-color .15s;
  -webkit-tap-highlight-color: transparent;
}
.fp-weeknav:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); }
.fp-weeknav:disabled { opacity: .35; cursor: default; }
.fp-weeknav:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

.fp-week {
  display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 7px; margin: 0 0 4px;
}
.fp-day {
  display: block; width: 100%; box-sizing: border-box; position: relative;
  font: inherit; color: inherit; text-align: center; cursor: pointer;
  border: 1px solid var(--border); border-radius: 12px; background: #fff;
  padding: 7px 4px 8px;
  transition: border-color .16s, box-shadow .16s, background-color .16s, color .16s;
  -webkit-tap-highlight-color: transparent;
}
.fp-day:hover:not(:disabled) { border-color: var(--border-2); box-shadow: var(--shadow-sm); }
.fp-day:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.fp-day.today { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-l); }
.fp-day.selected {
  background: var(--primary); border-color: var(--primary);
  box-shadow: 0 6px 16px rgba(37, 99, 235, .22);
}
.fp-day.future { opacity: .42; cursor: default; }
.fp-day.future:hover { border-color: var(--border); box-shadow: none; }
.fp-day .n, .fp-day .d, .fp-day .bar, .fp-day .c { display: block; }
.fp-day .n { font-size: 10.5px; color: var(--muted); font-weight: 600; }
.fp-day .d { font-size: 16px; font-weight: 800; line-height: 1.3; font-variant-numeric: tabular-nums; }
.fp-day .bar {
  height: 4px; border-radius: 999px; background: #edf1f8;
  margin: 5px 7px 0; overflow: hidden;
}
.fp-day .bar i { display: block; height: 100%; border-radius: 999px; background: var(--success); }
.fp-day .c { font-size: 10px; color: var(--muted); margin-top: 3px; font-variant-numeric: tabular-nums; }
.fp-day .dot {
  position: absolute; top: 5px; right: 6px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--fp-game);
}
.fp-day.selected .n, .fp-day.selected .c { color: rgba(255, 255, 255, .78); }
.fp-day.selected .d { color: #fff; }
.fp-day.selected .bar { background: rgba(255, 255, 255, .28); }
.fp-day.selected .bar i { background: #fff; }
.fp-day.selected .dot { background: #fff; }

/* ---------------------------------------------------------------- 页签 */
.fp-tabs {
  display: flex; gap: 5px; background: #fff; border: 1px solid var(--border);
  border-radius: 14px; padding: 5px; margin: 18px 0;
}
.fp-tab {
  flex: 1; border: 0; background: transparent; font: inherit;
  font-size: 13.5px; font-weight: 700; color: var(--muted);
  padding: 9px 6px; border-radius: 10px; cursor: pointer;
  transition: background .16s, color .16s, box-shadow .16s;
}
.fp-tab:hover { color: var(--primary-d); background: var(--primary-l); }
.fp-tab.on {
  background: var(--primary); color: #fff;
  box-shadow: 0 4px 12px rgba(37, 99, 235, .25);
}
.fp-tab:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* ---------------------------------------------------------------- 完成状态筛选 */
.fp-filter {
  display: flex; gap: 7px;
  margin: 10px 0 12px;
}
.fp-filter[hidden] { display: none; }
.fp-filter-btn {
  flex: 1 1 0; min-width: 0;
  display: inline-flex; align-items: center; justify-content: center; gap: 5px;
  min-height: 34px; padding: 6px 10px;
  border: 1px solid var(--border); border-radius: 999px;
  background: #fff; color: var(--text-2);
  font: inherit; font-size: 12.5px; font-weight: 700;
  cursor: pointer;
  transition: border-color .16s, background-color .16s, color .16s, box-shadow .16s;
}
.fp-filter-btn b {
  display: inline-grid; place-items: center;
  min-width: 18px; height: 18px; padding: 0 5px;
  border-radius: 999px; background: var(--surface-2);
  font-size: 10.5px; font-weight: 800; color: var(--muted);
}
.fp-filter-btn:hover { border-color: var(--primary); color: var(--primary-d); }
.fp-filter-btn.on {
  background: var(--primary); border-color: var(--primary); color: #fff;
  box-shadow: 0 3px 10px rgba(79, 70, 229, .18);
}
.fp-filter-btn.on b { background: rgba(255, 255, 255, .22); color: #fff; }
.fp-filter-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* ---------------------------------------------------------------- 二级视图返回条 */
.fp-subhead {
  display: flex; align-items: center; gap: 10px;
  margin: 16px 0 14px; padding: 9px 12px;
  background: #fff; border: 1px solid var(--border); border-radius: 14px;
}
.fp-subhead[hidden] { display: none; }
.fp-subhead h2 {
  flex: 1; min-width: 0; margin: 0 0 0 2px; padding-left: 12px;
  border-left: 1px solid var(--border-2);
  font-size: 15px; font-weight: 800;
}
.fp-back {
  border: 0; background: none; font: inherit;
  font-size: 12.5px; font-weight: 700; color: var(--primary);
  padding: 6px 8px; border-radius: 8px; cursor: pointer; white-space: nowrap;
}
.fp-back:hover { background: var(--primary-l); }
.fp-back:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* ---------------------------------------------------------------- 补做提示与补做区 */
/* 今天全部完成后才出现，孩子选「明天再说」当天不再打扰 */
.fp-offer {
  display: flex; align-items: center; gap: 12px;
  margin: 0 0 14px; padding: 13px 15px;
  border: 1px solid #ecc98f; border-radius: 15px;
  background: linear-gradient(135deg, #fff6e0, #ffefd2);
  box-shadow: 0 4px 14px rgba(194, 112, 78, .08);
}
.fp-offer-ic { font-size: 22px; flex: none; }
.fp-offer-txt { flex: 1; min-width: 0; }
.fp-offer-txt b { display: block; font-size: 13.5px; }
.fp-offer-txt span { font-size: 12px; line-height: 1.6; color: var(--muted); }
.fp-offer-acts { display: flex; gap: 7px; flex: none; }

.fp-makeup { margin: 0 0 16px; scroll-margin-top: 90px; }
.fp-makeup-head {
  display: flex; align-items: center; gap: 10px;
  padding: 11px 14px; margin-bottom: 10px;
  border: 1px dashed #e2c9a0; border-radius: 14px; background: #fffaf0;
}
.fp-makeup-ic { font-size: 18px; flex: none; }
.fp-makeup-txt { flex: 1; min-width: 0; }
.fp-makeup-txt b { display: block; font-size: 13px; }
.fp-makeup-txt span { font-size: 11.5px; color: var(--muted); }
.fp-makeup-day { margin-bottom: 12px; }
.fp-makeup-day-head {
  display: flex; align-items: center; gap: 8px;
  margin: 0 0 6px; font-size: 12px; font-weight: 700; color: var(--text-2);
}
.fp-makeup-day-head .cnt { font-size: 11px; font-weight: 500; color: var(--muted); }

/* ---------------------------------------------------------------- 分类与任务卡 */
.fp-group { margin-bottom: 18px; }
.fp-group-head { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; }
.fp-group-ico {
  width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center;
  font-size: 15px; background: var(--cat-l); border: 1px solid var(--cat-b);
}
.fp-group-head h3 { margin: 0; font-size: 14.5px; }
.fp-group-head .cnt { font-size: 11.5px; color: var(--muted); }

.fp-task {
  position: relative;
  display: flex; gap: 11px; align-items: flex-start;
  padding: 13px 15px; margin-bottom: 9px;
  border: 1px solid var(--border); border-radius: 15px; background: #fff;
  transition: border-color .16s, box-shadow .16s, background .16s;
  /* 手机端页签吸顶后，键盘聚焦/锚点跳转不要被吸顶条盖住 */
  scroll-margin-top: 130px;
}
.fp-task.has-more .fp-task-main { padding-right: 28px; }
.fp-task:hover { border-color: var(--border-2); box-shadow: var(--shadow-sm); }
.fp-task.done { background: #f8fcfa; border-color: var(--fp-done-b); }
.fp-check {
  position: relative;
  width: 26px; height: 26px; box-sizing: border-box; padding: 0;
  border-radius: 50%; flex: none; margin-top: 1px;
  border: 2px solid #cbd5e1;
  background-color: #fff; background-repeat: no-repeat;
  background-position: center; background-size: 12px 12px;
  /* 勾用内联 SVG 居中绘制，不依赖设备字体字形与伪元素排版 */
  color: transparent; font-size: 0; line-height: 0;
  cursor: pointer;
  display: grid; place-items: center;
  transition: background-color .18s, border-color .18s;
  -webkit-tap-highlight-color: transparent;
}
/* 圆圈是完成/取消完成的唯一入口：透明伪元素把可点范围扩到约 40px */
.fp-check::after {
  content: ""; position: absolute; inset: -7px; border-radius: 50%;
}
/* 未完成悬停时预览一个浅绿勾，暗示这里可以点；三种主题都要盖得住 */
.fp-task:not(.done) .fp-check:hover,
body[data-page="family-plan"] .fp-task:not(.done) .fp-check:hover,
html[data-skin="pink"] body[data-page="family-plan"] .fp-task:not(.done) .fp-check:hover {
  border-color: var(--success);
  background-color: #eefaf2;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.4 8.2l3.1 3.1 6.1-6.6' fill='none' stroke='%2316a34a' stroke-width='2.1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.fp-task.done .fp-check {
  background-color: var(--success); border-color: var(--success);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.4 8.2l3.1 3.1 6.1-6.6' fill='none' stroke='%23fff' stroke-width='2.1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.fp-check:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
.fp-task-main { flex: 1; min-width: 0; }
.fp-task-title { font-size: 14.5px; font-weight: 750; line-height: 1.45; word-break: break-word; }
.fp-task.done .fp-task-title { color: #3f6b55; }
.fp-task-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px 9px;
  margin-top: 5px; font-size: 11.5px; color: var(--muted);
}
.fp-chip {
  display: inline-flex; align-items: center; gap: 3px;
  border-radius: 999px; padding: 1px 8px; font-size: 11px; font-weight: 650;
  border: 1px solid var(--border); background: var(--surface-2); color: var(--text-2);
  white-space: nowrap;
}
.fp-chip.game { color: var(--fp-game-d); background: var(--fp-game-l); border-color: var(--fp-game-b); }
.fp-chip.chore { color: var(--fp-chore-d); background: var(--fp-chore-l); border-color: var(--fp-chore-b); }
.fp-chip.study { color: var(--fp-study-d); background: var(--fp-study-l); border-color: var(--fp-study-b); }
.fp-chip.parent { color: #7c3aed; background: #f5f0ff; border-color: #e4d8ff; }
.fp-chip.self { color: #0369a1; background: #eef8ff; border-color: #cbe9fb; }
.fp-chip.done { color: var(--fp-done); background: var(--fp-done-l); border-color: var(--fp-done-b); }

/* 已完成：右侧醒目标记 + 最近一次完成时间 */
.fp-done-stamp {
  display: inline-flex; align-items: center; gap: 3px;
  margin-left: auto; padding: 3px 10px;
  border-radius: 999px; border: 1.5px solid var(--fp-done);
  background: var(--fp-done); color: #fff;
  font-size: 12.5px; font-weight: 800; letter-spacing: .2px;
  white-space: nowrap;
  box-shadow: 0 2px 6px rgba(21, 128, 61, .18);
  animation: fpStampIn .32s ease-out;
}
.fp-task-detail { margin-top: 6px; font-size: 12.5px; line-height: 1.7; color: var(--text-2); word-break: break-word; }
.fp-task-actions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 8px; }

/* 备注：完成 / 取消时留下的一句话，卡片与成长记录通用 */
.fp-task-note {
  display: flex; align-items: flex-start; gap: 6px;
  margin-top: 7px; padding: 6px 9px;
  border: 1px dashed var(--border-2); border-radius: 9px;
  background: var(--surface-2);
  font-size: 12px; line-height: 1.65; color: var(--text-2);
}
.fp-note-tag {
  flex: none; margin-top: 1px; padding: 0 6px;
  font-size: 10px; font-weight: 800; line-height: 1.7;
  color: var(--primary-d); background: var(--primary-l);
  border-radius: 999px;
}
.fp-note-text { flex: 1; min-width: 0; white-space: pre-wrap; word-break: break-word; }

/* 「⋯」更多菜单：编辑/删除收进二级菜单，降低误触。
   层级需高于页面右下角悬浮宠物（z-index: 940），否则菜单会被宠物立绘盖住。 */
.fp-more-wrap { position: absolute; top: 8px; right: 8px; z-index: 950; }
.fp-more {
  width: 30px; height: 30px; padding: 0; border: 0; border-radius: 9px;
  background: transparent; color: #9aa4b4; font: inherit; font-size: 19px;
  font-weight: 800; line-height: 1; cursor: pointer;
  display: grid; place-items: center;
  transition: background-color .15s, color .15s;
  -webkit-tap-highlight-color: transparent;
}
.fp-more:hover { background: #f1f5f9; color: var(--text); }
.fp-more:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.fp-more-menu {
  position: absolute; top: 34px; right: 0; min-width: 132px;
  background: #fff; border: 1px solid var(--border); border-radius: 12px;
  box-shadow: 0 10px 28px rgba(27, 36, 55, .14); padding: 5px; z-index: 50;
}
.fp-more-menu[hidden] { display: none; }
.fp-more-item {
  display: block; width: 100%; box-sizing: border-box; text-align: left;
  border: 0; background: none; border-radius: 8px; padding: 8px 10px;
  font: inherit; font-size: 12.5px; font-weight: 650; color: var(--text-2);
  cursor: pointer; white-space: nowrap;
}
.fp-more-item:hover { background: var(--surface-2); color: var(--text); }
.fp-more-item.danger { color: var(--danger); }
.fp-more-item.danger:hover { background: var(--danger-l); color: var(--danger); }

.fp-steps { display: none; margin: 9px 0 0; padding-top: 8px; border-top: 1px dashed var(--border); }
.fp-task.open .fp-steps { display: block; }
.fp-step {
  display: flex; align-items: center; gap: 8px; padding: 3px 0;
  font-size: 12.5px; color: var(--text-2); cursor: pointer;
}
.fp-step input { width: 16px; height: 16px; accent-color: var(--success); flex: none; }
.fp-step.done span { color: var(--muted); text-decoration: line-through; }
.fp-step-toggle {
  border: 0; background: none; padding: 0; margin-top: 5px; cursor: pointer;
  font: inherit; font-size: 11.5px; font-weight: 650; color: var(--primary);
}
.fp-step-toggle:hover { text-decoration: underline; }
.fp-step-toggle:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 4px; }

.fp-empty {
  padding: 28px 18px; text-align: center; color: var(--muted); font-size: 13px;
  background: var(--surface-2); border: 1px dashed var(--border-2); border-radius: 14px;
  line-height: 1.8;
}
.fp-empty .big { display: block; font-size: 28px; margin-bottom: 6px; opacity: .7; }

/* ---------------------------------------------------------------- 按钮补充 */
.fp-btn {
  font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
  border: 1px solid var(--border-2); background: #fff; color: var(--text-2);
  border-radius: 9px; padding: 6px 12px; white-space: nowrap;
  transition: background-color .15s, border-color .15s, color .15s, box-shadow .15s;
  -webkit-tap-highlight-color: transparent;
}
.fp-btn:hover { border-color: var(--primary); color: var(--primary-d); background: var(--primary-l); }
.fp-btn.primary { background: var(--primary); border-color: var(--primary); color: #fff; }
.fp-btn.primary:hover { background: var(--primary-d); color: #fff; }
.fp-btn.warn { color: var(--fp-game-d); border-color: var(--fp-game-b); background: var(--fp-game-l); }
.fp-btn.danger { color: var(--danger); border-color: #fecaca; background: var(--danger-l); }
.fp-btn:disabled { opacity: .55; cursor: default; pointer-events: none; }
.fp-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* 可点击件统一消除双击缩放延迟；键盘用户始终能看到清晰的焦点环 */
.fp-btn, .fp-tab, .fp-check, .fp-more, .fp-cat, .fp-tpl, .fp-repeat-btn,
.fp-daybtn, .fp-child, .fp-family-chip, .fp-more-item, .fp-step-toggle,
.fp-modal-x, .fp-remind-close { touch-action: manipulation; }
.fp-tpl:focus-visible,
.fp-daybtn:focus-visible,
.fp-child:focus-visible,
.fp-family-chip:focus-visible,
.fp-more-item:focus-visible,
.fp-remind-close:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}

/* ---------------------------------------------------------------- 弹窗 */
/* 弹框打开时锁定背景滚动：移动端手指滑动遮罩不会带动页面 */
html.fp-lock,
html.fp-lock body { overflow: hidden; }

.fp-veil {
  position: fixed; inset: 0; z-index: 1200; padding: 18px;
  background: rgba(15, 23, 42, .48);
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px);
  display: flex; align-items: center; justify-content: center;
}
.fp-modal {
  width: 540px; max-width: 100%; box-sizing: border-box;
  max-height: 88vh;
  max-height: min(88vh, 780px);
  display: flex; flex-direction: column;
  background: #fff; border-radius: 20px; padding: 0;
  box-shadow: 0 24px 70px rgba(15, 23, 42, .25);
  animation: fpModalIn .2s cubic-bezier(.22, 1, .36, 1);
}
@keyframes fpModalIn { from { opacity: 0; transform: translateY(10px) scale(.98); } to { opacity: 1; transform: none; } }

/* 头部固定：标题与关闭按钮不跟随内容滚动 */
.fp-modal-head {
  flex: none; display: flex; align-items: flex-start; gap: 10px;
  padding: 20px 22px 10px;
}
.fp-modal-head > div { flex: 1; min-width: 0; }
.fp-modal h2 { margin: 0 0 3px; font-size: 18px; }
.fp-modal .fp-desc { margin: 0; font-size: 12.5px; color: var(--muted); line-height: 1.6; }
.fp-modal-x {
  flex: none; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 999px;
  display: grid; place-items: center;
  background: var(--surface-2); color: var(--muted); font: inherit; font-size: 13px;
  line-height: 1; cursor: pointer; transition: background .16s, color .16s;
}
.fp-modal-x:hover { background: var(--border); color: var(--text); }
.fp-modal-x:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* 内容区独立滚动，底部操作始终可见 */
.fp-modal-body {
  flex: 1 1 auto; min-height: 0; overflow-y: auto;
  padding: 2px 22px 12px; -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
}
.fp-sec { padding: 12px 0; border-top: 1px dashed var(--border); }
.fp-sec:first-child { border-top: 0; padding-top: 0; }
.fp-sec-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 9px; }
.fp-sec-head h3 { margin: 0; font-size: 13px; font-weight: 800; }
.fp-sec-head span { font-size: 11px; color: var(--muted); }

.fp-cats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.fp-cat {
  border: 1.5px solid var(--border); background: #fff; border-radius: 11px;
  min-height: 42px; padding: 8px 6px; cursor: pointer; font: inherit;
  font-size: 12.5px; font-weight: 700; color: var(--text-2);
  display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 5px;
  transition: border-color .16s, background-color .16s, color .16s, box-shadow .16s;
}
.fp-cat .ic { font-size: 16px; line-height: 1; }
.fp-cat:hover { border-color: var(--cat); background: var(--cat-l); }
.fp-cat.on { border-color: var(--cat); background: var(--cat-l); color: var(--cat-d); box-shadow: 0 0 0 3px var(--cat-l); }
.fp-cat:focus-visible { outline: 2px solid var(--cat); outline-offset: 2px; }

/* 自定义类别：输入行平时收起，点「＋ 自定义类别」就地展开 */
.fp-cat-extra { margin-top: 8px; }
.fp-cat-add {
  width: 100%; min-height: 32px; padding: 5px 10px;
  border: 1px dashed var(--border-2); border-radius: 9px;
  background: transparent; color: var(--muted);
  font: inherit; font-size: 11.5px; font-weight: 700; cursor: pointer;
  transition: border-color .16s, color .16s, background-color .16s;
}
.fp-cat-add:hover {
  border-color: var(--primary); color: var(--primary-d); background: var(--primary-l);
}
.fp-cat-form { display: flex; gap: 7px; align-items: center; }
.fp-cat-form[hidden] { display: none; }
.fp-cat-form input {
  flex: 1; min-width: 0; height: 34px; padding: 0 10px;
  border: 1px solid var(--border); border-radius: 9px;
  font: inherit; font-size: 13px; background: #fff; color: var(--text);
}
.fp-cat-form input:focus { outline: 2px solid var(--primary); outline-offset: 1px; }
.fp-cat-form .fp-btn { padding: 7px 12px; font-size: 12px; white-space: nowrap; }

/* 模板：从主视觉降为「常用」辅助带，选中后高亮 */
.fp-tpl-wrap { display: flex; align-items: flex-start; gap: 8px; margin-top: 9px; }
.fp-tpl-label {
  flex: none; padding-top: 5px; font-size: 10.5px; font-weight: 700;
  color: var(--muted); letter-spacing: .5px;
}
.fp-tpls { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; min-width: 0; }
.fp-tpl {
  border: 1px solid var(--border); background: var(--surface-2);
  border-radius: 999px; padding: 4px 9px; font: inherit; font-size: 11.5px;
  color: var(--text-2); cursor: pointer;
  transition: background-color .15s, border-color .15s, color .15s;
}
.fp-tpl:hover { border-color: var(--primary); color: var(--primary-d); background: var(--primary-l); }
.fp-tpl.on { border-color: var(--primary); color: var(--primary-d); background: var(--primary-l); }

/* 标题输入：不需要 label，区块小标题已经说明用途 */
.fp-title-input {
  display: block; width: 100%; box-sizing: border-box;
  font: inherit; font-size: 15px; font-weight: 650; padding: 11px 12px;
  border: 1.5px solid var(--border-2); border-radius: 11px;
  background: var(--surface-2); color: var(--text);
  transition: border-color .15s, background .15s, box-shadow .15s;
}
.fp-title-input:focus {
  outline: none; border-color: var(--primary); background: #fff;
  box-shadow: 0 0 0 3px var(--primary-l);
}

/* 重复频次：排在日期之前，先定规则再定具体时间 */
.fp-field { margin-bottom: 10px; }
.fp-field-label {
  display: block; margin-bottom: 6px;
  font-size: 12px; font-weight: 650; color: var(--text-2);
}
.fp-repeat { display: flex; gap: 6px; }
.fp-repeat-btn {
  flex: 1; min-width: 0; padding: 7px 4px;
  border: 1px solid var(--border-2); border-radius: 9px;
  background: var(--surface-2); color: var(--text-2);
  font: inherit; font-size: 12px; font-weight: 650;
  cursor: pointer;
  transition: background-color .15s, border-color .15s, color .15s;
}
.fp-repeat-btn:hover { border-color: var(--primary); color: var(--primary-d); }
.fp-repeat-btn.on { background: var(--primary); border-color: var(--primary); color: #fff; }
.fp-repeat-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* 时间：日期一行、开始→结束一行，各自带小标签 */
.fp-when-row { display: flex; align-items: center; gap: 8px; }
.fp-when-row + .fp-when-row { margin-top: 8px; }
.fp-when-label {
  flex: none; width: 48px; white-space: nowrap;
  font-size: 11.5px; font-weight: 700; color: var(--muted);
}
.fp-when-row input {
  flex: 1; min-width: 0; margin: 0; box-sizing: border-box;
  font: inherit; font-size: 13.5px; padding: 8px 10px;
  border: 1px solid var(--border-2); border-radius: 9px;
  background: var(--surface-2); color: var(--text);
  transition: border-color .15s, background .15s, box-shadow .15s;
}
.fp-when-row input:focus {
  outline: none; border-color: var(--primary); background: #fff;
  box-shadow: 0 0 0 3px var(--primary-l);
}
.fp-when-arrow { flex: none; font-size: 12px; color: var(--muted); }
.fp-fld { display: block; margin: 12px 0; font-size: 12.5px; font-weight: 650; color: var(--text-2); }
.fp-fld input, .fp-fld textarea, .fp-fld select {
  display: block; width: 100%; margin-top: 5px; box-sizing: border-box;
  font: inherit; font-size: 14px; padding: 9px 11px;
  border: 1px solid var(--border-2); border-radius: 10px;
  background: var(--surface-2); color: var(--text);
  transition: border-color .15s, background .15s, box-shadow .15s;
}
.fp-fld input:focus, .fp-fld textarea:focus, .fp-fld select:focus {
  outline: none; border-color: var(--primary); background: #fff;
  box-shadow: 0 0 0 3px var(--primary-l);
}
.fp-fld textarea { resize: vertical; min-height: 64px; line-height: 1.6; }
.fp-fld .hint { display: block; margin-top: 4px; font-size: 11px; font-weight: 400; color: var(--muted); }
.fp-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.fp-days { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 5px; }
.fp-daybtn {
  border: 1px solid var(--border-2); background: #fff; border-radius: 8px;
  padding: 5px 9px; font: inherit; font-size: 12px; cursor: pointer; color: var(--text-2);
}
.fp-daybtn:hover { border-color: var(--primary); color: var(--primary-d); }
.fp-daybtn.on { background: var(--primary); border-color: var(--primary); color: #fff; }
/* 底部固定：错误提示与操作按钮不随内容滚走 */
.fp-modal-foot {
  flex: none; padding: 10px 22px calc(14px + env(safe-area-inset-bottom));
  border-top: 1px dashed var(--border);
}
.fp-foot-btns { display: flex; justify-content: flex-end; gap: 9px; }
.fp-err { margin: 0; font-size: 12px; color: var(--danger); }
.fp-err:empty { display: none; }
.fp-err:not(:empty) { margin-bottom: 8px; }

/* 完成 / 取消完成确认弹窗 */
.fp-confirm { width: 430px; }
.fp-confirm:focus { outline: none; }
.fp-confirm-task {
  padding: 11px 13px; border: 1px solid var(--border); border-radius: 12px;
  background: var(--surface-2);
}
.fp-confirm-task > b {
  display: block; font-size: 15px; line-height: 1.5; word-break: break-word;
}
.fp-confirm-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 9px;
  margin-top: 7px;
}
.fp-confirm-day { font-size: 11.5px; color: var(--muted); }
.fp-note-fld { margin: 12px 0 4px; }
.fp-note-fld textarea { min-height: 76px; }
/* 字数统计跟标题同一行，说明只保留一句，避免窄屏折成孤字 */
.fp-note-label {
  display: flex; align-items: baseline; justify-content: space-between; gap: 8px;
}
.fp-note-label em {
  flex: none; font-style: normal; font-weight: 400;
  font-variant-numeric: tabular-nums; color: var(--muted);
}
.fp-note-fld .hint {
  display: block; margin-top: 5px;
  padding-right: 0; line-height: 1.6;
}
.fp-confirm .fp-err:not(:empty) { margin: 0; }

/* ---------------------------------------------------------------- 轻提示 */
.fp-toast {
  position: fixed; left: 50%; bottom: 34px; transform: translateX(-50%) translateY(12px);
  background: var(--text); color: #fff; padding: 9px 17px; border-radius: 999px;
  font-size: 13px; font-weight: 650; opacity: 0; pointer-events: none;
  transition: opacity .2s, transform .2s; z-index: 1500; box-shadow: var(--shadow-lg);
}
.fp-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ---------------------------------------------------------------- 每日提醒浮层 */
.fp-remind {
  position: fixed; left: 20px; bottom: 20px; z-index: 1100;
  width: 344px; max-width: calc(100vw - 40px);
  background: #fff; border: 1px solid var(--fp-game-b); border-radius: 16px;
  box-shadow: 0 18px 50px rgba(180, 120, 20, .18);
  padding: 14px 15px 13px;
  color: #1b2437;
  animation: fpRemindIn .26s cubic-bezier(.22, 1, .36, 1);
}
@keyframes fpRemindIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
.fp-remind-head { display: flex; align-items: flex-start; gap: 9px; }
.fp-remind-ic {
  width: 34px; height: 34px; border-radius: 11px; flex: none;
  display: grid; place-items: center; font-size: 17px;
  background: var(--fp-game-l); border: 1px solid var(--fp-game-b);
}
.fp-remind-head b { display: block; font-size: 14px; line-height: 1.4; color: #1b2437; }
.fp-remind-head small { display: block; font-size: 11.5px; color: #7b879c; margin-top: 1px; }
.fp-remind-close {
  margin-left: auto; border: 0; background: none; color: #7b879c;
  font-size: 18px; line-height: 1; cursor: pointer; padding: 2px 4px; border-radius: 6px;
}
.fp-remind-close:hover { color: #1b2437; background: #f1f5f9; }
.fp-remind-list { list-style: none; margin: 10px 0 11px; padding: 0; }
.fp-remind-list li {
  display: flex; align-items: center; gap: 7px; padding: 4px 0;
  font-size: 12.5px; color: #46536b; line-height: 1.5;
}
.fp-remind-list li .t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-remind-list li .d { font-size: 10.5px; color: #7b879c; flex: none; }
.fp-remind-foot { display: flex; justify-content: flex-end; gap: 8px; }
.fp-remind .fp-btn { color: #46536b; background: #fff; border-color: #cbd5e1; }
.fp-remind .fp-btn:hover { color: #1d4ed8; background: #e8f0fe; border-color: #2563eb; }
.fp-remind .fp-btn.primary { color: #fff; background: #2563eb; border-color: #2563eb; }
.fp-remind .fp-btn.primary:hover { color: #fff; background: #1d4ed8; }

/* ---------------------------------------------------------------- 家长端 */
.fp-childbar { display: flex; flex-wrap: wrap; gap: 7px; margin-bottom: 13px; }
.fp-child {
  border: 1px solid var(--border); background: #fff; border-radius: 999px;
  padding: 6px 13px; font: inherit; font-size: 12.5px; font-weight: 700;
  color: var(--text-2); cursor: pointer;
  transition: background-color .15s, border-color .15s, color .15s;
}
.fp-child:hover { border-color: var(--primary); color: var(--primary-d); }
.fp-child.on { background: var(--primary); border-color: var(--primary); color: #fff; }

.fp-activity { margin: 0; padding: 0; list-style: none; }
.fp-activity li {
  display: flex; align-items: flex-start; gap: 9px; padding: 9px 0;
  border-bottom: 1px dashed var(--border); font-size: 12.5px; color: var(--text-2);
}
.fp-activity li:last-child { border-bottom: 0; }
.fp-activity .ic {
  width: 26px; height: 26px; border-radius: 8px; flex: none;
  display: grid; place-items: center; font-size: 13px;
  background: var(--surface-2); border: 1px solid var(--border);
}
.fp-activity .body { flex: 1; min-width: 0; }
.fp-activity .body b { color: var(--text); font-weight: 700; }
.fp-activity .fp-act-note {
  display: block; margin-top: 3px; padding: 2px 8px;
  border-left: 2px solid var(--border-2); border-radius: 0 6px 6px 0;
  background: var(--surface-2);
  font-size: 11.5px; line-height: 1.6; color: var(--muted);
  white-space: pre-wrap; word-break: break-word;
}
.fp-activity .at { font-size: 11px; color: var(--muted); white-space: nowrap; }
.fp-dot {
  display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  background: var(--danger); margin-left: 4px; vertical-align: 1px;
}
.fp-dot[hidden], .fp-childbar[hidden] { display: none !important; }

.fp-summary-card {
  border: 1px solid var(--border); border-radius: 16px; background: #fff;
  padding: 16px 18px; margin: 14px 0 20px; box-shadow: var(--shadow-sm);
}
.fp-summary-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.fp-summary-head h3 { margin: 0; font-size: 15px; }
.fp-summary-head .sub { font-size: 11.5px; color: var(--muted); }
.fp-summary-stats { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.fp-summary-stat {
  border: 1px solid var(--border); background: var(--surface-2);
  border-radius: 10px; padding: 6px 10px; font-size: 12px; color: var(--text-2);
}
.fp-summary-stat b { font-size: 15px; color: var(--text); margin-right: 3px; }
.fp-summary-stat.warn b { color: var(--fp-game-d); }
.fp-summary-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }

/* ---------------------------------------------------------------- 响应式 */
@media (max-width: 900px) {
  .fp-hero { flex-direction: column; align-items: stretch; gap: 16px; }
  .fp-hero-side { justify-content: space-between; }
  .fp-ring { width: 92px; height: 92px; }
  .fp-ring-in { width: 70px; height: 70px; }
  .fp-ring-in b { font-size: 20px; }
}
@media (max-width: 720px) {
  .fp-wrap { padding: 14px 14px 86px; }
  /* 手机端压缩标题区与统计区：进度环和三个统计块改为同一行，
     首屏能多露出一张任务卡，同时保留所有关键数字。 */
  .fp-hero { padding: 12px 12px; border-radius: 18px; gap: 8px; }
  .fp-hero-kicker { font-size: 10.5px; padding: 1px 7px; }
  .fp-hero h1 { font-size: 17px; margin: 4px 0 2px; }
  .fp-hero p { font-size: 12px; line-height: 1.45; }
  .fp-hero-actions { margin-top: 8px; gap: 6px; }
  /* 手机端回首页交给顶部品牌链接，页头只留两件事：添加、全部计划 */
  .fp-home-link { display: none; }
  .fp-hero-side {
    flex-direction: row; align-items: center; justify-content: flex-start; gap: 8px;
  }
  .fp-ring { width: 56px; height: 56px; }
  .fp-ring-in { width: 44px; height: 44px; }
  .fp-ring-in b { font-size: 14.5px; }
  .fp-ring-in span { font-size: 8.5px; }
  .fp-hero-stats {
    flex: 1; min-width: 0; display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 5px;
  }
  .fp-mini { min-width: 0; padding: 4px 6px; border-radius: 9px; }
  .fp-mini b { font-size: 14px; }
  .fp-mini span { font-size: 9px; line-height: 1.2; }
  .fp-week { gap: 4px; }
  .fp-weekbar { margin: 10px 0 4px; }
  .fp-filter { gap: 6px; margin: 9px 0 10px; }
  .fp-filter-btn { min-height: 36px; padding: 6px 4px; font-size: 12px; gap: 4px; }
  .fp-filter-btn b { min-width: 16px; height: 16px; padding: 0 4px; font-size: 10px; }
  .fp-cat { min-height: 44px; padding: 7px 3px; font-size: 12px; gap: 4px; }
  .fp-cat .ic { font-size: 15px; }
  /* 手机端自定义输入：输入框独占一行，按钮平分下一行，避免挤在一起 */
  .fp-cat-form { flex-wrap: wrap; }
  .fp-cat-form input { flex: 1 1 100%; height: 38px; font-size: 16px; }
  .fp-cat-form .fp-btn { flex: 1; }
  .fp-day { padding: 5px 2px 6px; border-radius: 9px; }
  .fp-day .d { font-size: 14px; }
  /* 手机端进度条很窄，17% 的填充看起来像一个小点；
     保留「1/6」计数，让孩子能直接读出当天完成情况。 */
  .fp-day .c { display: block; font-size: 9.5px; margin-top: 2px; }
  .fp-tabs { position: sticky; top: 62px; z-index: 20; }
  .fp-subhead { margin: 12px 0; padding: 8px 10px; }
  .fp-subhead h2 { font-size: 14px; }
  .fp-offer { flex-wrap: wrap; padding: 12px 13px; }
  .fp-offer-acts { width: 100%; }
  .fp-offer-acts .fp-btn { flex: 1; }
  .fp-makeup-head { padding: 10px 12px; }
  .fp-task { padding: 12px 12px; border-radius: 13px; }
  .fp-task-title { font-size: 14px; }
  /* 触控友好：手机端把完成按钮、勾选框、更多按钮与关闭按钮放大到易点范围 */
  .fp-check { width: 30px; height: 30px; background-size: 14px 14px; }
  .fp-done-stamp { font-size: 12px; padding: 3px 9px; }
  .fp-hat { font-size: 10.5px; }
  .fp-more { width: 34px; height: 34px; font-size: 21px; }
  .fp-hero-actions .fp-btn { padding: 7px 12px; font-size: 12.5px; min-height: 34px; }
  .fp-task-actions .fp-btn { padding: 9px 15px; font-size: 13px; }
  .fp-modal-x { width: 34px; height: 34px; }
  .fp-fld input, .fp-fld textarea, .fp-fld select { font-size: 16px; }
  .fp-title-input, .fp-when-row input { font-size: 16px; }
  .fp-row2 { grid-template-columns: 1fr; gap: 0; }
  .fp-modal { max-height: 92vh; border-radius: 16px; }
  .fp-modal-head { padding: 16px 16px 8px; }
  .fp-modal-body { padding: 2px 16px 10px; }
  .fp-modal-foot { padding: 10px 16px calc(12px + env(safe-area-inset-bottom)); }
  .fp-remind { left: 12px; right: 12px; top: 72px; bottom: auto; width: auto; max-width: none; }
}

/* 320~360 的极窄屏：三列放不下完整标签，改为三行小统计条，
   进度环在左、三条数据在右，避免「近三天待完成」被拆成两行。 */
@media (max-width: 360px) {
  .fp-tab { font-size: 12.5px; padding-left: 2px; padding-right: 2px; }
  .fp-hero { padding: 10px 10px; }
  .fp-hero h1 { font-size: 16px; }
  .fp-ring { width: 50px; height: 50px; }
  .fp-ring-in { width: 40px; height: 40px; }
  .fp-ring-in b { font-size: 13px; }
  .fp-hero-stats {
    display: flex; flex-direction: column; align-items: stretch; gap: 4px;
  }
  .fp-mini {
    display: flex; align-items: baseline; gap: 6px; padding: 3px 7px;
  }
  .fp-mini b { font-size: 14px; line-height: 1.15; }
  .fp-mini span { font-size: 9.5px; line-height: 1.2; }
}

@media (prefers-reduced-motion: reduce) {
  .fp-hero, .fp-task, .fp-check, .fp-tab, .fp-remind, .fp-modal, .fp-toast {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
  }
}

/* ==========================================================================
   方案 01 · 温暖成长手账（学生端）
   ========================================================================== */
body[data-page="family-plan"] {
  background-color: #f3ece1;
  background-image: radial-gradient(#e0d2bd 1px, transparent 1px);
  background-size: 18px 18px;
}
body[data-page="family-plan"] .topbar {
  background: rgba(255, 250, 240, .92);
  border-bottom-color: #e5d6be;
}
body[data-page="family-plan"] .fp-wrap { max-width: 1060px; }
body[data-page="family-plan"] .fp-hero {
  background: #fffaf0;
  border: 1px dashed #e5d6be;
  box-shadow: 4px 6px 0 rgba(196, 151, 96, .10);
}
body[data-page="family-plan"] .fp-hero::before {
  content: ""; position: absolute; top: -9px; left: 44px;
  width: 78px; height: 16px; border-radius: 2px;
  background: #f4dfb8; transform: rotate(-2deg); opacity: .9;
}
body[data-page="family-plan"] .fp-hero::after { content: none; display: none; }
body[data-page="family-plan"] .fp-hero-kicker {
  color: #a85b3b; background: #fdf2e3; border-color: #efd9bb;
}
body[data-page="family-plan"] .fp-hero h1 {
  font-family: var(--fp-serif); letter-spacing: -.6px; color: #3f3428;
}
body[data-page="family-plan"] .fp-hero p { color: #7a6a58; }
body[data-page="family-plan"] .fp-ring {
  background: conic-gradient(#c2704e calc(var(--p) * 1%), #efe3d0 0);
  border: 2px dashed #dfc8a9;
  box-shadow: 4px 5px 0 rgba(194, 112, 78, .10);
  transform: rotate(-3deg);
}
body[data-page="family-plan"] .fp-ring-in { background: #fffaf0; }
body[data-page="family-plan"] .fp-ring-in b { color: #a85b3b; font-family: var(--fp-serif); }
body[data-page="family-plan"] .fp-mini {
  background: #fffaf0; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-mini b { color: #4a3b2f; }
body[data-page="family-plan"] .fp-filter-btn {
  background: #fffaf0; border: 1px dashed #e5d6be; color: #7a6a58;
  font-family: var(--fp-serif); font-size: 13px; border-radius: 9px;
}
body[data-page="family-plan"] .fp-filter-btn b { background: #f4e7d3; color: #a8957c; }
body[data-page="family-plan"] .fp-filter-btn:hover {
  border-color: #c2704e; color: #a85b3b;
}
body[data-page="family-plan"] .fp-filter-btn.on {
  background: #fdf2e3; border: 1.5px solid #c2704e; color: #a85b3b;
  box-shadow: 0 0 0 3px rgba(194, 112, 78, .10);
}
body[data-page="family-plan"] .fp-filter-btn.on b { background: #c2704e; color: #fff; }
body[data-page="family-plan"] .fp-week .fp-day {
  background: #fffaf0; border: 1px dashed #e5d6be; border-radius: 9px;
}
body[data-page="family-plan"] .fp-week .fp-day.today {
  background: #fdf2e3; border: 1.5px solid #c2704e;
  box-shadow: 0 0 0 3px rgba(194, 112, 78, .12);
}
body[data-page="family-plan"] .fp-week .fp-day .d {
  font-family: var(--fp-serif); color: #4a3b2f;
}
body[data-page="family-plan"] .fp-week .fp-day .bar i { background: #c2704e; }
body[data-page="family-plan"] .fp-week .fp-day.selected {
  background: #c2704e; border: 1.5px solid #c2704e;
  box-shadow: 0 6px 16px rgba(194, 112, 78, .24);
}
body[data-page="family-plan"] .fp-week .fp-day.selected .d { color: #fff; }
body[data-page="family-plan"] .fp-week .fp-day.selected .n,
body[data-page="family-plan"] .fp-week .fp-day.selected .c { color: rgba(255, 255, 255, .82); }
body[data-page="family-plan"] .fp-week .fp-day.selected .bar { background: rgba(255, 255, 255, .25); }
body[data-page="family-plan"] .fp-week .fp-day.selected .bar i { background: #fff; }
body[data-page="family-plan"] .fp-week .fp-day.selected .dot { background: #fff; }
body[data-page="family-plan"] .fp-weekbar { color: #8a7763; }
body[data-page="family-plan"] .fp-weeknav {
  background: #fffaf0; border: 1px dashed #e5d6be; color: #a85b3b;
}
body[data-page="family-plan"] .fp-tabs {
  background: #fffaf0; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-tab { color: #8a7763; }
body[data-page="family-plan"] .fp-tab.on {
  background: #c2704e; color: #fff;
  box-shadow: 0 4px 12px rgba(194, 112, 78, .22);
}
body[data-page="family-plan"] .fp-subhead {
  background: #fffaf0; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-subhead h2 {
  color: #4a3b2f; font-family: var(--fp-serif);
}
body[data-page="family-plan"] .fp-back { color: #a85b3b; }
body[data-page="family-plan"] .fp-back:hover { background: #fdf2e3; }
body[data-page="family-plan"] .fp-offer {
  background: #fff4dd; border: 1px dashed #e2bf85;
}
body[data-page="family-plan"] .fp-offer-txt b {
  color: #4a3b2f; font-family: var(--fp-serif);
}
body[data-page="family-plan"] .fp-makeup-head {
  background: #fffaf0; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-makeup-txt b {
  color: #4a3b2f; font-family: var(--fp-serif);
}
body[data-page="family-plan"] .fp-makeup-day-head { color: #7a6a58; }
body[data-page="family-plan"] .fp-group-head h3 {
  font-family: var(--fp-serif); font-size: 15.5px; color: #4a3b2f;
}
body[data-page="family-plan"] .fp-group-ico {
  background: #fffaf0; border: 1px dashed #e5d6be; transform: rotate(-3deg);
}
body[data-page="family-plan"] .fp-task {
  background: #fffdf8; border: 1px dashed #e5d6be;
  box-shadow: 3px 4px 0 rgba(196, 151, 96, .08);
}
body[data-page="family-plan"] .fp-task::before {
  content: ""; position: absolute; left: 14px; top: -6px;
  width: 38px; height: 10px; border-radius: 2px;
  background: #f4dfb8; transform: rotate(-2deg); opacity: .85;
}
body[data-page="family-plan"] .fp-task.done {
  background: #f6fbf3; border-color: #bcd8b2;
}
body[data-page="family-plan"] .fp-task .fp-check {
  border-color: #d9c3a4; background-color: #fffaf0;
}
body[data-page="family-plan"] .fp-task.done .fp-check {
  background-color: #7f9a78; border-color: #7f9a78;
}
body[data-page="family-plan"] .fp-task-title {
  font-family: var(--fp-serif); color: #3f3428;
}
body[data-page="family-plan"] .fp-task.done .fp-task-title { color: #5b6b54; }
body[data-page="family-plan"] .fp-task-meta { color: #998874; }
body[data-page="family-plan"] .fp-owner { font-size: 10.5px; color: #a8957c; }
body[data-page="family-plan"] .fp-meta-text { font-size: 11px; color: #998874; }
body[data-page="family-plan"] .fp-done-stamp {
  margin-left: auto; font-family: var(--fp-serif); font-size: 13px;
  font-weight: 700; color: #4f7a48;
  border: 2px solid #9db894; border-radius: 6px;
  padding: 3px 10px; transform: rotate(-4deg); background: #eaf6e4;
  box-shadow: 2px 3px 0 rgba(127, 154, 120, .14);
  animation: fpStampIn .32s ease-out;
}
@keyframes fpStampIn {
  from { transform: scale(1.35) rotate(-8deg); opacity: 0; }
  to { transform: scale(1) rotate(-4deg); opacity: 1; }
}
body[data-page="family-plan"] .fp-btn.primary {
  background: #c2704e; border-color: #c2704e;
  box-shadow: 0 4px 12px rgba(194, 112, 78, .22);
}
body[data-page="family-plan"] .fp-btn.primary:hover { background: #a85b3b; }
body[data-page="family-plan"] .fp-task-actions .fp-btn.primary {
  background: #fff8ec; color: #a85b3b;
  border: 1.5px dashed #d9b68e; box-shadow: none;
}
body[data-page="family-plan"] .fp-task-actions .fp-btn.primary:hover { background: #fdf2e3; }
body[data-page="family-plan"] .fp-step-toggle { color: #a85b3b; }
body[data-page="family-plan"] .fp-more-menu {
  background: #fffdf8; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-more-item { color: #6b5a45; }
body[data-page="family-plan"] .fp-more-item.danger { color: #b4553b; }
body[data-page="family-plan"] .fp-empty {
  background: #fffaf0; border: 1px dashed #e5d6be; color: #998874;
}

/* 手账风弹框 */
.fp-modal { position: relative; }
body[data-page="family-plan"] .fp-modal {
  background: #fffdf8; border: 1px dashed #e5d6be; color: #4a3b2f;
  box-shadow: 6px 8px 0 rgba(196, 151, 96, .10), 0 24px 70px rgba(15, 23, 42, .18);
}
body[data-page="family-plan"] .fp-modal::before {
  content: ""; position: absolute; top: -7px; left: 28px;
  width: 64px; height: 14px; border-radius: 2px;
  background: #f4dfb8; transform: rotate(-2deg);
}
body[data-page="family-plan"] .fp-modal h2 { font-family: var(--fp-serif); }
body[data-page="family-plan"] .fp-desc { color: #8a7763; }
body[data-page="family-plan"] .fp-modal-x { background: #fdf2e3; color: #a85b3b; }
body[data-page="family-plan"] .fp-modal-x:hover { background: #f4dfb8; color: #7a4a32; }
body[data-page="family-plan"] .fp-sec,
body[data-page="family-plan"] .fp-modal-foot { border-color: #e5d6be; }
body[data-page="family-plan"] .fp-detail-block h3 { color: #a8957c; }
body[data-page="family-plan"] .fp-detail-block p,
body[data-page="family-plan"] .fp-detail-steps li { color: #6b5a45; }
body[data-page="family-plan"] .fp-detail-done {
  background: #f6fbf3; border: 1px dashed #9db894; color: #5b6b54;
}
body[data-page="family-plan"] .fp-sec-head h3 {
  font-family: var(--fp-serif); color: #4a3b2f;
}
body[data-page="family-plan"] .fp-sec-head span { color: #a8957c; }
body[data-page="family-plan"] .fp-tpl-label,
body[data-page="family-plan"] .fp-adv-group h4 { color: #a8957c; }
body[data-page="family-plan"] .fp-title-input,
body[data-page="family-plan"] .fp-when-row input {
  background: #fffaf0; border-color: #e5d6be; color: #4a3b2f;
}
body[data-page="family-plan"] .fp-field-label { color: #8a7763; }
body[data-page="family-plan"] .fp-repeat-btn {
  background: #fffaf0; border-color: #e5d6be; color: #7a6a58;
}
body[data-page="family-plan"] .fp-repeat-btn.on {
  background: #c2704e; border-color: #c2704e; color: #fff;
}
body[data-page="family-plan"] .fp-cat {
  background: #fff8ec; border-color: #ead8bb; color: #7a6a58;
}
body[data-page="family-plan"] .fp-cat.on {
  border-color: #c2704e; color: #a85b3b;
  box-shadow: 0 0 0 3px rgba(194, 112, 78, .12);
}
body[data-page="family-plan"] .fp-cat-add {
  border-color: #d9c3a4; color: #a8957c; border-radius: 9px;
}
body[data-page="family-plan"] .fp-cat-add:hover {
  border-color: #c2704e; color: #a85b3b; background: #fdf2e3;
}
body[data-page="family-plan"] .fp-cat-form input {
  background: #fffaf0; border-color: #e5d6be; color: #4a3b2f;
}
body[data-page="family-plan"] .fp-tpl {
  background: #fff8ec; border-color: #ead8bb; color: #7a6a58;
}
body[data-page="family-plan"] .fp-fld input,
body[data-page="family-plan"] .fp-fld textarea,
body[data-page="family-plan"] .fp-fld select {
  background: #fffaf0; border-color: #e5d6be; color: #4a3b2f;
}
body[data-page="family-plan"] .fp-modal .fp-btn.primary {
  background: #c2704e; border-color: #c2704e;
}
body[data-page="family-plan"] .fp-modal .fp-btn.primary:hover { background: #a85b3b; }
body[data-page="family-plan"] .fp-advanced summary { color: #a85b3b; }
body[data-page="family-plan"] .fp-task-note {
  background: #fffaf0; border-color: #e5d6be; color: #6b5a45;
}
body[data-page="family-plan"] .fp-note-tag {
  color: #a85b3b; background: #fdf2e3;
}
body[data-page="family-plan"] .fp-confirm-task {
  background: #fffaf0; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-confirm-task > b { font-family: var(--fp-serif); }

/* 更多设置：按语义分两组，避免展开后像一堵墙 */
.fp-advanced {
  margin: 4px 0 0; padding: 12px 0 2px;
  border-top: 1px dashed var(--border);
}
.fp-advanced summary {
  display: flex; align-items: baseline; gap: 8px;
  cursor: pointer; list-style: none; padding: 2px 0;
  font-size: 12.5px; font-weight: 700; color: var(--primary);
}
.fp-advanced summary small { font-size: 10.5px; font-weight: 400; color: var(--muted); }
.fp-advanced summary::-webkit-details-marker { display: none; }
.fp-advanced[open] summary { margin-bottom: 8px; }
.fp-adv-group + .fp-adv-group {
  margin-top: 14px; padding-top: 12px;
  border-top: 1px dashed var(--border);
}
.fp-adv-group h4 {
  margin: 0 0 6px; font-size: 11.5px; font-weight: 800;
  color: var(--muted); letter-spacing: .3px;
}
.fp-adv-group .fp-fld:first-of-type { margin-top: 0; }

/* ==========================================================================
   方案 04 · 家庭看板（家长端）
   ========================================================================== */
body[data-page="parent-family"] {
  background-color: #eef0f4;
  background-image:
    linear-gradient(rgba(120, 130, 150, .08) 1px, transparent 1px),
    linear-gradient(90deg, rgba(120, 130, 150, .08) 1px, transparent 1px);
  background-size: 20px 20px;
}
body[data-page="parent-family"] .fp-wrap { max-width: 1120px; }
body[data-page="parent-family"] .fp-hero {
  background: #fff; border: 1px solid #dde2e9;
  box-shadow: 0 12px 30px rgba(50, 65, 85, .08);
}
body[data-page="parent-family"] .fp-hero::after { content: none; display: none; }
body[data-page="parent-family"] .fp-hero-kicker {
  color: #0f766e; background: #e6f7f4; border-color: #b8e6df;
}
body[data-page="parent-family"] .fp-hero h1 { color: #28313d; }
body[data-page="parent-family"] .fp-ring {
  background: conic-gradient(#0f766e calc(var(--p) * 1%), #e6ecef 0);
  box-shadow: 0 10px 28px rgba(15, 118, 110, .16);
}
body[data-page="parent-family"] .fp-ring-in b { color: #0f766e; }
body[data-page="parent-family"] .fp-mini {
  background: #fff; border-color: #dde2e9;
}
body[data-page="parent-family"] .fp-week .fp-day {
  background: #fff; border-color: #dde2e9;
}
body[data-page="parent-family"] .fp-week .fp-day.today {
  background: #e6f7f4; border-color: #0f766e;
  box-shadow: 0 0 0 3px rgba(15, 118, 110, .12);
}
body[data-page="parent-family"] .fp-week .fp-day .bar i { background: #0f766e; }
body[data-page="parent-family"] .fp-tabs {
  background: #fff; border-color: #dde2e9;
}
body[data-page="parent-family"] .fp-tab { color: #6b7585; }
body[data-page="parent-family"] .fp-tab.on {
  background: #0f766e; color: #fff;
  box-shadow: 0 4px 12px rgba(15, 118, 110, .22);
}
body[data-page="parent-family"] .fp-btn.primary {
  background: #0f766e; border-color: #0f766e;
}
body[data-page="parent-family"] .fp-btn.primary:hover { background: #0b5f59; }

/* 全家概览条 */
.fp-family-strip { display: flex; gap: 10px; flex-wrap: wrap; margin: 0 0 14px; }
.fp-family-strip[hidden] { display: none !important; }
.fp-family-chip {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  min-width: 156px; padding: 10px 13px; border-radius: 14px;
  background: #fff; border: 1px solid #dde2e9;
  box-shadow: 0 4px 12px rgba(40, 55, 75, .05);
  cursor: pointer; text-align: left; font: inherit;
  transition: border-color .15s, box-shadow .15s, transform .15s;
}
.fp-family-chip:hover { border-color: #0f766e; transform: translateY(-1px); }
.fp-family-chip.on {
  border-color: #0f766e; background: #f2fbf8;
  box-shadow: 0 0 0 3px rgba(15, 118, 110, .10);
}
.fp-family-chip b { font-size: 13px; color: #28313d; }
.fp-family-chip span { font-size: 11.5px; color: #6b7585; }
.fp-family-chip em {
  font-style: normal; font-size: 10.5px; font-weight: 700; color: #0f766e;
}
.fp-family-chip em.warn { color: #b45309; }

/* 今日看板 */
.fp-board {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px; align-items: start;
}
.fp-board-col {
  background: rgba(255, 255, 255, .55);
  border: 1px dashed #cfd8e3; border-radius: 18px;
  padding: 13px 13px 14px; min-height: 200px;
}
.fp-board-head {
  display: flex; align-items: center; gap: 7px;
  margin-bottom: 9px; flex-wrap: wrap;
}
.fp-board-head h3 { margin: 0; font-size: 13px; color: #34404e; }
.fp-board-head > span {
  font-size: 11px; font-weight: 800; color: #0f766e;
  background: #e6f7f4; border: 1px solid #b8e6df;
  border-radius: 999px; padding: 0 7px;
}
.fp-board-head small { margin-left: auto; font-size: 10.5px; color: #8a94a3; }
.fp-board-list { display: flex; flex-direction: column; gap: 9px; }
.fp-board-empty {
  padding: 22px 10px; text-align: center; color: #9aa4b4;
  font-size: 12px; border: 1px dashed #dde4ec; border-radius: 12px;
}

/* 便签卡 */
body[data-page="parent-family"] .fp-task.fp-note {
  display: block; padding: 12px 13px; margin: 0;
  border-radius: 7px; box-shadow: 0 6px 14px rgba(120, 100, 30, .10);
  transform: rotate(-.5deg);
}
body[data-page="parent-family"] .fp-task.fp-note:nth-child(even) { transform: rotate(.5deg); }
body[data-page="parent-family"] .fp-note.cat-game {
  background: #fff5cf; border: 1px solid #ecd88f; color: #5c4d16;
}
body[data-page="parent-family"] .fp-note.cat-chore {
  background: #e2f6ee; border: 1px solid #b8e3d5; color: #1f5a49;
}
body[data-page="parent-family"] .fp-note.cat-study {
  background: #e9edff; border: 1px solid #cfd6f5; color: #2f3a68;
}
body[data-page="parent-family"] .fp-note.done {
  opacity: .9; transform: rotate(.3deg);
}
body[data-page="parent-family"] .fp-note .fp-task-main { padding-right: 28px; }
body[data-page="parent-family"] .fp-note .fp-task-title {
  font-family: var(--fp-serif); font-size: 13.5px; line-height: 1.45;
}
body[data-page="parent-family"] .fp-note-check {
  color: #0f766e; font-weight: 900; margin-right: 2px;
}
body[data-page="parent-family"] .fp-note .fp-task-meta {
  display: flex; flex-wrap: wrap; gap: 3px 8px;
  font-size: 10.5px; color: #7c7050; margin-top: 4px;
}
body[data-page="parent-family"] .fp-note-cat { font-weight: 750; }
body[data-page="parent-family"] .fp-note-owner { opacity: .72; }
body[data-page="parent-family"] .fp-note-steps {
  margin-top: 6px; font-size: 10.5px; font-weight: 650; color: #6f664c;
}
body[data-page="parent-family"] .fp-note .fp-task-detail {
  font-size: 11px; color: #6f664c; margin-top: 4px;
}
body[data-page="parent-family"] .fp-note .fp-task-note {
  margin-top: 6px; padding: 4px 7px;
  background: rgba(255, 255, 255, .55); border-color: rgba(120, 100, 40, .22);
  font-size: 11px; color: #6f664c;
}
body[data-page="parent-family"] .fp-note .fp-note-tag {
  background: rgba(255, 255, 255, .75); color: inherit;
}
body[data-page="parent-family"] .fp-note .fp-more { color: #8a7a4a; }
body[data-page="parent-family"] .fp-note .fp-more:hover { background: rgba(255,255,255,.5); color: #3f3520; }
body[data-page="parent-family"] .fp-note .fp-more-menu { background: #fffdf3; border-color: #e8d88c; }

/* 家长端便签弹框 */
body[data-page="parent-family"] .fp-modal {
  background: #fff3b8; border: 1px solid #eadb86; color: #5c4d16;
  transform: rotate(-.35deg);
  box-shadow: 6px 8px 0 rgba(160, 130, 40, .10), 0 24px 70px rgba(15, 23, 42, .18);
}
body[data-page="parent-family"] .fp-desc { color: #8a7a4a; }
body[data-page="parent-family"] .fp-modal-x { background: #fffdf0; color: #8a7a4a; }
body[data-page="parent-family"] .fp-modal-x:hover { background: #f7efc4; color: #5c4d16; }
body[data-page="parent-family"] .fp-sec,
body[data-page="parent-family"] .fp-modal-foot { border-color: #eadb86; }
body[data-page="parent-family"] .fp-sec-head h3 { color: #5c4d16; }
body[data-page="parent-family"] .fp-sec-head span { color: #8a7a4a; }
body[data-page="parent-family"] .fp-tpl-label,
body[data-page="parent-family"] .fp-adv-group h4 { color: #8a7a4a; }
body[data-page="parent-family"] .fp-title-input,
body[data-page="parent-family"] .fp-when-row input {
  background: #fffdf0; border-color: #e8d88c; color: #5c4d16;
}
body[data-page="parent-family"] .fp-field-label { color: #8a7a4a; }
body[data-page="parent-family"] .fp-repeat-btn {
  background: #fffdf0; border-color: #e8d88c; color: #6b5a2a;
}
body[data-page="parent-family"] .fp-repeat-btn.on {
  background: #0f766e; border-color: #0f766e; color: #fff;
}
body[data-page="parent-family"] .fp-cat {
  background: #fffdf0; border-color: #e8d88c; color: #6b5a2a;
}
body[data-page="parent-family"] .fp-cat.on {
  border-color: #0f766e; color: #0f766e;
  box-shadow: 0 0 0 3px rgba(15, 118, 110, .10);
}
body[data-page="parent-family"] .fp-cat-add {
  border-color: #e8d88c; color: #8a7a4a;
}
body[data-page="parent-family"] .fp-cat-add:hover {
  border-color: #0f766e; color: #0f766e; background: #f2fbf9;
}
body[data-page="parent-family"] .fp-cat-form input {
  background: #fffdf0; border-color: #e8d88c; color: #5c4d16;
}
body[data-page="parent-family"] .fp-fld input,
body[data-page="parent-family"] .fp-fld textarea,
body[data-page="parent-family"] .fp-fld select {
  background: #fffdf0; border-color: #e8d88c; color: #5c4d16;
}
body[data-page="parent-family"] .fp-modal .fp-btn.primary {
  background: #0f766e; border-color: #0f766e;
}
body[data-page="parent-family"] .fp-advanced summary { color: #0f766e; }

/* 家长中心迷你看板 */
.fp-mini-board {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px;
}
.fp-mini-col {
  background: #f8f7f3; border: 1px dashed #e2dccf;
  border-radius: 12px; padding: 8px 10px;
}
.fp-mini-col h4 {
  margin: 0 0 5px; font-size: 11.5px; color: #6b6254;
  display: flex; justify-content: space-between;
}
.fp-mini-col h4 span { font-weight: 800; color: #0f766e; }
.fp-mini-note {
  font-size: 11.5px; color: #4b5261; padding: 3px 0;
  border-bottom: 1px dashed #e9e4d8;
}
.fp-mini-note:last-child { border-bottom: 0; }
.fp-mini-note.done { color: #6f8a66; }
.fp-mini-more, .fp-mini-empty { font-size: 10.5px; color: #9b9487; padding-top: 3px; }

/* 手账风每日提醒 */
.fp-remind {
  background: #fffaf0; border: 1px dashed #e5d6be; color: #4a3b2f;
  box-shadow: 4px 6px 0 rgba(196, 151, 96, .12), 0 18px 50px rgba(120, 80, 20, .16);
}
.fp-remind::before {
  content: ""; position: absolute; top: -7px; left: 28px;
  width: 58px; height: 12px; border-radius: 2px;
  background: #f4dfb8; transform: rotate(-2deg);
}
.fp-remind-head b { font-family: var(--fp-serif); color: #3f3428; }
.fp-remind .fp-btn.primary { background: #c2704e; border-color: #c2704e; }
.fp-remind .fp-btn.primary:hover { background: #a85b3b; }

@media (max-width: 900px) {
  .fp-board { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
  .fp-family-strip { gap: 7px; }
  .fp-family-chip { min-width: 138px; padding: 8px 10px; }
  .fp-mini-board { grid-template-columns: 1fr; }
  body[data-page="parent-family"] .fp-modal { transform: none; }
  body[data-page="family-plan"] .fp-hero::before { left: 24px; }
}

/* ==========================================================================
   学生端 · 成长记录
   ========================================================================== */
.fp-hdays { display: flex; gap: 5px; margin-bottom: 10px; }
.fp-hday {
  flex: 1; min-width: 0; padding: 6px 2px 7px;
  border: 1px solid var(--border); border-radius: 10px;
  background: #fff; color: var(--text-2); font: inherit;
  cursor: pointer; text-align: center;
  transition: background-color .15s, border-color .15s, box-shadow .15s;
  touch-action: manipulation; -webkit-tap-highlight-color: transparent;
}
.fp-hday .n { display: block; font-size: 10px; font-weight: 600; color: var(--muted); }
.fp-hday .d {
  display: block; font-size: 15px; font-weight: 800; line-height: 1.25;
  font-variant-numeric: tabular-nums;
}
.fp-hday .c {
  display: block; font-size: 9.5px; color: var(--muted);
  margin-top: 1px; font-variant-numeric: tabular-nums;
}
.fp-hday:hover { border-color: var(--border-2); background: var(--surface-2); }
.fp-hday.on {
  border-color: var(--primary); background: var(--primary-l);
  box-shadow: 0 0 0 2px var(--primary-l);
}
.fp-hday:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

.fp-history-nav {
  display: flex; justify-content: flex-end; gap: 10px; margin: 0 0 10px;
}
.fp-history-nav button {
  border: 0; background: none; padding: 2px 0; font: inherit;
  font-size: 11.5px; font-weight: 650; color: var(--primary); cursor: pointer;
}
.fp-history-nav button:hover { text-decoration: underline; }
.fp-history-nav button:focus-visible {
  outline: 2px solid var(--primary); outline-offset: 2px;
}

.fp-hsum {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 13px; margin-bottom: 12px;
  border: 1px dashed var(--border-2); border-radius: 12px;
  background: var(--surface-2);
}
.fp-hsum b { display: block; font-size: 14px; }
.fp-hsum > div > span {
  display: block; margin-top: 2px; font-size: 11.5px; color: var(--muted);
}
.fp-hfull {
  flex: none; font-size: 11px; color: var(--fp-done);
  border: 1.5px dashed var(--fp-done-b); border-radius: 4px;
  padding: 1px 6px; background: var(--fp-done-l); transform: rotate(-3deg);
}
.fp-hat { font-size: 11px; color: var(--text-2); }

/* 任务详情弹窗 */
.fp-detail-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px;
  font-size: 12px; color: var(--text-2);
}
.fp-detail-item { display: inline-flex; align-items: center; gap: 3px; }
.fp-detail-block { margin-top: 14px; }
.fp-detail-block h3 {
  margin: 0 0 5px; font-size: 11.5px; font-weight: 800;
  color: var(--muted); letter-spacing: .3px;
}
.fp-detail-block p {
  margin: 0; font-size: 13px; line-height: 1.7;
  color: var(--text-2); white-space: pre-wrap; word-break: break-word;
}
.fp-detail-steps { margin: 0; padding: 0; list-style: none; display: grid; gap: 6px; }
.fp-detail-steps li {
  display: flex; align-items: flex-start; gap: 7px;
  font-size: 13px; line-height: 1.6; color: var(--text-2);
}
.fp-detail-steps li .mark { flex: none; width: 16px; text-align: center; color: var(--fp-done); }
.fp-detail-steps li.done span:last-child { color: var(--muted); text-decoration: line-through; }
.fp-detail-done {
  margin-top: 14px; padding: 9px 12px;
  border: 1px solid var(--fp-done-b); border-radius: 10px;
  background: var(--fp-done-l); color: var(--fp-done);
  font-size: 12.5px; font-weight: 700;
}
.fp-chip.warn {
  color: var(--fp-game-d); background: var(--fp-game-l); border-color: var(--fp-game-b);
}
.fp-chip.expired {
  color: #64748b; background: #f1f5f9; border-color: #e2e8f0;
}
.fp-history .fp-step { cursor: default; }
.fp-history .fp-step-toggle { color: var(--primary); }
.fp-task.fp-flash { animation: fpFlash 1.5s ease; }
@keyframes fpFlash {
  0%, 100% { box-shadow: 0 0 0 0 rgba(194, 112, 78, 0); }
  25% { box-shadow: 0 0 0 4px rgba(194, 112, 78, .24); }
  65% { box-shadow: 0 0 0 4px rgba(194, 112, 78, .10); }
}

/* 手账纸感：日期条与当天摘要 */
body[data-page="family-plan"] .fp-hday {
  background: #fffaf0; border: 1px dashed #e5d6be; border-radius: 9px;
}
body[data-page="family-plan"] .fp-hday.on {
  background: #fdf2e3; border: 1.5px solid #c2704e;
  box-shadow: 0 0 0 3px rgba(194, 112, 78, .12);
}
body[data-page="family-plan"] .fp-hday .d {
  font-family: var(--fp-serif); color: #4a3b2f;
}
body[data-page="family-plan"] .fp-hday.on .n,
body[data-page="family-plan"] .fp-hday.on .c { color: #a85b3b; }
body[data-page="family-plan"] .fp-hsum {
  background: #fffaf0; border: 1px dashed #e5d6be;
}
body[data-page="family-plan"] .fp-hsum b {
  font-family: var(--fp-serif); color: #4a3b2f;
}
body[data-page="family-plan"] .fp-hsum > div > span { color: #8a7763; }
body[data-page="family-plan"] .fp-hfull {
  color: #6f8a66; border-color: #9db894; background: #f6fbf3;
}
body[data-page="family-plan"] .fp-history .fp-task-actions .fp-btn.primary {
  background: #c2704e; border: 1px solid #c2704e; color: #fff; box-shadow: none;
}
body[data-page="family-plan"] .fp-history .fp-task-actions .fp-btn.primary:hover {
  background: #a85b3b;
}

/* ==========================================================================
   粉梦主题 · 家庭成长计划
   --------------------------------------------------------------------------
   启用条件：<html data-skin="pink">，由 js/skin.js 依据 localStorage 键
   suke-portal-theme-v1 写入（与门户首页、学习工具三页共用同一偏好）。

   覆盖范围：
     · 学生端手账（body[data-page="family-plan"]）
     · 家长端看板（body[data-page="parent-family"]）
     · 家长中心摘要卡迷你看板（parent.html）
     · 每日提醒浮层（.fp-remind，会出现在多个学生页面）

   设计原则（与 css/skin-pink.css 一致）：
     1. 只换「外壳」：纸张/看板底、便签底、边框、文字、主色、按钮、胶带。
     2. 语义色一律不动：完成绿、警告琥珀、删除红保持原值，
        否则「完成 / 待完成 / 删除」会失去一眼可辨的能力。
     3. 分类色保留辨识度：游戏、家务、学习在粉调里各留一档色相差异，
        不压成同一种粉（孩子要能一眼分清三类计划）。
     4. 手账的贴纸/胶带/印章这套「纸张语言」保留，只把纸与墨换粉色，
        不做成通用卡片，否则手账气质会被洗掉。
   ========================================================================== */

/* ---------------------------------------------------------- 学生端 · 手账纸张 */
html[data-skin="pink"] body[data-page="family-plan"] {
  background-color: #fff0f6;
  background-image: radial-gradient(#f3cfe0 1px, transparent 1px);
}
html[data-skin="pink"] body[data-page="family-plan"] .topbar {
  background: rgba(255, 246, 251, .92);
  border-bottom-color: #f4d3e3;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-hero {
  background: #fff8fc;
  border-color: #f0cfe0;
  box-shadow: 4px 6px 0 rgba(219, 39, 119, .08);
}
/* 胶带：手账的标志物，全部统一成粉胶带 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-hero::before,
html[data-skin="pink"] body[data-page="family-plan"] .fp-task::before,
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal::before,
html[data-skin="pink"] .fp-remind::before {
  background: #fbd6e7;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-hero-kicker {
  color: #a81b5c; background: #fde9f2; border-color: #f6cfe1;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-hero h1 { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-hero p { color: #7d4560; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-ring {
  background: conic-gradient(#db2777 calc(var(--p) * 1%), #fbe3ee 0);
  border-color: #f2c9dc;
  box-shadow: 4px 5px 0 rgba(219, 39, 119, .10);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-ring-in { background: #fff8fc; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-ring-in b { color: #a81b5c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-mini {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-mini b { color: #5c2338; }
/* 琥珀提醒色保留：必须带上页面限定，否则会被上一条同权重规则压掉 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-mini.warn b,
html[data-skin="pink"] body[data-page="parent-family"] .fp-mini.warn b { color: #b45309; }

/* 完成状态筛选 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-filter-btn {
  background: #fffbfd; border-color: #f0cfe0; color: #8a5570;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-filter-btn b {
  background: #fde9f2; color: #b98aa5;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-filter-btn:hover {
  border-color: #db2777; color: #a81b5c;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-filter-btn.on {
  background: #db2777; border-color: #db2777; color: #fff;
  box-shadow: 0 3px 10px rgba(219, 39, 119, .16);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-filter-btn.on b {
  background: rgba(255, 255, 255, .22); color: #fff;
}

/* 本周小日历 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.today {
  background: #fde9f2; border-color: #db2777;
  box-shadow: 0 0 0 3px rgba(219, 39, 119, .12);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day .d { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day .bar i { background: #db2777; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.selected {
  background: #db2777; border-color: #db2777;
  box-shadow: 0 6px 16px rgba(219, 39, 119, .24);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.selected .d { color: #fff; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.selected .n,
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.selected .c {
  color: rgba(255, 255, 255, .82);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.selected .bar { background: rgba(255, 255, 255, .25); }
html[data-skin="pink"] body[data-page="family-plan"] .fp-week .fp-day.selected .bar i { background: #fff; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-weeknav {
  background: #fff8fc; border-color: #f0cfe0; color: #a81b5c;
}

/* 页签 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-tabs {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-tab { color: #8a5570; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-tab.on {
  background: #db2777;
  box-shadow: 0 4px 12px rgba(219, 39, 119, .22);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-subhead {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-subhead h2 { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-back { color: #a81b5c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-back:hover { background: #fde9f2; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-offer {
  background: #ffeef7; border-color: #edb9d2;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-offer-txt b { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-makeup-head {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-makeup-txt b { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-makeup-day-head { color: #8a5570; }

/* 任务卡 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-group-head h3 { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-group-ico {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-task {
  background: #fffbfd; border-color: #f0cfe0;
  box-shadow: 3px 4px 0 rgba(219, 39, 119, .06);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-task .fp-check {
  border-color: #f0c9dc; background-color: #fff8fc;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-task-title { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-task-meta { color: #8a5570; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-owner { color: #956280; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-meta-text { color: #8a5570; }

/* 完成态：绿纸、绿勾、绿印章整组保留（语义色），只补回被上面规则盖掉的值 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-task.done {
  background: #f6fbf3; border-color: #bcd8b2;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-task.done .fp-check {
  background-color: #7f9a78; border-color: #7f9a78;
}

/* 按钮与「⋯」菜单 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-btn.primary {
  background: #db2777; border-color: #db2777;
  box-shadow: 0 4px 12px rgba(219, 39, 119, .22);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-btn.primary:hover { background: #a81b5c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-task-actions .fp-btn.primary {
  background: #fff2f8; color: #a81b5c; border-color: #eab5ce;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-task-actions .fp-btn.primary:hover {
  background: #fde9f2;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-step-toggle { color: #a81b5c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-more-menu {
  background: #fffbfd; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-more-item { color: #7d4560; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-more-item.danger { color: #be123c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-empty {
  background: #fff8fc; border-color: #f0cfe0; color: #8a5570;
}

/* 手账风弹框 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal {
  background: #fffbfd; border-color: #f0cfe0; color: #5c2338;
  box-shadow: 6px 8px 0 rgba(219, 39, 119, .08), 0 24px 70px rgba(92, 35, 56, .18);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-desc { color: #8a5570; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal-x {
  background: #fde9f2; color: #a81b5c;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal-x:hover {
  background: #f9d8e8; color: #7d1745;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-sec,
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal-foot { border-color: #f0cfe0; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-sec-head span,
html[data-skin="pink"] body[data-page="family-plan"] .fp-tpl-label,
html[data-skin="pink"] body[data-page="family-plan"] .fp-adv-group h4 { color: #9c6a80; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-title-input,
html[data-skin="pink"] body[data-page="family-plan"] .fp-when-row input {
  background: #fff5fa; border-color: #f0cfe0; color: #5c2338;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-repeat-btn {
  background: #fff5fa; border-color: #f0cfe0; color: #7d4560;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-repeat-btn.on {
  background: #db2777; border-color: #db2777; color: #fff;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-cat {
  background: #fff2f8; border-color: #f2c9dc; color: #7d4560;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-cat.on {
  border-color: #db2777; color: #a81b5c;
  box-shadow: 0 0 0 3px rgba(219, 39, 119, .12);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-cat-add {
  border-color: #f0cfe0; color: #b98aa5;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-cat-add:hover {
  border-color: #db2777; color: #a81b5c; background: #fde9f2;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-cat-form input {
  background: #fff5fa; border-color: #f0cfe0; color: #5c2338;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-tpl {
  background: #fff2f8; border-color: #f2c9dc; color: #7d4560;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-fld input,
html[data-skin="pink"] body[data-page="family-plan"] .fp-fld textarea,
html[data-skin="pink"] body[data-page="family-plan"] .fp-fld select {
  background: #fff5fa; border-color: #f0cfe0; color: #5c2338;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal .fp-btn.primary {
  background: #db2777; border-color: #db2777;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-modal .fp-btn.primary:hover {
  background: #a81b5c;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-advanced summary { color: #a81b5c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-task-note {
  background: #fff5fa; border-color: #f0cfe0; color: #7d4560;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-note-tag {
  color: #a81b5c; background: #fde9f2;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-confirm-task {
  background: #fff5fa; border-color: #f0cfe0;
}

/* ---------------------------------------------------------- 家长端 · 看板 */
html[data-skin="pink"] body[data-page="parent-family"] {
  background-color: #fdf2f8;
  background-image:
    linear-gradient(rgba(219, 39, 119, .07) 1px, transparent 1px),
    linear-gradient(90deg, rgba(219, 39, 119, .07) 1px, transparent 1px);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-hero {
  background: #fff; border-color: #f6dbe7;
  box-shadow: 0 12px 30px rgba(92, 35, 56, .08);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-hero-kicker {
  color: #a81b5c; background: #fde9f2; border-color: #f6cfe1;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-hero h1 { color: #5c2338; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-ring {
  background: conic-gradient(#db2777 calc(var(--p) * 1%), #fbe3ee 0);
  box-shadow: 0 10px 28px rgba(219, 39, 119, .16);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-ring-in b { color: #a81b5c; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-mini {
  background: #fff; border-color: #f6dbe7;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-week .fp-day {
  background: #fff; border-color: #f6dbe7;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-week .fp-day.today {
  background: #fde9f2; border-color: #db2777;
  box-shadow: 0 0 0 3px rgba(219, 39, 119, .12);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-week .fp-day .bar i {
  background: #db2777;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-tabs {
  background: #fff; border-color: #f6dbe7;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-tab { color: #8a5570; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-tab.on {
  background: #db2777;
  box-shadow: 0 4px 12px rgba(219, 39, 119, .22);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-btn.primary {
  background: #db2777; border-color: #db2777;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-btn.primary:hover {
  background: #a81b5c;
}

/* 全家概览条 */
html[data-skin="pink"] .fp-family-chip {
  background: #fff; border-color: #f6dbe7;
  box-shadow: 0 4px 12px rgba(92, 35, 56, .05);
}
html[data-skin="pink"] .fp-family-chip:hover { border-color: #db2777; }
html[data-skin="pink"] .fp-family-chip.on {
  border-color: #db2777; background: #fff5fa;
  box-shadow: 0 0 0 3px rgba(219, 39, 119, .10);
}
html[data-skin="pink"] .fp-family-chip b { color: #5c2338; }
html[data-skin="pink"] .fp-family-chip span { color: #8a5570; }
html[data-skin="pink"] .fp-family-chip em { color: #a81b5c; }

/* 看板两列 */
html[data-skin="pink"] .fp-board-col {
  background: rgba(255, 255, 255, .62);
  border-color: #f3cfe0;
}
html[data-skin="pink"] .fp-board-head h3 { color: #5c2338; }
html[data-skin="pink"] .fp-board-head > span {
  color: #a81b5c; background: #fde9f2; border-color: #f6cfe1;
}
html[data-skin="pink"] .fp-board-head small { color: #9c6a80; }
html[data-skin="pink"] .fp-board-empty { color: #9c6a80; border-color: #f6dbe7; }

/* 便签：三色各留一档色相，避免三类计划被压成同一种粉 */
html[data-skin="pink"] body[data-page="parent-family"] .fp-task.fp-note {
  box-shadow: 0 6px 14px rgba(219, 39, 119, .08);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-note.cat-game {
  background: #ffeef5; border-color: #f6cfe1; color: #7d2f4d;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-note.cat-chore {
  background: #edf7f3; border-color: #c6e5da; color: #245a4d;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-note.cat-study {
  background: #f1edfb; border-color: #ddd2f3; color: #4a3a68;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-note .fp-task-meta { color: #8a5570; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-note-steps { color: #7d4560; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-note .fp-task-detail { color: #7d4560; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-note .fp-more { color: #8a5570; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-note .fp-more:hover {
  background: rgba(255, 255, 255, .55); color: #5c2338;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-note .fp-more-menu {
  background: #fffbfd; border-color: #f0cfe0;
}
/* ✓ 勾标记走完成绿，不用青绿（青绿在粉便签上会发脏） */
html[data-skin="pink"] body[data-page="parent-family"] .fp-note-check { color: #15803d; }

/* 家长端便签弹框 */
html[data-skin="pink"] body[data-page="parent-family"] .fp-modal {
  background: #fffbfd; border-color: #f0cfe0; color: #5c2338;
  box-shadow: 6px 8px 0 rgba(219, 39, 119, .08), 0 24px 70px rgba(92, 35, 56, .18);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-desc { color: #8a5570; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-modal-x {
  background: #fde9f2; color: #a81b5c;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-modal-x:hover {
  background: #f9d8e8; color: #7d1745;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-sec,
html[data-skin="pink"] body[data-page="parent-family"] .fp-modal-foot { border-color: #f0cfe0; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-sec-head span,
html[data-skin="pink"] body[data-page="parent-family"] .fp-tpl-label,
html[data-skin="pink"] body[data-page="parent-family"] .fp-adv-group h4 { color: #9c6a80; }
html[data-skin="pink"] body[data-page="parent-family"] .fp-title-input,
html[data-skin="pink"] body[data-page="parent-family"] .fp-when-row input {
  background: #fff5fa; border-color: #f0cfe0; color: #5c2338;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-repeat-btn {
  background: #fff5fa; border-color: #f0cfe0; color: #7d4560;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-repeat-btn.on {
  background: #db2777; border-color: #db2777; color: #fff;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-cat {
  background: #fff2f8; border-color: #f2c9dc; color: #7d4560;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-cat.on {
  border-color: #db2777; color: #a81b5c;
  box-shadow: 0 0 0 3px rgba(219, 39, 119, .10);
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-cat-add {
  border-color: #f2c9dc; color: #b98aa5;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-cat-add:hover {
  border-color: #db2777; color: #a81b5c; background: #fde9f2;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-cat-form input {
  background: #fff5fa; border-color: #f0cfe0; color: #5c2338;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-fld input,
html[data-skin="pink"] body[data-page="parent-family"] .fp-fld textarea,
html[data-skin="pink"] body[data-page="parent-family"] .fp-fld select {
  background: #fff5fa; border-color: #f0cfe0; color: #5c2338;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-modal .fp-btn.primary {
  background: #db2777; border-color: #db2777;
}
html[data-skin="pink"] body[data-page="parent-family"] .fp-advanced summary { color: #a81b5c; }

/* ---------------------------------------------------------- 家长中心迷你看板 */
html[data-skin="pink"] .fp-mini-col {
  background: #fff5fa; border-color: #f3d5e3;
}
html[data-skin="pink"] .fp-mini-col h4 { color: #7d4560; }
html[data-skin="pink"] .fp-mini-col h4 span { color: #a81b5c; }
html[data-skin="pink"] .fp-mini-note { color: #5c2338; border-bottom-color: #f6dbe7; }
html[data-skin="pink"] .fp-mini-note.done { color: #6f8a66; }   /* 已完成绿保留 */
html[data-skin="pink"] .fp-mini-more,
html[data-skin="pink"] .fp-mini-empty { color: #9c6a80; }

/* ---------------------------------------------------------- 家长中心页面
   该页绝大多数颜色走 CSS 变量，加载皮肤后自动变粉；
   这里只清掉内联样式里写死的冷色阴影与遮罩。 */
html[data-skin="pink"] body[data-page="parent-center"] .kidcard.active {
  box-shadow: 0 4px 16px rgba(219, 39, 119, .14);
}
html[data-skin="pink"] body[data-page="parent-center"] .veil {
  background: rgba(92, 35, 56, .42);
}

/* ---------------------------------------------------------- 每日提醒浮层
   提醒会出现在 index / assignments / grade / lesson 等多个页面，
   只有加载了皮肤的页面才变粉，未加载的页面维持米黄手账风。 */
html[data-skin="pink"] .fp-remind {
  background: #fff8fc; border-color: #f2c9dc; color: #5c2338;
  box-shadow: 4px 6px 0 rgba(219, 39, 119, .10), 0 18px 50px rgba(92, 35, 56, .16);
}
html[data-skin="pink"] .fp-remind-head b { color: #5c2338; }
html[data-skin="pink"] .fp-remind-head small { color: #8a5570; }
html[data-skin="pink"] .fp-remind-close { color: #8a5570; }
html[data-skin="pink"] .fp-remind-close:hover { color: #5c2338; background: #fde9f2; }
html[data-skin="pink"] .fp-remind-list li { color: #7d4560; }
html[data-skin="pink"] .fp-remind-list li .d { color: #9c6a80; }
html[data-skin="pink"] .fp-remind .fp-btn {
  color: #7d4560; background: #fff; border-color: #eec0d4;
}
html[data-skin="pink"] .fp-remind .fp-btn:hover {
  color: #a81b5c; background: #fde9f2; border-color: #db2777;
}
html[data-skin="pink"] .fp-remind .fp-btn.primary {
  background: #db2777; border-color: #db2777;
}
html[data-skin="pink"] .fp-remind .fp-btn.primary:hover { background: #a81b5c; }

/* ---------------------------------------------------------- 窄屏主题按钮
   css/style.css 会在 ≤400px 隐藏顶栏主题按钮（学习工具页顶栏更挤，
   需要给「返回学科门户」让位）。家庭计划与家长中心顶栏只有品牌和账户，
   空间足够，这里恢复显示，否则手机上完全无法切换主题。 */
@media (max-width: 400px) {
  body[data-page="family-plan"] .topbar .skin-btn,
  body[data-page="parent-family"] .topbar .skin-btn,
  body[data-page="parent-center"] .topbar .skin-btn { display: inline-flex; }
}

/* 手机上原本只留 9px 色点，看不出这是「切换主题」。
   这三个页面顶栏有空位，恢复「粉梦 / 默认」文字，色点+文字一起表达。 */
@media (max-width: 560px) {
  body[data-page="family-plan"] .skin-btn,
  body[data-page="parent-family"] .skin-btn,
  body[data-page="parent-center"] .skin-btn {
    padding: 6px 10px; gap: 4px;
  }
  body[data-page="family-plan"] .skin-btn .lbl,
  body[data-page="parent-family"] .skin-btn .lbl,
  body[data-page="parent-center"] .skin-btn .lbl {
    display: inline; font-size: 11.5px;
  }
}

/* ---------------------------------------------------------- 成长记录 · 粉梦 */
html[data-skin="pink"] body[data-page="family-plan"] .fp-hday {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-hday.on {
  background: #fde9f2; border-color: #db2777;
  box-shadow: 0 0 0 3px rgba(219, 39, 119, .12);
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-hday .d { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-hday.on .n,
html[data-skin="pink"] body[data-page="family-plan"] .fp-hday.on .c { color: #a81b5c; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-hsum {
  background: #fff8fc; border-color: #f0cfe0;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-hsum b { color: #5c2338; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-hsum > div > span { color: #8a5570; }
html[data-skin="pink"] body[data-page="family-plan"] .fp-history .fp-step-toggle {
  color: #a85b3b;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-history .fp-task-actions .fp-btn.primary {
  background: #db2777; border-color: #db2777; color: #fff;
}
html[data-skin="pink"] body[data-page="family-plan"] .fp-history .fp-task-actions .fp-btn.primary:hover {
  background: #a81b5c;
}

/* ---------------------------------------------------------- 零散小件 */
html[data-skin="pink"] .fp-day .bar { background: #fbe3ee; }
html[data-skin="pink"] .fp-check { border-color: #f0c9dc; }
html[data-skin="pink"] .fp-more { color: #b98aa5; }
html[data-skin="pink"] .fp-more:hover { background: #fde9f2; color: #5c2338; }
html[data-skin="pink"] .fp-chip.parent {
  color: #9333ea; background: #faf5ff; border-color: #e9d5ff;
}
html[data-skin="pink"] .fp-chip.self {
  color: #0e7490; background: #ecfeff; border-color: #cffafe;
}
