
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;
  background:#DDE4F0; color:#1B2440; overflow:hidden; -webkit-font-smoothing:antialiased;
  transition:background .4s;
}

/* ============================================================
   主题 A：迷你特工队 MINI FORCE  （机甲白 · 天空蓝 · 切角）
   —— 明快版：浅底深字，保留切角/能量条/HUD 仪表感
   ============================================================ */
body[data-theme="mini"]{
  --bg:#E9F2FF;
  --bg-grad:radial-gradient(120% 62% at 50% 0%, #FFFFFF 0%, #E6F1FF 44%, #DCEAFF 100%);
  --card:#FFFFFF;
  --card2:#F5FAFF;
  --ink:#122A56;
  --ink2:#5B77A9;
  --ink3:#93A9CD;
  --line:#CFE1F9;
  --line-soft:#E8F1FE;
  --accent:#1F6FEB;
  --accent2:#0EA5E9;
  --accent-soft:rgba(31,111,235,.1);
  --star:#EF9A19;
  --star-soft:rgba(239,154,25,.14);
  --ok:#12B981;
  --ok-soft:rgba(18,185,129,.14);
  --danger:#F04438;
  --r-lg:14px; --r-md:10px; --r-sm:8px;
  --shadow:0 10px 26px rgba(28,70,140,.13);
  --shadow-sm:0 3px 12px rgba(28,70,140,.1);
  --btnInk:#fff;
  --s-en:#2F7DF0; --s-en2:#1A5BCB; --s-en-bg:rgba(47,125,240,.12); --s-en-sh:rgba(47,125,240,.34);
  --s-cn:#F26A4B; --s-cn2:#D64B2B; --s-cn-bg:rgba(242,106,75,.12); --s-cn-sh:rgba(242,106,75,.34);
  --s-ma:#12B981; --s-ma2:#0A9268; --s-ma-bg:rgba(18,185,129,.12); --s-ma-sh:rgba(18,185,129,.34);
  --s-art:#A855F7; --s-art2:#8B33E0; --s-art-bg:rgba(168,85,247,.12); --s-art-sh:rgba(168,85,247,.32);
  --s-life:#0EA5E9; --s-life2:#0284C7; --s-life-bg:rgba(14,165,233,.12); --s-life-sh:rgba(14,165,233,.32);
  --s-other:#7C8CAE; --s-other2:#5B6B8E; --s-other-bg:rgba(124,140,174,.12); --s-other-sh:rgba(124,140,174,.3);
  --font-num:"SF Mono",Consolas,monospace;
}

/* ============================================================
   主题 B：卡比 KIRBY  （草莓奶油 · 圆滚滚 · 星星）
   ============================================================ */
body[data-theme="kirby"]{
  --bg:#FFF2F8;
  --bg-grad:radial-gradient(120% 65% at 50% 0%, #FFE1F0 0%, #FFF6FB 48%, #FFF2F8 100%);
  --card:#FFFFFF;
  --card2:#FFF9FC;
  --ink:#4A2C3D;
  --ink2:#A8879C;
  --ink3:#C9AFC0;
  --line:#FFDCEA;
  --line-soft:#FFEAF3;
  --accent:#FF5C9E;
  --accent2:#FF8FC0;
  --accent-soft:rgba(255,92,158,.1);
  --star:#FFC93C;
  --star-soft:rgba(255,201,60,.16);
  --ok:#4FD3A0;
  --ok-soft:rgba(79,211,160,.14);
  --danger:#FF6B8A;
  --r-lg:26px; --r-md:18px; --r-sm:14px;
  --shadow:0 12px 28px rgba(255,140,180,.18);
  --shadow-sm:0 4px 14px rgba(255,140,180,.14);
  --btnInk:#fff;
  --s-en:#6FB8FF; --s-en2:#3E92EA; --s-en-bg:rgba(111,184,255,.14); --s-en-sh:rgba(111,184,255,.4);
  --s-cn:#FF8FA3; --s-cn2:#F0617B; --s-cn-bg:rgba(255,143,163,.14); --s-cn-sh:rgba(255,143,163,.4);
  --s-ma:#6EDBA0; --s-ma2:#33B87A; --s-ma-bg:rgba(110,219,160,.14); --s-ma-sh:rgba(110,219,160,.4);
  --s-art:#C9A0FF; --s-art2:#9C63E8; --s-art-bg:rgba(201,160,255,.14); --s-art-sh:rgba(201,160,255,.4);
  --s-life:#7FD3FF; --s-life2:#3FAEE0; --s-life-bg:rgba(127,211,255,.14); --s-life-sh:rgba(127,211,255,.4);
  --s-other:#B9A3B3; --s-other2:#8A7183; --s-other-bg:rgba(185,163,179,.14); --s-other-sh:rgba(185,163,179,.35);
  --font-num:"PingFang SC",-apple-system,sans-serif;
}

/* ================= 手机外壳 ================= */
.phone{
  max-width:430px; margin:0 auto; height:100dvh; display:flex; flex-direction:column;
  background:var(--bg); background-image:var(--bg-grad);
  position:relative; overflow:hidden; box-shadow:0 0 80px rgba(20,40,90,.2);
  transition:background-color .4s;
}
.scroll{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:0 16px 24px; position:relative; z-index:1}
.scroll::-webkit-scrollbar{width:0}
.pg{display:none}
.pg.on{display:block}
.sec-title{
  font-size:13px;font-weight:800;color:var(--ink2);letter-spacing:.6px;
  margin:20px 4px 10px;display:flex;align-items:center;gap:7px
}
.sec-title::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent)}
.sec-title .grow{flex:1}
.edit-btn{
  border:none;font-family:inherit;font-size:12px;font-weight:800;color:var(--accent);
  background:transparent;border:1.5px solid var(--line);
  padding:6px 13px;border-radius:var(--r-md);cursor:pointer;transition:.16s
}
.edit-btn:active{transform:scale(.94)}
.edit-btn.on{background:var(--accent);border-color:var(--accent);color:var(--btnInk)}

/* ================= 顶栏 ================= */
.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 16px 10px;gap:8px}
.me{display:flex;align-items:center;gap:10px;min-width:0}
.avatar{
  width:46px;height:46px;border-radius:var(--r-md);display:grid;place-items:center;font-size:24px;
  background:var(--accent-soft);border:1.5px solid var(--line);flex:0 0 auto;
  font-family:inherit;cursor:pointer;transition:.16s;padding:0
}
.avatar:active{transform:scale(.93)}
.hi{font-size:16px;font-weight:900;letter-spacing:.2px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sub-hi{font-size:11.5px;color:var(--ink2);margin-top:3px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top-right{display:flex;align-items:center;gap:7px;flex:0 0 auto}
.theme-btn{
  width:38px;height:38px;border-radius:var(--r-md);border:1.5px solid var(--line);
  background:var(--card);font-size:17px;cursor:pointer;display:grid;place-items:center;
  transition:.18s;flex:0 0 auto
}
.theme-btn:active{transform:scale(.9) rotate(-15deg)}
.stars{
  display:flex;align-items:center;gap:5px;background:var(--card);border:1.5px solid var(--line);
  border-radius:99px;padding:8px 14px 8px 10px;font-weight:900;font-size:15px;color:var(--star)
}
.stars span{font-size:15px}
.stars b{color:var(--star);font-family:var(--font-num)}

/* ================= 日期条 ================= */
.daystrip{display:flex;gap:7px;padding:6px 16px 4px;overflow-x:auto;scrollbar-width:none}
.daystrip::-webkit-scrollbar{display:none}
.dbtn{
  flex:0 0 auto;width:44px;padding:7px 0 6px;border:1.5px solid var(--line);border-radius:var(--r-md);
  background:var(--card);display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;
  transition:.2s;position:relative
}
.dbtn .w{font-size:11.5px;color:var(--ink2);font-weight:800}
.dbtn .n{font-size:15px;font-weight:900;color:var(--ink);font-family:var(--font-num)}
.dbtn.act{background:var(--accent);border-color:var(--accent);transform:translateY(-1px)}
.dbtn.act .w,.dbtn.act .n{color:var(--btnInk)}
.dbtn.today::after{content:"";position:absolute;bottom:4px;width:4px;height:4px;border-radius:50%;background:var(--star)}
.dbtn .dot{position:absolute;top:5px;right:6px;width:5px;height:5px;border-radius:50%;background:var(--ok)}

/* ================= 进度卡 ================= */
.progress-card{
  margin:14px 16px 0;background:var(--card);border:1.5px solid var(--line);border-radius:var(--r-lg);
  padding:16px;display:flex;align-items:center;gap:16px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden
}
.ring-wrap{position:relative;width:86px;height:86px;flex:0 0 auto}
.ring-wrap svg{transform:rotate(-90deg)}
.ring-txt{position:absolute;inset:0;display:grid;place-items:center;font-weight:900;font-size:18px;color:var(--ink);letter-spacing:-.5px;font-family:var(--font-num)}
.ring-txt small{font-size:10px;color:var(--ink2);font-weight:800}
.prog-info{flex:1;min-width:0}
.prog-line{font-size:15px;font-weight:900;line-height:1.35;color:var(--ink)}
.prog-line em{font-style:normal;color:var(--accent);font-family:var(--font-num);font-size:17px}
.prog-sub{font-size:11.5px;color:var(--ink2);margin-top:4px;line-height:1.55;font-weight:600}
.prog-bar{height:8px;border-radius:99px;background:var(--line-soft);margin-top:16px;position:relative;overflow:visible}
.prog-bar i{
  display:block;height:100%;width:0;border-radius:99px;
  background:linear-gradient(90deg,var(--star),var(--accent));
  transition:width .5s cubic-bezier(.3,1.3,.5,1);box-shadow:0 0 12px var(--accent-soft)
}
.prog-bar .dino{
  position:absolute;top:50%;left:0;transform:translate(-50%,-50%);font-size:17px;
  transition:left .55s cubic-bezier(.3,1.35,.5,1);z-index:2
}
/* ================= 任务卡 ================= */
.tasks{padding:0 16px}
/* 科目色映射（由主题变量提供具体颜色） */
.task[data-s="en"]{--c:var(--s-en);--c2:var(--s-en2);--cs:var(--s-en-bg);--csh:var(--s-en-sh)}
.task[data-s="cn"]{--c:var(--s-cn);--c2:var(--s-cn2);--cs:var(--s-cn-bg);--csh:var(--s-cn-sh)}
.task[data-s="ma"]{--c:var(--s-ma);--c2:var(--s-ma2);--cs:var(--s-ma-bg);--csh:var(--s-ma-sh)}
.task[data-s="art"]{--c:var(--s-art);--c2:var(--s-art2);--cs:var(--s-art-bg);--csh:var(--s-art-sh)}
.task[data-s="life"]{--c:var(--s-life);--c2:var(--s-life2);--cs:var(--s-life-bg);--csh:var(--s-life-sh)}
.task[data-s="other"]{--c:var(--s-other);--c2:var(--s-other2);--cs:var(--s-other-bg);--csh:var(--s-other-sh)}
.task{
  background:var(--card);border:1.5px solid var(--line);border-radius:var(--r-lg);
  padding:14px 14px 14px 16px;margin-bottom:11px;
  box-shadow:var(--shadow-sm);position:relative;overflow:visible;
  transition:.22s;background-image:linear-gradient(180deg, rgba(255,255,255,.02), transparent)
}
.task::before{
  content:"";position:absolute;left:0;top:15px;bottom:15px;width:3.5px;
  border-radius:0 4px 4px 0;background:var(--c)
}
.task.done{background:var(--card2);border-color:var(--ok-soft)}
.task.done::before{background:var(--ok)}
.task.done .tname{color:var(--ink2)}
.task.editing{border-style:dashed;border-color:var(--accent);border-width:2px}
.t-head{display:flex;align-items:center;gap:11px}
.ticon{
  width:44px;height:44px;flex:0 0 auto;border-radius:var(--r-md);display:grid;place-items:center;
  font-size:21px;background:var(--cs)
}
.tmeta{flex:1;min-width:0}
.tname{
  font-size:16px;font-weight:900;letter-spacing:.2px;color:var(--ink);
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;transition:.2s
}
.tag{font-size:10px;font-weight:900;padding:2px 7px;border-radius:6px;background:var(--cs);color:var(--c);letter-spacing:.3px}
.tinfo{font-size:11.5px;color:var(--ink2);margin-top:3px;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.due{
  display:inline-flex;align-items:center;gap:2px;font-size:11px;font-weight:900;
  color:var(--accent);background:var(--accent-soft);padding:2px 7px;border-radius:6px;
  font-family:var(--font-num);letter-spacing:.2px
}
.due.late{color:var(--danger);background:rgba(240,68,56,.12)}
.due.clear{color:var(--ok);background:var(--ok-soft)}
.tmin{
  font-size:11.5px;font-weight:900;color:var(--c);background:var(--cs);
  padding:5px 9px;border-radius:var(--r-sm);white-space:nowrap;font-family:var(--font-num)
}
.task.done .tmin{color:var(--ok);background:var(--ok-soft)}
.t-ops{display:none;gap:6px;flex:0 0 auto}
.task.editing .t-ops{display:flex}
.task.editing .tmin{display:none}
.iop{
  width:32px;height:32px;border:none;border-radius:var(--r-sm);background:var(--line-soft);
  font-size:14px;cursor:pointer;display:grid;place-items:center;transition:.15s
}
.iop:active{transform:scale(.9)}
.iop.del{background:rgba(255,77,94,.14)}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}
.chip{
  border:1.5px dashed var(--line);background:transparent;color:var(--ink2);
  font-family:inherit;font-size:12.5px;font-weight:800;padding:7px 11px;border-radius:var(--r-sm);
  cursor:pointer;display:flex;align-items:center;gap:5px;transition:.16s;line-height:1.2
}
.chip:active{transform:scale(.94)}
.chip.on{border:1.5px solid transparent;background:var(--ok);color:var(--btnInk);box-shadow:0 3px 10px var(--ok-soft)}
.chip .ck{display:none;font-size:12px}
.chip.on .ck{display:inline}
.chip.on .em{display:none}
.chip .del{
  display:none;width:17px;height:17px;border-radius:50%;background:rgba(0,0,0,.22);
  color:#fff;font-size:12px;line-height:17px;text-align:center;margin-left:1px;font-weight:700
}
.task.editing .chip .del{display:inline-block}
.reward{
  display:none;align-items:center;gap:4px;font-size:11px;font-weight:900;color:var(--star);
  background:var(--star-soft);padding:4px 9px;border-radius:var(--r-sm);margin-top:10px;width:fit-content
}
.task.done .reward{display:flex}

/* ===== 大按钮 ===== */
.btn-do{
  width:100%;margin-top:13px;border:none;font-family:inherit;
  font-size:17px;font-weight:900;letter-spacing:1.5px;
  padding:16px;border-radius:var(--r-md);cursor:pointer;color:var(--btnInk);
  background:linear-gradient(135deg,var(--c),var(--c2));
  box-shadow:0 8px 22px var(--csh);
  display:flex;align-items:center;justify-content:center;gap:8px;
  transition:transform .14s,box-shadow .14s;position:relative;overflow:hidden
}
.btn-do::after{
  content:"";position:absolute;top:0;left:-60%;width:40%;height:100%;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);
  animation:shine 3.8s ease-in-out infinite
}
@keyframes shine{0%,68%{left:-60%}100%{left:132%}}
.btn-do:active{transform:scale(.965);box-shadow:0 3px 10px var(--csh)}
.btn-do .bo-ico{font-size:19px}
.task.done .btn-do,.task.done .chips{display:none}

/* ===== 印章 ===== */
.stamp{
  display:none;position:absolute;right:14px;top:14px;width:64px;height:64px;
  border:2.5px solid var(--danger);color:var(--danger);place-items:center;flex-direction:column;gap:0;
  transform:rotate(-13deg);opacity:.92;pointer-events:none;border-radius:var(--r-md);
  background:color-mix(in srgb, var(--danger) 7%, transparent)
}
.stamp::before{content:"";position:absolute;inset:3.5px;border:1.5px solid var(--danger);opacity:.45;border-radius:calc(var(--r-md) - 3px)}
.stamp b{font-size:16px;line-height:1;font-weight:900}
.stamp span{font-size:11.5px;font-weight:900;letter-spacing:.5px;line-height:1.5}
.task.done .tmin{display:none}
.task.done .stamp{display:grid}
.task.stamping .stamp{animation:stampIn .5s cubic-bezier(.25,1.5,.5,1) both}
@keyframes stampIn{
  0%{opacity:0;transform:rotate(-40deg) scale(2.6)}
  55%{opacity:1;transform:rotate(-11deg) scale(.86)}
  75%{transform:rotate(-15deg) scale(1.06)}
  100%{opacity:.92;transform:rotate(-13deg) scale(1)}
}
.task.done{cursor:pointer}
.task.done .tinfo{color:var(--ok);font-weight:900}
.task.done .tinfo::before{content:"✓ ";font-weight:900}

/* ===== 下一张引导 ===== */
.next-tag{
  position:absolute;top:-10px;left:14px;z-index:3;
  background:var(--star);color:#2A1A00;
  font-size:10.5px;font-weight:900;padding:3px 10px;border-radius:99px;letter-spacing:.3px;
  box-shadow:0 3px 10px var(--star-soft)
}
.task.next{
  box-shadow:0 0 0 2px var(--star),0 10px 28px var(--star-soft);
  animation:nextPulse 2.4s ease-in-out infinite
}
@keyframes nextPulse{
  0%,100%{box-shadow:0 0 0 2px var(--star),0 10px 28px var(--star-soft)}
  50%{box-shadow:0 0 0 7px transparent,0 10px 28px var(--star-soft);opacity:1}
}
.add-task{
  width:100%;border:2px dashed var(--line);background:transparent;color:var(--ink2);
  font-family:inherit;font-size:14px;font-weight:900;padding:16px;
  border-radius:var(--r-lg);cursor:pointer;margin-bottom:12px;transition:.16s
}
.add-task:active{transform:scale(.98);border-color:var(--accent);color:var(--accent)}
.add-row{display:flex;gap:9px;margin-bottom:12px}
.add-row .add-task{margin-bottom:0;flex:1}
.add-row .add-task.paste{flex:0 0 auto;white-space:nowrap;border-color:var(--accent);color:var(--accent)}

/* ===== 休息日 ===== */
.restcard{
  margin:14px 16px 0;border-radius:var(--r-lg);padding:32px 22px;text-align:center;
  background:var(--card);border:1.5px solid var(--line);box-shadow:var(--shadow-sm)
}
.restcard .big{font-size:58px;line-height:1;margin-bottom:14px;display:inline-block;animation:swing 2.6s ease-in-out infinite}
@keyframes swing{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}
.restcard h3{font-size:20px;font-weight:900;letter-spacing:.4px;color:var(--ink)}
.restcard p{font-size:13px;color:var(--ink2);margin-top:10px;line-height:1.75;font-weight:600}
.restcard .sportbtn{
  margin-top:20px;border:none;font-family:inherit;font-size:15px;font-weight:900;color:var(--btnInk);
  background:linear-gradient(135deg,var(--star),#F59F00);padding:14px 26px;
  border-radius:var(--r-md);box-shadow:0 8px 20px var(--star-soft);cursor:pointer;transition:.16s
}
.restcard .sportbtn:active{transform:scale(.95)}
.restcard .sportbtn.on{background:linear-gradient(135deg,var(--ok),var(--s-ma2))}

/* ===== 番茄钟 ===== */
.pomo-wrap{padding:6px 16px 10px;text-align:center}
.pomo-step{font-size:11.5px;font-weight:900;color:var(--accent);letter-spacing:1.5px;margin-bottom:12px}
.pomo-target{
  display:none;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap;
  margin:-4px 0 12px;font-size:11.5px;font-weight:800;color:var(--ink2)
}
.pomo-target .tg{
  display:inline-flex;align-items:center;gap:3px;padding:5px 11px;border-radius:99px;
  background:var(--accent-soft);color:var(--accent);font-weight:900;font-variant-numeric:tabular-nums
}
.pomo-target .tg.late{background:rgba(240,68,56,.12);color:var(--danger)}
.pomo-target .tt{font-weight:700;color:var(--ink3);font-variant-numeric:tabular-nums}
.pomo-ring{position:relative;width:236px;height:236px;margin:0 auto}
.pomo-ring svg{transform:rotate(-90deg)}
.pomo-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.pomo-time{font-size:52px;font-weight:900;letter-spacing:-2px;font-variant-numeric:tabular-nums;line-height:1;color:var(--ink);font-family:var(--font-num)}
.pomo-label{font-size:11.5px;font-weight:900;color:var(--ink2);margin-top:8px;letter-spacing:1.5px}
.pomo-items{
  background:var(--card);border:1.5px solid var(--line);border-radius:var(--r-lg);
  padding:14px 16px;margin:20px 0 0;text-align:left;box-shadow:var(--shadow-sm)
}
.pomo-items .pt{font-size:12.5px;font-weight:900;margin-bottom:8px;color:var(--ink)}
.pomo-items li{
  list-style:none;font-size:13.5px;color:var(--ink2);padding:6px 0;font-weight:700;
  line-height:1.5;display:flex;gap:8px
}
.pomo-items li i{font-style:normal;color:var(--ink3);font-weight:900;font-size:11px;padding-top:2px;font-family:var(--font-num)}
.pomo-note{font-size:11px;color:var(--ink3);margin-top:12px;line-height:1.6;text-align:center;font-weight:600}
.pomo-btns{display:flex;gap:10px;margin-top:18px}
.btn{flex:1;border:none;font-family:inherit;font-size:16px;font-weight:900;padding:16px;border-radius:var(--r-md);cursor:pointer;transition:.16s}
.btn:active{transform:scale(.96)}
.btn-main{background:var(--accent);color:var(--btnInk);box-shadow:0 8px 22px var(--accent-soft)}
.btn-main.run{background:var(--star);color:#2A1A00;box-shadow:0 8px 22px var(--star-soft)}
.btn-ghost{flex:0 0 88px;background:var(--card);color:var(--ink2);border:1.5px solid var(--line)}
.pomo-dots{display:flex;justify-content:center;gap:7px;margin-top:18px}
.pomo-dots i{width:26px;height:7px;border-radius:99px;background:var(--line);transition:.3s}
.pomo-dots i.on{background:var(--ok)}
.pomo-dots i.cur{background:var(--star);animation:pulse 1.4s infinite}
@keyframes pulse{50%{opacity:.4}}

/* ===== 成就 ===== */
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;padding:0 16px}
.stat{background:var(--card);border:1.5px solid var(--line);border-radius:var(--r-lg);padding:15px 8px;text-align:center;box-shadow:var(--shadow-sm)}
.stat .num{font-size:24px;font-weight:900;letter-spacing:-.5px;font-family:var(--font-num);color:var(--ink)}
.stat .lb{font-size:11px;color:var(--ink2);font-weight:800;margin-top:4px}
.badges{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:0 16px}
.badge{text-align:center}
.badge .bx{
  aspect-ratio:1;border-radius:var(--r-md);display:grid;place-items:center;font-size:26px;
  background:var(--line-soft);filter:grayscale(1);opacity:.38;transition:.3s
}
.badge.got .bx{background:var(--star-soft);filter:none;opacity:1}
.badge .bn{font-size:10px;color:var(--ink3);font-weight:800;margin-top:5px;line-height:1.3}
.badge.got .bn{color:var(--ink2)}

/* ===== 计划 ===== */
.plan-card{
  background:var(--card);border:1.5px solid var(--line);border-radius:var(--r-lg);
  padding:16px;margin:0 16px 12px;box-shadow:var(--shadow-sm)
}
.plan-card h4{font-size:14px;font-weight:900;margin-bottom:12px;display:flex;align-items:center;gap:6px;color:var(--ink)}
.prow{display:flex;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:12.5px;line-height:1.65}
.prow:last-child{border-bottom:none}
.prow .day{flex:0 0 54px;font-weight:900;color:var(--ink)}
.prow .cx{flex:1;color:var(--ink2);font-weight:600}
.prow em{font-style:normal;color:var(--accent);font-weight:900}
.pomo-row{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:12.5px}
.pomo-row:last-child{border-bottom:none}
.pomo-row .no{flex:0 0 52px;font-weight:900;color:var(--accent);font-size:12px}
.pomo-row .tx{flex:1;color:var(--ink2);font-weight:700;line-height:1.5}
.pomo-row .mn{font-size:11px;font-weight:900;color:var(--ink3);font-family:var(--font-num)}
.pomo-hint{font-size:11px;color:var(--ink3);font-weight:700;line-height:1.65;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.setrow{display:flex;align-items:center;justify-content:space-between;padding:11px 0;border-bottom:1px dashed var(--line);font-size:13.5px;font-weight:700;color:var(--ink)}
.setrow:last-of-type{border-bottom:none}
.sw{width:48px;height:28px;border-radius:99px;background:var(--line);border:none;position:relative;cursor:pointer;transition:.2s;flex:0 0 auto}
.sw::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 4px rgba(0,0,0,.2)}
.sw.on{background:var(--ok)}
.sw.on::after{left:23px}
.reset-btn{width:100%;border:none;font-family:inherit;font-size:13.5px;font-weight:900;color:var(--danger);background:transparent;border:1.5px solid var(--line);padding:14px;border-radius:var(--r-md);cursor:pointer;margin-top:6px}
.soft-btn{width:100%;border:none;font-family:inherit;font-size:13.5px;font-weight:900;color:var(--btnInk);background:var(--accent);padding:14px;border-radius:var(--r-md);cursor:pointer;margin-top:12px}

/* ===== 底部导航 ===== */
.tabbar{
  flex:0 0 auto;display:flex;background:var(--card);border-top:1.5px solid var(--line);
  padding:9px 6px calc(9px + env(safe-area-inset-bottom));position:relative;z-index:2
}
.tab{
  flex:1;border:none;background:none;font-family:inherit;display:flex;flex-direction:column;
  align-items:center;gap:3px;padding:3px 0;cursor:pointer;color:var(--ink3);transition:.18s
}
.tab .i{font-size:19px;line-height:1;opacity:.55;transition:.18s}
.tab .t{font-size:10.5px;font-weight:900;letter-spacing:.3px}
.tab.on{color:var(--accent)}
.tab.on .i{opacity:1;transform:translateY(-2px) scale(1.08)}

/* ===== 撒花 / 提示 ===== */
.confetti{position:absolute;top:-16px;width:8px;height:14px;border-radius:2px;z-index:9999;pointer-events:none;animation:fall 1.6s ease-in forwards}
@keyframes fall{to{transform:translate(var(--x),940px) rotate(620deg);opacity:.85}}
.toast{
  position:fixed;left:50%;top:74px;transform:translate(-50%,-14px);z-index:9998;
  background:var(--ink);color:var(--card);font-size:13.5px;font-weight:800;
  padding:11px 20px;border-radius:var(--r-md);opacity:0;
  transition:.28s cubic-bezier(.3,1.3,.5,1);pointer-events:none;white-space:nowrap
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ===== 编辑弹层 ===== */
.sheet-mask{
  position:fixed;inset:0;background:rgba(10,18,40,.5);z-index:500;
  opacity:0;pointer-events:none;transition:.24s;display:flex;align-items:flex-end;justify-content:center
}
.sheet-mask.on{opacity:1;pointer-events:auto}
.sheet{
  width:100%;max-width:430px;background:var(--card);border-radius:var(--r-lg) var(--r-lg) 0 0;
  border-top:1.5px solid var(--line);
  padding:8px 18px calc(20px + env(safe-area-inset-bottom));max-height:90dvh;overflow-y:auto;
  transform:translateY(100%);transition:transform .32s cubic-bezier(.3,1.15,.5,1)
}
.sheet-mask.on .sheet{transform:translateY(0)}
.sheet-bar{width:40px;height:4px;border-radius:9px;background:var(--line);margin:6px auto 14px}
.sheet h3{font-size:17px;font-weight:900;margin-bottom:16px;color:var(--ink)}
.field{margin-bottom:15px}
.field label{display:block;font-size:12px;font-weight:900;color:var(--ink2);margin-bottom:7px;letter-spacing:.3px}
.field input[type=text],.field input[type=number]{
  width:100%;border:1.5px solid var(--line);border-radius:var(--r-md);padding:12px 14px;
  font-family:inherit;font-size:15px;font-weight:800;color:var(--ink);background:var(--card2);outline:none;transition:.16s
}
.field input:focus{border-color:var(--accent)}
.due-row{display:flex;gap:8px;align-items:center}
.due-row input[type=time]{
  flex:1;border:1.5px solid var(--line);border-radius:var(--r-md);padding:11px 14px;
  font-family:inherit;font-size:15px;font-weight:800;color:var(--ink);
  background:var(--card2);outline:none;font-variant-numeric:tabular-nums
}
.due-clear{
  flex:0 0 auto;border:1.5px solid var(--line);background:transparent;color:var(--ink2);
  font-family:inherit;font-size:12.5px;font-weight:900;padding:11px 14px;
  border-radius:var(--r-md);cursor:pointer
}
.due-clear:active{transform:scale(.95)}
.fhint{font-size:11px;color:var(--ink3);font-weight:700;margin-top:7px;line-height:1.5}

/* ===== 粘贴作业 ===== */
.sheet textarea{
  width:100%;min-height:104px;border:1.5px solid var(--line);border-radius:var(--r-md);
  padding:12px 14px;font-family:inherit;font-size:14px;font-weight:700;line-height:1.7;
  color:var(--ink);background:var(--card2);outline:none;resize:vertical
}
.sheet textarea:focus{border-color:var(--accent)}
.paste-tools{display:flex;gap:8px;margin-bottom:6px}
.mini-btn{
  flex:1;border:1.5px solid var(--line);background:var(--card2);color:var(--ink2);
  font-family:inherit;font-size:12px;font-weight:900;padding:9px 6px;border-radius:var(--r-sm);cursor:pointer
}
.mini-btn:active{transform:scale(.96)}
.paste-tools + .setrow{margin-top:6px}
.sheet .setrow input[type=time]{
  border:1.5px solid var(--line);border-radius:var(--r-sm);padding:7px 10px;
  font-family:inherit;font-size:14px;font-weight:800;color:var(--ink);background:var(--card2);outline:none
}
.pstat{
  display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800;color:var(--ink2);
  margin:14px 0 8px;flex-wrap:wrap
}
.pstat b{color:var(--accent);font-family:var(--font-num)}
.pitem{
  display:flex;gap:10px;align-items:flex-start;padding:11px 12px;border:1.5px solid var(--line);
  border-radius:var(--r-md);margin-bottom:8px;background:var(--card2);transition:.15s
}
.pitem.off{opacity:.42;background:transparent;border-style:dashed}
.pitem .pico{font-size:18px;line-height:1.3}
.pitem .pmain{flex:1;min-width:0}
.pitem .pname{font-size:13.5px;font-weight:900;color:var(--ink);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pitem .pname i{
  font-style:normal;font-size:10px;font-weight:900;padding:2px 6px;border-radius:5px;
  color:var(--c);background:var(--cs)
}
.pitem .psub{font-size:11px;color:var(--ink3);font-weight:700;margin-top:4px;line-height:1.6}
.pitem .pdur{font-size:11.5px;font-weight:900;color:var(--star);font-family:var(--font-num);white-space:nowrap}
.pitem .pdel{
  width:24px;height:24px;flex:0 0 auto;border:none;border-radius:7px;background:rgba(240,68,56,.12);
  color:var(--danger);font-size:13px;font-weight:900;cursor:pointer;line-height:1
}
.pempty{text-align:center;font-size:12.5px;color:var(--ink3);font-weight:700;padding:18px 10px;line-height:1.7}

/* ===== 用户列表 ===== */
.user-row{
  display:flex;align-items:center;gap:12px;padding:12px;border:1.5px solid var(--line);
  border-radius:var(--r-md);margin-bottom:9px;background:var(--card2);cursor:pointer;transition:.15s
}
.user-row.cur{border-color:var(--accent);background:var(--accent-soft)}
.user-row .uav{
  width:40px;height:40px;flex:0 0 auto;border-radius:var(--r-md);display:grid;place-items:center;
  font-size:20px;background:var(--card);border:1.5px solid var(--line)
}
.user-row .umain{flex:1;min-width:0}
.user-row .uname{font-size:14.5px;font-weight:900;color:var(--ink);display:flex;align-items:center;gap:6px}
.user-row .uname em{font-style:normal;font-size:10px;font-weight:900;color:var(--btnInk);background:var(--accent);padding:2px 6px;border-radius:5px}
.user-row .ustat{font-size:11.5px;color:var(--ink2);font-weight:700;margin-top:3px}
.user-row .uop{
  width:30px;height:30px;flex:0 0 auto;border:none;border-radius:8px;background:var(--line-soft);
  font-size:13px;cursor:pointer;display:grid;place-items:center
}
.seg{display:flex;gap:7px;flex-wrap:wrap}
.seg button{
  border:1.5px solid var(--line);background:var(--card2);font-family:inherit;font-size:13px;font-weight:900;
  color:var(--ink2);padding:9px 13px;border-radius:var(--r-sm);cursor:pointer;transition:.16s
}
.seg button.on{color:var(--btnInk);border-color:transparent}
.emoji-row{display:flex;gap:6px;flex-wrap:wrap}
.emoji-row button{
  width:42px;height:42px;border:1.5px solid var(--line);background:var(--card2);border-radius:var(--r-sm);
  font-size:20px;cursor:pointer;transition:.16s;display:grid;place-items:center;padding:0
}
.emoji-row button.on{border-color:var(--accent);background:var(--accent-soft)}
.subrow{display:flex;gap:7px;margin-bottom:8px;align-items:center}
.subrow input{
  flex:1;border:1.5px solid var(--line);border-radius:var(--r-sm);padding:11px 13px;
  font-family:inherit;font-size:14px;font-weight:800;color:var(--ink);background:var(--card2);outline:none
}
.subrow input:focus{border-color:var(--accent)}
.subrow button{
  width:38px;height:38px;flex:0 0 auto;border:none;border-radius:var(--r-sm);background:rgba(255,77,94,.14);
  color:var(--danger);font-size:16px;font-weight:900;cursor:pointer;display:grid;place-items:center
}
.addsub{
  width:100%;border:1.5px dashed var(--line);background:transparent;color:var(--ink2);
  font-family:inherit;font-size:13px;font-weight:900;padding:11px;border-radius:var(--r-sm);cursor:pointer;margin-bottom:6px
}
.sheet-btns{display:flex;gap:10px;margin-top:18px}
.sheet-btns button{flex:1;border:none;font-family:inherit;font-size:15px;font-weight:900;padding:15px;border-radius:var(--r-md);cursor:pointer}
.sheet-btns .cancel{background:var(--line-soft);color:var(--ink2)}
.sheet-btns .save{background:var(--accent);color:var(--btnInk)}
.sheet-btns .save:active,.sheet-btns .cancel:active{transform:scale(.97)}

/* ===== 全部完成弹层 ===== */
.win-mask{
  position:fixed;inset:0;z-index:600;background:rgba(10,18,40,.55);
  display:flex;align-items:center;justify-content:center;padding:24px;
  opacity:0;pointer-events:none;transition:.25s
}
.win-mask.on{opacity:1;pointer-events:auto}
.win-card{
  width:100%;max-width:320px;background:var(--card);border:1.5px solid var(--line);
  border-radius:var(--r-lg);padding:30px 24px 24px;text-align:center;
  transform:scale(.8);transition:transform .38s cubic-bezier(.25,1.5,.5,1);box-shadow:var(--shadow)
}
.win-mask.on .win-card{transform:scale(1)}
.win-emoji{font-size:64px;line-height:1;margin-bottom:12px;display:inline-block;animation:bounceIn .8s ease}
@keyframes bounceIn{0%{transform:scale(.3) rotate(-20deg)}60%{transform:scale(1.15) rotate(6deg)}100%{transform:scale(1)}}
.win-card h2{font-size:22px;font-weight:900;letter-spacing:.5px;color:var(--ink)}
.win-card p{font-size:13px;color:var(--ink2);margin-top:10px;line-height:1.75;font-weight:600}
.win-stars{
  display:inline-flex;align-items:center;gap:6px;margin-top:16px;
  background:var(--star-soft);color:var(--star);font-size:16px;font-weight:900;
  padding:9px 18px;border-radius:99px
}
.win-btn{
  width:100%;margin-top:20px;border:none;font-family:inherit;font-size:16px;font-weight:900;
  color:var(--btnInk);background:var(--accent);padding:15px;border-radius:var(--r-md);
  cursor:pointer;box-shadow:0 8px 22px var(--accent-soft);letter-spacing:.5px
}
.win-btn:active{transform:scale(.97)}

/* ============================================================
   主题 A 专属装饰：迷你特工队
   ============================================================ */
body[data-theme="mini"] .phone::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.55;
  background-image:repeating-linear-gradient(0deg, rgba(31,111,235,.07) 0 1px, transparent 1px 5px)
}
body[data-theme="mini"] .phone::after{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(72% 40% at 50% -10%, rgba(94,166,255,.28), transparent 72%)
}
body[data-theme="mini"] .task,
body[data-theme="mini"] .progress-card{background-image:linear-gradient(180deg,#FFFFFF,#F6FBFF)}
body[data-theme="mini"] .task::after{
  content:"";position:absolute;right:0;bottom:0;width:26px;height:26px;
  border-bottom:2px solid var(--accent);border-right:2px solid var(--accent);
  border-radius:0 0 var(--r-lg) 0;opacity:.32;pointer-events:none
}
body[data-theme="mini"] .task.done::after{opacity:.16;border-color:var(--ok)}
body[data-theme="mini"] .avatar{
  background:linear-gradient(140deg, rgba(31,111,235,.16), rgba(14,165,233,.05));
  box-shadow:0 4px 14px rgba(31,111,235,.14)
}
body[data-theme="mini"] .hi{letter-spacing:.8px}
body[data-theme="mini"] .btn-do{
  letter-spacing:2.5px;border-radius:10px;
  box-shadow:0 8px 20px var(--csh), 0 2px 6px rgba(28,70,140,.12);
  border:1px solid rgba(255,255,255,.6)
}
body[data-theme="mini"] .btn-do::before{
  content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(90deg, rgba(255,255,255,.16) 0 2px, transparent 2px 7px);
  pointer-events:none
}
body[data-theme="mini"] .stamp{
  border-radius:10px;border-width:2.5px;
  box-shadow:0 4px 14px rgba(240,68,56,.2), inset 0 0 14px rgba(240,68,56,.06)
}
body[data-theme="mini"] .sec-title{letter-spacing:1.2px}
body[data-theme="mini"] .tag{letter-spacing:.6px}
body[data-theme="mini"] .dbtn.act{box-shadow:0 6px 16px rgba(31,111,235,.3)}
body[data-theme="mini"] .pomo-dots i.on{box-shadow:0 2px 8px rgba(18,185,129,.35)}
body[data-theme="mini"] .pomo-dots i{background:#B9CFEF}
body[data-theme="mini"] .tabbar{background:rgba(255,255,255,.94);backdrop-filter:blur(16px)}
body[data-theme="mini"] .btn-main{box-shadow:0 8px 20px rgba(31,111,235,.28)}

/* ============================================================
   主题 B 专属装饰：卡比
   ============================================================ */
body[data-theme="kirby"] .phone::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.55;
  background-image:
    radial-gradient(circle at 12% 8%, #FFF0F7 0 26px, transparent 27px),
    radial-gradient(circle at 88% 14%, #FFE8F4 0 34px, transparent 35px),
    radial-gradient(circle at 72% 62%, #FFF0F7 0 22px, transparent 23px),
    radial-gradient(circle at 8% 76%, #FFF3F9 0 30px, transparent 31px);
  background-size:100% 100%
}
body[data-theme="kirby"] .task{
  border-width:2px;box-shadow:0 8px 22px rgba(255,140,180,.15);
  background-image:linear-gradient(180deg,#fff,#FFFBFD)
}
body[data-theme="kirby"] .task.next{box-shadow:0 0 0 3px rgba(255,201,60,.55),0 10px 26px rgba(255,140,180,.2)}
body[data-theme="kirby"] .btn-do{
  border-radius:99px;letter-spacing:1px;
  background:linear-gradient(135deg,var(--accent2),var(--accent));
  box-shadow:0 10px 24px rgba(255,92,158,.35)
}
body[data-theme="kirby"] .btn-do:active{box-shadow:0 4px 12px rgba(255,92,158,.3)}
body[data-theme="kirby"] .stamp{border-radius:50%;width:68px;height:68px;background:rgba(255,92,158,.06)}
body[data-theme="kirby"] .stamp::before{border-radius:50%}
body[data-theme="kirby"] .avatar{background:linear-gradient(140deg,#FFE3F0,#FFC7E2)}
body[data-theme="kirby"] .dbtn{border-radius:16px}
body[data-theme="kirby"] .ring-txt{font-size:19px}
body[data-theme="kirby"] .tag{border-radius:99px;padding:2px 8px}
body[data-theme="kirby"] .chip{border-radius:99px;border-style:solid;border-color:#FFE2EF;background:#FFF8FB}
body[data-theme="kirby"] .chip.on{background:linear-gradient(135deg,#6EDBA0,#4FD3A0);border-color:transparent}
body[data-theme="kirby"] .tab.on .i{filter:drop-shadow(0 2px 4px rgba(255,92,158,.4))}
body[data-theme="kirby"] .pomo-dots i{border-radius:99px}
body[data-theme="kirby"] .plan-card{border-radius:24px}

/* ============================================================
   账号 / 登录 / 身份选择（新增，沿用主题变量与卡片风格）
   ============================================================ */
.auth-mask{
  position:fixed;inset:0;z-index:800;background:var(--bg);background-image:var(--bg-grad);
  display:flex;align-items:center;justify-content:center;padding:22px;
  opacity:0;pointer-events:none;transition:opacity .22s
}
.auth-mask.on{opacity:1;pointer-events:auto}
.auth-card{
  width:100%;max-width:360px;background:var(--card);border:1.5px solid var(--line);
  border-radius:var(--r-lg);padding:28px 22px 20px;text-align:center;box-shadow:var(--shadow);
  max-height:calc(100dvh - 44px);overflow-y:auto
}
.auth-card::-webkit-scrollbar{width:0}
.auth-logo{font-size:56px;line-height:1;margin-bottom:10px}
.auth-card h2{font-size:22px;font-weight:900;letter-spacing:.6px;color:var(--ink)}
.auth-sub{font-size:12.5px;color:var(--ink2);margin-top:6px;font-weight:700;line-height:1.6}
.auth-field{text-align:left;margin-top:16px}
.auth-card .field input[type=tel],
.auth-card .field input[type=password],
.sheet .field input[type=password]{
  width:100%;border:1.5px solid var(--line);border-radius:var(--r-md);padding:12px 14px;
  font-family:inherit;font-size:15px;font-weight:800;color:var(--ink);
  background:var(--card2);outline:none;transition:.16s
}
.auth-card .field input:focus,.sheet .field input[type=password]:focus{border-color:var(--accent)}
.auth-msg{min-height:18px;font-size:12px;font-weight:800;color:var(--danger);margin-top:10px;line-height:1.5}
.role-btn{
  width:100%;display:flex;flex-direction:column;gap:3px;align-items:flex-start;
  border:1.5px solid var(--line);background:var(--card2);border-radius:var(--r-md);
  padding:14px 16px;margin-top:12px;font-family:inherit;cursor:pointer;text-align:left;transition:.16s
}
.role-btn:active{transform:scale(.97);border-color:var(--accent)}
.role-btn b{font-size:16px;font-weight:900;color:var(--ink)}
.role-btn span{font-size:11.5px;color:var(--ink2);font-weight:700}
.student-pick{text-align:left;margin-top:4px}
.auth-link{border:none;background:transparent;color:var(--ink2);font-family:inherit;font-size:12px;font-weight:800;margin-top:14px;padding:8px;cursor:pointer}
#acctPhone,#acctRole,#acctChild{color:var(--ink);font-weight:900;font-size:13px}

/* 学生端：隐藏家长专属入口/设置（JS 也会兜底隐藏） */
body.role-student .parent-only,
body.role-student #editBtn,
body.role-student #addRow,
body.role-student #themeBtn,
body.role-student #saveTplBtn,
body.role-student #resetBtn,
body.role-student .t-ops{display:none!important}
body.role-student .avatar{cursor:default}
body.role-student .avatar:active{transform:none}

/* 离线提示 */
.offline-chip{
  position:fixed;left:50%;bottom:calc(74px + env(safe-area-inset-bottom));transform:translateX(-50%);
  z-index:900;background:var(--ink);color:var(--card);font-size:11.5px;font-weight:800;
  padding:8px 14px;border-radius:99px;opacity:0;pointer-events:none;transition:.2s;white-space:nowrap
}
.offline-chip.on{opacity:.92}
