/* ==================================================
   ✨柚子闯关工作台 · 一年级萌新版
   主色：粉 #FFB6C1 → #FF85A2 ｜ 皮卡丘皮肤：黄
   ================================================== */
* { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
html, body {
  font-family:"幼圆","YouYuan","Yuanti SC","Comic Sans MS","PingFang SC","Microsoft YaHei",sans-serif;
  background:#ffeef2; color:#5b4a54; overflow-x:hidden;
  -webkit-user-select:none; user-select:none;
}
input, textarea { -webkit-user-select:text; user-select:text; font-family:inherit; }

#app {
  max-width:430px; margin:0 auto; min-height:100vh; position:relative;
  background:linear-gradient(180deg,#fff0f4 0%,#fff8f0 100%);
  box-shadow:0 0 40px rgba(255,133,162,.15); overflow:hidden;
}
.screen { display:none; padding-bottom:86px; min-height:100vh; animation:fadeIn .3s ease; }
.screen.active { display:block; }
@keyframes fadeIn { from{opacity:0;transform:translateY(8px);} to{opacity:1;transform:translateY(0);} }
.footer-space { height:24px; }

/* ============ 顶部导航 ============ */
.top-bar {
  background:linear-gradient(135deg,#FFB6C1,#FF85A2);
  padding:52px 18px 18px; border-radius:0 0 26px 26px; color:#fff;
  display:flex; align-items:center; gap:12px;
}
.top-bar.small { padding:52px 14px 16px; }
.back-btn {
  background:rgba(255,255,255,.3); border:none; color:#fff;
  padding:8px 14px; border-radius:20px; font-size:15px; cursor:pointer; font-family:inherit;
}
.top-title { flex:1; text-align:center; font-size:19px; font-weight:800; }
.top-avatar {
  width:54px; height:54px; border-radius:50%;
  background:rgba(255,255,255,.28); border:3px solid rgba(255,255,255,.5);
  display:flex; align-items:center; justify-content:center;
  overflow:hidden;
}
.top-avatar img { width:100%; height:100%; object-fit:cover; display:block; }
/* PNG 立绘自适应（顶栏头像 / 皮肤卡片 / 朱迪弹窗） */
.top-avatar img, .skin-art-img, .judy-avatar img { width:100%; height:100%; object-fit:cover; display:block; }
.top-info { flex:1; }
.top-hello { font-size:19px; font-weight:800; }
.top-date { font-size:12px; opacity:.9; margin-top:3px; }
.points-badge {
  display:flex; align-items:center; gap:5px;
  background:rgba(255,255,255,.3); padding:8px 13px; border-radius:20px;
  font-size:16px; font-weight:800; cursor:pointer;
}
.points-badge b { font-size:16px; }

/* 皮卡丘皮肤 */
body.skin-pikachu .top-bar { background:linear-gradient(135deg,#FFE066,#FFC933); }
body.skin-pikachu #app { background:linear-gradient(180deg,#fffae8 0%,#fffdf2 100%); }

/* 金装朱迪皮肤 */
body.skin-gold .top-bar { background:linear-gradient(135deg,#FFD86A,#C8881A); }
body.skin-gold #app { background:linear-gradient(180deg,#fff7d6 0%,#fff2b8 100%); }
body.skin-gold .tp-fill { background:linear-gradient(90deg,#FFD86A,#C8881A); }
body.skin-gold .points-hero { background:linear-gradient(135deg,#FFD86A,#C8881A); }
body.skin-gold .shop-btn { background:linear-gradient(135deg,#FFD86A,#C8881A); }
body.skin-gold .checkin-main-btn { background:linear-gradient(135deg,#FFD86A,#C8881A); box-shadow:0 5px 16px rgba(200,136,26,.35); }
body.skin-gold .timer-ring { background:conic-gradient(#C8881A var(--p,0%), #fff2b8 0); }
body.skin-gold .timer-num { color:#C8881A; }
body.skin-gold .modal-btn.confirm { background:linear-gradient(135deg,#FFD86A,#C8881A); }

/* ============ 口号 ============ */
.slogan {
  text-align:center; font-size:13px; font-weight:700; color:#e75f80;
  padding:14px 12px 4px; letter-spacing:1px;
}

/* ============ 今日进度卡 ============ */
.today-progress-card {
  margin:12px 16px 0; background:#fff; border-radius:20px; padding:16px;
  box-shadow:0 5px 18px rgba(255,133,162,.12);
}
.tp-row { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.tp-title { font-size:15px; font-weight:800; }
.tp-count { font-size:16px; font-weight:800; color:#FF85A2; }
.tp-track { height:14px; background:#ffeef2; border-radius:8px; overflow:hidden; }
.tp-fill {
  height:100%; border-radius:8px; background:linear-gradient(90deg,#FFB6C1,#FF85A2);
  transition:width .5s ease;
}
body.skin-pikachu .tp-fill { background:linear-gradient(90deg,#FFE066,#FFB300); }
.tp-streak { margin-top:10px; font-size:13px; color:#e75f80; font-weight:700; text-align:center; }
.tp-dbl { margin-top:6px; font-size:12px; line-height:1.6; color:#8a6d1f; font-weight:700; text-align:center;
  background:linear-gradient(135deg,#FFF3CD,#FFE9A8); border-radius:10px; padding:5px 8px; }
.tp-dbl b { color:#e75f80; }

/* ============ 头像勋章绶带 ============
   已点亮的勋章挂在头像下沿，像别在胸前的奖章。
   top:100% + 负 margin 让它上半截压在头像上、下半截露出来，
   露出的 13px 小于 top-bar 的 padding-bottom(18px)，不会顶到下面的内容。 */
.avatar-wrap { position:relative; flex-shrink:0; line-height:0; }
.avatar-medals {
  position:absolute; left:50%; top:100%; transform:translateX(-50%);
  margin-top:-6px; display:flex; gap:2px; z-index:3; cursor:pointer;
  line-height:1; padding:0 2px;
}
.avatar-medals:empty { display:none; }
.am-item {
  width:19px; height:19px; border-radius:50%;
  background:linear-gradient(150deg,#fff7e0,#ffd483);
  border:1.5px solid #fff;
  box-shadow:0 1px 5px rgba(170,115,40,.4);
  display:flex; align-items:center; justify-content:center;
  font-size:10.5px; line-height:1;
  animation:amPop .5s cubic-bezier(.34,1.56,.64,1) both;
}
.am-item:active { transform:scale(.88); }
@keyframes amPop { from { transform:scale(0) rotate(-25deg); } to { transform:scale(1) rotate(0); } }
@keyframes bounce { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-6px);} }

/* ============ 专区与任务卡片 ============ */
.zone-header {
  display:flex; align-items:center; justify-content:space-between;
  padding:20px 18px 10px;
}
.zone-tag {
  font-size:13px; font-weight:800; color:#fff; padding:6px 13px; border-radius:14px;
}
.add-task-btn {
  border:none; background:#fff; color:#e75f80; font-weight:800; font-size:13px;
  padding:7px 14px; border-radius:16px; cursor:pointer;
  box-shadow:0 3px 8px rgba(255,133,162,.15); font-family:inherit;
}
.task-card {
  margin:0 16px 10px; background:#fff; border-radius:18px; padding:14px 14px;
  display:flex; align-items:center; gap:12px; cursor:pointer;
  box-shadow:0 4px 14px rgba(255,133,162,.09); transition:transform .2s;
  position:relative; overflow:hidden;
}
.task-card::before {
  content:''; position:absolute; left:0; top:0; bottom:0; width:6px; background:var(--zc,#FFB6C1);
}
.task-card:active { transform:scale(.97); }
.task-card.done { opacity:.62; }
.task-card.done::after {
  content:'✓'; position:absolute; right:12px; top:10px; font-size:16px;
  color:#2ecc9b; font-weight:900;
}
.tc-icon { font-size:32px; width:44px; text-align:center; flex-shrink:0; }
.tc-info { flex:1; min-width:0; }
.tc-name { font-size:15px; font-weight:800; }
.tc-sub { font-size:11.5px; color:#b9a6ae; margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tc-points {
  font-size:12px; font-weight:800; color:#f5a623; background:#fff6e5;
  padding:5px 9px; border-radius:12px; flex-shrink:0;
}
.tc-check { font-size:20px; flex-shrink:0; }
.tc-del {
  border:none; background:#fff0f3; color:#e0869b; border-radius:12px;
  padding:5px 9px; font-size:12px; cursor:pointer; flex-shrink:0; font-family:inherit;
}

/* ============ 快捷入口 ============ */
.quick-row { display:flex; gap:10px; margin:14px 16px 0; }

/* ============ 通用卡片 ============ */
.card {
  margin:14px 16px 0; background:#fff; border-radius:20px; padding:16px;
  box-shadow:0 4px 16px rgba(255,133,162,.09);
}
.card-title { font-size:15px; font-weight:800; margin-bottom:12px; display:flex; justify-content:space-between; align-items:center; }
.card-sub { font-size:11.5px; color:#b9a6ae; font-weight:600; }

/* ============ 积分面板 ============ */
.points-hero {
  margin:14px 16px 0; border-radius:22px; padding:24px 16px; text-align:center;
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff;
  box-shadow:0 6px 20px rgba(255,133,162,.3);
}
body.skin-pikachu .points-hero { background:linear-gradient(135deg,#FFE066,#FFB300); }
.ph-label { font-size:13px; opacity:.95; }
.ph-value { font-size:52px; font-weight:900; margin:6px 0; text-shadow:0 3px 10px rgba(0,0,0,.12); }
.ph-sub { font-size:12px; opacity:.92; }
.ph-stats { display:flex; gap:10px; justify-content:center; margin-top:10px; }
.ph-stat {
  flex:1; max-width:150px; background:rgba(255,255,255,.22); border-radius:14px;
  padding:8px 6px; backdrop-filter:blur(2px);
}
.phs-k { font-size:11px; opacity:.95; }
.phs-v { font-size:22px; font-weight:900; margin-top:2px; }
.grand-dep {
  font-size:13px; color:#7a5; font-weight:700; background:#eafbe7; border-radius:12px;
  padding:8px 10px; margin-bottom:10px; text-align:center;
}
.grand-dep b { color:#e08b0f; font-size:15px; }
.grand-bal {
  font-size:14px; font-weight:800; color:#5a4a52; background:linear-gradient(135deg,#FFF3D6,#FFE3EC);
  border:1.5px solid #ffd9e2; border-radius:14px; padding:11px 12px; margin-bottom:10px; text-align:center;
}
.grand-bal b { color:#e0683f; font-size:21px; margin:0 2px; }
.gb-int { font-size:11px; color:#3aa56b; font-weight:700; }
.grand-wd { display:flex; gap:8px; margin-top:10px; align-items:center; }
.grand-dp { display:flex; gap:8px; margin-bottom:9px; align-items:center; }
.gb-input {
  flex:1; min-width:0; border:1.5px solid #ffd9e2; border-radius:11px; padding:9px 10px;
  font-size:15px; color:#5a4a52; background:#fff;
}
.gb-input:focus { outline:none; border-color:#FF85A2; box-shadow:0 0 0 3px #ffe3ec; }
.gb-input::-webkit-outer-spin-button, .gb-input::-webkit-inner-spin-button { -webkit-appearance:none; margin:0; }

/* 打卡日历 */
.cal-head-row { display:grid; grid-template-columns:repeat(7,1fr); text-align:center; margin-bottom:6px; }
.cal-head-row span { font-size:11px; color:#c4aeb6; font-weight:700; }
.cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:5px; }
.cal-cell {
  aspect-ratio:1; border-radius:10px; background:#faf3f5;
  display:flex; align-items:center; justify-content:center; font-size:17px;
}
.cal-cell.empty { background:transparent; }
.cal-cell.full { background:#ffe3ea; }
.cal-cell.streakday { outline:2.5px solid #FF85A2; outline-offset:-2.5px; }
.cal-cell.today { border:2.5px solid #FF85A2; }
.cal-cell.future { opacity:.4; }
.cal-legend { display:flex; gap:14px; justify-content:center; margin-top:10px; font-size:11px; color:#b9a6ae; }

/* 积分规则 */
.rules-list { display:grid; gap:8px; }
.rules-list > div {
  font-size:12.5px; color:#8d7a83; background:#fff6f8; border-radius:12px; padding:9px 12px;
}
.rules-list b { color:#f5a623; }

/* 商店 */
.shop-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.shop-item {
  background:#fff6f8; border-radius:16px; padding:14px 10px; text-align:center;
}
.shop-icon { font-size:32px; }
.shop-name { font-size:13px; font-weight:800; margin:6px 0 2px; }
.shop-cost { font-size:13px; color:#f5a623; font-weight:800; }
.shop-limit { font-size:10.5px; color:#c4aeb6; margin:2px 0 8px; }
.shop-btn {
  width:100%; border:none; border-radius:12px; padding:8px 0; font-size:13px; font-weight:800;
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; cursor:pointer; font-family:inherit;
}
body.skin-pikachu .shop-btn { background:linear-gradient(135deg,#FFE066,#FFB300); }
.shop-btn:disabled { background:#e8dee2; cursor:not-allowed; }
.shop-btn:active:not(:disabled) { transform:scale(.96); }

/* 现金兑换 */
.cash-intro { font-size:12.5px; color:#8d7a83; line-height:1.7; margin-bottom:12px; }
.cash-btns { display:flex; gap:8px; }
.cash-btn {
  flex:1; border:none; border-radius:14px; padding:12px 0 10px; font-size:14px; font-weight:800;
  background:#fff6f2; color:#e8823a; box-shadow:inset 0 0 0 2px #ffd9b8; cursor:pointer; font-family:inherit;
  line-height:1.4;
}
.cash-btn small { font-size:10px; font-weight:600; color:#c4a47e; }
.cash-btn:active { transform:scale(.96); }
.cash-btn:disabled { opacity:.45; cursor:not-allowed; }
.cash-history { margin-top:12px; }
.cash-record {
  display:flex; justify-content:space-between; font-size:12px; color:#8d7a83;
  background:#fff6f2; border-radius:10px; padding:8px 12px; margin-bottom:6px;
}

/* 胡萝卜钞票 */
.carrot-note {
  margin:6px auto 16px; width:100%; max-width:300px; aspect-ratio:1.55;
  border-radius:14px; background:linear-gradient(135deg,#fff3e0,#ffe0b2);
  box-shadow:inset 0 0 0 3px #ffb74d; position:relative; overflow:hidden;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
}
.carrot-note .cn-emoji { font-size:44px; }
.carrot-note .cn-amount { font-size:26px; font-weight:900; color:#e65100; }
.carrot-note .cn-name { font-size:11px; color:#bf6d18; font-weight:700; letter-spacing:2px; }
.carrot-note .cn-serial {
  position:absolute; bottom:8px; right:12px; font-size:9px; color:#c98a3d;
}
.carrot-note .cn-corner {
  position:absolute; top:8px; left:12px; font-size:10px; color:#bf6d18; font-weight:800;
}

/* ============ 勋章馆 ============ */
.streak-hero {
  margin:14px 16px 0; background:#fff; border-radius:20px; padding:22px; text-align:center;
  box-shadow:0 4px 16px rgba(255,133,162,.09);
}
.sh-fire { font-size:44px; animation:bounce 1.6s infinite; }
.sh-num { font-size:42px; font-weight:900; color:#FF85A2; margin:4px 0; }
.sh-label { font-size:13px; color:#b9a6ae; font-weight:700; }
.medals-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; padding:14px 16px 0; }
.medal-card {
  background:#fff; border-radius:18px; padding:20px 12px; text-align:center;
  box-shadow:0 4px 14px rgba(255,133,162,.08);
}
.medal-card .md-emoji { font-size:42px; }
.medal-card.locked { opacity:.45; filter:grayscale(.8); }
.medal-card .md-name { font-size:14px; font-weight:800; margin-top:8px; }
.medal-card .md-desc { font-size:11px; color:#b9a6ae; margin-top:5px; line-height:1.5; }
.medal-card .md-status {
  display:inline-block; margin-top:8px; font-size:11px; font-weight:800;
  padding:4px 12px; border-radius:10px; background:#e8f8f2; color:#2ecc9b;
}
.medal-card.locked .md-status { background:#f2eef0; color:#b9a6ae; }

/* 换肤 */
.skin-row { display:flex; gap:10px; }
.skin-card {
  flex:1; border-radius:16px; padding:16px 10px; text-align:center; cursor:pointer;
  border:3px solid transparent; background:#faf3f5;
}
.skin-card.selected { border-color:#FF85A2; background:#fff0f4; }
.skin-card.locked { opacity:.5; }
.skin-card .sk-emoji { width:84px; height:84px; margin:0 auto; display:block; overflow:hidden; border-radius:50%; }
.skin-card .sk-emoji img { width:100%; height:100%; object-fit:cover; display:block; }
.skin-card .sk-name { font-size:13px; font-weight:800; margin-top:6px; }
.skin-card .sk-desc { font-size:10.5px; color:#b9a6ae; margin-top:3px; }

/* ============ 任务详情抽屉 ============ */
.sheet-mask {
  position:fixed; inset:0; background:rgba(91,74,84,.45); z-index:200;
  display:flex; align-items:flex-end; justify-content:center;
}
.sheet {
  width:100%; max-width:430px; max-height:88vh; background:#fff;
  border-radius:26px 26px 0 0; display:flex; flex-direction:column;
  animation:sheetUp .3s ease;
}
@keyframes sheetUp { from{transform:translateY(60%);} to{transform:translateY(0);} }
.sheet-bar { width:44px; height:5px; background:#f0dfe5; border-radius:3px; margin:10px auto 0; }
.sheet-head { display:flex; align-items:center; gap:12px; padding:14px 18px 10px; }
.sheet-icon {
  width:52px; height:52px; border-radius:16px; background:#fff0f4;
  display:flex; align-items:center; justify-content:center; font-size:30px; flex-shrink:0;
}
.sheet-title-zone { flex:1; }
.sheet-title { font-size:18px; font-weight:800; }
.sheet-zone { font-size:11px; color:#fff; background:var(--zc,#FF85A2); display:inline-block; padding:3px 10px; border-radius:10px; margin-top:4px; font-weight:700; }
.sheet-close {
  border:none; background:#f7eef1; color:#b9a6ae; width:32px; height:32px; border-radius:50%;
  font-size:14px; cursor:pointer; flex-shrink:0; font-family:inherit;
}
.sheet-body { flex:1; overflow-y:auto; padding:6px 18px 14px; }
.sheet-foot { padding:10px 18px calc(16px + env(safe-area-inset-bottom)); border-top:1px solid #f7eef1; }
.checkin-main-btn {
  width:100%; border:none; border-radius:18px; padding:15px; font-size:17px; font-weight:800;
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; cursor:pointer; font-family:inherit;
  box-shadow:0 5px 16px rgba(255,133,162,.35);
}
body.skin-pikachu .checkin-main-btn { background:linear-gradient(135deg,#FFE066,#FFB300); box-shadow:0 5px 16px rgba(255,179,0,.35); }
.checkin-main-btn:active { transform:scale(.97); }
.checkin-main-btn.disabled { background:#e8dee2; box-shadow:none; }
.sheet-note { text-align:center; font-size:12px; color:#b9a6ae; margin-top:8px; }

/* ============ 抽屉内组件 ============ */
/* 倒计时 */
.timer-box { text-align:center; padding:10px 0 4px; }
.timer-ring {
  width:150px; height:150px; margin:0 auto; border-radius:50%;
  background:conic-gradient(#FF85A2 var(--p,0%), #ffeef2 0);
  display:flex; align-items:center; justify-content:center; position:relative;
}
body.skin-pikachu .timer-ring { background:conic-gradient(#FFB300 var(--p,0%), #fff6dc 0); }
.timer-ring-inner {
  width:124px; height:124px; border-radius:50%; background:#fff;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
}
.timer-num { font-size:34px; font-weight:900; color:#FF85A2; }
body.skin-pikachu .timer-num { color:#f5a300; }
.timer-label { font-size:11px; color:#b9a6ae; }
.timer-btns { display:flex; gap:10px; justify-content:center; margin-top:14px; }
.timer-btn {
  border:none; border-radius:16px; padding:11px 26px; font-size:15px; font-weight:800;
  cursor:pointer; font-family:inherit;
}
.timer-btn.start { background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; }
.timer-btn.reset { background:#f7eef1; color:#8d7a83; }
.timer-done-tip { text-align:center; font-size:13px; color:#2ecc9b; font-weight:800; margin-top:10px; }
.speak-btn {
  display:block; width:100%; border:none; border-radius:14px; padding:12px; margin-top:12px;
  background:#fff0f4; color:#e75f80; font-size:14px; font-weight:800; cursor:pointer; font-family:inherit;
}

/* 生字卡 */
.hanzi-day-tip {
  font-size:12.5px; color:#8d7a83; background:#fff6f8; border-radius:12px;
  padding:10px 12px; margin-bottom:12px; line-height:1.6;
}
.hanzi-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.hanzi-card {
  background:#fff6f8; border-radius:16px; padding:14px 10px; text-align:center;
  animation:fadeIn .4s ease;
}
.hanzi-char { font-size:52px; font-weight:900; color:#5b4a54; line-height:1.2; font-family:"KaiTi","楷体",serif; }
.hanzi-pinyin { font-size:16px; color:#FF85A2; font-weight:800; }
.hanzi-meta { font-size:10.5px; color:#b9a6ae; margin-top:3px; }
.hanzi-words { font-size:12.5px; color:#8d7a83; margin-top:6px; line-height:1.6; }
.hanzi-speak {
  border:none; background:#fff; border-radius:10px; padding:5px 12px; margin-top:8px;
  font-size:12px; cursor:pointer; font-family:inherit; color:#e75f80; font-weight:700;
}

/* 课文 */
.poem-card { background:#fff6f8; border-radius:16px; padding:16px; margin-bottom:12px; }
.poem-title { font-size:16px; font-weight:800; text-align:center; margin-bottom:8px; }
.poem-text {
  text-align:center; font-size:17px; line-height:2; color:#5b4a54;
  font-family:"KaiTi","楷体",serif; white-space:pre-line;
}
.poem-btns { display:flex; gap:8px; margin-top:10px; }
.poem-btn {
  flex:1; border:none; border-radius:12px; padding:9px 0; font-size:13px; font-weight:800;
  cursor:pointer; font-family:inherit; background:#fff; color:#e75f80;
}
.poem-btn.recited { background:#e8f8f2; color:#2ecc9b; }

/* 拼音 */
.pinyin-tabs { display:flex; gap:8px; margin-bottom:12px; }
.pinyin-tab {
  flex:1; border:none; border-radius:12px; padding:9px 0; font-size:13px; font-weight:800;
  background:#f7eef1; color:#8d7a83; cursor:pointer; font-family:inherit;
}
.pinyin-tab.active { background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; }
.pinyin-grid { display:flex; flex-wrap:wrap; gap:8px; }
.pinyin-cell {
  background:#fff6f8; border-radius:12px; padding:10px 14px; font-size:20px; font-weight:800;
  color:#5b4a54; cursor:pointer;
}
.pinyin-cell:active { background:#ffd9e2; }
.match-game-btn {
  width:100%; border:none; border-radius:14px; padding:12px; margin-top:12px;
  background:linear-gradient(135deg,#4ECDC4,#26a69a); color:#fff; font-size:14px; font-weight:800;
  cursor:pointer; font-family:inherit;
}
/* 拼音配对游戏 */
.match-status { text-align:center; font-size:13px; font-weight:800; color:#26a69a; margin-bottom:10px; }
.match-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.match-cell {
  aspect-ratio:1; border-radius:12px; background:#fff6f8; display:flex; align-items:center;
  justify-content:center; font-size:17px; font-weight:800; cursor:pointer; color:#5b4a54;
}
.match-cell.flipped { background:#fff; box-shadow:inset 0 0 0 2.5px #4ECDC4; }
.match-cell.matched { background:#e8f8f2; color:#2ecc9b; pointer-events:none; }
.match-cell.wrong { background:#ffe8e8; color:#e74c3c; animation:shake .4s; }
@keyframes shake { 0%,100%{transform:translateX(0);} 25%{transform:translateX(-5px);} 75%{transform:translateX(5px);} }

/* 数学练习 */
.math-quiz-box { padding-top:6px; }
.math-progress-row { display:flex; align-items:center; gap:10px; margin-bottom:14px; }
.math-progress-bar { flex:1; height:9px; background:#ffeef2; border-radius:5px; overflow:hidden; }
.math-progress-fill { height:100%; background:linear-gradient(90deg,#FFB6C1,#FF85A2); transition:width .3s; }
.math-progress-text { font-size:12px; color:#b9a6ae; font-weight:700; white-space:nowrap; }
.math-question {
  text-align:center; font-size:34px; font-weight:900; color:#5b4a54;
  margin:14px 0; min-height:66px; display:flex; align-items:center; justify-content:center; line-height:1.4;
}
.math-question .emoji-row { font-size:26px; letter-spacing:3px; }
.math-options { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.math-option {
  background:#fff6f8; border-radius:14px; padding:16px 0; text-align:center; font-size:22px;
  font-weight:900; cursor:pointer; color:#5b4a54;
}
.math-option.correct { background:#e8f8f2; color:#2ecc9b; box-shadow:inset 0 0 0 2.5px #2ecc9b; }
.math-option.wrong { background:#ffe8e8; color:#e74c3c; box-shadow:inset 0 0 0 2.5px #e74c3c; animation:shake .4s; }
.math-feedback { text-align:center; font-size:16px; font-weight:800; min-height:26px; margin-top:12px; }
.math-toolbar { display:flex; gap:8px; margin-top:4px; }
.math-tool-btn {
  flex:1; border:none; border-radius:12px; padding:10px 0; font-size:13px; font-weight:800;
  background:#f7eef1; color:#8d7a83; cursor:pointer; font-family:inherit;
}
.math-result-card { text-align:center; padding:16px 0; }
.math-result-emoji { font-size:56px; }
.math-result-title { font-size:20px; font-weight:900; margin:10px 0 6px; }
.math-result-sub { font-size:13px; color:#8d7a83; line-height:1.7; }

/* 英语子任务 */
.subtask-row {
  display:flex; align-items:center; gap:12px; background:#fff6f8; border-radius:16px;
  padding:14px; margin-bottom:10px;
}
.subtask-row .st-icon { font-size:30px; }
.subtask-row .st-info { flex:1; }
.subtask-row .st-name { font-size:14px; font-weight:800; }
.subtask-row .st-sub { font-size:11px; color:#b9a6ae; margin-top:2px; }
.st-check { font-size:22px; }

/* 早睡打卡状态 */
.bed-status {
  border-radius:14px; padding:10px 14px; font-size:13px; font-weight:700; line-height:1.7;
}
.bed-status.early { background:#f0f7ff; color:#5B9BD5; }
.bed-status.late { background:#fff0f4; color:#e75f80; }

/* 晚睡说明弹窗（21:45 后打卡） */
.bedlate-content { max-width:380px; }
.bedlate-msg { font-size:14px; color:#7a6a72; line-height:1.7; margin:4px 0 12px; text-align:center; }
.bedlate-sub { font-size:11.5px; color:#b29aa3; }
.bedlate-rec { display:flex; align-items:center; gap:10px; justify-content:center; margin:6px 0 12px; }
.bedlate-rec-dot { width:12px; height:12px; border-radius:50%; background:#e75f80; animation:bedrecpulse 1s infinite; }
@keyframes bedrecpulse { 0%,100%{opacity:1} 50%{opacity:.25} }
.bedlate-rec-time { font-size:20px; font-weight:800; color:#e75f80; font-variant-numeric:tabular-nums; }
.bedlate-rec-hint { font-size:12px; color:#b29aa3; }
.bedlate-audio { display:flex; align-items:center; gap:8px; margin:6px 0 12px; }
.bedlate-audio audio { flex:1; height:36px; }
.bedlate-rerec { border:none; background:#fff0f4; color:#e75f80; font-size:12px; font-weight:800;
  border-radius:10px; padding:6px 10px; cursor:pointer; font-family:inherit; box-shadow:inset 0 0 0 1.5px #ffd9e2; }
.bedlate-rec-btn { width:100%; border:none; background:#e75f80; color:#fff; font-size:14px; font-weight:800;
  border-radius:14px; padding:12px; cursor:pointer; font-family:inherit; margin:2px 0 6px; }
.bedlate-rec-btn.on { background:#c6436c; }
.bedlate-rec-btn:disabled { background:#e9dde1; color:#b9a6ae; cursor:not-allowed; }
.bedlate-or { text-align:center; font-size:12px; color:#b29aa3; margin:6px 0 6px; }
.bedlate-text { width:100%; box-sizing:border-box; border:1.5px solid #ecd9df; border-radius:12px;
  padding:10px; font-size:13px; font-family:inherit; resize:vertical; min-height:64px; color:#5a4a52; }
.bedlate-text:focus { outline:none; border-color:#e75f80; }
.bedlate-hint { font-size:12px; color:#c98a9d; min-height:16px; margin:6px 0 2px; text-align:center; }
.pc-late { display:inline-block; background:#fff0f4; color:#e75f80; font-size:11px; font-weight:800;
  border-radius:8px; padding:2px 7px; margin-left:6px; }
.pc-time { font-size:11.5px; color:#b29aa3; margin-top:2px; }
.pc-lateaudio audio { height:32px; width:100%; margin-top:4px; }
/* 家长侧「今晚早睡打卡」判定控件 */
.pc-bed-status { font-size:13px; font-weight:700; color:#7a6a72; line-height:1.6; padding:2px 0 8px; }
.pc-bed-status.ok { color:#3aa76d; }
.pc-bed-status.no { color:#e75f80; }
.pc-bed-status.late { color:#e75f80; }
.pc-bed-hint { font-size:11.5px; color:#b29aa3; padding-bottom:8px; }
.pc-bed-btn { border:none; background:#e75f80; color:#fff; font-size:13px; font-weight:800;
  border-radius:12px; padding:9px 14px; cursor:pointer; font-family:inherit; }
.pc-bed-btn.on { background:#c6436c; box-shadow:0 0 0 3px #ffd9e2; animation:bedrecpulse 1.4s infinite; }
.pc-bed-btn.ghost { background:#fff0f4; color:#e75f80; box-shadow:inset 0 0 0 1.5px #ffd9e2; }

/* 早睡准时率统计卡 */
.bs-tabs { display:flex; gap:8px; margin-bottom:10px; }
.bs-tab { border:none; background:#f3ecf0; color:#8d7a83; font-size:13px; font-weight:800; padding:6px 18px; border-radius:20px; cursor:pointer; }
.bs-tab.on { background:#e75f80; color:#fff; }
.bs-rate { font-size:38px; font-weight:900; color:#e75f80; line-height:1; }
.bs-rate span { font-size:18px; font-weight:800; margin-left:2px; }
.bs-rate-sub { font-size:12px; color:#b29aa3; margin:2px 0 10px; }
.bs-pills { display:flex; gap:8px; margin-bottom:10px; }
.bs-pill { flex:1; background:#fff7f9; border-radius:12px; padding:8px 6px; text-align:center; font-size:12px; color:#8d7a83; font-weight:700; line-height:1.5; }
.bs-pill b { display:block; font-size:20px; font-weight:900; margin-top:2px; }
.bs-pill.ok b { color:#3aa76d; }
.bs-pill.late b { color:#e6a23c; }
.bs-pill.miss b { color:#e75f80; }
.bs-avg { font-size:13px; color:#7a6a72; font-weight:700; margin-bottom:10px; }
.bs-avg b { font-size:16px; color:#8d7a83; }
.bs-todo { font-size:11px; color:#b29aa3; font-weight:600; }
.bs-bar { display:flex; height:12px; border-radius:8px; overflow:hidden; background:#f0eef2; }
.bs-seg { display:block; height:100%; }
.bs-seg.ok { background:#3aa76d; }
.bs-seg.late { background:#e6a23c; }
.bs-seg.miss { background:#e75f80; }
.bs-bar-empty { background:#f0eef2; align-items:center; justify-content:center; color:#b29aa3; font-size:11.5px; height:28px; }

/* 早睡主动提醒弹窗（孩子端） */
.bedremind-content { max-width:320px; }
.bedremind-msg { font-size:14px; color:#7a6a72; line-height:1.7; white-space:pre-line; margin:6px 2px 14px; }


/* 商店家长管理 */
.shop-manage-btn {
  float:right; border:none; background:#fff0f4; color:#e75f80; font-size:11.5px; font-weight:800;
  border-radius:10px; padding:5px 10px; cursor:pointer; font-family:inherit; box-shadow:inset 0 0 0 1.5px #ffd9e2;
}
.shop-admin-list { max-height:170px; overflow-y:auto; margin:4px 0 12px; }
.shop-admin-row {
  display:flex; align-items:center; gap:8px; padding:8px 10px;
  background:#fff6f8; border-radius:12px; margin-bottom:6px;
}
.shop-admin-row .sar-icon { font-size:20px; }
.shop-admin-row .sar-name { flex:1; font-size:13px; font-weight:800; color:#6e5a63; }
.shop-admin-row .sar-info { font-size:11px; color:#b9a6ae; }
.sar-btn {
  border:none; background:#fff; border-radius:10px; padding:5px 8px; cursor:pointer; font-size:14px;
}
.shop-admin-form-title {
  font-size:13px; font-weight:800; color:#8d7a83; margin-bottom:8px; padding-top:6px;
  border-top:1px dashed #ffd9e2;
}
.limit-row { display:flex; gap:8px; }
.limit-row select {
  flex:1; border:2px solid #ffe3ea; border-radius:14px; padding:10px; font-size:14px;
  font-family:inherit; outline:none; background:#fff; color:#6e5a63; -webkit-appearance:none; appearance:none;
}
.limit-row input {
  width:90px; border:2px solid #ffe3ea; border-radius:14px; padding:10px; font-size:15px;
  text-align:center; outline:none;
}

/* ============ 月度成长回顾 ============ */
.month-nav { display:flex; align-items:center; justify-content:center; gap:18px; margin:14px 16px 4px; }
.month-nav button {
  border:none; background:#fff; border-radius:12px; width:38px; height:38px; font-size:15px;
  color:#e75f80; box-shadow:0 2px 8px rgba(0,0,0,.06); cursor:pointer;
}
.month-nav .mn-label { font-size:17px; font-weight:900; color:#6e5a63; }
.growth-stats { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin:12px 14px; }
.gs-chip {
  background:#fff; border-radius:14px; padding:12px 4px; text-align:center;
  box-shadow:0 2px 8px rgba(0,0,0,.05);
}
.gs-chip b { display:block; font-size:19px; color:#e75f80; }
.gs-chip span { font-size:10.5px; color:#b9a6ae; }

/* 月度打卡日历热力图（月度总结用，区别于日明细） */
.gc-weekhdr { display:grid; grid-template-columns:repeat(7,1fr); gap:5px; margin:4px 0 6px; }
.gc-weekhdr span { text-align:center; font-size:10px; color:#c2aeb6; font-weight:700; }
.growth-cal { display:grid; grid-template-columns:repeat(7,1fr); gap:5px; }
.gc-cell {
  aspect-ratio:1/1; border-radius:9px; display:flex; align-items:center; justify-content:center;
  font-size:11px; font-weight:700; color:#fff; background:#efe7eb; color:#c2aeb6;
}
.gc-cell:not(.empty) { cursor:pointer; transition:transform .08s; }
.gc-cell:not(.empty):active { transform:scale(.92); }
.gc-cell.empty { background:transparent; }
.gc-cell.lvl1 { background:#ffc2d4; color:#a23a59; }   /* 已打卡 */
.gc-cell.lvl2 { background:#FF85A2; color:#fff; }      /* 全勤 */
.gc-legend { display:flex; gap:14px; align-items:center; margin-top:10px; font-size:11px; color:#b9a6ae; }
.gc-legend .lc { width:12px; height:12px; border-radius:4px; display:inline-block; margin-right:4px; vertical-align:-1px; }
.gc-legend .lc.lvl1 { background:#ffc2d4; }
.gc-legend .lc.lvl2 { background:#FF85A2; }
.gc-legend .lc.empty { background:#efe7eb; }

.growth-day { background:#fff6f8; border-radius:14px; padding:10px 12px; margin-bottom:8px; }
.gd-head { display:flex; justify-content:space-between; align-items:center; }
.gd-date { font-size:13px; font-weight:800; color:#6e5a63; }
.gd-count { font-size:11.5px; color:#e75f80; font-weight:700; }
.gd-icons { font-size:18px; margin:6px 0 2px; letter-spacing:2px; }
.gd-notes { font-size:12px; color:#8d7a83; line-height:1.9; }
.gp-group-title { font-size:12.5px; font-weight:800; color:#8d7a83; margin:10px 0 6px; }
.gp-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.gp-item { position:relative; border-radius:12px; overflow:hidden; aspect-ratio:1; background:#fff0f4; }
.gp-item img { width:100%; height:100%; object-fit:cover; display:block; cursor:pointer; }
.gp-item .gp-tag {
  position:absolute; left:0; right:0; bottom:0; background:rgba(0,0,0,.42);
  color:#fff; font-size:10px; padding:3px 6px; white-space:nowrap; overflow:hidden;
}
.gp-download-all {
  width:100%; border:none; border-radius:14px; padding:11px; margin-top:10px;
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; font-weight:800;
  font-size:13.5px; cursor:pointer; font-family:inherit;
}
.photo-viewer-box { background:#fff; border-radius:20px; padding:14px; max-width:92vw; text-align:center; }
.photo-viewer-box img { width:100%; border-radius:14px; display:block; }
.pv-caption { font-size:13px; font-weight:800; color:#6e5a63; margin:10px 0 12px; }
.pv-tip { font-size:11px; color:#b9a6ae; margin-top:8px; }

/* 拍照上传 */
.photo-upload-box { text-align:center; }
.photo-preview {
  width:100%; max-width:280px; aspect-ratio:4/3; border-radius:16px; object-fit:cover;
  margin:10px auto; display:none; box-shadow:0 4px 14px rgba(0,0,0,.1);
}
.photo-upload-btn {
  display:inline-block; border:none; border-radius:16px; padding:12px 28px;
  background:#fff0f4; color:#e75f80; font-size:14px; font-weight:800; cursor:pointer;
  font-family:inherit; box-shadow:inset 0 0 0 2px #ffd9e2;
}

/* 输入类 */
.text-input-area { width:100%; border:2px solid #ffe3ea; border-radius:14px; padding:12px; font-size:15px; resize:none; outline:none; font-family:inherit; }
.text-input-area:focus { border-color:#FF85A2; }
.quick-chips { display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; }
.quick-chip {
  border:none; background:#fff6f8; border-radius:14px; padding:8px 14px; font-size:13px;
  font-weight:700; color:#8d7a83; cursor:pointer; font-family:inherit;
}
.voice-btn {
  width:100%; border:none; border-radius:14px; padding:12px; margin-top:10px;
  background:linear-gradient(135deg,#4ECDC4,#26a69a); color:#fff; font-size:14px; font-weight:800;
  cursor:pointer; font-family:inherit; transition:background .2s;
}
/* 正在录音：变红 + 呼吸光晕，让孩子一眼看出在录、并且知道点一下能停 */
.voice-btn.recording {
  background:linear-gradient(135deg,#FF6B6B,#E0453F);
  animation:recPulse 1.2s ease-in-out infinite;
}
@keyframes recPulse {
  0%,100% { box-shadow:0 0 0 0 rgba(255,107,107,.5); }
  50%     { box-shadow:0 0 0 13px rgba(255,107,107,0); }
}
/* 提示框正文：保留换行、左对齐 */
.modal-msg.notice-msg, #confirmMsg.notice-msg {
  white-space:pre-line; text-align:left; line-height:1.95; font-size:14px;
}
.number-input-row { display:flex; gap:8px; margin-top:12px; }
.number-input-row input {
  flex:1; border:2px solid #ffe3ea; border-radius:14px; padding:12px; font-size:20px;
  text-align:center; outline:none;
}
.number-input-row input:focus { border-color:#FF85A2; }

/* ============ 底部导航 ============ */
.bottom-nav {
  position:fixed; bottom:0; left:50%; transform:translateX(-50%); width:100%; max-width:430px;
  display:flex; background:#fff; padding:8px 0 calc(8px + env(safe-area-inset-bottom));
  box-shadow:0 -3px 20px rgba(255,133,162,.12); z-index:100;
}
.nav-item { flex:1; position:relative; text-align:center; cursor:pointer; padding:4px 0; }
.nav-icon { font-size:24px; display:block; }
.nav-label { font-size:11px; color:#b9a6ae; margin-top:2px; font-weight:700; }
.nav-item.active .nav-label { color:#FF85A2; font-weight:800; }
.nav-badge {
  position:absolute; top:0; left:50%; margin-left:6px; min-width:18px; height:18px; line-height:18px;
  background:#ff5c5c; color:#fff; font-size:10px; border-radius:9px; padding:0 4px;
  border:2px solid #fff; text-align:center; font-weight:800;
}

/* ============ 弹窗 ============ */
.modal-overlay {
  position:fixed; inset:0; background:rgba(91,74,84,.5); z-index:300;
  display:flex; align-items:center; justify-content:center; padding:20px;
}
/* 顶层弹窗（叠在其它弹窗之上的确认/奖励等），z-index 必须比普通弹窗高 */
.modal-overlay.top {
  z-index:400; background:rgba(91,74,84,.62);
  backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px);
}
/* 同为 .top 时由 DOM 顺序决定层叠，很容易互相遮挡。
   这里按「谁更重要」排死顺序：确认 > 密码 > 朱迪提示。
   运行时 showConfirm/openPinModal 还会 bringToFront 再置顶一次，双保险。 */
#judyModal    { z-index:400; }
#pinModal     { z-index:500; }
#confirmModal { z-index:600; }
#evidenceModal{ z-index:450; }
.modal-overlay.top .modal-content { box-shadow:0 12px 40px rgba(0,0,0,.28); }
.modal-content {
  background:#fff; border-radius:24px; padding:24px 20px; width:100%; max-width:360px;
  animation:modalIn .3s ease; max-height:86vh; overflow-y:auto;
}
.modal-content.small { max-width:320px; }
@keyframes modalIn { from{transform:scale(.85);opacity:0;} to{transform:scale(1);opacity:1;} }
.modal-title { font-size:18px; font-weight:800; text-align:center; margin-bottom:14px; }
.modal-msg { text-align:center; font-size:14px; color:#8d7a83; line-height:1.7; margin-bottom:14px; }
.modal-btns { display:flex; gap:10px; margin-top:6px; }
.modal-btn {
  flex:1; border:none; border-radius:14px; padding:12px; font-size:15px; font-weight:800;
  cursor:pointer; font-family:inherit;
}
.modal-btn.cancel { background:#f7eef1; color:#8d7a83; }
.modal-btn.confirm { background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; }
body.skin-pikachu .modal-btn.confirm { background:linear-gradient(135deg,#FFE066,#FFB300); }

.form-item { margin-bottom:14px; }
.form-item label { display:block; font-size:13px; font-weight:800; margin-bottom:7px; color:#8d7a83; }
.form-item input {
  width:100%; border:2px solid #ffe3ea; border-radius:13px; padding:11px 12px; font-size:15px; outline:none;
}
.form-item input:focus { border-color:#FF85A2; }
.form-item.tip { font-size:12px; color:#b9a6ae; }
.emoji-grid { display:grid; grid-template-columns:repeat(8,1fr); gap:6px; }
.emoji-option {
  aspect-ratio:1; display:flex; align-items:center; justify-content:center; font-size:22px;
  background:#faf3f5; border-radius:10px; cursor:pointer; border:2.5px solid transparent;
}
.emoji-option.selected { border-color:#FF85A2; background:#fff0f4; }
.save-btn {
  width:100%; border:none; border-radius:14px; padding:12px; font-size:15px; font-weight:800;
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; cursor:pointer; font-family:inherit;
}
.danger-btn {
  width:100%; border:none; border-radius:14px; padding:12px; font-size:15px; font-weight:800;
  background:#ffe8e8; color:#e74c3c; cursor:pointer; font-family:inherit;
}

/* 朱迪消息 */
.judy-content { text-align:center; }
.judy-avatar { animation:bounce 1.6s infinite; width:100px; height:100px; margin:8px auto 0; border-radius:50%; overflow:hidden; background:#ffe9f0; }
.judy-bubble {
  background:#fff6f8; border-radius:18px; padding:16px; margin:14px 0;
  font-size:14.5px; line-height:1.8; color:#5b4a54; text-align:left; position:relative;
}
.judy-bubble::before {
  content:'🐰'; position:absolute; top:-12px; left:20px; font-size:20px;
}

/* ============ Toast & 撒花 ============ */
.toast {
  position:fixed; top:64px; left:50%; transform:translateX(-50%) translateY(-140px);
  background:rgba(91,74,84,.92); color:#fff; padding:12px 22px; border-radius:24px;
  font-size:14px; font-weight:700; z-index:1000; transition:transform .3s ease; white-space:nowrap;
  max-width:92%;
}
.toast.show { transform:translateX(-50%) translateY(0); }
.toast.success { background:rgba(46,204,155,.94); }
.toast.error { background:rgba(231,76,60,.94); }
.toast.pika { background:rgba(245,163,0,.95); }

#confetti-container { position:fixed; inset:0; pointer-events:none; z-index:998; overflow:hidden; }
.confetti { position:absolute; width:10px; height:10px; animation:confettiFall 3s linear forwards; }
@keyframes confettiFall {
  0% { transform:translateY(-80px) rotate(0); opacity:1; }
  100% { transform:translateY(100vh) rotate(720deg); opacity:0; }
}

/* ============ 首页：待确认提示 + 快捷入口 ============ */
.pending-bar { padding:0 16px 10px; }
.pb-inner {
  display:flex; align-items:center; gap:8px; cursor:pointer;
  background:linear-gradient(135deg,#FFE9A8,#FFD166); border-radius:16px; padding:11px 14px;
  box-shadow:0 4px 14px rgba(245,166,35,.22);
}
.pb-icon { font-size:18px; }
.pb-text { flex:1; font-size:12.5px; font-weight:700; color:#8a5a12; }
.pb-text b { color:#e0700f; font-size:14px; }
.pb-go { font-size:12px; font-weight:800; color:#e0700f; }

.quick-row { display:flex; gap:10px; padding:0 16px 12px; }
.quick-btn {
  flex:1; position:relative; border:none; border-radius:16px; padding:12px 8px; cursor:pointer;
  font-family:inherit; font-size:13.5px; font-weight:800; color:#fff;
  background:linear-gradient(135deg,#B8A9E6,#9b86d8);
  box-shadow:0 4px 12px rgba(155,134,216,.28);
}
.quick-btn.gold { background:linear-gradient(135deg,#FFD86A,#E0A81E); box-shadow:0 4px 12px rgba(224,168,30,.3); }
.qb-badge {
  position:absolute; top:-6px; right:-4px; min-width:20px; height:20px; line-height:20px;
  background:#ff5c5c; color:#fff; font-size:11px; border-radius:10px; padding:0 5px;
  border:2px solid #fff; text-align:center;
}

/* 任务卡片：待确认 / 驳回 */
.task-card.waiting { border-color:#FFD166 !important; }
.tc-points.tc-pending { color:#e08b0f; font-weight:800; font-size:11.5px; }
.tc-points.tc-rej { color:#d05c5c; font-size:11.5px; }

.rules-list .rule-hl { background:#fff2d9; color:#8a5a12; font-weight:700; }
.rules-list .rule-warn { background:#ffe6e6; color:#b8453f; font-weight:700; }

/* ============ 家长密码弹窗 ============ */
.pin-content { max-width:330px; }
.pin-dots { display:flex; justify-content:center; gap:14px; margin:18px 0 14px; }
.pin-dot { width:16px; height:16px; border-radius:50%; background:#f0e4e8; border:2px solid #e2cdd5; }
.pin-dot.on { background:#FF85A2; border-color:#FF85A2; transform:scale(1.12); }
.pin-keypad { display:grid; grid-template-columns:repeat(3,1fr); gap:9px; margin-top:6px; }
.pin-keypad button {
  border:none; background:#fff6f8; color:#5b4a54; font-size:21px; font-weight:800;
  padding:14px 0; border-radius:14px; cursor:pointer; font-family:inherit;
}
.pin-keypad button:active { background:#ffe0e8; }
.pin-keypad button.fn { font-size:14px; background:#f3e9ee; }
.pin-q-row select, .pin-input {
  width:100%; padding:11px 12px; border-radius:12px; border:2px solid #f0dde3;
  background:#fff; font-size:13px; font-family:inherit; color:#5b4a54; margin-bottom:8px; outline:none;
}
.pin-input:focus { border-color:#FF85A2; }
.pin-rec-q { font-size:13px; font-weight:800; color:#5b4a54; margin-bottom:10px; text-align:center; }
.modal-btn.pin-forgot { background:#f3e9ee; color:#8d7a83; }

/* ============ 家长中心 ============ */
.pc-date {
  font-size:12.5px; font-weight:800; color:#8d7a83; margin:12px 0 8px;
  display:flex; justify-content:space-between; align-items:baseline;
}
.pc-date span { font-size:10.5px; color:#c0aeb6; font-weight:600; }
.pc-card {
  display:flex; gap:10px; align-items:center; background:#fff; border-radius:14px;
  padding:11px 12px; margin-bottom:9px; box-shadow:0 2px 8px rgba(200,160,180,.1);
}
.pc-ci { font-size:26px; width:36px; text-align:center; flex-shrink:0; }
.pc-cb { flex:1; min-width:0; }
.pc-cn { font-size:13.5px; font-weight:800; color:#5b4a54; }
.pc-ce { font-size:11.5px; color:#8d7a83; margin-top:3px; line-height:1.55; word-break:break-all; }
.pc-noev { color:#c9b6be; font-style:italic; }
.pc-img { width:56px; height:56px; object-fit:cover; border-radius:10px; margin-top:5px; cursor:pointer; border:2px solid #ffe0e8; }
.pc-ca { display:flex; flex-direction:column; gap:6px; flex-shrink:0; }
.pc-ok, .pc-no {
  border:none; border-radius:11px; padding:8px 12px; font-family:inherit;
  font-size:12.5px; font-weight:800; color:#fff; cursor:pointer; line-height:1.25;
}
.pc-ok { background:linear-gradient(135deg,#5BD6A0,#2ecc9b); }
.pc-ok small { display:block; font-size:10px; font-weight:700; opacity:.9; }
.pc-no { background:#f0e4e8; color:#9b8891; }
.pc-empty { text-align:center; color:#b9a6ae; font-size:13px; padding:16px 0 6px; }

/* 消费记录（统一汇总：积分 / 皮肤 / 现金） */
.consume-row {
  display:flex; gap:9px; align-items:center; background:#fff; border-radius:13px;
  padding:9px 11px; margin-bottom:8px; box-shadow:0 2px 8px rgba(200,160,180,.1);
}
.cr-date { font-size:11px; color:#a99aa1; width:76px; flex-shrink:0; line-height:1.3; }
.cr-icon { font-size:22px; width:30px; text-align:center; flex-shrink:0; }
.cr-main { flex:1; min-width:0; }
.cr-name { font-size:13.5px; font-weight:800; color:#5b4a54; }
.cr-note { font-size:11px; color:#9b8891; margin-top:2px; }
.cr-amt { font-size:13.5px; font-weight:800; color:#e0683f; flex-shrink:0; }
.cr-ch { font-size:11px; font-weight:800; padding:3px 8px; border-radius:8px; flex-shrink:0; }
.cr-ch-points { background:#eaf3ff; color:#3a78c2; }
.cr-ch-skin   { background:#fdeaf4; color:#d4609a; }
.cr-ch-cash   { background:#fff3d6; color:#c9921f; }
.cr-tag { font-size:10px; font-weight:800; padding:1px 6px; border-radius:6px; margin-left:4px; vertical-align:middle; }
.cr-half   { background:#ffe3ec; color:#e0683f; }
.cr-manual { background:#eef0f2; color:#7a8a99; }
.pc-all-btn {
  width:100%; border:none; border-radius:14px; padding:12px; margin-top:8px;
  background:linear-gradient(135deg,#5BD6A0,#2ecc9b); color:#fff;
  font-size:14px; font-weight:800; font-family:inherit; cursor:pointer;
}
.pc-links { display:grid; grid-template-columns:1fr 1fr; gap:9px; }
.pc-link {
  border:none; border-radius:14px; padding:13px 8px; cursor:pointer;
  font-family:inherit; font-size:13px; font-weight:800; color:#5b4a54;
  background:#fff6f8; box-shadow:0 2px 8px rgba(200,160,180,.12);
}
.pc-link:active { background:#ffe0e8; }
.pc-undo {
  border:none; border-radius:11px; padding:9px 10px; cursor:pointer;
  font-family:inherit; font-size:12.5px; font-weight:800; color:#e75f80;
  background:#fff0f4; border:1.5px solid #ffd9e2; white-space:nowrap;
}
.pc-undo:active { background:#ffd9e2; }
.pc-up {
  border:none; border-radius:11px; padding:9px 10px; cursor:pointer;
  font-family:inherit; font-size:12.5px; font-weight:800; color:#fff;
  background:linear-gradient(135deg,#F6B73C,#e09a1f); white-space:nowrap;
  box-shadow:0 2px 6px rgba(224,154,31,.35);
}
.pc-up:active { background:#e09a1f; }

/* 家长中心：大奖 / 设置 信息行 */
.pg-row {
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:7px 2px; font-size:13px; border-bottom:1px dashed #f1e2e8;
}
.pg-row:last-child { border-bottom:none; }
.pg-k { color:#8d7a83; font-weight:700; flex-shrink:0; }
.pg-v { color:#5b4a54; font-weight:800; text-align:right; }

/* 家长中心：手动调控积分 */
.adj-row { display:flex; gap:8px; align-items:center; }
.adj-row input {
  border:1.5px solid #ffd9e2; border-radius:12px; padding:11px 12px;
  font-size:14px; font-family:inherit; background:#fff; color:#5b4a54;
}
.adj-row input:focus { outline:none; border-color:#ff9cbb; box-shadow:0 0 0 3px #ffe6ee; }
.adj-actions { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-top:9px; }
.adj-add, .adj-sub {
  border:none; border-radius:14px; padding:13px; cursor:pointer;
  font-family:inherit; font-size:14px; font-weight:800; color:#fff;
}
.adj-add { background:linear-gradient(135deg,#5BD6A0,#2ecc9b); }
.adj-sub { background:linear-gradient(135deg,#ff9cbb,#ff6f91); }
.adj-add:active { background:#2ecc9b; }
.adj-sub:active { background:#ff6f91; }
.adj-log {
  margin-top:10px; padding:9px 11px; background:#fbf3f6; border-radius:12px;
  font-size:12px; color:#8d7a83; line-height:1.7;
}
.adj-li { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

.pg-claimed {
  margin-top:8px; font-size:12.5px; font-weight:800; color:#2ecc9b;
  background:#eafaf2; border-radius:10px; padding:7px 10px; text-align:center;
}
.prize-img.pc { width:30px; height:30px; object-fit:cover; border-radius:7px; vertical-align:middle; }
.prize-img { max-width:100%; }

/* ============ 换肤：购买态 ============ */
.skin-row { flex-wrap:wrap; }
.skin-card .sk-act {
  margin-top:8px; font-size:11.5px; font-weight:800; padding:7px 4px;
  border-radius:10px; background:#FF85A2; color:#fff;
}
.skin-card .sk-act.owned { background:#5BD6A0; }
.skin-card .sk-act.locked { background:#e6d6dc; color:#a2919a; }
.skin-card .sk-act.buy { background:linear-gradient(135deg,#FFD86A,#E0A81E); }
.skin-card .sk-act.buy.dim { background:#e6d6dc; color:#a2919a; }
.skin-card .sk-note { font-size:10px; color:#b9a6ae; margin-top:4px; }
.skin-card .sk-warn { font-size:9.5px; color:#d0802f; margin-top:5px; line-height:1.4; }
.skin-card .sk-grand { font-size:10px; color:#c9962c; font-weight:800; margin-top:5px; }
.skin-foot {
  flex-basis:100%; text-align:center; font-size:11px; color:#b9a6ae;
  margin-top:10px; line-height:1.65;
}
.skin-foot b { color:#e08b0f; }

/* ============ 终极大奖 ============ */
.grand-hero {
  margin:14px 16px; border-radius:20px; padding:20px 16px; text-align:center; color:#fff;
  background:linear-gradient(135deg,#FFD86A,#E8A317);
  box-shadow:0 6px 20px rgba(232,163,23,.3);
}
.gh-label { font-size:13px; font-weight:700; opacity:.95; }
.gh-value { font-size:42px; font-weight:900; line-height:1.15; margin:4px 0; }
.gh-value::after { content:' 分'; font-size:16px; font-weight:700; }
.gh-sub { font-size:11.5px; opacity:.95; }
.gh-sub b { font-size:13px; }

.grand-tip { font-size:12.5px; color:#8d7a83; line-height:1.6; margin-bottom:12px; }
.grand-tip b { color:#e08b0f; }
.grand-btns { display:flex; gap:8px; margin-bottom:9px; }
.gb {
  flex:1; border:none; border-radius:13px; padding:11px 4px; cursor:pointer;
  font-family:inherit; font-size:13px; font-weight:800; color:#fff;
}
.gb.dep { background:linear-gradient(135deg,#FFB6C1,#FF85A2); }
.gb.dep.all { background:linear-gradient(135deg,#FFD86A,#E0A81E); }
.gb.wd { background:#f0e4e8; color:#8d7a83; }
.gb.wd.all { background:#e8dbe1; }
.gb:disabled { opacity:.45; cursor:not-allowed; }
.grand-note { font-size:11.5px; color:#b9a6ae; text-align:center; margin-top:4px; }
.grand-note b { color:#e08b0f; }

.grand-lock { text-align:center; padding:44px 26px; }
.gl-icon { font-size:64px; }
.gl-title { font-size:18px; font-weight:900; color:#5b4a54; margin-top:10px; }
.gl-desc { font-size:13px; color:#8d7a83; line-height:1.85; margin-top:10px; }
.gl-desc b { color:#e08b0f; }
.gl-now { font-size:12px; color:#b9a6ae; margin-top:12px; }
.gl-now b { color:#e08b0f; }
.gl-btn {
  margin-top:18px; border:none; border-radius:16px; padding:13px 30px; cursor:pointer;
  font-family:inherit; font-size:14px; font-weight:800; color:#fff;
  background:linear-gradient(135deg,#FFD86A,#E0A81E);
  box-shadow:0 4px 14px rgba(224,168,30,.32);
}

.prize-box { text-align:center; padding:6px 0 4px; }
.prize-icon { font-size:56px; line-height:1.1; min-height:64px; display:flex; align-items:center; justify-content:center; }
.prize-icon.shown { animation:prizePop .6s ease; }
.prize-icon img.prize-img { width:120px; height:auto; max-height:160px; object-fit:contain; border-radius:12px; }
.prize-icon img.prize-img.small { width:48px; height:48px; object-fit:cover; border-radius:8px; }
@keyframes prizePop { 0%{transform:scale(.4) rotate(-12deg);} 60%{transform:scale(1.18) rotate(6deg);} 100%{transform:scale(1) rotate(0);} }
.prize-name { font-size:16px; font-weight:900; color:#5b4a54; margin-top:8px; }
.prize-sub { font-size:12px; color:#b9a6ae; margin-top:4px; }
.prize-bar { height:14px; background:#f5e7ec; border-radius:8px; overflow:hidden; margin:14px 0 7px; }
.prize-fill { height:100%; border-radius:8px; background:linear-gradient(90deg,#FFD86A,#FF85A2); transition:width .5s ease; }
.prize-num { font-size:12.5px; font-weight:800; color:#8d7a83; }
.prize-btn {
  margin-top:14px; border:none; border-radius:16px; padding:13px 34px; cursor:pointer;
  font-family:inherit; font-size:15px; font-weight:900; color:#fff;
  background:linear-gradient(135deg,#FF85A2,#e0486f);
  box-shadow:0 5px 16px rgba(255,133,162,.4);
  animation:prizePulse 1.6s ease-in-out infinite;
}
@keyframes prizePulse { 0%,100%{transform:scale(1);} 50%{transform:scale(1.04);} }
.prize-claimed {
  margin-top:12px; font-size:13px; font-weight:800; color:#2ecc9b;
  background:#e8fbf3; border-radius:12px; padding:10px;
}
.grand-deadline {
  margin-top:12px; text-align:center; font-size:12px; color:#b9a6ae;
  background:#fff6f8; border-radius:12px; padding:9px;
}
.grand-deadline b { color:#d05c5c; }
.grand-history { display:grid; gap:6px; }
.gh-row {
  display:flex; justify-content:space-between; align-items:center;
  font-size:12px; background:#fff6f8; border-radius:10px; padding:8px 11px; color:#8d7a83;
}
.ghr-d { font-size:11px; color:#b9a6ae; }
.ghr-t { flex:1; margin-left:8px; }
.ghr-a { font-weight:800; }
.ghr-a.in, .ghr-a.interest { color:#2ecc9b; }
.ghr-a.out, .ghr-a.claim { color:#d05c5c; }
.gh-empty { text-align:center; color:#c9b6be; font-size:12.5px; padding:12px 0; }

/* 底部导航 6 项 */
.nav-icon { font-size:21px; }
.nav-label { font-size:10px; }

/* 大屏 */
@media (min-width:500px) { body { background:#ffd9e2; } }

/* ================= 家长密码：三步进度 ================= */
.pin-steps { display:flex; align-items:center; justify-content:center; gap:6px; margin:14px 0 4px; }
.pin-steps i { width:22px; height:2px; background:#f0dfe6; border-radius:2px; }
.pin-step {
  width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:800; background:#f3e9ee; color:#b9a6ae; transition:all .2s;
}
.pin-step.on   { background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff; box-shadow:0 3px 10px rgba(255,133,162,.4); }
.pin-step.done { background:#2ecc9b; color:#fff; }
.pin-tip { font-size:11px; color:#b9a6ae; margin-top:7px; line-height:1.5; }

/* ================= 打卡证据面板 ================= */
.ev-content { max-width:400px; }
.ev-list { display:flex; flex-wrap:wrap; gap:8px; margin:12px 0 4px; }
.ev-list:empty { display:none; }
.ev-empty {
  text-align:center; color:#c4aeb6; font-size:12.5px; padding:14px 8px;
  background:#fff6f8; border-radius:12px; margin:12px 0 4px;
}
.ev-item { position:relative; width:104px; height:104px; border-radius:12px; overflow:hidden; background:#f7eef1; }
.ev-item img { width:100%; height:100%; object-fit:cover; }
.ev-item video { width:100%; height:100%; object-fit:cover; background:#000; }
.ev-item.audio { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px; padding:6px; }
.ev-audio-ico { font-size:24px; }
.ev-item.audio audio { width:96px; height:30px; }
.ev-del {
  position:absolute; top:4px; right:4px; width:22px; height:22px; border:none; border-radius:50%;
  background:rgba(0,0,0,.55); color:#fff; font-size:12px; cursor:pointer; line-height:1; padding:0;
}
/* 证据卡片上的「▶ 回放」角标：点了用自绘居中回放窗，不走 WebView 迷你原生控件 */
.ev-play-tag {
  font-size:11px; color:#8d7a83; background:rgba(255,255,255,.85);
  border-radius:8px; padding:2px 8px; pointer-events:none;
}
.mv-close {
  align-self:flex-end; border:none; border-radius:16px; padding:6px 14px; margin-bottom:10px;
  background:rgba(255,255,255,.16); color:#fff; font-size:13px; font-weight:700; cursor:pointer;
}
.ev-busy {
  text-align:center; font-size:12.5px; color:#e75f80; font-weight:700;
  padding:8px; background:#fff6f8; border-radius:10px; margin:8px 0;
}
.ev-actions { display:grid; grid-template-columns:repeat(2,1fr); gap:9px; margin-top:14px; }
.ev-act {
  display:flex; flex-direction:column; align-items:center; gap:2px; padding:12px 6px;
  border:none; border-radius:14px; background:#fff6f8; cursor:pointer;
  font-family:inherit; transition:transform .12s, box-shadow .12s;
}
.ev-act:active { transform:scale(.96); }
.ev-act .eva-ico { font-size:24px; }
.ev-act b { font-size:13.5px; color:#5d4a52; }
.ev-act i { font-size:10.5px; color:#b9a6ae; font-style:normal; }
.ev-act.hot {
  background:linear-gradient(135deg,#FFE0E8,#FFC6D4);
  box-shadow:0 4px 14px rgba(255,133,162,.28);
}
.ev-act.hot b { color:#d94d6e; }
.ev-act.hot i { color:#c98b9c; }
.ev-note {
  grid-column:1 / -1; font-size:11.5px; color:#a8919c; line-height:1.6;
  background:#f7f0f3; border-radius:10px; padding:9px 11px;
}
.ev-recording { text-align:center; margin-top:12px; }
.ev-preview {
  width:100%; max-height:220px; border-radius:12px; background:#000; object-fit:cover;
}
.ev-rec-time { font-size:22px; font-weight:800; color:#e75f80; margin-top:10px; font-variant-numeric:tabular-nums; }
.ev-rec-bar { height:6px; background:#f0dfe6; border-radius:6px; overflow:hidden; margin:8px 0; }
.ev-rec-fill { height:100%; width:0; background:linear-gradient(90deg,#FFB6C1,#FF85A2); transition:width .3s linear; }
.ev-rec-hint { font-size:12px; color:#8d7a83; margin-bottom:10px; }

/* 录完后的「回放确认」界面 */
.ev-review { text-align:center; margin-top:14px; }
.ev-review-tip { font-size:14px; font-weight:800; color:#5d4a52; margin-bottom:10px; }
.ev-review-media { width:100%; max-width:300px; border-radius:12px; background:#f3e9ee; }
.ev-review-btns { display:flex; gap:10px; margin-top:12px; }
.ev-review-btns .modal-btn { font-size:15px; }
.ev-stop {
  width:100%; padding:12px; border:none; border-radius:14px; cursor:pointer;
  background:linear-gradient(135deg,#FF85A2,#e75f80); color:#fff; font-size:15px; font-weight:800;
  font-family:inherit; box-shadow:0 4px 14px rgba(231,95,128,.35);
}
.modal-btn:disabled { opacity:.45; cursor:not-allowed; }

/* 全屏查看证据 */
.media-viewer {
  position:fixed; inset:0; z-index:700; background:rgba(0,0,0,.9);
  display:none; align-items:center; justify-content:center; padding:16px;
  box-sizing:border-box;
}
.media-card { max-width:92vw; max-height:92vh; display:flex; flex-direction:column; align-items:center; justify-content:center; }
.media-card img { max-width:92vw; max-height:80vh; border-radius:10px; }
.media-card video { max-width:92vw; max-height:80vh; border-radius:10px; background:#000; }
.media-card audio { width:86vw; max-width:420px; }

/* 家长中心里的音视频证据 */
.pc-media { display:flex; flex-wrap:wrap; gap:6px; margin-top:6px; }
.pc-media video { width:118px; height:110px; border-radius:10px; background:#f3e9ee; cursor:pointer; }
.pc-media audio { width:170px; height:40px; border-radius:8px; background:#f3e9ee; cursor:pointer; }
.pc-media img { width:52px; height:52px; object-fit:cover; border-radius:8px; cursor:pointer; }

/* 家长中心：锁定按钮 */
.pc-link.lock { background:#f3e9ee; color:#8d7a83; }

/* 微信内置浏览器提示条 */
.wechat-tip {
  background:linear-gradient(135deg,#FFF3CD,#FFE9A8); color:#8a6d1f;
  border-radius:14px; padding:11px 14px; margin-bottom:12px;
  font-size:12.5px; line-height:1.7; text-align:center;
}
.wechat-tip b { color:#6b5312; }

/* 做题结果里的达标/待确认说明 */
.math-result-note {
  margin-top:8px; font-size:12.5px; color:#8d7a83;
  background:#fff6f8; border-radius:10px; padding:8px 10px;
}

/* ================= 户外运动：选中态 / 自定义 / 行内输入 ================= */
.quick-chip.sel { background:#FF85A2; color:#fff; }
.quick-chip.add-chip { background:#eef7f1; color:#3f9b6d; }
.quick-chip.custom { position:relative; padding-right:26px; background:#fff0f4; }
.chip-x {
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
  width:16px; height:16px; line-height:16px; text-align:center; border-radius:50%;
  background:#f0dde3; color:#8d7a83; font-size:10px; font-weight:800;
}
.outdoor-input-row { display:flex; gap:8px; margin-top:10px; }
.outdoor-input-row input {
  flex:1; border:2px solid #ffe3ea; border-radius:13px; padding:10px 12px;
  font-size:15px; outline:none; font-family:inherit;
}
.outdoor-input-row input:focus { border-color:#FF85A2; }

/* ================= 任务内「证据盒子」 ================= */
.ev-box {
  margin-top:14px; padding:12px; background:#fdf7f9;
  border:1.5px dashed #f3d7e0; border-radius:14px; text-align:center;
}
.ev-box-warn {
  font-size:12px; line-height:1.7; color:#b5485f; background:#fff3f6;
  border:1px solid #f6c9d4; border-radius:10px; padding:8px 10px; margin-bottom:10px; text-align:left;
}
.ev-box-warn b { color:#d94d6e; }
.ev-box-title { font-size:12.5px; color:#8d7a83; line-height:1.7; margin-bottom:8px; }
.ev-thumbs { display:flex; flex-wrap:wrap; gap:6px; justify-content:center; margin-bottom:8px; }
.ev-thumb {
  width:56px; height:56px; object-fit:cover; border-radius:10px;
  background:#f3e9ee; cursor:pointer; border:2px solid #fff;
}
.ev-thumb.audio {
  display:flex; align-items:center; justify-content:center;
  font-size:22px; color:#8d7a83;
}
.ev-thumb.add {
  display:flex; align-items:center; justify-content:center;
  font-size:22px; color:#b9a6ae; border:2px dashed #e5cfd8; background:transparent;
}
.ev-box-btn {
  width:100%; border:none; border-radius:12px; padding:10px; font-size:13.5px; font-weight:800;
  background:#fff; color:#e75f80; border:1.5px solid #ffd9e2; cursor:pointer; font-family:inherit;
}
.ev-box-btn:active { background:#fff0f4; }

/* ================= 设置页开关行 ================= */
.switch-row {
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:4px 0 10px; font-size:14px; font-weight:700; color:#8d7a83; cursor:pointer;
}
.switch-row input[type=checkbox] { width:22px; height:22px; accent-color:#FF85A2; }

/* 皮肤卡片：低等级皮肤「仅换外观」提示（特权不叠加） */
.sk-note.cosplay {
  margin-top:6px; font-size:11px; line-height:1.6; color:#8d7a83;
  background:#eef7f1; border-radius:8px; padding:5px 7px;
}

/* 终极大奖：皮肤降级后奖池冻结提示 */
.gl-frozen {
  margin-top:12px; font-size:12.5px; line-height:1.8; color:#8a6d1f;
  background:linear-gradient(135deg,#FFF3CD,#FFE9A8); border-radius:12px; padding:10px 12px;
}

/* ============ 来吉卡抽奖 ============ */
.lucky-card-box { text-align:center; }
.lucky-sub { font-size:12.5px; color:#8d7a83; margin-bottom:10px; }
.lucky-sub b { color:#e75f80; font-size:15px; }

/* 来吉卡获奖记录（界面内统计，不进成长回顾） */
.lc-row { display:flex; align-items:center; gap:8px; padding:8px 4px; border-bottom:1px dashed #f1e2e8; }
.lc-row:last-child { border-bottom:none; }
.lc-ic { font-size:17px; flex-shrink:0; }
.lc-lb { flex:1; font-size:13px; font-weight:700; color:#5b4a54; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.lc-am { font-size:12.5px; font-weight:800; color:#2ecc9b; flex-shrink:0; }
.lc-pr { font-size:12px; font-weight:800; color:#e75f80; flex-shrink:0; }
.lc-dt { font-size:11px; color:#b9a6ae; flex-shrink:0; min-width:74px; text-align:right; }
.wheel-wrap { position:relative; width:300px; max-width:84vw; margin:6px auto 14px; }
#luckyWheel { width:300px; height:300px; max-width:84vw; max-height:84vw; display:block; margin:0 auto;
  border-radius:50%; box-shadow:0 6px 20px rgba(255,133,162,.25); background:#fff; }
.wheel-pointer { position:absolute; top:-6px; left:50%; transform:translateX(-50%);
  font-size:28px; color:#FF85A2; text-shadow:0 1px 2px rgba(0,0,0,.15); z-index:2; }
.lucky-spin-btn { width:80%; border:none; border-radius:16px; padding:14px; font-size:16px; font-weight:800;
  color:#fff; cursor:pointer; font-family:inherit; margin:4px auto;
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); box-shadow:0 6px 16px rgba(255,133,162,.35); }
.lucky-spin-btn:disabled { background:#e9dde2; color:#b0a0a8; box-shadow:none; cursor:not-allowed; }
.lucky-exchange-btn { width:80%; border:2px dashed #ffb3c4; border-radius:14px; padding:10px; font-size:13px;
  font-weight:700; color:#e75f80; background:#fff7f9; cursor:pointer; font-family:inherit; margin:4px auto; }
.lucky-exchange-btn span { font-weight:800; }

/* ============ 成长回顾：月/日切换 ============ */
.growth-tabs { display:flex; gap:8px; margin:12px 16px 0; }
.gt-tab { flex:1; border:2px solid #ffe3ea; background:#fff; border-radius:14px; padding:9px; font-size:13px;
  font-weight:800; color:#b9a6ae; cursor:pointer; font-family:inherit; }
.gt-tab.active { border-color:#FF85A2; color:#FF85A2; background:#fff0f4; }
.day-nav { display:flex; gap:8px; align-items:center; margin:10px 16px 0; }
.day-nav input[type=date] { flex:1; border:2px solid #ffe3ea; border-radius:12px; padding:8px 10px; font-size:14px;
  font-family:inherit; color:#5a4a52; outline:none; }
.day-nav button { border:2px solid #FF85A2; background:#fff; color:#FF85A2; border-radius:12px; padding:8px 14px;
  font-weight:800; cursor:pointer; font-family:inherit; }

/* ============ 家长中心：来吉卡设置 ============ */
.lucky-cost-row { font-size:13px; color:#5a4a52; margin-bottom:10px; }
.lucky-cost-row input { border:2px solid #ffe3ea; border-radius:10px; padding:5px 8px; font-size:14px; text-align:center; }
.lucky-tip { font-size:11.5px; color:#8d7a83; background:#fbf3f6; border-radius:10px; padding:8px 10px; line-height:1.6; margin-bottom:9px; }
.lucky-tip b { color:#e75f80; }
/* 课文册次切换：六个按钮（一上/一下/二上/二下/三上/三下），必须能换行，
   否则手机上挤成一排直接溢出屏幕。以前这两个类根本没写样式，按钮是裸的。 */
.poem-grade-row { display:flex; align-items:center; flex-wrap:wrap; gap:6px; margin:8px 0 10px; }
.poem-grade-row .poem-grade-btn {
  border:1px solid #e6d7de; background:#fff; color:#7a6672;
  border-radius:999px; padding:5px 11px; font-size:12px; line-height:1.4; cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}
.poem-grade-row .poem-grade-btn.on {
  background:#ff7aa2; border-color:#ff7aa2; color:#fff; font-weight:700;
}
.lucky-head { display:flex; align-items:center; gap:6px; font-size:10.5px; font-weight:800; color:#b9a6ae;
  padding:0 8px 4px; text-align:center; }
.lucky-head .lh-en { width:18px; flex-shrink:0; }
.lucky-head .lh-ic { width:34px; flex-shrink:0; }
.lucky-head .lh-lb { flex:1; min-width:64px; }
.lucky-head .lh-ty { width:46px; flex-shrink:0; }
.lucky-head .lh-am { width:50px; flex-shrink:0; }
.lucky-head .lh-pr { width:50px; flex-shrink:0; }
.lucky-head .lh-pc { width:50px; flex-shrink:0; }
.lucky-items { display:flex; flex-direction:column; gap:8px; }
.lucky-item { display:flex; align-items:center; gap:6px; background:#fff7f9; border-radius:12px; padding:7px 8px; flex-wrap:wrap; }
.lucky-item .li-label { border:1px solid #ffd9e2; border-radius:8px; padding:5px 8px; font-size:13px; font-family:inherit; }
.lucky-item .li-icon, .lucky-item .li-type, .lucky-item .li-amount, .lucky-item .li-prob {
  border:1px solid #ffd9e2; border-radius:8px; padding:5px 6px; font-size:13px; font-family:inherit; }
.lucky-item .li-amount.li-am-off, .lucky-item .li-amount:disabled {
  background:#f1eef0; color:#c2b3ba; cursor:not-allowed; border-color:#ece4e8; }
.lucky-item .li-pct { width:46px; flex-shrink:0; text-align:center; font-weight:800; font-size:12.5px; color:#e75f80; }
.lucky-foot { margin-top:10px; }
.lucky-hint { font-size:11px; color:#b9a6ae; margin-top:6px; line-height:1.6; }

/* 家长中心 · 必背课文编辑 */
.poem-edit-row {
  background:#fdf7f9; border:1.5px solid #f3d7e0; border-radius:12px;
  padding:9px 10px; margin-bottom:9px;
}
.per-head { display:flex; gap:6px; align-items:center; }
.per-title, .per-author {
  border:1.5px solid #f3d7e0; border-radius:9px; padding:6px 8px;
  font-size:13px; font-family:inherit; color:#5b4a54; background:#fff; min-width:0;
}
.per-title  { flex:1.2; font-weight:800; }
.per-author { flex:1; font-size:12px; color:#8d7a83; }
.per-text {
  width:100%; margin-top:7px; box-sizing:border-box; resize:vertical;
  border:1.5px solid #f3d7e0; border-radius:9px; padding:7px 8px;
  font-size:13px; line-height:1.7; font-family:inherit; color:#5b4a54; background:#fff;
}
.per-title:focus, .per-author:focus, .per-text:focus { outline:none; border-color:#ffb3c6; }

/* 跳绳节拍器 · 三档节奏按钮 */
.metro-bpm-row {
  display:flex; gap:8px; justify-content:center; margin:0 auto 10px;
}
.metro-bpm {
  border:1.5px solid #ffd1de; border-radius:11px; padding:8px 14px;
  font-family:inherit; font-size:13px; font-weight:800; color:#8d7a83;
  background:#fff; cursor:pointer; transition:all .15s;
}
.metro-bpm:active { transform:scale(0.96); }
.metro-bpm.on {
  background:linear-gradient(135deg,#FFB6C1,#FF85A2); color:#fff;
  border-color:#ff85a2; box-shadow:0 3px 10px rgba(255,133,162,.3);
}

/* ================= 活动系统 ================= */
/* 首页活动横幅 */
.ev-banner {
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  margin:0 14px 12px; padding:12px 14px; cursor:pointer;
  background:linear-gradient(135deg,#fff0f4,#ffe9f0);
  border:1.5px solid #ffc9d8; border-radius:15px;
  box-shadow:0 4px 14px rgba(255,133,162,.16);
  animation:evPulse 2.6s ease-in-out infinite;
}
.ev-banner:active { transform:scale(.985); }
@keyframes evPulse {
  0%,100% { box-shadow:0 4px 14px rgba(255,133,162,.16); }
  50%     { box-shadow:0 6px 20px rgba(255,133,162,.32); }
}
.ev-banner-l { display:flex; align-items:center; gap:10px; min-width:0; }
.ev-banner-ic { font-size:26px; flex-shrink:0; }
.ev-banner-tx { min-width:0; }
.ev-banner-t  { font-size:14px; font-weight:800; color:#d6416c; }
.ev-banner-s  { font-size:11.5px; color:#a8878f; margin-top:2px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ev-banner-go { font-size:12.5px; font-weight:800; color:#FF85A2; flex-shrink:0; }

/* 活动页卡片 */
.ev-card {
  margin:0 14px 12px; padding:14px; background:#fff;
  border:1.5px solid #ffe0e8; border-radius:16px;
  box-shadow:0 3px 12px rgba(255,133,162,.10);
}
.ev-card.met { border-color:#ffb3c6; background:linear-gradient(160deg,#fffafb,#fff); }
/* 还没开始的活动：提前下发的活动（如"9/2满勤→9/3起半价"）在今天也要看得见 */
.ev-card.soon { border-style:dashed; border-color:#d9c7ee; background:#fbfaff; }
.ev-soon-tag {
  display:inline-block; font-size:10.5px; font-weight:800; color:#8b5cf6;
  background:#f1eaff; padding:1px 7px; border-radius:8px; vertical-align:middle;
}
.ev-soon-note {
  margin-top:9px; font-size:11.5px; color:#9b8aa8;
  background:#f7f4fb; padding:6px 9px; border-radius:9px;
}
.ev-head { display:flex; align-items:center; gap:11px; }
.ev-icon { font-size:30px; flex-shrink:0; }
.ev-tw   { min-width:0; flex:1; }
.ev-title{ font-size:15.5px; font-weight:800; color:#5b4a54; }
.ev-days { font-size:11.5px; color:#b9a6ae; margin-top:2px; }
.ev-desc { font-size:13px; color:#7d6a72; line-height:1.65; margin-top:9px; }
.ev-benefit {
  margin-top:10px; padding:9px 11px; border-radius:11px;
  background:linear-gradient(135deg,#fff2e8,#ffe9f0);
  font-size:13.5px; color:#d6416c;
}
.ev-cond {
  margin-top:9px; font-size:12.5px; color:#a8878f;
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
}
.ev-cond.ok { color:#2ecc9b; font-weight:700; }
.ev-left {
  background:#fff0f4; color:#d6416c; font-weight:800; font-size:11.5px;
  padding:2px 8px; border-radius:8px;
}
.ev-empty { text-align:center; padding:52px 20px; }
.ev-empty-icon { font-size:56px; }
.ev-empty-t { font-size:15px; font-weight:800; color:#8d7a83; margin-top:12px; }
.ev-empty-s { font-size:12.5px; color:#b9a6ae; margin-top:6px; }
.ev-badge.ev-badge { background:#ff85a2; }

/* 活动价 */
.sk-off {
  margin:6px 0 2px; font-size:12px; font-weight:800; color:#d6416c;
  background:#fff0f4; border-radius:9px; padding:4px 8px;
}
.sk-off s { color:#c4aeb6; font-weight:600; }
.shop-cost-old { color:#c4aeb6; font-weight:600; text-decoration:line-through; }
.shop-off {
  font-size:11px; font-weight:800; color:#d6416c;
  background:#fff0f4; border-radius:8px; padding:1px 6px; margin-top:3px; display:inline-block;
}

/* 家长中心 · 自动同步提示 */
.auto-sync-tip {
  margin:0 14px 10px; padding:8px 12px; border-radius:11px;
  background:#f3f7f4; border:1px solid #dcebe2;
  font-size:11.5px; color:#6b8a78; display:flex; align-items:center; gap:8px;
}
.pc-link.tiny {
  padding:3px 9px; font-size:11.5px; border-radius:8px; width:auto; margin-left:6px;
}
#syncDot {
  font-size:13px; color:#3aa76d; opacity:0; transition:opacity .4s;
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
}

/* ============ 自己完成刷牙洗脸（早/晚点亮） ============ */
.brush-row {
  display:flex; align-items:center; gap:10px; cursor:pointer;
  padding:12px; margin-bottom:10px; border-radius:14px;
  background:#fff; border:2px solid #ffe3ea;
  transition:border-color .18s, background .18s;
}
.brush-row:active { transform:scale(.99); }
.brush-row.on { border-color:#ff8fab; background:#fff5f8; }
.brush-ic { font-size:24px; width:30px; text-align:center; }
.brush-tx { flex:1; min-width:0; }
.brush-lb { font-size:14px; font-weight:800; color:#5d4a52; }
.brush-sb { font-size:11.5px; color:#a89aa1; margin-top:2px; }
.brush-ck { font-size:20px; width:26px; text-align:center; color:#ff8fab; }
.brush-tips {
  margin-top:4px; padding:9px 11px; border-radius:11px;
  background:#fff8fa; border:1px dashed #ffe0e7;
  font-size:12px; color:#8d7a83; line-height:1.9;
}
.brush-hist {
  font-size:12px; color:#b9a6ae; padding:6px 2px;
  border-bottom:1px dashed #ffe3ea;
}

/* ============ 家长中心 · 补录打卡（默认收起 + 二次确认） ============ */
.mk-head {
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  padding:11px 12px; border-radius:12px; background:#faf6f8;
  font-size:13px; font-weight:800; color:#5d4a52; cursor:pointer;
  -webkit-user-select:none; user-select:none;
}
.mk-head:active { background:#f4eef1; }
.mk-head.is-done { cursor:default; color:#a89aa1; }
/* 已确认打卡 · 按天折叠（每天一行，点开才展开明细） */
.cf-head { margin-bottom:8px; }
.cf-head.on { background:#fff0f4; color:#c6436c; }
.cf-head.on .mk-r { color:#d07e96; }
.cf-head .mk-t { font-size:13.5px; }
.cf-bar {
  display:flex; align-items:center; justify-content:space-between;
  gap:8px; margin:0 0 8px;
}
.cf-bar-btn {
  border:none; cursor:pointer; background:#f3ecf0; color:#8d7a83;
  font-size:11.5px; font-weight:800; padding:5px 11px; border-radius:9px;
}
.cf-bar-btn:active { background:#e8dee3; }
.cf-bar-tip { font-size:11px; color:#c0aeb6; }
.mk-head.is-done:active { background:#faf6f8; }
.mk-r { font-size:11.5px; font-weight:700; color:#a89aa1; display:flex; align-items:center; gap:5px; }
.mk-chev {
  font-style:normal; font-size:14px; color:#c4b4bb;
  display:inline-block; transition:transform .2s;
}
.mk-chev.up { transform:rotate(90deg); }
.mk-body { margin-top:9px; }
.mk-note {
  font-size:11.5px; line-height:1.75; color:#8d7a83;
  background:#fff8fa; border:1px dashed #ffe0e7;
  border-radius:10px; padding:8px 10px; margin-bottom:6px;
}
.mk-note b { color:#e75f80; }
.mk-item {
  display:flex; align-items:center; gap:8px;
  padding:8px 4px; border-bottom:1px dashed #f2e6ea;
}
.mk-item:last-child { border-bottom:none; }
.mk-ic { font-size:17px; width:22px; text-align:center; }
.mk-nm { flex:1; min-width:0; font-size:13px; font-weight:700; color:#5d4a52; }
.mk-btn {
  border:none; cursor:pointer; font-weight:800;
  padding:5px 11px; border-radius:9px; font-size:11.5px;
  background:#ffeaf0; color:#e75f80;
}
.mk-btn:active { background:#ffd9e2; }
.mk-empty { font-size:12px; color:#b9a6ae; padding:8px 2px; }
.mk-log {
  margin-top:10px; padding:8px 10px; border-radius:10px;
  background:#f7fbf8; border:1px solid #dcebe2;
}
.mk-log-t { font-size:11.5px; font-weight:800; color:#6b8a78; margin-bottom:3px; }
.mk-log-i {
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  font-size:12px; color:#5d4a52; padding:4px 0;
}
.mk-log-i b { color:#3aa76d; }
.mk-undo {
  border:1px solid #e6d3d9; background:#fff; cursor:pointer;
  padding:3px 9px; border-radius:8px; font-size:11.5px; color:#8d7a83;
}
.mk-undo:active { background:#f4eef1; }
