<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<meta name="theme-color" content="#0f1226">
<title>Owen 阅读成长岛</title>
<style>
:root{
  --bg:#0e1230; --bg2:#141a3d; --panel:#1a2150; --panel2:#212a5e;
  --card:#212a5e; --card2:#26306b; --ink:#eaf0ff; --ink2:#9fb0e8; --ink3:#6d7bb0;
  --line:rgba(255,255,255,.08);
  --ocean:#153e6e; --ocean2:#1e5b8a; --gold:#ffd34d; --rose:#ff6f91; --mint:#5fe3b0;
  --violet:#b98cff; --orange:#ff9a5f; --blue:#58b6ff;
  --is-1:#3fc9a8; --is-2:#58b6ff; --is-3:#ffb454; --is-4:#c98bff; --is-5:#ff6f91; --is-6:#78f0d0;
  --radius:20px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  margin:0;background:radial-gradient(120% 80% at 50% -10%,#1b2456 0%,var(--bg) 55%,#0a0e24 100%);
  color:var(--ink);font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;overflow:hidden;font-size:16px;
}
.app{display:flex;flex-direction:column;height:100dvh;max-width:480px;margin:0 auto;position:relative;
  background:linear-gradient(180deg,#141a3d 0%,#0e1230 60%,#0a0e24 100%)}
.app::before{content:"";position:fixed;inset:0;max-width:480px;margin:0 auto;pointer-events:none;z-index:0;
  background-image:
   radial-gradient(1.4px 1.4px at 20% 15%,rgba(255,255,255,.55),transparent),
   radial-gradient(1.2px 1.2px at 70% 10%,rgba(255,255,255,.45),transparent),
   radial-gradient(1.4px 1.4px at 40% 60%,rgba(255,255,255,.35),transparent),
   radial-gradient(1px 1px at 85% 40%,rgba(255,255,255,.5),transparent),
   radial-gradient(1.2px 1.2px at 10% 80%,rgba(255,255,255,.4),transparent),
   radial-gradient(1px 1px at 60% 88%,rgba(255,255,255,.35),transparent);
  opacity:.5;animation:twinkle 6s ease-in-out infinite}
@keyframes twinkle{0%,100%{opacity:.35}50%{opacity:.65}}
.stars{position:fixed;inset:0;max-width:480px;margin:0 auto;z-index:0;pointer-events:none}
.stars .tw{position:absolute;background:#fff;border-radius:50%;animation:tw ease-in-out infinite}

/* header */
header{position:relative;z-index:2;padding:calc(10px + env(safe-area-inset-top)) 16px 8px;display:flex;align-items:center;gap:10px}
.crew{display:flex;flex-direction:column;line-height:1}
.crew .hi{font-size:13px;color:var(--ink3);font-weight:600}
.crew .name{font-size:19px;font-weight:800;letter-spacing:.5px}
.crew .name b{color:var(--gold)}
.head-stats{margin-left:auto;display:flex;align-items:center;gap:8px}
.coins-pill{display:flex;align-items:center;gap:6px;background:linear-gradient(135deg,#3a2f14,#2a2313);border:1px solid rgba(255,211,77,.4);
  color:var(--gold);font-weight:800;font-size:15px;padding:7px 12px;border-radius:999px}
.coins-pill .c{font-size:17px}
.set-btn{width:38px;height:38px;border-radius:12px;background:var(--panel);border:1px solid var(--line);color:var(--ink2);
  font-size:18px;display:grid;place-items:center;cursor:pointer}
.icon-btn{cursor:pointer;user-select:none;transition:transform .15s}
.icon-btn:active{transform:scale(.92)}

/* main */
main{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 16px calc(8px + env(safe-area-inset-bottom));position:relative;z-index:1;scrollbar-width:none}
main::-webkit-scrollbar{display:none}
.view{display:none;animation:pop .3s ease}
.view.active{display:block}
@keyframes pop{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.view-title{font-size:20px;font-weight:800;margin:10px 2px 12px;display:flex;align-items:baseline;gap:8px}
.view-title .sub{font-size:13px;font-weight:600;color:var(--ink3)}
.cards{display:flex;flex-direction:column;gap:14px}

/* cards */
.card{background:linear-gradient(160deg,var(--card),var(--card2));border:1px solid var(--line);border-radius:var(--radius);padding:16px}
.card h3{margin:0 0 4px;font-size:15px;color:var(--ink2);font-weight:700;display:flex;align-items:center;gap:8px}
.card .big{font-size:30px;font-weight:800}

/* today */
.hero{text-align:center;padding:8px 0 2px}
.hero .today{font-size:13px;color:var(--ink3);font-weight:700;letter-spacing:1px;margin-bottom:10px}
.ringwrap{position:relative;width:190px;height:190px;margin:0 auto}
.ring{transform:rotate(0)}
.ring-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ring-center .num{font-size:40px;font-weight:900;line-height:1}
.ring-center .num small{font-size:15px;font-weight:700;color:var(--ink2)}
.ring-center .lab{font-size:12px;color:var(--ink3);font-weight:700;margin-top:4px}
.pct-label{font-size:14px;color:var(--ink2);font-weight:700;margin:10px 0 16px}
.pct-label b{color:var(--gold);font-size:18px}

/* goal row */
.goal-row{display:flex;align-items:center;gap:12px}
.stepper{display:flex;align-items:center;gap:10px}
.stepper button{width:38px;height:38px;border-radius:12px;border:1px solid var(--line);background:var(--panel);
  color:var(--ink);font-size:22px;font-weight:700;cursor:pointer;line-height:1}
.stepper button:active{transform:scale(.94)}
.goal-val{min-width:96px;text-align:center}
.goal-val .v{font-size:24px;font-weight:900}
.goal-val .v small{font-size:13px;color:var(--ink2);font-weight:700}
.goal-val .u{font-size:11px;color:var(--ink3);font-weight:700}

/* checkin form */
.checkin{display:flex;flex-direction:column;gap:14px}
.segs{display:flex;flex-wrap:wrap;gap:8px}
.seg{padding:9px 14px;border-radius:12px;border:1px solid var(--line);background:var(--panel);color:var(--ink2);font-weight:700;cursor:pointer;font-size:14px}
.seg.on{background:linear-gradient(135deg,#3a4fa5,#2a3a8f);color:#fff;border-color:#5a6fd6}
.seg-custom{display:flex;gap:8px;align-items:center;margin-top:2px}
.seg-custom input{width:70px}
textarea,select,input[type=number],input[type=text]{
  width:100%;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:12px;
  padding:11px 12px;font-size:15px;font-family:inherit;resize:none}
textarea{min-height:64px;line-height:1.5}
label.f-lab{font-size:12px;font-weight:700;color:var(--ink3);margin:2px 0 6px;display:block}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}

/* buttons */
.btn{cursor:pointer;border:none;font-family:inherit;font-weight:800;border-radius:14px;padding:14px;font-size:16px;
  transition:transform .12s,filter .12s;display:flex;align-items:center;justify-content:center;gap:8px;letter-spacing:.5px}
.btn:active{transform:scale(.98)}
.btn-primary{background:linear-gradient(135deg,#ffb454,#ff7d4d);color:#2a1608}
.btn-primary:active{filter:brightness(1.05)}
.btn-ghost{background:var(--panel);border:1px solid var(--line);color:var(--ink)}
.btn-sm{padding:9px 14px;font-size:13px;border-radius:11px}
.hint{font-size:12px;color:var(--ink3);line-height:1.6}
.hint b{color:var(--mint)}
.streak{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.streak .d{width:24px;height:24px;border-radius:7px;background:var(--panel);border:1px solid var(--line);
  display:grid;place-items:center;font-size:11px;font-weight:800;color:var(--ink3)}
.streak .d.on{background:linear-gradient(135deg,#5fe3b0,#2fbf8f);color:#043023;border-color:#7ff0c6}
.streak .d.on.today{outline:2px solid var(--gold)}
.streak-lab{font-size:12px;color:var(--ink3);font-weight:700;margin-top:8px}

/* bookshelf */
.shelf-tools{display:flex;gap:8px;margin-bottom:12px}
.tabbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.tab{padding:8px 14px;border-radius:999px;border:1px solid var(--line);background:var(--panel);color:var(--ink2);font-weight:700;cursor:pointer;font-size:14px}
.tab.on{background:linear-gradient(135deg,#3a4fa5,#2a3a8f);color:#fff;border-color:#5a6fd6}
.tab.new{border-style:dashed;color:var(--mint)}
.book-list{display:flex;flex-direction:column;gap:10px}
.book{display:flex;gap:12px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:12px;cursor:pointer;position:relative;overflow:hidden}
.book .em{width:52px;height:52px;border-radius:14px;display:grid;place-items:center;font-size:30px;background:var(--bg2);flex:none;box-shadow:inset 0 0 0 1px var(--line)}
.book .info{flex:1;min-width:0}
.book .tt{font-weight:800;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.book .cat{font-size:12px;font-weight:700;color:var(--ink3);margin-top:2px}
.book .prog{height:7px;background:var(--bg2);border-radius:99px;margin-top:8px;overflow:hidden}
.book .prog i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#5fe3b0,#58b6ff);transition:width .4s}
.book .meta{font-size:11px;color:var(--ink3);font-weight:600;margin-top:6px}
.book .pct{font-weight:900;font-size:16px;color:var(--ink);flex:none}
.book.done{background:linear-gradient(160deg,#22345f,#1c2848)}
.book.done .em{background:linear-gradient(135deg,#3a2f14,#2a2313);box-shadow:inset 0 0 0 1px rgba(255,211,77,.4)}
.book .reward{position:absolute;top:0;right:0;background:linear-gradient(135deg,#ffd34d,#ffb454);color:#3a2400;
  font-size:11px;font-weight:800;padding:3px 8px 3px 10px;border-bottom-left-radius:12px}
.empty{text-align:center;padding:28px 10px;color:var(--ink3)}
.empty .em{font-size:44px;margin-bottom:8px}
.empty p{font-size:14px;font-weight:600;margin:6px 0}

/* modal */
.overlay{position:fixed;inset:0;max-width:480px;margin:0 auto;background:rgba(6,8,20,.7);backdrop-filter:blur(4px);
  z-index:40;display:none;align-items:flex-end;justify-content:center}
.overlay.on{display:flex}
.sheet{width:100%;max-height:90dvh;overflow-y:auto;background:linear-gradient(180deg,#1b2350,#141a3d);
  border:1px solid var(--line);border-radius:24px 24px 0 0;padding:18px 16px calc(18px + env(safe-area-inset-bottom));animation:rise .3s ease}
@keyframes rise{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
.sheet-h{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.sheet-h .t{font-size:18px;font-weight:800}
.sheet-h .em{font-size:34px}
.sheet-h .x{margin-left:auto;font-size:22px;color:var(--ink3);cursor:pointer;width:34px;height:34px;display:grid;place-items:center}
.slot{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:10px 0}
.slot .s{aspect-ratio:1/1;border-radius:12px;background:var(--panel);border:1px solid var(--line);position:relative;
  display:grid;place-items:center;cursor:pointer;font-size:18px;color:var(--ink3);font-weight:700}
.slot .s .n{position:absolute;bottom:2px;right:5px;font-size:10px;font-weight:800}
.slot .s.on{background:linear-gradient(135deg,#3a4fa5,#2a3a8f);color:#fff;border-color:#5a6fd6}
.slot .s.today{outline:2px solid var(--gold)}
.book-actions{display:flex;gap:8px;margin-top:14px}
/* chapters */
.chap-box{margin-top:14px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px}
.chap-lab{font-size:12px;font-weight:800;color:var(--ink3);margin-bottom:8px}
.chap{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:11px;cursor:pointer;font-weight:700;color:var(--ink)}
.chap+.chap{margin-top:4px}
.chap:active{transform:scale(.99)}
.chap .ck{font-size:17px;flex:none}
.chap .cn{flex:1}
.chap.done{background:rgba(90,180,120,.12)}
.chap.done .cn{color:#3a8f5a;text-decoration:line-through;text-decoration-color:rgba(58,143,90,.4)}
.chap-done{margin-top:10px;font-size:12px;font-weight:800;color:var(--ink3);text-align:right}
.open-pdf{width:100%;margin:4px 0 2px;background:linear-gradient(135deg,#3a4fa5,#5a6fd6);color:#fff;border:none}

/* map */
.map-wrap{position:relative}
.map-stage{position:relative;margin:6px 0 2px}
.wave{position:absolute;left:-15%;right:-15%;height:40px;opacity:.5;pointer-events:none}
.island{position:relative;margin:8px 0}
.island .body{position:relative;background:linear-gradient(160deg,rgba(255,255,255,.05),rgba(255,255,255,0));
  border:1px solid var(--line);border-radius:22px;padding:14px 14px 16px;overflow:hidden}
.island .body::before{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 80% 0%,var(--c,#333) 0%,transparent 55%);opacity:.16}
.island .top{display:flex;gap:12px;align-items:flex-start;position:relative}
.island .pet{width:64px;height:64px;border-radius:50%;flex:none;display:grid;place-items:center;font-size:34px;
  background:radial-gradient(circle at 40% 35%,#fff8,#0000);border:2px solid var(--c,#555);
  box-shadow:0 6px 16px -4px var(--c),0 0 0 4px color-mix(in srgb,var(--c) 22%,transparent)}
.island .pet.dim{filter:grayscale(.6) brightness(.7)}
.island.locked .body{opacity:.72}
.island .it{flex:1;min-width:0}
.island .no{font-size:11px;font-weight:800;color:var(--c);letter-spacing:1px;margin-bottom:2px}
.island .nm{font-size:17px;font-weight:900;line-height:1.15}
.island .nm small{display:block;font-size:11px;font-weight:700;color:var(--ink3);margin-top:2px}
.island .lock{margin-left:auto;font-size:26px}
.island .desc{font-size:12.5px;color:var(--ink2);margin-top:10px;line-height:1.55}
.island .goalbox{margin-top:12px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px}
.island .glab{font-size:11px;font-weight:800;color:var(--ink3);letter-spacing:.5px}
.island .gval{font-size:14px;font-weight:800;margin:4px 0 8px}
.island .gval b{color:var(--c);font-size:17px}
.island .gval .max{color:var(--ink3);font-weight:700}
.island .bar{height:9px;background:var(--bg2);border-radius:99px;overflow:hidden}
.island .bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--c),color-mix(in srgb,var(--c) 55%,#fff));transition:width .5s}
.island .goalrow{display:flex;align-items:center;gap:8px;margin-top:8px}
.island .goalrow input{width:80px}
.island .goalrow button{width:34px;height:34px;flex:none;border-radius:10px;border:1px solid var(--line);background:var(--card2);
  color:var(--ink);font-size:18px;font-weight:700;cursor:pointer;line-height:1}
.island .unlock{margin-top:10px;font-size:12px;font-weight:800;display:flex;align-items:center;gap:6px;color:var(--ink3)}
.island.done .unlock{color:var(--gold)}
.island.done .pet{animation:bob 2.2s ease-in-out infinite}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.island .flag{position:absolute;top:-4px;right:12px;font-size:22px;filter:drop-shadow(0 2px 3px #0007)}
.dock{height:22px;background:linear-gradient(180deg,var(--ocean2),var(--ocean));border-radius:999px;margin:2px 4px;opacity:.65;
  box-shadow:inset 0 -4px 8px #0006}
.dock .boat{position:absolute;left:14px;top:1px;font-size:15px;animation:sail 4s ease-in-out infinite}
@keyframes sail{0%,100%{transform:translateX(0) rotate(-2deg)}50%{transform:translateX(6px) rotate(2deg)}}
.route-hint{text-align:center;font-size:12px;color:var(--ink3);font-weight:700;margin:2px 0 8px}

/* pets (rewards) */
.pet-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.pet-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px 8px;text-align:center;position:relative}
.pet-card .pe{width:54px;height:54px;border-radius:50%;margin:0 auto 8px;display:grid;place-items:center;font-size:32px;
  background:radial-gradient(circle at 40% 35%,#fff5,#0000);border:2px solid var(--c,#555);
  box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 20%,transparent)}
.pet-card.dim .pe{filter:grayscale(.7) brightness(.75)}
.pet-card .pn{font-size:13px;font-weight:800}
.pet-card .pt{font-size:11px;color:var(--ink3);font-weight:600;margin-top:2px}
.pet-card .pl{font-size:11px;font-weight:800;margin-top:8px;color:var(--ink3)}
.pet-card.done .pl{color:var(--gold)}
.pet-card .pl::before{content:"🔒 ";}
.pet-card.done .pl::before{content:"✅ ";}
.pet-card .badge{position:absolute;top:8px;right:8px;font-size:16px}

/* toast */
.toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:60;
  background:rgba(12,16,40,.96);border:1px solid var(--line);color:var(--ink);font-size:14px;font-weight:700;
  padding:11px 18px;border-radius:14px;max-width:82%;text-align:center;box-shadow:0 10px 30px -6px #000c;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}
.toast.on{opacity:1;transform:translate(-50%,-6px)}
.toast.good{border-color:rgba(95,227,176,.5)}

/* confetti */
.cf{position:fixed;z-index:70;pointer-events:none;font-size:18px}

/* nav */
nav{display:flex;position:relative;z-index:3;border-top:1px solid var(--line);
  background:linear-gradient(180deg,#141a3d,#0d1230);padding-bottom:env(safe-area-inset-bottom)}
nav .n{flex:1;padding:9px 4px 11px;display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;color:var(--ink3);font-size:11px;font-weight:700}
nav .n .i{font-size:22px;filter:grayscale(.5) opacity(.65)}
nav .n.on{color:var(--ink)}
nav .n.on .i{filter:none;transform:translateY(-1px)}
nav .n .lab{font-size:11px}
nav .n.on::after{content:"";width:18px;height:3px;border-radius:99px;background:var(--gold);margin-top:3px}

/* settings */
.set-item{display:flex;gap:12px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:16px;background:var(--panel)}
.set-item+.set-item{margin-top:10px}
.set-item .sl{flex:1}
.set-item .st{font-weight:800;font-size:15px}
.set-item .sd{font-size:12px;color:var(--ink3);margin-top:3px;line-height:1.5}
.set-item input[type=number]{width:90px;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:9px;font-size:16px;font-weight:800}
.set-item label{text-align:right;max-width:40%;font-size:14px;font-weight:700;color:var(--ink2)}
.toggle{width:52px;height:30px;border-radius:99px;background:var(--bg2);border:1px solid var(--line);position:relative;cursor:pointer;flex:none}
.toggle .kn{position:absolute;top:2px;left:2px;width:24px;height:24px;border-radius:50%;background:var(--ink3);transition:.2s}
.toggle.on{background:linear-gradient(135deg,#5fe3b0,#2fbf8f)}
.toggle.on .kn{left:24px;background:#fff}
.danger{margin-top:18px;background:rgba(255,111,145,.08);border-color:rgba(255,111,145,.3)}

/* level */
.lv-card .lv-top{display:flex;align-items:center;gap:12px}
.lv-card .lv-emoji{font-size:34px}
.lv-card .lv-name{font-size:17px;font-weight:900}
.lv-card .lv-sub{font-size:12px;color:var(--ink3);font-weight:700;margin-top:2px}
.lv-bar{height:10px;background:var(--bg2);border-radius:99px;overflow:hidden;margin-top:12px}
.lv-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#ffd34d,#ff9a5f);transition:width .5s}
.lv-meta{display:flex;justify-content:space-between;font-size:11px;color:var(--ink3);font-weight:700;margin-top:6px}

/* badges */
.badge-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.badge-cell{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px 8px;text-align:center}
.badge-cell .be{font-size:30px}
.badge-cell.lock .be{filter:grayscale(.7) brightness(.65)}
.badge-cell .bn{font-size:12px;font-weight:800;margin-top:6px}
.badge-cell .bd{font-size:10px;color:var(--ink3);font-weight:600;margin-top:2px;line-height:1.35}
.badge-cell.done{background:linear-gradient(160deg,#2a3a1f,#22301a);border-color:rgba(95,227,176,.35)}

/* report */
.report-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
.report-grid .rg{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px 8px;text-align:center}
.report-grid .rg .rv{font-size:22px;font-weight:900}
.report-grid .rg .rl{font-size:11px;color:var(--ink3);font-weight:700;margin-top:4px}
.trend{display:flex;align-items:flex-end;gap:6px;height:90px;margin-top:6px}
.trend .tb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.trend .tb .bar2{width:100%;background:linear-gradient(180deg,#5fe3b0,#58b6ff);border-radius:6px 6px 0 0;min-height:3px;transition:height .4s}
.trend .tb .dl{font-size:10px;color:var(--ink3);font-weight:700;margin-top:4px}

/* timer */
.timer-display{font-size:46px;font-weight:900;text-align:center;font-variant-numeric:tabular-nums;letter-spacing:2px;margin:6px 0 12px}

/* pet care */
.care-row{display:flex;align-items:center;gap:10px;margin-top:10px}
.care-row span{font-size:13px;font-weight:700;color:var(--ink2)}
.care-row .bar{flex:1;height:12px;background:var(--bg2);border-radius:99px;overflow:hidden}
.care-row .bar i{display:block;height:100%;background:linear-gradient(90deg,#ff9a5f,#ffd34d);transition:width .4s}

/* wallet log */
.wallet-log{margin-top:12px;display:flex;flex-direction:column;gap:6px;max-height:210px;overflow-y:auto;scrollbar-width:none}
.wallet-log .wl{display:flex;gap:8px;font-size:12px;font-weight:600;color:var(--ink2);background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 10px}
.wallet-log .wl .wa{margin-left:auto;font-weight:900;white-space:nowrap}
.wallet-log .wl.out .wa{color:#ff9db8}
.wallet-log .wl.in .wa{color:var(--mint)}
.wallet-log .wl.earn .wa{color:var(--gold)}
.wallet-log .empty{text-align:center;color:var(--ink3);font-size:12px;padding:6px}

/* steps */
.steps{list-style:none;padding:0;margin:10px 0 0;counter-reset:st}
.steps li{counter-increment:st;position:relative;padding:8px 8px 8px 38px;font-size:14px;line-height:1.55;color:var(--ink2);font-weight:600}
.steps li::before{content:counter(st);position:absolute;left:0;top:8px;width:26px;height:26px;border-radius:50%;background:linear-gradient(135deg,#3a4fa5,#2a3a8f);color:#fff;display:grid;place-items:center;font-weight:800;font-size:13px}
.ver{text-align:center;font-size:11px;color:var(--ink3);font-weight:700;margin-top:14px}
.ver a{color:var(--mint)}
</style>
</head>
<body>
<div class="app">
  <header>
    <div class="crew">
      <span class="hi">Owen 的</span>
      <span class="name">阅读<b>成长岛</b></span>
    </div>
    <div class="head-stats">
      <div class="coins-pill"><span class="c">🪙</span><span id="coinTop">0.0</span></div>
      <div class="set-btn icon-btn" id="openSet">⚙️</div>
    </div>
  </header>

  <main id="main">
    <!-- TODAY -->
    <section class="view active" id="v-today">
      <div class="cards">
        <div class="card">
          <h3>📅 今天 <span id="todayDate"></span></h3>
          <div class="hero">
            <svg class="ring" width="190" height="190" viewBox="0 0 190 190">
              <circle cx="95" cy="95" r="84" fill="none" stroke="#232c5a" stroke-width="14"/>
              <circle id="ring" cx="95" cy="95" r="84" fill="none" stroke="url(#gg)" stroke-width="14"
                stroke-linecap="round" stroke-dasharray="527.8" stroke-dashoffset="527.8" transform="rotate(-90 95 95)"/>
              <defs><linearGradient id="gg" x1="0" y1="0" x2="1" y2="1">
                <stop offset="0" stop-color="#5fe3b0"/><stop offset="1" stop-color="#58b6ff"/></linearGradient></defs>
            </svg>
            <div class="ring-center">
              <div class="num" id="ringNum">0<small> 分钟</small></div>
              <div class="lab" id="ringLab">今天已读</div>
            </div>
          </div>
          <div class="pct-label">今日目标完成 <b id="pctTop">0%</b></div>
          <div class="goal-row">
            <div class="stepper">
              <button class="icon-btn" onclick="stepGoal(-1)">−</button>
              <div class="goal-val"><div class="v" id="goalV">30<small> 分钟</small></div></div>
              <button class="icon-btn" onclick="stepGoal(1)">+</button>
            </div>
            <span class="hint" style="margin:0">目标分钟数<br>每完成 1 天 = 解锁 1 枚星星 ⭐</span>
          </div>
        </div>

        <div class="card">
          <h3>🚀 阅读进行中</h3>
          <div class="timer-display" id="timerDisp">00:00</div>
          <button class="btn btn-primary" id="timerBtn">⏱ 专注计时</button>
          <p class="hint" style="margin-top:12px">点开始，沉浸式计时；结束会自动把分钟填进下面的打卡。要看某本书的章节，请去「书架」点开那本书 👇</p>
        </div>

        <div class="card" id="checkinCard">
          <h3>✍️ 今日打卡</h3>
          <div class="checkin">
            <div>
              <div class="hint" id="todayStatus">还没有打卡，来读一会儿书吧～</div>
            </div>
            <div>
              <label class="f-lab">今天读了多久？</label>
              <div class="segs" id="durSegs"></div>
              <div class="seg-custom" style="margin-top:8px">
                <span class="hint" style="margin:0">或</span>
                <input type="number" id="durCustom" class="icon-btn" min="1" placeholder="自定义" style="width:80px;padding:8px 10px;font-size:14px">
                <span class="hint" style="margin:0">分钟</span>
              </div>
            </div>
            <div>
              <label class="f-lab">一句话笔记（写点什么）</label>
              <textarea id="noteInput" placeholder="比如：今天读了 20 页，发现恐龙其实有羽毛，太酷了！"></textarea>
            </div>
            <button class="btn btn-primary" id="saveCheckin">✅ 完成打卡</button>
            <div id="checkinMeta"></div>
          </div>
        </div>

        <div class="card">
          <h3>🔥 连续打卡</h3>
          <div id="streakStreak"></div>
          <div class="streak-lab" id="streakLab">连续 0 天</div>
        </div>

        <div class="card lv-card">
          <h3>🌟 成长积分 &amp; 等级</h3>
          <div id="lvHost"></div>
        </div>

        <div class="card">
          <h3>🏅 我的徽章</h3>
          <div id="badgeHost"></div>
        </div>

        <div class="card">
          <h3>📊 阅读报告</h3>
          <div id="reportHost"></div>
        </div>
      </div>
    </section>

    <!-- BOOKSHELF -->
    <section class="view" id="v-books">
      <div class="view-title">我的书架 <span class="sub">进度满了，就换 1 块钱零花钱 🪙</span></div>
      <div class="shelf-tools">
        <button class="btn btn-primary btn-sm icon-btn" id="addBookBtn">＋ 添加一本书</button>
        <button class="btn btn-ghost btn-sm icon-btn" id="addCatBtn">＋ 新增分类</button>
      </div>
      <div class="tabbar" id="catTabs"></div>
      <div class="book-list" id="bookList"></div>
    </section>

    <!-- MAP -->
    <section class="view" id="v-map">
      <div class="view-title">冒险地图 <span class="sub">六座小岛 · 一条成长路线</span></div>
      <div class="map-stage">
        <svg class="wave" style="top:-6px"><path d="M0 20 Q40 4 80 20 T160 20 T240 20 T320 20 T400 20 T480 20 T560 20 T640 20 T720 20 T800 20 L800 40 L0 40 Z" fill="var(--ocean2)" opacity=".35"/></svg>
        <div id="islands"></div>
        <svg class="wave" style="bottom:-10px"><path d="M0 20 Q40 36 80 20 T160 20 T240 20 T320 20 T400 20 T480 20 T560 20 T640 20 T720 20 T800 20 L800 40 L0 40 Z" fill="var(--ocean2)" opacity=".35"/></svg>
      </div>
    </section>

    <!-- REWARDS -->
    <section class="view" id="v-rewards">
      <div class="view-title">宠物乐园 <span class="sub">解锁的小宠物都住在这里</span></div>
      <div class="card">
        <h3>🐾 我的宠物</h3>
        <div class="pet-grid" id="petGrid"></div>
        <p class="hint" style="margin-top:14px">完成岛屿目标即可解锁对应宠物！全部解锁就集齐一整支队伍啦 🚢</p>
      </div>
    </section>

    <!-- SETTINGS -->
    <section class="view" id="v-set">
      <div class="view-title">设置 <span class="sub">数据存在你手机里</span></div>
      <div class="cards">
        <div class="card">
          <div class="set-item">
            <div class="sl"><div class="st">零花钱兑换率</div><div class="sd">读完 1 本书 = 换多少零花钱</div></div>
            <input type="number" id="rateInput" step="0.5" min="0.5">
            <span class="hint" style="margin:0">元/本</span>
          </div>
          <div class="set-item">
            <div class="sl"><div class="st">今日阅读目标</div><div class="sd">每天要读到多少分钟</div></div>
            <input type="number" id="goalInput" min="5" step="5">
            <span class="hint" style="margin:0">分钟/天</span>
          </div>
        </div>
        <div class="card">
          <h3>🙋 我是谁</h3>
          <p class="hint">名字和年龄会显示在首页，小宠物说话时也会叫你。</p>
          <div class="row2" style="margin-top:10px">
            <div><label class="f-lab">名字</label><input type="text" id="nameInput"></div>
            <div><label class="f-lab">年龄</label><input type="number" id="ageInput" min="1" max="99"></div>
          </div>
          <button class="btn btn-primary btn-sm" id="saveName" style="margin-top:12px;width:100%">保存</button>
        </div>

        <div class="card">
          <h3>🐷 零花钱存钱罐</h3>
          <div class="big" id="walletBal" style="color:var(--gold)">¥0</div>
          <p class="hint">读完一本书自动存入 ¥<span id="rateShow">1</span>。给 Owen 发零花钱点「取出」，记错了点「存入」。<b>每笔都会记进下面的明细。</b></p>
          <div class="row2" style="margin-top:10px">
            <button class="btn btn-ghost btn-sm" id="walletOut">取出 ¥5</button>
            <button class="btn btn-ghost btn-sm" id="walletIn">存入 ¥5</button>
          </div>
          <div class="wallet-log" id="walletLog"></div>
        </div>

        <div class="card">
          <h3>📲 装到手机桌面</h3>
          <p class="hint">像 App 一样每天点开就能打卡：</p>
          <ol class="steps">
            <li>用手机浏览器打开本页，点右上角「⋯」或「分享」</li>
            <li>选「添加到主屏幕 / 加到主屏幕」</li>
            <li>点「添加」，桌面就多了一个图标</li>
            <li>以后从桌面点开，离线也能用 🚀</li>
          </ol>
          <button class="btn btn-ghost btn-sm" id="copyUrl" style="margin-top:10px;width:100%">复制本页地址</button>
        </div>

        <div class="card">
          <h3>📱 数据安全</h3>
          <p class="hint">所有数据只存在你这台手机里，断网也能用。</p>
          <div style="display:flex;gap:10px;margin-top:12px">
            <button class="btn btn-ghost btn-sm" id="exportBtn" style="flex:1">导出备份</button>
            <button class="btn btn-ghost btn-sm" id="importBtn" style="flex:1">导入备份</button>
            <input type="file" id="importFile" accept="application/json" hidden>
          </div>
        </div>
        <div class="card danger">
          <div class="set-item" style="border:none;background:none">
            <div class="sl"><div class="st">清空所有数据</div><div class="sd">删除打卡、书架和冒险进度</div></div>
            <button class="btn btn-sm" style="background:#3a1f27;color:#ff9db8">清空</button>
          </div>
        </div>
        <p class="ver">版本 v2026.10.11 · 打开本页自动更新 · 功能不对点 <a href="javascript:location.reload()">检查更新</a></p>
      </div>
    </section>
  </main>

  <nav>
    <div class="n on" data-v="today"><span class="i">🏝️</span><span class="lab">今天</span></div>
    <div class="n" data-v="books"><span class="i">📚</span><span class="lab">书架</span></div>
    <div class="n" data-v="map"><span class="i">🗺️</span><span class="lab">冒险</span></div>
    <div class="n" data-v="rewards"><span class="i">🐾</span><span class="lab">宠物</span></div>
    <div class="n" data-v="set"><span class="i">⚙️</span><span class="lab">设置</span></div>
  </nav>
</div>

<!-- modal -->
<div class="overlay" id="overlay"><div class="sheet" id="sheet"></div></div>
<div class="toast" id="toast"></div>

<script>
/* ---------- 启动：清除旧的 Service Worker / 缓存，确保浏览器永远拿到最新版 ----------
   老版本注册过 sw.js（缓存名 owen-read-map-v1，内容是 64 本老书），
   若浏览器里还残留那个 SW，会拦截请求、给你显示旧/坏页面。
   下面这段一加载就注销所有 SW 并清空旧缓存，强制走最新 index.html。 */
(function(){
  try{
    if('serviceWorker' in navigator){
      navigator.serviceWorker.getRegistrations().then(function(regs){
        regs.forEach(function(r){ r.unregister(); });
      }).catch(function(){});
    }
    if('caches' in window){
      caches.keys().then(function(keys){
        keys.forEach(function(k){
          if(/^owen-read-map/i.test(k)){ caches.delete(k); }
        });
      }).catch(function(){});
    }
  }catch(e){}
})();
/* ---------- data model ---------- */
const DEF_CATS=[
  {id:"en",  name:"英语阅读",   emoji:"📖", color:"#58b6ff", goal:500},
  {id:"cn",  name:"中文阅读",   emoji:"📕", color:"#ffb454", goal:500},
  {id:"math",name:"数学计算",   emoji:"➗",  color:"#5fe3b0", goal:500},
  {id:"phy", name:"物理计算",   emoji:"⚡",  color:"#c98bff", goal:500},
  {id:"chem",name:"化学计算",   emoji:"🧪",  color:"#78f0d0", goal:500},
];
const ISLANDS=[
  {id:"i1",no:"小岛 1",name:"阅读启航岛",pet:"🐹",petName:"仓鼠 奇奇",petTitle:"阅读探险家",color:"#3fc9a8",
   goalType:"streak",goalLabel:"连续打卡",unit:"天",desc:"坚持每天读书，从这里扬帆起航。连续打卡越多，航线越稳。"},
  {id:"i2",no:"小岛 2",name:"英语探险岛",pet:"🐶",petName:"小狗 豆豆",petTitle:"英语达人",color:"#58b6ff",
   goalType:"book",catId:"en",unit:"本",desc:"把英语书架的课外书读完，词汇量和感觉一起涨起来。"},
  {id:"i3",no:"小岛 3",name:"中文故事岛",pet:"🐱",petName:"小猫 喵喵",petTitle:"故事大王",color:"#ffb454",
   goalType:"book",catId:"cn",unit:"本",desc:"读完中文经典故事书，把一个个好故事装进口袋。"},
  {id:"i4",no:"小岛 4",name:"数学闯关岛",pet:"🦜",petName:"鹦鹉 皮皮",petTitle:"计算高手",color:"#c98bff",
   goalType:"book",catId:"math",unit:"本",desc:"做完数学计算练习册，逻辑和速度一起升级。"},
  {id:"i5",no:"小岛 5",name:"物理化学岛",pet:"🧚",petName:"小精灵 灵灵",petTitle:"科学小博士",color:"#ff6f91",
   goalType:"dual",catId1:"phy",catId2:"chem",unit:"本",desc:"解锁物理和化学的双倍知识，当上科学小博士。"},
  {id:"i6",no:"小岛 6",name:"智慧灯塔岛",pet:"🐉",petName:"小龙 小龙龙",petTitle:"全能探险家",color:"#78f0d0",
   goalType:"total",unit:"分钟",desc:"读够总分钟数，点亮全岛灯塔，成为全能探险家！"},
];
ISLANDS[5].goalLabel="累计阅读";ISLANDS[5].goalVal=3000;
ISLANDS[0].goalVal=7;ISLANDS[1].goalVal=3;ISLANDS[2].goalVal=3;
ISLANDS[3].goalVal=2;ISLANDS[4].goalVal=2;

/* ---------- G:八年级上 教材书单（按科目分类的精简主线，合并导入，幂等） ---------- */
const SEED_CATS = [{"id":"en","name":"英语阅读","emoji":"📖","color":"#58b6ff","goal":500},{"id":"cn","name":"语文阅读","emoji":"📕","color":"#ffb454","goal":500},{"id":"math","name":"数学计算","emoji":"➗","color":"#5fe3b0","goal":500},{"id":"phy","name":"物理计算","emoji":"⚡","color":"#c98bff","goal":500},{"id":"chem","name":"化学计算","emoji":"🧪","color":"#78f0d0","goal":500},{"id":"history","name":"历史阅读","emoji":"🏛️","color":"#d98c5f","goal":300},{"id":"daofa","name":"道法","emoji":"⚖️","color":"#9aa0b5","goal":300}];
const SEED_BOOKS = [
  {"id":"en_1","title":"2025 上海八上新版英语（沪教牛津版）高清课本","cat":"en","catName":"英语","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223593.shtml","chapters":[{"name":"Unit 1 起始","done":false},{"name":"Unit 2","done":false},{"name":"Unit 3","done":false},{"name":"Unit 4","done":false},{"name":"Unit 5","done":false},{"name":"Unit 6","done":false},{"name":"期中复习","done":false},{"name":"期末复习","done":false}]},
  {"id":"en_2","title":"上海初中英语考纲词汇手册（沪教版）","cat":"en","catName":"英语","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223594.shtml","chapters":[{"name":"3A 词汇","done":false},{"name":"3B 词汇","done":false},{"name":"3C 词汇","done":false},{"name":"语法专项","done":false},{"name":"阅读专项","done":false},{"name":"听力专项","done":false}]},
  {"id":"math_1","title":"2025 上海八上新版数学（沪教版）高清课本","cat":"math","catName":"数学","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223595.shtml","chapters":[{"name":"第1章 实数","done":false},{"name":"第2章 二次根式","done":false},{"name":"第3章 一元二次方程","done":false},{"name":"第4章 直角三角形","done":false},{"name":"期中复习","done":false},{"name":"期末复习","done":false}]},
  {"id":"math_2","title":"上海八上新版数学·期末综合与压轴题","cat":"math","catName":"数学","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223596.shtml","chapters":[{"name":"二次根式","done":false},{"name":"一元二次方程","done":false},{"name":"直角三角形","done":false},{"name":"几何综合","done":false},{"name":"压轴题","done":false}]},
  {"id":"cn_1","title":"2025 上海八上新版语文（统编版）高清课本","cat":"cn","catName":"语文","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223597.shtml","chapters":[{"name":"第1单元","done":false},{"name":"第2单元","done":false},{"name":"第3单元","done":false},{"name":"第4单元","done":false},{"name":"第5单元","done":false},{"name":"第6单元","done":false},{"name":"期末复习","done":false}]},
  {"id":"cn_2","title":"上海八上语文·古诗词 60 首 + 文言文训练","cat":"cn","catName":"语文","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223598.shtml","chapters":[{"name":"诗词 1–20","done":false},{"name":"诗词 21–40","done":false},{"name":"诗词 41–60","done":false},{"name":"文言文","done":false},{"name":"古诗文默写","done":false}]},
  {"id":"phy_1","title":"上海八下物理（沪教版）高清课本","cat":"phy","catName":"物理","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223599.shtml","chapters":[{"name":"机械和功","done":false},{"name":"压强","done":false},{"name":"浮力","done":false},{"name":"热与能","done":false},{"name":"期末综合","done":false}]},
  {"id":"chem_1","title":"上海八下化学（沪教版）高清课本","cat":"chem","catName":"化学","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223600.shtml","chapters":[{"name":"酸碱盐","done":false},{"name":"物质分类","done":false},{"name":"化学方程式","done":false},{"name":"实验基础","done":false},{"name":"期末综合","done":false}]},
  {"id":"hist_1","title":"上海八下历史（统编版）高清课本","cat":"history","catName":"历史","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223601.shtml","chapters":[{"name":"第1单元","done":false},{"name":"第2单元","done":false},{"name":"第3单元","done":false},{"name":"第4单元","done":false},{"name":"第5单元","done":false},{"name":"期末复习","done":false}]},
  {"id":"daofa_1","title":"上海八下道德与法治（统编版）高清课本","cat":"daofa","catName":"道法","read":0,"catGoal":300,"notes":[],"done":false,"src":"https://www.pep.com.cn/zt/yw/2025njc/202508/1223602.shtml","chapters":[{"name":"第1单元","done":false},{"name":"第2单元","done":false},{"name":"第3单元","done":false},{"name":"第4单元","done":false},{"name":"期末综合","done":false}]}
];



/* ---------- merge seed books/cats (idempotent) ---------- */
function mergeSeed(){
  let addedCats=0,addedBooks=0;
  SEED_CATS.forEach(c=>{if(!state.cats.find(x=>x.id===c.id)){state.cats.push(Object.assign({},c));addedCats++;}});
  SEED_BOOKS.forEach(b=>{if(!state.books.find(x=>x.title===b.title)){state.books.push(Object.assign({},b,{notes:[]}));addedBooks++;}});
  if(addedCats||addedBooks){save();}
  if(addedBooks)setTimeout(function(){toast("已为你加入 "+addedBooks+" 本新教材 📚",true);},400);
}

/* ---------- persistence ---------- */
const VER="v2026.10.11";
const KEY="owen_read_island_v1";
let state=load();
function load(){
  try{const r=localStorage.getItem(KEY);if(r)return Object.assign(empty(),JSON.parse(r));}catch(e){}
  return empty();
}
function empty(){return{
  name:"Owen",age:13,streak:0,lastCheckin:"",
  daily:{}, // date -> {minutes,note,bookAlloc,bookAllocNote}
  cats:DEF_CATS.map(c=>({...c})),
  books:[],
  rate:1,goal:30,
  islands:ISLANDS.map(is=>({...is,unlocked:false})),
  wallet:{balance:0,log:[]},   // 零花钱存钱罐：余额 + 每笔流水
  care:{},                     // 宠物照料：petId -> {full, lastFed}
  voiceOn:true,                // 宠物童声开关
  version:VER
};}
function save(){localStorage.setItem(KEY,JSON.stringify(state));}
const todayStr=new Date().toISOString().slice(0,10);
const fmtC=n=>(Math.round(n*10)/10).toFixed(1);

/* ---------- 版本 & 状态补全（兼容旧数据） ---------- */
function normalize(){
  state.wallet=state.wallet||{balance:0,log:[]};
  state.wallet.log=state.wallet.log||[];
  state.care=state.care||{};
  if(typeof state.age!=="number"||state.age<1)state.age=13;
  if(typeof state.voiceOn!=="boolean")state.voiceOn=true;
  if(typeof state.version!=="string")state.version=VER;
}

/* ---------- stars / coins ---------- */
function stars(){return Object.keys(state.daily).filter(d=>state.daily[d].minutes>0).length;}
function coins(){return state.wallet?state.wallet.balance:0;}
function totalMin(){return Object.values(state.daily).reduce((s,d)=>s+(d.minutes||0),0);}
function doneBooks(){return state.books.filter(b=>b.done).length;}
function dayDiff(a,b){return Math.round((new Date(b)-new Date(a))/86400000);}

/* ---------- helpers ---------- */
const $=id=>document.getElementById(id);
function toast(msg,good){const t=$("toast");t.textContent=msg;t.className="toast"+(good?" on good":" on");
  clearTimeout(t._t);t._t=setTimeout(()=>t.classList.remove("on"),1900);}

/* ---------- render: header ---------- */
function renderTop(){$("coinTop").textContent=fmtC(coins());}

/* ---------- render: today ---------- */
function renderToday(){
  const d=state.daily[todayStr];
  const mins=d?d.minutes:0;
  const pct=Math.min(100,Math.round(mins/state.goal*100));
  const circ=2*Math.PI*84;
  $("ring").style.strokeDashoffset=circ*(1-pct/100);
  $("ringNum").innerHTML=mins+'<small> 分钟</small>';
  $("pctTop").textContent=pct+"%";
  $("goalV").innerHTML=state.goal+'<small> 分钟</small>';
  const dstr=new Date();
  const wd="日一二三四五六"[dstr.getDay()];
  $("todayDate").textContent="星期"+wd;
  $("todayStatus").textContent = d&&d.minutes>0 ?
    `已打卡 ${mins} 分钟 ✅${d.note?` · ${d.note.slice(0,30)}${d.note.length>30?"…":""}`:""}` :
    "还没有打卡，来读一会儿书吧～";
  $("saveCheckin").textContent = d&&d.minutes>0 ? "🔁 更新今日打卡" : "✅ 完成打卡";
  $("checkinMeta").innerHTML = d&&d.minutes>0 ? `<div class="hint">已打卡 ${mins} 分钟</div>`:"";
  // streak
  renderStreak();
}
function renderStreak(){
  const days=lastNdays(7);
  const cont=state.streak;
  let html='<div class="streak">';
  days.forEach((d,i)=>{
    const hit=state.daily[d]&&state.daily[d].minutes>0;
    const isToday=d===todayStr;
    html+=`<div class="d ${hit?"on":""} ${isToday?"today":""}">${i+1}</div>`;
  });
  html+='</div>';
  const sc=$("streakStreak");sc.innerHTML=html;
  $("streakLab").innerHTML=`连续 <b style="color:var(--gold)">${cont}</b> 天 · 共 ${stars()} 枚 ⭐ · 值 ${fmtC(coins())} 元`;
  // reset custom inputs
}
function lastNdays(n){const a=[];const now=new Date();for(let i=n-1;i>=0;i--){const dd=new Date(now);dd.setDate(now.getDate()-i);a.push(dd.toISOString().slice(0,10));}return a;}

/* duration segs */
function buildDurSegs(){
  const pre=[30,45,60,90];
  const wrap=$("durSegs");wrap.innerHTML="";
  pre.forEach(p=>{const b=document.createElement("div");b.className="seg";b.textContent=p+" 分钟";
    b.onclick=()=>{document.querySelectorAll("#durSegs .seg").forEach(x=>x.classList.remove("on"));
      b.classList.add("on");$("durCustom").value="";};
    wrap.appendChild(b);});
}

/* ---------- checkin save ---------- */
function getSelMinutes(){
  const on=document.querySelector("#durSegs .seg.on");
  if(on)return parseInt(on.textContent);
  const c=parseInt($("durCustom").value);
  return c>0?c:0;
}
function saveCheckin(){
  const mins=getSelMinutes();
  const note=$("noteInput").value.trim();
  if(mins<=0){toast("请选择或输入今天阅读的分钟数");return;}
  const prev=state.daily[todayStr];
  const firstToday=!prev||!prev.minutes;
  state.daily[todayStr]={minutes:mins,note:note,bookAlloc:prev&&prev.bookAlloc||{},bookAllocNote:prev&&prev.bookAllocNote||{}};
  // streak: if yesterday also had a check-in, continue; else start fresh at 1
  const yStrP=lastNdays(1)[0];
  if(firstToday){
    if(state.daily[yStrP]&&state.daily[yStrP].minutes>0)state.streak+=1;
    else state.streak=1;
  }
  if(note)toast("打卡成功，写了一篇笔记 ✍️",true);
  else toast(`打卡成功 +${mins} 分钟`,true);
  save();renderAll();
}

/* ---------- goal step ---------- */
function stepGoal(d){state.goal=Math.max(5,Math.min(240,state.goal+d*5));save();renderAll();}

/* ---------- render: books ---------- */
let curCat="all";
function renderCats(){
  const wrap=$("catTabs");wrap.innerHTML="";
  const all=document.createElement("div");all.className="tab"+(curCat==="all"?" on":"");all.textContent="全部";all.onclick=()=>{curCat="all";renderAll();};
  wrap.appendChild(all);
  state.cats.forEach(c=>{
    const t=document.createElement("div");t.className="tab"+(curCat===c.id?" on":"");
    t.textContent=c.emoji+" "+c.name;t.onclick=()=>{curCat=c.id;renderAll();};
    wrap.appendChild(t);
  });
}
function booksFor(cat){return state.books.filter(b=>cat==="all"||b.cat===cat);}
function renderBooks(){
  renderCats();
  const list=$("bookList");list.innerHTML="";
  const books=booksFor(curCat);
  if(!books.length){list.innerHTML=`<div class="empty"><div class="em">📚</div><p>这一格还没有书</p><p>点上面「添加一本书」，把想读的书放进来吧</p></div>`;return;}
  books.forEach(b=>{
    const cat=state.cats.find(c=>c.id===b.cat)||{name:"未分类",emoji:"📗"};
    const el=document.createElement("div");el.className="book"+(b.done?" done":"");
    const prog=Math.min(100,Math.round(b.read/cat.goal*100));
    el.innerHTML=`
      <div class="em">${cat.emoji}</div>
      <div class="info">
        <div class="tt">${b.title}</div>
        <div class="cat">${cat.name} · 目标 ${cat.goal} 分钟</div>
        <div class="prog"><i style="width:${prog}%"></i></div>
        <div class="meta">已读 ${b.read} / ${cat.goal} 分钟 · 笔记 ${b.notes.length} 条${b.done?" · 🪙+1":""}</div>
      </div>
      <div class="pct">${prog}%</div>
      ${b.done?'<div class="reward">+🪙1</div>':''}`;
    el.onclick=()=>openBook(b);
    list.appendChild(el);
  });
}
function openBook(b){
  const cat=state.cats.find(c=>c.id===b.cat)||{name:"未分类",emoji:"📗"};
  const sheet=$("sheet");
  sheet.innerHTML=`
    <div class="sheet-h">
      <div class="em">${cat.emoji}</div>
      <div class="t">${b.title}<small style="display:block;font-size:12px;color:var(--ink3);font-weight:700;margin-top:3px">${cat.name} · 目标 ${cat.goal} 分钟</small></div>
      <div class="x" onclick="closeSheet()">✕</div>
    </div>
    <div class="hint">点日期，为某一天记录的阅读加到这本书上。每格填分钟数（留空=没读），下面再写一句笔记。</div>
    <button class="btn open-pdf" id="openPdfBtn">📖 打开课本（PDF）</button>
    <div class="hint" style="margin-top:4px">在电脑上打开这本教材原文；手机离线打不开电脑里的文件，可在手机上用下面的「章节」勾读过的章来记录进度。</div>
    <div class="chap-box" id="chapBox"></div>
    <div class="slot" id="slotGrid"></div>
    <label class="f-lab" id="curDayLab">选择日期</label>
    <div style="display:flex;gap:8px;align-items:center">
      <input type="number" id="slotMin" min="0" placeholder="读了几分钟" style="flex:1">
      <button class="btn btn-ghost btn-sm icon-btn" onclick="slotApply()">记入</button>
    </div>
    <label class="f-lab" style="margin-top:10px">这一天的笔记</label>
    <textarea id="slotNote" placeholder="一句话记录……"></textarea>
    <div class="book-actions">
      <button class="btn btn-ghost btn-sm" id="addSlotMin">＋ 加 30 分钟</button>
      <button class="btn btn-ghost btn-sm danger" onclick="delBook('${b.id}')">删除这本书</button>
    </div>`;
  renderSlots(b,sheet);
  renderChapters(b,sheet);
  let curDay=todayStr;
  $("openPdfBtn").onclick=()=>openPdf(b);
  $("addSlotMin").onclick=()=>{const inp=sheet.querySelector("#slotMin");inp.value=(parseInt(inp.value)||0)+30;};
  openSheet();
  window._curBook=b.id;window._curDay=curDay;
  sheet.querySelector("#curDayLab").textContent="已选日期 "+curDay;
}
function ensureChapters(b){
  if(b.chapters&&b.chapters.length)return;
  const N=8;b.chapters=[];
  for(let i=1;i<=N;i++)b.chapters.push({name:"第"+i+"章",done:false});
}
function renderChapters(b,host){
  ensureChapters(b);
  const box=host.querySelector("#chapBox");if(!box)return;box.innerHTML="";
  const lab=document.createElement("div");lab.className="chap-lab";lab.textContent="📑 章节进度（勾选读过的章，自动记进度）";box.appendChild(lab);
  b.chapters.forEach((ch,i)=>{
    const r=document.createElement("div");r.className="chap"+(ch.done?" done":"");
    r.innerHTML=`<span class="ck">${ch.done?"✅":"⬜"}</span><span class="cn">${ch.name}</span>`;
    r.onclick=()=>toggleChapter(b,i);
    box.appendChild(r);
  });
  const dd=document.createElement("div");dd.className="chap-done";
  dd.textContent="已读 "+b.chapters.filter(c=>c.done).length+" / "+b.chapters.length+" 章";
  box.appendChild(dd);
}
function toggleChapter(b,idx){
  ensureChapters(b);
  const ch=b.chapters[idx];
  const estMin=Math.max(10,Math.round(b.catGoal/(b.chapters.length||8)));
  const rec=state.daily[todayStr]||(state.daily[todayStr]={minutes:0,note:"",bookAlloc:{},bookAllocNote:{}});
  rec.bookAlloc=rec.bookAlloc||{};
  const cur=rec.bookAlloc[b.id]||0;
  if(ch.done)rec.bookAlloc[b.id]=Math.max(0,cur-estMin);
  else rec.bookAlloc[b.id]=cur+estMin;
  ch.done=!ch.done;
  rec.minutes=(rec.minutes||0)+(ch.done?estMin:-estMin);
  b.read=Object.values(state.daily).reduce((s,day)=>day.bookAlloc&&day.bookAlloc[b.id]?s+(day.bookAlloc[b.id]||0):s,0);
  const wasDone=b.done;b.done=b.read>=b.catGoal;
  if(b.done&&!wasDone){creditIfNewlyDone(b);}
  save();renderAll();openBook(b);
  toast(ch.done?("读完"+ch.name+" ＋"+estMin+" 分钟"):("取消 "+ch.name),true);
}
function openPdf(b){
  if(!b.src){toast("这本书还没有关联文件哦");return;}
  // 真实教材 URL（pep.com.cn）直接在新标签页打开在线阅读；
  // 若 src 是本地 assets/ 路径（APK 内），则用 file:///android_asset/ 前缀。
  let raw=b.src;
  if(/^https?:\/\//i.test(raw)){
    window.open(raw,"_blank");
    toast("已打开在线课本，可在手机上阅读 📖");
    return;
  }
  raw=raw.replace(/\\\\/g,"/");
  if(/^assets\\\//.test(raw))raw="file:///android_asset/"+raw.slice(8);
  else if(/^assets\//.test(raw))raw="file:///android_asset/"+raw.slice(7);
  else{let segs=raw.split("/");raw="file:///"+segs.map((s,i)=>i===0?s:encodeURIComponent(s)).join("/");}
  toast("正在打开课本，请在电脑上查看 📖");
  try{window.open(raw,"_blank");}catch(e){location.href=raw;}
}
function renderSlots(b,sheet){
  const grid=sheet.querySelector("#slotGrid");if(!grid)return;grid.innerHTML="";
  const days=Object.keys(state.daily).sort().reverse();
  const recent=days.slice(0,10);
  recent.forEach(d=>{
    const s=document.createElement("div");s.className="slot-cell";
    const rec=state.daily[d];
    const mm=rec&&rec.bookAlloc&&rec.bookAlloc[b.id]?rec.bookAlloc[b.id]:"";
    s.innerHTML=`<div class="dt">${d}</div><input type="number" class="mm" min="0" placeholder="分钟" value="${mm}">`;
    s.querySelector(".mm").onchange=(e)=>{if(rec)rec.bookAlloc=rec.bookAlloc||{};if(rec)rec.bookAlloc[b.id]=parseInt(e.target.value)||0;rec&&save();};
    s.querySelector(".dt").style.cursor="pointer";
    s.querySelector(".dt").onclick=()=>{window._curDay=d;sheet.querySelector("#curDayLab").textContent="已选日期 "+d;sheet.querySelector("#slotMin").value=rec&&rec.bookAlloc&&rec.bookAlloc[b.id]?rec.bookAlloc[b.id].toString():"";sheet.querySelector("#slotNote").value=(rec&&rec.bookAllocNote&&rec.bookAllocNote[b.id])||"";};
    grid.appendChild(s);
  });
  if(!recent.length){const s=document.createElement("div");s.className="slot-empty";s.textContent="还没有阅读记录，点「记入」添加今天";grid.appendChild(s);}
}
function slotApply(){
  const bid=window._curBook,d=window._curDay;const m=parseInt($("slotMin").value)||0;const n=$("slotNote").value.trim();
  const b=state.books.find(x=>x.id===bid);if(!b)return;
  const wasDone=b.done;
  const rec=state.daily[d]||(state.daily[d]={minutes:0,note:"",bookAlloc:{},bookAllocNote:{}});
  const oldM=rec.bookAlloc&&rec.bookAlloc[bid]?rec.bookAlloc[bid]||0:0;
  rec.minutes=(rec.minutes||0)-oldM+m;
  rec.bookAlloc=rec.bookAlloc||{};rec.bookAlloc[bid]=m;
  rec.bookAllocNote=rec.bookAllocNote||{};if(n)rec.bookAllocNote[bid]=n;
  // recompute this book's total from all day records
  b.read=Object.values(state.daily).reduce((s,day)=>day.bookAlloc&&day.bookAlloc[bid]?s+(day.bookAlloc[bid]||0):s,0);
  b.done=b.read>=b.catGoal;
  if(b.done&&!wasDone)creditIfNewlyDone(b);
  save();renderAll();openBook(b);
  if(!(b.done&&!wasDone))toast(m?("记入 "+m+" 分钟 ✅"):"已清零",true);
}
function creditIfNewlyDone(b){
  state.wallet.balance=Math.round((state.wallet.balance+state.rate)*100)/100;
  state.wallet.log.unshift({t:todayStr,type:"earn",amount:state.rate,note:"读完《"+b.title.slice(0,12)+(b.title.length>12?"…":"")+"》"});
  toast("🎉 读完啦！零花钱 +¥"+fmtC(state.rate),true);
}
function delBook(id){if(!confirm("确定删除这本书吗？"))return;const b=state.books.find(x=>x.id===id);if(!b)return;const wasDone=b.done;state.books=state.books.filter(x=>x.id!==id);if(wasDone){state.wallet.balance=Math.max(0,Math.round((state.wallet.balance-state.rate)*100)/100);state.wallet.log.unshift({t:todayStr,type:"out",amount:state.rate,note:"删除《"+(b.title.slice(0,12))+"》（已读完）"});}closeSheet();save();renderAll();toast("已删除");}

/* add book */
function addBook(catId){
  const cat=state.cats.find(c=>c.id===catId);
  const sheet=$("sheet");
  sheet.innerHTML=`
    <div class="sheet-h"><div class="em">${cat?cat.emoji:"📚"}</div><div class="t">添加一本书</div><div class="x" onclick="closeSheet()">✕</div></div>
    <label class="f-lab">分类</label>
    <select id="nbCat">${state.cats.map(c=>`<option value="${c.id}" ${c.id===catId?"selected":""}>${c.emoji} ${c.name}</option>`).join("")}</select>
    <label class="f-lab">书名</label>
    <input type="text" id="nbTitle" placeholder="比如：《哈利·波特与魔法石》">
    <label class="f-lab">这本书要读多少分钟？（完成后换零花钱）</label>
    <div class="row2">
      <input type="number" id="nbGoal" min="30" step="30" value="300">
      <div style="align-self:center" class="hint">默认 300 分钟（5 小时）</div>
    </div>
    <button class="btn btn-primary" id="nbSave" style="margin-top:14px">＋ 加进书架</button>`;
  $("nbSave").onclick=()=>{
    const cid=$("nbCat").value;const t=$("nbTitle").value.trim();
    if(!t){toast("请填书名");return;}
    const g=Math.max(30,parseInt($("nbGoal").value)||300);
    state.books.push({id:"b"+Date.now(),title:t,cat:cid,read:0,catGoal:g,notes:[],done:false});
    closeSheet();save();curCat=cid;renderAll();toast("已加入书架 📚",true);
  };
  openSheet();
}
function addCat(){
  const sheet=$("sheet");
  sheet.innerHTML=`
    <div class="sheet-h"><div class="em">🗂️</div><div class="t">新增分类</div><div class="x" onclick="closeSheet()">✕</div></div>
    <label class="f-lab">分类名（比如 历史阅读 / 日记写作 / 编程）</label>
    <input type="text" id="ncName" placeholder="分类名称">
    <label class="f-lab">图标（选一个）</label>
    <div class="segs" id="ncEmoji"></div>
    <label class="f-lab">默认目标分钟数</label>
    <input type="number" id="ncGoal" min="30" step="30" value="300">
    <button class="btn btn-primary" id="ncSave" style="margin-top:14px">＋ 创建分类</button>`;
  const ems=["📗","📕","📘","📙","📓","📔","✒️","🧮","🔭","🌌","⚗️","📐","🌍","💻","🎵","🎨"];
  const ew=$("ncEmoji");ems.forEach((e,i)=>{const d=document.createElement("div");d.className="seg"+(i===0?" on":"");d.textContent=e;
    d.onclick=()=>{ew.querySelectorAll(".seg").forEach(x=>x.classList.remove("on"));d.classList.add("on");};ew.appendChild(d);});
  $("ncSave").onclick=()=>{
    const n=$("ncName").value.trim();if(!n){toast("请填分类名");return;}
    const em=ew.querySelector(".seg.on").textContent;
    const colors=["#5fe3b0","#58b6ff","#ffb454","#c98bff","#ff6f91","#78f0d0"];
    state.cats.push({id:"c"+Date.now(),name:n,emoji:em,color:colors[state.cats.length%colors.length],goal:Math.max(30,parseInt($("ncGoal").value)||300)});
    closeSheet();save();renderAll();toast("已创建分类 🗂️",true);
  };
  openSheet();
}

/* ---------- sheet ---------- */
function openSheet(){$("overlay").classList.add("on");}
function closeSheet(){$("overlay").classList.remove("on");}
$("overlay").onclick=e=>{if(e.target===$("overlay"))closeSheet();};

/* ---------- render: map ---------- */
function renderMap(){
  const wrap=$("islands");wrap.innerHTML="";
  state.islands.forEach((is,i)=>{
    const cur=is.curValue(),max=is.goalVal,done=cur>=max,isDone=is.unlocked||done;
    const el=document.createElement("div");
    el.className="island"+(isDone?" done":" "+(is.id==="i1"?"":""));
    el.style.setProperty("--c",is.color);
    const prog=Math.min(100,Math.round(cur/max*100));
    const lock=isDone?"🚩":"🔒";
    el.innerHTML=`
      <div class="body">
        <div class="top">
          <div class="pet ${isDone?"":"dim"}">${is.pet}</div>
          <div class="it">
            <div class="no">${is.no} · ${is.unlocked?"已解锁":"未解锁"}</div>
            <div class="nm">${is.name}<small>${is.petName} · ${is.petTitle}</small></div>
          </div>
          <div class="lock">${lock}</div>
        </div>
        <div class="desc">${is.desc}</div>
        <div class="goalbox">
          <div class="glab">解锁条件 · ${is.goalLabel||"目标"}</div>
          <div class="gval"><b>${cur}</b> / ${max} ${is.unit}</div>
          <div class="bar"><i style="width:${prog}%"></i></div>
        </div>
        <div class="unlock">${isDone?"✅ 已解锁 "+is.petName:"继续加油，解锁 "+is.petName}</div>
      </div>`;
    wrap.appendChild(el);
    // dock between islands
    if(i<state.islands.length-1){
      const dk=document.createElement("div");dk.className="dock";dk.innerHTML='<span class="boat">⛵</span>';wrap.appendChild(dk);
    }
  });
}

/* ---------- island goal logic (attach to proto) ---------- */
function attachIslandLogic(){
  const map={
    streak:  ()=>Math.max(0,state.streak),
    book:    is=>state.books.filter(b=>b.done&&b.cat===is.catId).length,
    dual:    is=>state.books.filter(b=>b.done&&(b.cat===is.catId1||b.cat===is.catId2)).length,
    total:   ()=>Object.values(state.daily).reduce((s,d)=>s+(d.minutes||0),0)
  };
  state.islands.forEach(si=>{
    const base=ISLANDS.find(x=>x.id===si.id);
    si.goalType=base.goalType;si.catId=base.catId;si.catId1=base.catId1;si.catId2=base.catId2;
    si.curValue=()=>{const f=map[si.goalType];return typeof f==="function"?f(si):f();};
    si.checkDone=()=>si.curValue()>=si.goalVal;
    if(!si.unlocked&&si.checkDone()){si.unlocked=true;save();toast("解锁新岛屿：" + si.petName + " 🎉",true);confetti();}
  });
}

/* ---------- render: pets ---------- */
function renderPets(){
  const g=$("petGrid");g.innerHTML="";
  state.islands.forEach(is=>{
    const c=document.createElement("div");c.className="pet-card"+(is.unlocked?" done":" dim");
    c.style.setProperty("--c",is.color);
    c.innerHTML=`<div class="pe">${is.pet}</div><div class="pn">${is.petName}</div><div class="pt">${is.petTitle}</div>
      <div class="pl">${is.goalVal} ${is.unit}${is.unlocked?"":" 解锁"}</div>${is.unlocked?'<div class="badge">🎉</div>':''}`;
    c.onclick=()=>openPet(is);
    g.appendChild(c);
  });
}

/* ---------- 成长积分 & 等级 ---------- */
const LV=[
  {lv:1,name:"阅读萌芽",need:0},
  {lv:2,name:"阅读起步",need:100},
  {lv:3,name:"阅读达人",need:300},
  {lv:4,name:"阅读探险家",need:600},
  {lv:5,name:"阅读大师",need:1000},
];
function levelInfo(){
  const p=totalMin();let cur=LV[0],next=null;
  for(let i=0;i<LV.length;i++){if(p>=LV[i].need){cur=LV[i];next=LV[i+1]||null;}}
  return {p,cur,next};
}
function renderLevel(){
  const {p,cur,next}=levelInfo();
  const span=next?(next.need-cur.need):1;
  const prog=next?Math.min(100,Math.round((p-cur.need)/span*100)):100;
  const left=next?Math.max(0,next.need-p):0;
  const emoji=["🌱","🌟","🏆","🚀","🎓"][cur.lv-1]||"🌟";
  $("lvHost").innerHTML=`
    <div class="lv-top">
      <div class="lv-emoji">${emoji}</div>
      <div><div class="lv-name">Lv.${cur.lv} ${cur.name}</div>
      <div class="lv-sub">${next?("距离 Lv."+next.lv+" "+next.name+" 还差 "+left+" 分"):"已达最高等级 🎉"}</div></div>
    </div>
    <div class="lv-bar"><i style="width:${prog}%"></i></div>
    <div class="lv-meta"><span>积分 ${p}</span><span>${next?("目标 "+next.need):"MAX"}</span></div>`;
}

/* ---------- 徽章 ---------- */
function badgeList(){
  const p=totalMin();
  return [
    {id:"b1",e:"🌱",n:"阅读第一步",d:"完成第一次打卡",done:stars()>0},
    {id:"b2",e:"🔥",n:"坚持7天",d:"连续阅读 7 天",done:state.streak>=7},
    {id:"b3",e:"📚",n:"小小书虫",d:"读完 3 本书",done:doneBooks()>=3},
    {id:"b4",e:"🏆",n:"阅读达人",d:"等级达到 Lv.3",done:p>=300},
    {id:"b5",e:"⏰",n:"时间旅行者",d:"累计阅读 1000 分钟",done:p>=1000},
    {id:"b6",e:"🎓",n:"阅读大师",d:"等级达到 Lv.5",done:p>=1000},
  ];
}
function renderBadges(){
  const bs=badgeList();
  $("badgeHost").innerHTML='<div class="badge-grid">'+bs.map(b=>
    `<div class="badge-cell ${b.done?"done":"lock"}"><div class="be">${b.done?b.e:"🔒"}</div><div class="bn">${b.n}</div><div class="bd">${b.d}</div></div>`
  ).join("")+'</div>';
}

/* ---------- 阅读报告 ---------- */
function weekMin(){return lastNdays(7).reduce((s,d)=>s+((state.daily[d]&&state.daily[d].minutes)||0),0);}
function monthMin(){const now=new Date(),y=now.getFullYear(),m=now.getMonth();
  return Object.keys(state.daily).filter(d=>{const dt=new Date(d);return dt.getFullYear()===y&&dt.getMonth()===m;})
    .reduce((s,d)=>s+(state.daily[d].minutes||0),0);}
function longestStreak(){
  const ds=Object.keys(state.daily).filter(d=>state.daily[d].minutes>0).sort();
  let best=0,run=0,prev=null;
  for(const d of ds){if(prev&&dayDiff(prev,d)===1)run++;else run=1;best=Math.max(best,run);prev=d;}
  return best;
}
function renderReport(){
  const days=lastNdays(7);
  const max=Math.max(1,...days.map(d=>(state.daily[d]&&state.daily[d].minutes)||0));
  $("reportHost").innerHTML=`
    <div class="report-grid">
      <div class="rg"><div class="rv">${weekMin()}</div><div class="rl">本周分钟</div></div>
      <div class="rg"><div class="rv">${monthMin()}</div><div class="rl">本月分钟</div></div>
      <div class="rg"><div class="rv">${totalMin()}</div><div class="rl">累计分钟</div></div>
      <div class="rg"><div class="rv">${doneBooks()}</div><div class="rl">已读完</div></div>
      <div class="rg"><div class="rv">${longestStreak()}</div><div class="rl">最长连续</div></div>
      <div class="rg"><div class="rv">${state.streak}</div><div class="rl">当前连续</div></div>
    </div>
    <div class="trend">${days.map(d=>{const m=(state.daily[d]&&state.daily[d].minutes)||0;
      return `<div class="tb"><div class="bar2" style="height:${Math.max(3,Math.round(m/max*100))}%"></div><div class="dl">${d.slice(5)}</div></div>`;}).join("")}</div>`;
}

/* ---------- 阅读计时器 ---------- */
let timerInt=null,timerSec=0;
function fmtTime(s){const m=Math.floor(s/60),ss=s%60;return String(m).padStart(2,"0")+":"+String(ss).padStart(2,"0");}
function timerStart(){
  timerSec=0;$("timerDisp").textContent="00:00";$("timerBtn").textContent="⏹ 结束计时";
  $("timerBtn").onclick=timerStop;
  timerInt=setInterval(()=>{timerSec++;$("timerDisp").textContent=fmtTime(timerSec);},1000);
  toast("开始阅读啦，专注 📖");
}
function timerStop(){
  clearInterval(timerInt);$("timerBtn").textContent="⏱ 专注计时";$("timerBtn").onclick=timerStart;
  const m=Math.round(timerSec/60);
  if(m>0){
    $("durCustom").value=m;
    document.querySelectorAll("#durSegs .seg").forEach(x=>x.classList.remove("on"));
    $("noteInput").value=($("noteInput").value?$("noteInput").value+" ":"")+`阅读 ${m} 分钟`;
    switchView("today");
    toast("已帮你记 "+m+" 分钟，写下笔记去打卡 🚀",true);
  }else{toast("时间太短啦，再读一会儿～");}
}

/* ---------- 宠物互动 ---------- */
function openPet(is){
  if(!is.unlocked){toast("先去冒险地图解锁这只宠物吧 🗺️");return;}
  const care=state.care[is.id]||{full:70};
  state.care[is.id]=care;
  const sheet=$("sheet");
  sheet.innerHTML=`
    <div class="sheet-h"><div class="em" style="font-size:34px">${is.pet}</div>
      <div class="t">${is.petName}<small style="display:block;font-size:12px;color:var(--ink3);font-weight:700;margin-top:3px">${is.petTitle}</small></div>
      <div class="x" onclick="closeSheet()">✕</div></div>
    <div class="hint">点我一下，我有话对你说～</div>
    <div class="care-row"><span>🍎 饱食度</span><div class="bar"><i style="width:${care.full}%"></i></div><span>${care.full}%</span></div>
    <div style="display:flex;gap:8px;margin-top:14px;flex-wrap:wrap">
      <button class="btn btn-ghost btn-sm" id="feedPet">🌰 喂点东西</button>
      <button class="btn btn-ghost btn-sm" id="sleepPet">😴 睡一觉</button>
      <button class="btn btn-ghost btn-sm" id="speakPet">🔊 童声</button>
      <button class="btn btn-ghost btn-sm" id="voiceToggle">${state.voiceOn?"🔊 童声：开":"🔇 童声：关"}</button>
    </div>
    <p class="hint" style="margin-top:12px">💡 没声音：调大媒体音量、关静音；缺中文语音包就去「设置 → 文字转语音」换成中文引擎（如讯飞/Google）。</p>`;
  openSheet();
  $("feedPet").onclick=()=>{care.full=Math.min(100,care.full+20);save();openPet(is);toast("好吃！饱食度 +20",true);};
  $("sleepPet").onclick=()=>{care.full=Math.min(100,care.full+5);save();openPet(is);toast("睡了个好觉 😴",true);};
  $("speakPet").onclick=()=>speakPet(is);
  $("voiceToggle").onclick=()=>{state.voiceOn=!state.voiceOn;save();openPet(is);toast(state.voiceOn?"童声已开 🔊":"童声已关 🔇",true);};
}
function speakPet(is){
  if(!state.voiceOn){toast("童声已关，点「童声：开」再试");return;}
  if(!("speechSynthesis" in window)){toast("这个浏览器不支持童声");return;}
  const u=new SpeechSynthesisUtterance(petTalk(is));
  u.lang="zh-CN";u.rate=.95;u.pitch=1.1;
  const vs=speechSynthesis.getVoices().filter(v=>/zh|Chinese/i.test(v.lang));
  if(vs[0])u.voice=vs[0];
  speechSynthesis.cancel();speechSynthesis.speak(u);
}
function petTalk(is){
  const msgs=[
    `我是${is.petName}，今天也读了好多书，你真棒！`,
    `${state.name}，我们一起去冒险岛探险吧！`,
    `阅读让我和你都变得更聪明啦，继续保持哦～`,
    `又解锁新进度啦，你是我最好的小伙伴！`
  ];
  return msgs[Math.floor(Math.random()*msgs.length)];
}

/* ---------- 存钱罐明细 ---------- */
function renderWalletLog(){
  const h=$("walletLog");
  if(!state.wallet.log.length){h.innerHTML='<div class="empty">还没有记录，读完一本书会自动存进来 🪙</div>';return;}
  h.innerHTML=state.wallet.log.slice(0,30).map(w=>
    `<div class="wl ${w.type}"><span>${w.t} ${w.note}</span><span class="wa">${w.type==="out"?"-":"+"}${fmtC(w.amount)}</span></div>`
  ).join("");
}

/* ---------- settings ---------- */
function renderSettings(){
  $("rateInput").value=state.rate;$("goalInput").value=state.goal;
  $("nameInput").value=state.name;$("ageInput").value=state.age;
  $("walletBal").textContent="¥"+fmtC(state.wallet.balance);
  $("rateShow").textContent=state.rate;
  renderWalletLog();
}
function bindSettings(){
  $("rateInput").onchange=()=>{state.rate=Math.max(0.5,parseFloat($("rateInput").value)||1);save();renderAll();toast("兑换率已更新",true);};
  $("goalInput").onchange=()=>{state.goal=Math.max(5,parseInt($("goalInput").value)||30);save();renderAll();};
  $("exportBtn").onclick=()=>{
    const blob=new Blob([JSON.stringify({state,exported:new Date().toISOString()})],{type:"application/json"});
    const a=document.createElement("a");a.href=URL.createObjectURL(blob);
    a.download="owen_read_island_"+todayStr+".json";a.click();toast("已导出备份",true);};
  $("importBtn").onclick=()=>$("importFile").click();
  $("importFile").onchange=e=>{
    const f=e.target.files[0];if(!f)return;const r=new FileReader();
    r.onload=()=>{try{const j=JSON.parse(r.result);state=Object.assign(empty(),j.state);save();renderAll();toast("导入成功",true);}catch(err){toast("文件格式不对");}};
    r.readAsText(f);};
  $("openSet").onclick=()=>switchView("set");
  // 我是谁
  $("saveName").onclick=()=>{
    const n=$("nameInput").value.trim(),a=parseInt($("ageInput").value);
    if(n)state.name=n;
    if(a>0&&a<=99)state.age=a;
    save();renderAll();toast((n||state.name)+" "+(state.age)+"岁 已保存",true);
  };
  // 零花钱存钱罐
  $("walletOut").onclick=()=>{const am=5;state.wallet.balance=Math.max(0,Math.round((state.wallet.balance-am)*100)/100);
    state.wallet.log.unshift({t:todayStr,type:"out",amount:am,note:"取出零花钱"});save();renderAll();toast("取出 ¥"+am,true);};
  $("walletIn").onclick=()=>{const am=5;state.wallet.balance=Math.round((state.wallet.balance+am)*100)/100;
    state.wallet.log.unshift({t:todayStr,type:"in",amount:am,note:"存入/修正"});save();renderAll();toast("存入 ¥"+am,true);};
  // 装到手机桌面
  $("copyUrl").onclick=()=>{
    const u=location.href;
    if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(u).then(()=>toast("已复制本页地址",true),()=>toast("复制失败，请手动复制地址栏"));
    else toast("请手动复制地址栏的链接");
  };
}

/* ---------- nav ---------- */
function switchView(v){
  document.querySelectorAll("nav .n").forEach(n=>n.classList.toggle("on",n.dataset.v===v));
  document.querySelectorAll(".view").forEach(s=>s.classList.toggle("active",s.id==="v-"+v));
  $("main").scrollTop=0;
}
function bindNav(){document.querySelectorAll("nav .n").forEach(n=>n.onclick=()=>switchView(n.dataset.v));}

/* ---------- confetti ---------- */
function confetti(){
  const ems=["🎉","⭐","🪙","✨","🎈","🏆"];
  for(let i=0;i<18;i++){const s=document.createElement("div");s.className="cf";
    s.textContent=ems[Math.floor(Math.random()*ems.length)];
    s.style.left=Math.random()*100+"%";s.style.top="-20px";s.style.animation=`cf 1.4s ease forwards`;
    document.body.appendChild(s);setTimeout(()=>s.remove(),1400);}
  const st=document.createElement("style");st.textContent="@keyframes cf{to{transform:translateY(90dvh) rotate(360deg);opacity:0}}";
  document.head.appendChild(st);
}

/* ---------- render all ---------- */
function renderAll(){attachIslandLogic();renderTop();renderToday();renderBooks();renderMap();renderPets();renderLevel();renderBadges();renderReport();renderSettings();}

/* ---------- init ---------- */
window.addEventListener("load",()=>{
  buildDurSegs();bindNav();bindSettings();mergeSeed();normalize();
  // save checkin button
  $("saveCheckin").onclick=saveCheckin;
  $("addBookBtn").onclick=()=>addBook(curCat==="all"?"en":curCat);
  $("addCatBtn").onclick=addCat;
  // 阅读计时器
  $("timerBtn").onclick=timerStart;
  renderAll();
});
</script>
</body>
</html>
