/* 芽芽 · 学习陪伴 —— 应用样式（与设计画板共用 tokens） */
:root{
  --cream:#FBF7F0; --cream-2:#F4EFE5; --card:#FFFFFF;
  --mint:#6BC5A8; --mint-d:#3E9E82; --mint-l:#E7F5F0;
  --peach:#FFB59E; --peach-d:#E08A72; --peach-l:#FFF0EA;
  --sun:#FFD66B; --sun-l:#FFF7DF;
  --ink:#24312C; --ink-2:#5E6F69; --ink-3:#93A19B;
  --line:#EDE6DA; --risk:#E4695C; --risk-l:#FDEDEA;
  --r:18px; --r-lg:26px;
  --shadow:0 10px 30px rgba(36,49,44,.07);
  --shadow-soft:0 4px 14px rgba(36,49,44,.05);
}
*{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html,body{height:100%}
body{
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",system-ui,-apple-system,sans-serif;
  background:var(--cream); color:var(--ink); font-size:13px; line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}
input,textarea,select{font:inherit;color:inherit}
img{display:block;max-width:100%}
h1,h2,h3,h4{line-height:1.3;font-weight:700}
h1{font-size:22px}h2{font-size:17px}h3{font-size:14px}h4{font-size:13px}
p{color:var(--ink-2)}
.muted{color:var(--ink-3)}
.tiny{font-size:10px;color:var(--ink-3);line-height:1.5}
.center{text-align:center}
.row{display:flex;align-items:center;gap:10px}
.between{display:flex;align-items:center;justify-content:space-between;gap:10px}
.col{display:flex;flex-direction:column;gap:6px}
.grow{flex:1;min-width:0}
.hide{display:none!important}

/* ---------- shell ---------- */
#shell{display:flex;min-height:100vh}
.side{
  width:222px;flex:0 0 222px;background:#fff;border-right:1px solid var(--line);
  padding:22px 16px 18px;display:flex;flex-direction:column;gap:6px;position:sticky;top:0;height:100vh;
}
.brand{display:flex;align-items:center;gap:9px;padding:0 8px 16px}
.brand img{width:38px;height:38px;object-fit:contain}
.brand b{display:block;font-size:14px;letter-spacing:.2px}
.brand span{display:block;font-size:9px;color:var(--ink-3);letter-spacing:1.4px}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:12px;
  color:var(--ink-2);font-size:12.5px;font-weight:600;
}
.nav-item .ico{width:20px;text-align:center;font-size:14px;filter:grayscale(.3)}
.nav-item:hover{background:var(--cream)}
.nav-item.on{background:var(--mint-l);color:var(--mint-d)}
.nav-item.on .ico{filter:none}
.side-foot{margin-top:auto;border-top:1px dashed var(--line);padding-top:12px}
.role-chip{display:inline-flex;align-items:center;gap:6px;background:var(--cream);border-radius:20px;padding:4px 10px;font-size:10.5px;color:var(--ink-2)}
.role-chip i{width:6px;height:6px;border-radius:50%;background:var(--mint)}
.main-wrap{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:0 28px;border-bottom:1px solid var(--line);background:rgba(251,247,240,.9);
  backdrop-filter:blur(8px);position:sticky;top:0;z-index:30;
}
.topbar .crumb{font-size:11px;color:var(--ink-3)}
.topbar .crumb b{color:var(--ink);font-size:13px;margin-right:8px}
.top-right{display:flex;align-items:center;gap:10px}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--mint-l);color:var(--mint-d);display:grid;place-items:center;font-weight:700;font-size:12px}
.main{padding:22px 28px 40px;width:100%;max-width:1240px;margin:0 auto;flex:1}
body[data-role="student"] .main,body[data-role="parent"] .main{max-width:860px}
.tabs{display:none}

/* ---------- primitives ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  background:var(--mint-d);color:#fff;border-radius:14px;padding:9px 16px;font-size:12px;font-weight:700;
  box-shadow:0 6px 16px rgba(62,158,130,.22);transition:.16s;
}
.btn:hover{transform:translateY(-1px);background:#358c73}
.btn:disabled{opacity:.5;cursor:default;transform:none;box-shadow:none}
.btn.ghost{background:#fff;color:var(--ink-2);border:1px solid var(--line);box-shadow:none}
.btn.ghost:hover{background:var(--cream)}
.btn.soft{background:var(--sun-l);color:#8a6a10;box-shadow:none}
.btn.sm{padding:6px 12px;border-radius:11px;font-size:11px}
.btn.danger{background:var(--risk-l);color:var(--risk);box-shadow:none}
.btn.block{width:100%}
.icon-btn{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;color:var(--ink-2);border:1px solid var(--line);background:#fff}
.tag{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:700;border-radius:20px;padding:2px 9px;background:var(--mint-l);color:var(--mint-d)}
.code-pill{display:inline-flex;align-items:center;gap:7px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:700;letter-spacing:1.5px;background:var(--sun-l);color:#7d6218;border-radius:9px;padding:3px 9px}
.class-code{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;background:var(--mint-l);border:1px dashed #BFE4D6;border-radius:14px;padding:14px 16px}
.class-code-label{display:block;font-size:11px;font-weight:600;color:var(--ink-3);margin-bottom:4px}
.class-code-num{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:28px;font-weight:700;letter-spacing:7px;color:var(--mint-d);line-height:1.2;margin-bottom:6px}
.class-code-actions{display:flex;gap:8px;flex-wrap:wrap}
.tag.out{background:var(--peach-l);color:var(--peach-d)}
.tag.done{background:#EFF6F1;color:var(--mint-d)}
.tag.lock{background:#F2F0EB;color:var(--ink-3)}
.tag.warn{background:var(--risk-l);color:var(--risk)}
.tag.sun{background:var(--sun-l);color:#8a6a10}
.chip{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--line);border-radius:20px;padding:5px 11px;font-size:10.5px;color:var(--ink-2);font-weight:600}
.chip.on{background:var(--mint-l);border-color:transparent;color:var(--mint-d)}
.panel{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:var(--shadow-soft)}
.panel + .panel{margin-top:14px}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.panel-head h3{font-size:13.5px}
.panel-head p{font-size:10.5px;color:var(--ink-3);margin-top:2px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.split{display:grid;grid-template-columns:1.5fr 1fr;gap:16px;align-items:start}
.divider{height:1px;background:var(--line);margin:14px 0}
.empty{padding:34px 16px;text-align:center;color:var(--ink-3);font-size:11.5px}
.empty .face{font-size:28px;margin-bottom:6px}
.loading{padding:60px 0;text-align:center;color:var(--ink-3);font-size:12px}
.bar{height:7px;border-radius:20px;background:var(--cream-2);overflow:hidden}
.bar > i{display:block;height:100%;border-radius:20px;background:linear-gradient(90deg,var(--mint),#8FD9C0);transition:width .5s}
.bar.peach > i{background:linear-gradient(90deg,var(--peach),#FFD3C4)}
.bar.sun > i{background:linear-gradient(90deg,var(--sun),#FFE59C)}
.stat{padding:11px 12px;border-radius:14px;background:var(--cream);}
.stat .name{font-size:10.5px;color:var(--ink-3);font-weight:600}
.stat .val{font-size:20px;font-weight:800;letter-spacing:-.5px}
.stat .hint{font-size:9.5px;color:var(--ink-3)}
.stat .row{margin-bottom:5px}

/* ---------- boot / toast ---------- */
.boot{height:100vh;display:grid;place-items:center;gap:10px;color:var(--ink-3);font-size:12px}
.toast{
  position:fixed;left:50%;bottom:92px;transform:translate(-50%,16px);z-index:99;
  background:rgba(36,49,44,.92);color:#fff;font-size:11.5px;border-radius:12px;padding:9px 16px;
  opacity:0;pointer-events:none;transition:.22s;max-width:80vw;text-align:center;
}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.bad{background:rgba(190,74,62,.95)}

/* ---------- student home ---------- */
.hero{
  position:relative;overflow:hidden;border-radius:var(--r-lg);padding:20px 20px 18px;
  background:linear-gradient(150deg,#FFFAF0 0%,#F1FAF5 55%,#FFF3EA 100%);
  border:1px solid #F0EADF;box-shadow:var(--shadow);
}
.hero:after{content:"";position:absolute;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(255,214,107,.25),transparent 65%);right:-60px;top:-70px}
.hero-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;position:relative;z-index:2}
.hero-hello{font-size:10.5px;color:var(--ink-3);letter-spacing:.5px}
.hero-name{font-size:21px;font-weight:800;margin:2px 0 4px}
.hero-sub{font-size:10.5px;color:var(--ink-2);max-width:250px}
.hero-pet{display:flex;align-items:flex-end;gap:8px;margin-top:4px;position:relative;z-index:2}
.hero-pet img{width:172px;height:auto;margin:-6px 0 -14px -10px;filter:drop-shadow(0 16px 18px rgba(62,158,130,.22));animation:float 4.2s ease-in-out infinite}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.pet-meta{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 10px}
.pet-meta .chip{background:rgba(255,255,255,.72);border-color:rgba(255,255,255,.9)}
.hero-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:6px}
.hero-stats .stat{background:rgba(255,255,255,.78);backdrop-filter:blur(4px)}
.exp-line{margin-top:12px;background:rgba(255,255,255,.7);border-radius:14px;padding:9px 12px}
.quick{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0}
.quick button{
  background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px 6px 10px;display:grid;gap:3px;
  box-shadow:var(--shadow-soft);transition:.16s;
}
.quick button:hover{transform:translateY(-2px);border-color:var(--mint)}
.quick .qi{font-size:20px}
.quick b{font-size:10.5px}
.quick span{font-size:9px;color:var(--ink-3)}
.section-title{display:flex;align-items:center;justify-content:space-between;margin:18px 2px 9px}
.section-title h3{font-size:13.5px}
.section-title a{font-size:10px;color:var(--ink-3)}
.task{
  display:flex;align-items:center;gap:11px;background:#fff;border:1px solid var(--line);border-radius:16px;
  padding:12px 13px;box-shadow:var(--shadow-soft);margin-bottom:9px;
}
.task .tick{
  width:34px;height:34px;border-radius:11px;background:var(--cream);display:grid;place-items:center;font-size:15px;flex:0 0 34px;
}
.task.done .tick{background:var(--mint-l);color:var(--mint-d)}
.task .t-title{font-size:12.5px;font-weight:700}
.task .t-sub{font-size:9.5px;color:var(--ink-3);margin-top:2px}
.task.done .t-title{color:var(--ink-3);text-decoration:line-through;text-decoration-color:rgba(147,161,155,.5)}
.task .go{font-size:10px;color:var(--mint-d);font-weight:700;white-space:nowrap}
.memory{background:var(--sun-l);border-radius:14px;padding:10px 12px;font-size:10.5px;color:#7d6218;display:flex;gap:8px;margin-top:4px}
.memory b{color:#5f4a0d}

/* ---------- mobile ---------- */
@media (max-width:899px){
  body{padding-bottom:78px;background:var(--cream)}
  #shell{display:block}
  .side{display:none}
  .topbar{height:52px;padding:0 16px;background:rgba(251,247,240,.94)}
  .topbar .crumb b{font-size:14px}
  .main{padding:14px 15px 26px;max-width:none}
  .tabs{
    display:flex;position:fixed;left:0;right:0;bottom:0;height:64px;z-index:40;
    background:rgba(255,255,255,.96);backdrop-filter:blur(10px);border-top:1px solid var(--line);
    padding:6px 4px 4px;justify-content:space-around;align-items:center;
  }
  .tab{display:grid;justify-items:center;gap:1px;font-size:9px;color:var(--ink-3);padding:4px 10px;border-radius:12px;min-width:58px}
  .tab .ti{font-size:18px;line-height:1.25;filter:grayscale(.55);opacity:.75}
  .tab.on{color:var(--mint-d);font-weight:700}
  .tab.on .ti{filter:none;opacity:1}
  .grid-2,.grid-3,.grid-4{grid-template-columns:1fr 1fr;gap:10px}
  .split{grid-template-columns:1fr}
  .panel{padding:15px;border-radius:16px}
  .hero{padding:16px;border-radius:22px}
  .hero-pet img{width:150px;margin-left:-12px}
  .hero-name{font-size:19px}
  .quick{gap:8px}
  .quick button{padding:10px 4px 8px;border-radius:14px}
  .quick .qi{font-size:18px}
  .btn{padding:9px 15px}
  .toast{bottom:84px}
}

/* ---------- tasks view ---------- */
.filter-row{display:flex;gap:7px;margin-bottom:12px;overflow:auto;padding-bottom:2px}
.add-form{display:grid;grid-template-columns:1fr 96px auto;gap:8px}
.field{display:grid;gap:5px}
.field label{font-size:10px;color:var(--ink-3);font-weight:600;letter-spacing:.3px}
.input,.select,textarea.input{
  width:100%;border:1px solid var(--line);background:#fff;border-radius:12px;padding:9px 11px;font-size:12px;outline:0;
  transition:.15s;
}
.input:focus,textarea.input:focus{border-color:var(--mint);box-shadow:0 0 0 3px rgba(107,197,168,.15)}
textarea.input{resize:vertical;min-height:92px;line-height:1.7}
.select{appearance:none;background-image:linear-gradient(45deg,transparent 49%,var(--ink-3) 50%),linear-gradient(-45deg,transparent 49%,var(--ink-3) 50%);background-position:calc(100% - 14px) 50%,calc(100% - 9px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:26px}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.form-note{font-size:9.5px;color:var(--ink-3);margin-top:6px}
.seg{display:inline-flex;background:var(--cream);border-radius:11px;padding:3px}
.seg button{padding:5px 12px;border-radius:9px;font-size:10.5px;color:var(--ink-3);font-weight:600}
.seg button.on{background:#fff;color:var(--mint-d);box-shadow:0 2px 6px rgba(36,49,44,.08)}

/* ---------- quiz ---------- */
.quiz-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.progress{height:6px;border-radius:20px;background:var(--cream-2);overflow:hidden;margin-bottom:16px}
.progress > i{display:block;height:100%;background:linear-gradient(90deg,var(--mint),var(--sun));border-radius:20px;transition:width .35s}
.quiz-card{background:linear-gradient(160deg,#fff,#FCFAF5);border:1px solid var(--line);border-radius:22px;padding:22px 18px;text-align:center;box-shadow:var(--shadow)}
.quiz-q{font-size:30px;font-weight:800;letter-spacing:1px;margin:6px 0 18px}
.opts{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.opt{
  background:#fff;border:1.5px solid var(--line);border-radius:15px;padding:13px;font-size:18px;font-weight:800;
  transition:.15s;
}
.opt:hover{border-color:var(--mint);transform:translateY(-1px)}
.opt.right{border-color:var(--mint);background:var(--mint-l);color:var(--mint-d)}
.opt.wrong{border-color:var(--peach);background:var(--peach-l);color:var(--peach-d)}
.quiz-fb{margin-top:14px;border-radius:15px;padding:13px 15px;font-size:11.5px;text-align:left;background:var(--cream)}
.quiz-fb.ok{background:var(--mint-l);color:#256c56}
.quiz-fb.no{background:var(--sun-l);color:#7d6218}
.quiz-fb b{display:block;margin-bottom:3px;font-size:12px}
.pet-tip{display:flex;gap:9px;align-items:center;margin-top:14px;font-size:10.5px;color:var(--ink-3)}
.pet-tip img{width:44px;height:44px;object-fit:contain}
.streak{display:flex;align-items:center;gap:5px;font-size:10px;color:#8a6a10;background:var(--sun-l);border-radius:20px;padding:3px 10px}

/* ---------- recitation ---------- */
.poem{
  background:linear-gradient(160deg,#FFFDF8,#F8FBF4);border:1px solid var(--line);border-radius:20px;
  padding:18px;text-align:center;margin-bottom:14px;
}
.poem h3{font-size:18px;letter-spacing:2px;margin-bottom:2px}
.poem .author{font-size:10px;color:var(--ink-3);margin-bottom:12px}
.poem .line{font-size:15px;letter-spacing:3px;color:var(--ink);line-height:2.1}
.score-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:14px 0}
.score-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px;text-align:center}
.score-card b{font-size:21px;display:block;letter-spacing:-.5px}
.score-card span{font-size:9.5px;color:var(--ink-3)}
.line-check{display:flex;justify-content:space-between;font-size:11px;padding:7px 0;border-bottom:1px dashed var(--line)}
.line-check:last-child{border:0}
.line-check .bad{color:var(--peach-d)}

/* ---------- chat ---------- */
.chat-wrap{display:flex;flex-direction:column;height:calc(100vh - 190px);min-height:380px;background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden}
.chat-head{display:flex;align-items:center;gap:9px;padding:12px 15px;border-bottom:1px solid var(--line);background:linear-gradient(120deg,#FBF9F2,#F3FAF6)}
.chat-head img{width:38px;height:38px;object-fit:contain}
.chat-head b{font-size:12.5px}
.chat-head span{font-size:9.5px;color:var(--ink-3);display:block}
.chat-body{flex:1;overflow:auto;padding:16px 15px;display:flex;flex-direction:column;gap:11px;background:linear-gradient(180deg,#FDFCF8,#FBF9F4)}
.msg{max-width:82%;padding:10px 13px;border-radius:16px;font-size:12px;line-height:1.7;box-shadow:0 2px 6px rgba(36,49,44,.04);white-space:pre-wrap}
.msg.pet{align-self:flex-start;background:#fff;border:1px solid #F0EAE0;border-bottom-left-radius:6px}
.msg.child{align-self:flex-end;background:var(--mint);color:#fff;border-bottom-right-radius:6px}
.msg .cite{display:block;margin-top:6px;padding-top:6px;border-top:1px dashed rgba(147,161,155,.4);font-size:9.5px;color:var(--ink-3)}
.chat-input{display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--line);background:#fff}
.chat-input input{flex:1;border:1px solid var(--line);border-radius:20px;padding:9px 14px;font-size:12px;outline:0}
.chat-input input:focus{border-color:var(--mint)}
.chat-suggests{display:flex;gap:6px;padding:8px 12px 0;flex-wrap:wrap;background:#fff}
.chat-suggests button{font-size:9.5px;background:var(--cream);border-radius:20px;padding:4px 10px;color:var(--ink-2)}

/* ---------- wrongbook / capability ---------- */
.wb-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:14px;margin-bottom:11px}
.wb-q{font-size:14px;font-weight:800}
.wb-row{display:flex;gap:14px;font-size:10.5px;color:var(--ink-3);margin-top:4px}
.wb-row .wrong{color:var(--peach-d);text-decoration:line-through}
.wb-row .right{color:var(--mint-d);font-weight:700}
.wb-explain{margin-top:9px;background:var(--cream);border-radius:11px;padding:9px 11px;font-size:10.5px;color:var(--ink-2);display:none}
.wb-card.open .wb-explain{display:block}
.wb-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;align-items:center}
.wb-actions > .btn{flex:none;white-space:nowrap}
.wb-actions > .wb-sim{flex:1 1 100%}
.wb-actions > form[data-form="wb-review"]{flex:1 1 100%;min-width:0}
.wb-input{width:90px;border:1px solid var(--line);border-radius:9px;padding:5px 8px;font-size:11px}
.track-block{background:#fff;border:1px solid var(--line);border-radius:16px;padding:15px;margin-bottom:12px}
.track-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}
.track-head b{font-size:12.5px}
.k-item{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:11.5px}
.k-item:last-child{border:0}
.k-item span{font-size:9.5px;color:var(--ink-3);text-align:right}
.medal{display:flex;gap:10px;align-items:center;padding:9px;border-radius:13px;background:var(--cream);margin-bottom:8px}
.medal .mi{width:34px;height:34px;border-radius:50%;background:var(--sun-l);display:grid;place-items:center;font-size:16px}
.medal.locked{opacity:.45;filter:grayscale(1)}
.medal b{font-size:11.5px;display:block}
.medal span{font-size:9.5px;color:var(--ink-3)}
.podium{display:flex;align-items:flex-end;justify-content:center;gap:12px;padding:12px 0 18px}
.pd{text-align:center;width:86px}
.pd .pa{width:46px;height:46px;border-radius:50%;background:var(--cream);display:grid;place-items:center;margin:0 auto 5px;font-weight:800;font-size:14px;border:2px solid #fff;box-shadow:var(--shadow-soft)}
.pd.p1 .pa{background:var(--sun-l);width:56px;height:56px}
.pd .pb{border-radius:10px 10px 6px 6px;background:var(--cream);padding:7px 0 9px;font-size:10px;color:var(--ink-2);margin-top:6px}
.pd.p1 .pb{background:var(--sun-l);height:66px}
.pd.p2 .pb{height:52px}
.pd.p3 .pb{height:42px}
.pd b{font-size:10.5px;display:block}
.rank-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:12px;font-size:11.5px}
.rank-row.me{background:var(--mint-l);font-weight:700}
.rank-row .no{width:22px;color:var(--ink-3);font-weight:800}
.rank-row .days{margin-left:auto;font-size:10px;color:var(--ink-3)}
.outfit-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.outfit{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:13px;text-align:center;transition:.15s}
.outfit:hover{border-color:var(--mint)}
.outfit.worn{border-color:var(--mint);background:var(--mint-l)}
.outfit .oi{font-size:26px}
.outfit b{display:block;font-size:11px;margin-top:5px}
.outfit span{font-size:9.5px;color:var(--ink-3)}
.outfit .btn{margin-top:8px}

/* ---------- parent ---------- */
.child-switch{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);border-radius:15px;padding:10px 13px;margin-bottom:12px}
.child-switch .ca{width:34px;height:34px;border-radius:50%;background:var(--peach-l);display:grid;place-items:center;font-size:15px}
.big-card{background:linear-gradient(150deg,#F4FBF7,#FFF9EF);border:1px solid #EDE7DB;border-radius:20px;padding:17px;box-shadow:var(--shadow-soft)}
.big-card .pet-line{display:flex;align-items:center;gap:12px}
.big-card .pet-line img{width:64px;height:64px;object-fit:contain}
.mini-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px}
.mini-stats .stat{padding:9px 8px;background:rgba(255,255,255,.8)}
.mini-stats .stat .val{font-size:17px}
.alert{border-radius:13px;padding:10px 12px;font-size:10.5px;display:flex;gap:7px;align-items:flex-start;margin-top:12px}
.alert.info{background:var(--sun-l);color:#7d6218}
.alert.ok{background:var(--mint-l);color:#256c56}
.alert.warn{background:var(--risk-l);color:#a33d33}
.quick-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.quick-grid a{background:#fff;border:1px solid var(--line);border-radius:15px;padding:13px;display:flex;gap:10px;align-items:center;box-shadow:var(--shadow-soft)}
.quick-grid .qi{width:34px;height:34px;border-radius:11px;background:var(--cream);display:grid;place-items:center;font-size:15px}
.quick-grid b{font-size:11.5px;display:block}
.quick-grid span{font-size:9.5px;color:var(--ink-3)}
.privacy-note{display:flex;gap:8px;background:var(--cream);border-radius:12px;padding:10px 12px;font-size:10px;color:var(--ink-3);margin-top:12px;align-items:flex-start}
.report-hl{display:flex;gap:9px;background:#fff;border:1px solid var(--line);border-radius:13px;padding:10px 12px;margin-bottom:8px;font-size:11px;align-items:flex-start}
.report-hl .ri{color:var(--mint-d);font-weight:800}
.plan-row{display:flex;gap:10px;align-items:center;padding:9px 0;border-bottom:1px dashed var(--line);font-size:11px}
.plan-row:last-child{border:0}
.plan-row .pd{width:34px;font-size:9.5px;color:var(--ink-3);flex:0 0 34px}
.plan-row .pm{margin-left:auto;font-size:9.5px;color:var(--ink-3)}
.setting-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px dashed var(--line)}
.setting-row:last-child{border:0}
.setting-row b{font-size:11.5px;display:block}
.setting-row span{font-size:9.5px;color:var(--ink-3)}
.stepper{display:flex;align-items:center;gap:0;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:#fff}
.stepper button{width:28px;height:28px;font-size:14px;color:var(--ink-2)}
.stepper button:hover{background:var(--cream)}
.stepper span{min-width:52px;text-align:center;font-size:11px;font-weight:700}
.switch{width:38px;height:22px;border-radius:20px;background:#E5E0D6;position:relative;transition:.2s;flex:0 0 38px}
.switch:after{content:"";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:2px;left:2px;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.15)}
.switch.on{background:var(--mint)}
.switch.on:after{left:18px}
.save-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.chat-guide{border-left:3px solid var(--mint);background:#fff;border-radius:0 14px 14px 0;padding:11px 14px;margin-bottom:10px;box-shadow:var(--shadow-soft)}
.chat-guide b{font-size:11.5px}
.chat-guide .say{margin-top:5px;background:var(--cream);border-radius:9px;padding:7px 10px;font-size:11px;color:var(--ink)}
.chat-guide .why{font-size:9.5px;color:var(--ink-3);margin-top:5px}
.warn-box{border-left:3px solid var(--risk);background:var(--risk-l);border-radius:0 14px 14px 0;padding:11px 14px;font-size:10.5px;color:#8d3c32;margin-top:8px}
.plan-card{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:16px;margin-bottom:11px}
.plan-card.on{border-color:var(--mint);background:linear-gradient(160deg,#fff,#F1FAF6)}
.plan-card .price{font-size:19px;font-weight:800;color:var(--mint-d)}
.plan-card ul{list-style:none;margin-top:9px;display:grid;gap:5px}
.plan-card li{font-size:10.5px;color:var(--ink-2)}
.plan-card li:before{content:"✓";color:var(--mint-d);margin-right:6px;font-weight:700}

/* ---------- teacher / admin ---------- */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.page-head h1{font-size:20px}
.page-head p{font-size:10.5px;color:var(--ink-3);margin-top:3px}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:15px;padding:14px;box-shadow:var(--shadow-soft)}
.kpi span{font-size:10px;color:var(--ink-3);font-weight:600}
.kpi b{display:block;font-size:24px;letter-spacing:-.7px;margin-top:2px}
.kpi .trend{font-size:9.5px;color:var(--mint-d)}
.table{width:100%;border-collapse:collapse;font-size:11.5px}
.table th{font-size:9.5px;text-align:left;color:var(--ink-3);font-weight:600;padding:7px 9px;border-bottom:1px solid var(--line);letter-spacing:.4px}
.table td{padding:9px;border-bottom:1px solid #F4F0E7;vertical-align:middle}
.table tr:last-child td{border:0}
.table tr:hover td{background:#FCFAF5}
.table .name{font-weight:700}
.bar-cell{display:flex;align-items:center;gap:7px;min-width:110px}
.bar-cell .bar{flex:1;height:5px}
.bar-cell span{font-size:10px;color:var(--ink-3);width:30px;text-align:right}
.insight-box{background:var(--mint-l);border-radius:15px;padding:13px 15px;font-size:11px;color:#256c56;line-height:1.7}
.insight-box b{display:block;margin-bottom:3px;color:#1d5a47}
.weak-row{display:flex;align-items:center;gap:9px;margin-bottom:8px;font-size:11px}
.weak-row .wbar{flex:1;height:6px;border-radius:20px;background:var(--cream-2);overflow:hidden}
.weak-row .wbar i{display:block;height:100%;background:linear-gradient(90deg,var(--peach),#FFCFBE);border-radius:20px}
.chart{display:flex;align-items:flex-end;gap:12px;height:150px;padding:8px 4px 0}
.chart .c{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;justify-content:flex-end;height:100%}
.chart .cb{width:100%;max-width:36px;background:linear-gradient(180deg,var(--mint),#9BDCC6);border-radius:7px 7px 3px 3px;min-height:4px;transition:.4s;position:relative}
.chart .c.today .cb{background:linear-gradient(180deg,var(--peach),#FFD3C4)}
.chart .cv{font-size:9px;color:var(--ink-3)}
.chart .cl{font-size:9px;color:var(--ink-3)}
.review-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:15px;margin-bottom:12px}
.review-card .rh{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px}
.audio-line{display:flex;align-items:center;gap:3px;height:26px;margin:8px 0}
.audio-line i{display:block;width:3px;border-radius:3px;background:var(--mint)}
.review-audio{display:block;width:100%;height:34px;margin:8px 0 0}
.transcript{background:var(--cream);border-radius:11px;padding:9px 12px;font-size:11px;color:var(--ink-2);line-height:1.8}
.score-pill{display:inline-flex;align-items:center;gap:4px;font-size:10px;background:var(--cream);border-radius:20px;padding:3px 9px;color:var(--ink-2)}
.score-pill b{color:var(--mint-d)}
.cfg-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.cfg-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line)}
.cfg-row:last-child{border:0}
.cfg-row b{font-size:11.5px;display:block}
.cfg-row .hint{font-size:9.5px;color:var(--ink-3)}
.cfg-input{width:88px;border:1px solid var(--line);border-radius:9px;padding:6px 8px;font-size:11.5px;text-align:right;outline:0;background:#fff}
.cfg-input:focus{border-color:var(--mint)}
.ai-panel{margin-bottom:14px}
.ai-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:4px 0 12px}
.ai-field{display:flex;flex-direction:column;gap:5px;font-size:10.5px;color:var(--ink-3)}
.ai-field > span{font-weight:600;color:var(--ink-2)}
.ai-field .input{width:100%;box-sizing:border-box;padding:8px 10px;font-size:11.5px;text-align:left}
.ai-note{display:flex;flex-wrap:wrap;gap:6px 18px;justify-content:space-between;font-size:10px;color:var(--ink-3);background:var(--cream);border-radius:10px;padding:9px 12px}
.ai-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:10px 0 7px}
.ai-clear{display:inline-flex;align-items:center;gap:5px;margin-left:auto;color:var(--ink-3)}
@media(max-width:900px){.ai-grid{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.ai-grid{grid-template-columns:1fr}}
/* 孩子端预览手机 */
.preview-phone{
  width:246px;margin:0 auto;background:#24312C;border-radius:34px;padding:9px;box-shadow:0 18px 34px rgba(36,49,44,.22);
}
.preview-phone .pv-bar{display:flex;justify-content:space-between;color:#CFE8DE;font-size:8px;padding:5px 10px 6px}
.preview-phone .pv-body{
  background:linear-gradient(165deg,#FFFAF0,#F2FAF6 60%,#FFF3EA);border-radius:26px;padding:14px 12px 16px;min-height:370px;
  display:flex;flex-direction:column;align-items:center;text-align:center;
}
.preview-phone .pv-pet{width:120px;margin:2px 0 -2px;filter:drop-shadow(0 10px 12px rgba(62,158,130,.2))}
.preview-phone .pv-card{background:rgba(255,255,255,.8);border-radius:12px;padding:9px;width:100%;text-align:left;margin-top:10px}
.preview-phone .pv-btn{background:var(--mint-d);color:#fff;border-radius:20px;padding:8px 0;font-size:10px;font-weight:700;width:100%;margin-top:12px;text-align:center}
@media (max-width:899px){
  .add-form{grid-template-columns:1fr auto}
  .add-form .select{grid-column:1/2;grid-row:2}
  .add-form .btn{grid-column:2/3;grid-row:1/3;align-self:stretch}
  .chat-head{flex-wrap:wrap}
  .chat-head .seg{margin-left:auto}
  .preview-phone{width:222px}
}
.impact{background:linear-gradient(150deg,#F4FBF7,#FFF9EF);border:1px solid #EDE7DB;border-radius:16px;padding:15px}
.impact b{font-size:22px;letter-spacing:-.6px;display:block}
.impact span{font-size:10px;color:var(--ink-3)}
.impact .rowline{display:flex;justify-content:space-between;font-size:10.5px;padding:5px 0;border-bottom:1px dashed rgba(147,161,155,.35)}
.impact .rowline:last-child{border:0}
.log-item{font-size:10px;color:var(--ink-3);padding:6px 0;border-bottom:1px dashed var(--line);display:flex;gap:8px}
.log-item:last-child{border:0}
.rbac{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}
.rbac-card{background:var(--cream);border-radius:12px;padding:11px}
.rbac-card b{font-size:11px}
.rbac-card .yes,.rbac-card .no{font-size:9.5px;display:block;margin-top:3px}
.rbac-card .yes{color:var(--mint-d)}
.rbac-card .no{color:var(--ink-3);text-decoration:line-through}
.tpl-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line);font-size:11px}
.tpl-row:last-child{border:0}
.tpl-row .grow b{display:block;font-size:11.5px}
.tpl-row .grow span{font-size:9.5px;color:var(--ink-3)}
.rule{display:flex;gap:8px;font-size:10.5px;padding:6px 0;color:var(--ink-2)}
.rule .rt{font-size:9px;border-radius:6px;padding:1px 6px;background:var(--risk-l);color:var(--risk);height:18px;flex:0 0 auto}
.rule .rt.soft{background:var(--sun-l);color:#8a6a10}
.detail-hero{display:flex;gap:14px;align-items:center;background:linear-gradient(150deg,#F4FBF7,#FFF9EF);border:1px solid #EDE7DB;border-radius:16px;padding:15px;margin-bottom:14px}
.detail-hero img{width:70px;height:70px;object-fit:contain}
.back{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;color:var(--ink-3);margin-bottom:12px}
.back:hover{color:var(--mint-d)}

@media (max-width:899px){
  .kpis{grid-template-columns:1fr 1fr;gap:10px}
  .cfg-grid{grid-template-columns:1fr}
  .rbac{grid-template-columns:1fr 1fr}
  .table{font-size:10.5px}
  .table th,.table td{padding:7px 5px}
  .chart{gap:7px;height:130px}
  .chat-wrap{height:calc(100vh - 210px)}
  .page-head h1{font-size:18px}
  .split{grid-template-columns:1fr}
}

/* teacher manage */
.stu-edit{background:#fff;border:1px solid var(--line);border-radius:13px;margin-bottom:8px;overflow:hidden}
.stu-summary{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;list-style:none;font-size:11.5px}
.stu-summary::-webkit-details-marker{display:none}
.stu-form{padding:12px;border-top:1px dashed var(--line);background:#FCFAF5}
.unit-block{padding:10px 0;border-top:1px dashed var(--line)}
.unit-block:first-child{border-top:none;padding-top:0}
.dot{width:9px;height:9px;border-radius:50%;background:#DCD6C8;display:inline-block}
.dot.ok{background:var(--mint-d)}

/* ---------- pet interaction ---------- */
.pet-wrap{position:relative;display:inline-flex;flex:none;cursor:pointer;-webkit-tap-highlight-color:transparent}
.pet-wrap:active img{animation:patBounce .6s ease}
@keyframes patBounce{
  0%{transform:scale(1) translateY(0)}
  30%{transform:scale(1.06,.94) translateY(-2px)}
  55%{transform:scale(.97,1.04) translateY(0)}
  75%{transform:scale(1.02,.99) translateY(-1px)}
  100%{transform:scale(1) translateY(0)}
}
.pet-hearts{position:absolute;inset:0;pointer-events:none;overflow:visible}
.pet-heart{position:absolute;bottom:26%;font-size:20px;opacity:0;animation:petFloat 1.25s ease-out forwards}
@keyframes petFloat{
  0%{opacity:0;transform:translateY(0) scale(.7)}
  25%{opacity:1}
  100%{opacity:0;transform:translateY(-72px) scale(1.15)}
}
.mood-line{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.mood-pill{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;padding:4px 10px;border-radius:999px;background:var(--mint-l);color:var(--mint-d)}
.mood-pill.happy{background:var(--sun-l);color:#9A6B12}
.mood-pill.hungry{background:var(--peach-l);color:var(--peach-d)}
.mood-pill.sleepy{background:#E8ECF7;color:#4D5C86}
.care-panel{margin-top:12px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;box-shadow:var(--shadow-soft)}
.care-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.care-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.care-btn{display:flex;flex-direction:column;align-items:center;gap:2px;padding:9px 6px 7px;background:#FDFBF6;border:1px solid #EFE8DC;border-radius:13px;transition:transform .12s,background .12s}
.care-btn:active{transform:scale(.96);background:var(--cream-2)}
.care-btn.off{opacity:.45;cursor:not-allowed}
.care-ico{font-size:19px;line-height:1.25}
.care-name{font-size:11px;font-weight:600;color:var(--ink-2)}
.care-sub{font-size:9.5px;color:var(--ink-3)}
.checkin-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}

/* ---------- pet stage (live) ---------- */
.pet-hero{padding-bottom:14px}
.pet-stage{
  position:relative;height:380px;margin-top:14px;border-radius:22px;overflow:hidden;
  background:linear-gradient(180deg,#E9F6FF 0%,#F5FBF7 52%,#FDF2E2 100%);
  border:1px solid rgba(255,255,255,.85);box-shadow:inset 0 0 0 1px rgba(237,230,218,.7);
}
.stage-sky{position:absolute;inset:0;pointer-events:none}
.stage-sun{position:absolute;right:44px;top:34px;width:48px;height:48px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%,#FFF4CC,#FFD66B);box-shadow:0 0 34px rgba(255,214,107,.65)}
.cloud{position:absolute;width:74px;height:24px;border-radius:20px;background:rgba(255,255,255,.9);opacity:.85}
.cloud:before,.cloud:after{content:"";position:absolute;border-radius:50%;background:inherit}
.cloud:before{width:30px;height:30px;left:12px;top:-13px}
.cloud:after{width:22px;height:22px;right:12px;top:-9px}
.cloud.c1{top:86px;left:-90px;animation:cloud-drift 38s linear infinite}
.cloud.c2{top:158px;left:-140px;transform:scale(.72);animation:cloud-drift 52s linear infinite 8s}
@keyframes cloud-drift{0%{transform:translateX(0)}100%{transform:translateX(560px)}}
.pet-ground{position:absolute;left:0;right:0;bottom:0;height:76px;background:linear-gradient(180deg,#DFF2E4,#C6E7D2);border-top:2px solid #EDF9F1}
.grass{position:absolute;bottom:16px;width:14px;height:22px;border-radius:50% 50% 0 0;background:#9FD5B4;opacity:.7}
.grass.g1{left:12%;height:18px}
.grass.g2{left:58%;height:26px;bottom:10px}
.grass.g3{right:14%;height:20px}
.stage-hud{position:absolute;left:12px;top:12px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;z-index:5;max-width:52%}
.stage-chips{display:inline-flex;gap:5px;flex-wrap:wrap}
.stage-chips .chip{background:rgba(255,255,255,.82);font-size:9.5px;padding:3px 8px}
.pet-bubble{
  position:absolute;top:50px;left:50%;transform:translateX(-50%);z-index:4;
  max-width:78%;min-height:38px;background:#fff;border:1px solid #EFE7D9;border-radius:16px;
  padding:9px 15px;font-size:12px;line-height:1.6;text-align:center;color:var(--ink);
  box-shadow:0 10px 24px rgba(36,49,44,.1);
  display:flex;align-items:center;justify-content:center;
}
.pet-bubble:after{content:"";position:absolute;left:50%;bottom:-7px;transform:translateX(-50%) rotate(45deg);
  width:12px;height:12px;background:#fff;border-right:1px solid #EFE7D9;border-bottom:1px solid #EFE7D9}
.pet-bubble.pop{animation:bubble-pop .5s ease}
@keyframes bubble-pop{
  0%{opacity:.2;transform:translateX(-50%) scale(.86)}
  60%{opacity:1;transform:translateX(-50%) scale(1.03)}
  100%{opacity:1;transform:translateX(-50%) scale(1)}
}
.pet-live{
  position:absolute;left:50%;bottom:30px;transform:translateX(-50%);z-index:3;cursor:pointer;
  transition:left 1.8s cubic-bezier(.42,.05,.3,1);-webkit-tap-highlight-color:transparent;
}
.pet-live .rig-flip{transition:transform .4s ease}
.pet-live.flip .rig-flip{transform:scaleX(-1)}
.pet-rig{
  display:block;width:212px;height:264px;overflow:visible;
  filter:drop-shadow(0 16px 14px rgba(62,158,130,.22));
  transform-origin:50% 92%;
}
.pet-shadow{width:138px;height:18px;margin:0 auto -10px;border-radius:50%;
  background:radial-gradient(ellipse at center,rgba(36,49,44,.2),transparent 70%)}
.pet-face{
  position:absolute;right:-20px;top:2px;z-index:6;font-size:20px;line-height:1;
  opacity:0;transform:scale(.6);pointer-events:none;
  filter:drop-shadow(0 4px 6px rgba(36,49,44,.18));transition:opacity .2s;
}
.pet-face.emote{opacity:1;animation:facePop .9s cubic-bezier(.2,1.4,.4,1)}
@keyframes facePop{
  0%{opacity:0;transform:scale(.4) translateY(6px)}
  45%{opacity:1;transform:scale(1.18)}
  100%{opacity:1;transform:scale(1)}
}

/* 龙骨宠物用 canvas 绘制，动作动画在 js/pet-animation.js 里，不再需要 rig 的 CSS 动画 */
.pet-stage .pet-hearts{position:absolute;inset:0;z-index:6}
.stage-foot{position:absolute;left:12px;bottom:10px;display:flex;gap:5px;flex-wrap:wrap;z-index:5}
.stage-foot .chip{background:rgba(255,255,255,.86);font-size:9.5px;padding:3px 9px}
.stage-note{text-align:center;font-size:9.5px;color:var(--ink-3);margin-top:8px}
.pet-home{padding:15px 18px}
.pet-home .hero-stats{grid-template-columns:1fr 1fr}

/* ---------- skills ---------- */
.skill-panel{margin-top:14px}
.skill-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.skill-card{
  display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;
  background:#FDFBF6;border:1px solid #EFE8DC;border-radius:14px;padding:12px;transition:.16s;
}
.skill-card:hover:not(:disabled){transform:translateY(-2px);border-color:var(--mint)}
.skill-card .sk-ico{font-size:20px;line-height:1.2}
.skill-card b{font-size:11.5px}
.skill-card .sk-desc{font-size:9.5px;color:var(--ink-3);line-height:1.55;min-height:30px}
.skill-card .sk-sub{font-size:9px;font-weight:700;color:var(--mint-d);margin-top:2px}
.skill-card.locked{opacity:.6;background:#F7F5F0;cursor:not-allowed}
.skill-card.locked .sk-sub{color:var(--ink-3)}
.skill-card.off{opacity:.55;cursor:not-allowed}

/* ---------- good deeds ---------- */
.deed-panel{border-color:#F1E2BE;background:linear-gradient(160deg,#FFFDF6,#FFF8E8)}
.deed-list{display:grid;gap:8px;margin-bottom:12px}
.deed-row{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #F3E7C9;border-radius:12px;padding:9px 11px}
.deed-row b{font-size:11.5px}
.deed-ico{width:30px;height:30px;border-radius:50%;background:var(--sun-l);display:grid;place-items:center;font-size:15px;flex:0 0 30px}
.deed-form{display:grid;grid-template-columns:1fr 150px auto;gap:8px}
.deed-form .deed-place{max-width:150px}

/* ---------- homework import ---------- */
.import-panel{border-color:#D9EEE5;background:linear-gradient(160deg,#FBFEFC,#F6FBF7)}
.import-grid{display:grid;grid-template-columns:250px 1fr;gap:12px}
.import-drop{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;
  border:1.5px dashed #D7D0C0;border-radius:14px;padding:16px;cursor:pointer;background:#fff;transition:.16s;
}
.import-drop:hover{border-color:var(--mint);background:var(--mint-l)}
.import-drop.has-file{border-color:var(--mint);background:var(--mint-l)}
.import-drop .imp-ico{font-size:26px}
.import-drop b{font-size:11.5px}
.import-drop .imp-name{font-size:9.5px;color:var(--mint-d);word-break:break-all;margin-top:2px}
.import-paste textarea{min-height:104px}
.imp-head,.imp-row{display:grid;grid-template-columns:24px 1fr 106px 68px 118px 32px;gap:8px;align-items:center}
.imp-head{font-size:9px;color:var(--ink-3);padding:8px 4px;border-bottom:1px solid var(--line);margin-top:12px}
.imp-row{padding:8px 0;border-bottom:1px dashed var(--line)}
.imp-no{font-size:10px;color:var(--ink-3);text-align:center}
.imp-row .input,.imp-row .select{padding:7px 9px;font-size:11px;border-radius:9px}
.imp-min{text-align:center}

/* ---------- review batch ---------- */
.batch-bar{padding:14px 16px}
.batch-bar .row{align-items:center}
#rev-all{accent-color:var(--mint-d);width:15px;height:15px}
.pick{width:15px;height:15px;accent-color:var(--mint-d);flex:0 0 auto;margin-top:3px;cursor:pointer}
.quick-comments{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}
.quick-comments .chip{cursor:pointer;font-size:9.5px;padding:4px 10px}
.quick-comments .chip:hover{border-color:var(--mint);color:var(--mint-d)}

/* ---------- feedback ---------- */
.fb-card{padding:15px}
.fb-body{background:var(--cream);border-radius:11px;padding:10px 12px;font-size:11.5px;color:var(--ink-2);margin:9px 0;line-height:1.75}
.fb-reply{display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;background:var(--mint-l);border-radius:11px;padding:8px 11px;margin-top:8px;font-size:11px;color:#256c56}
.fb-reply b{font-size:10.5px}
.fb-form{display:flex;gap:7px;margin-top:10px;flex-wrap:wrap}
.fb-form .input{flex:1;min-width:180px}

/* ---------- voice recitation ---------- */
.voice-btn{
  display:flex;align-items:center;gap:11px;width:100%;text-align:left;
  background:linear-gradient(150deg,#F2FBF7,#FFF7EE);border:1.5px dashed #BFE4D6;border-radius:15px;
  padding:12px 14px;margin-bottom:11px;transition:.18s;
}
.voice-btn:hover:not(:disabled){border-color:var(--mint);background:var(--mint-l)}
.voice-copy{flex:1;min-width:0}
.voice-copy b{display:block;font-size:12px}
.voice-btn .voice-ico{
  width:38px;height:38px;flex:0 0 38px;border-radius:50%;display:grid;place-items:center;
  background:#fff;font-size:18px;box-shadow:var(--shadow-soft);
}
.voice-btn .voice-sub{display:block;font-size:9.5px;color:var(--ink-3);font-weight:400;margin-top:1px}
.voice-btn.listening{border-style:solid;border-color:var(--peach-d);background:var(--peach-l);animation:voicePulse 1.5s ease-in-out infinite}
.voice-btn.listening .voice-ico{background:var(--peach-d);color:#fff}
.voice-btn.off{opacity:.72;cursor:not-allowed}
.voice-btn.off .voice-ico{background:var(--cream-2)}
@keyframes voicePulse{
  0%,100%{box-shadow:0 0 0 0 rgba(224,138,114,.28)}
  50%{box-shadow:0 0 0 8px rgba(224,138,114,0)}
}

/* ---------- wrongbook similar questions ---------- */
.wb-sim{
  margin-top:10px;padding:11px 12px;border-radius:13px;
  background:linear-gradient(160deg,#F7FCFA,#FFFBF6);border:1px solid #DCEEE6;
}
.wb-sim-loading{font-size:10.5px;color:var(--mint-d);padding:6px 0}
.wb-sim-note{font-size:10.5px;color:var(--ink-3);line-height:1.65;margin-bottom:7px}
.wb-sim-row{
  display:flex;flex-wrap:wrap;align-items:center;gap:7px;
  padding:8px 0;border-bottom:1px dashed var(--line);font-size:10.5px;
}
.wb-sim-row:last-child{border-bottom:0}
.wb-sim-q{flex:1 1 62%;min-width:0;color:var(--ink-2)}
.wb-sim-row .wb-input{width:78px;flex:0 0 78px;padding:5px 8px;font-size:10.5px}
.wb-sim-a{flex:0 0 auto;font-size:10.5px;color:var(--ink-2)}
.wb-sim-row.ok .wb-sim-a{color:var(--mint-d)}
.wb-sim-row.no .wb-sim-a{color:var(--peach-d)}
.wb-sim-hint{flex:1 1 100%;font-size:9.5px;color:var(--ink-3);line-height:1.55;padding-left:2px}
.wb-sim-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}
.wb-sim-actions .tiny{flex:1;min-width:120px}

/* ---------- growth portfolio ---------- */
.pf-hero{border-color:#E3F1EA;background:linear-gradient(160deg,#FBFEFC,#FFF9F1)}
.pf-filters{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.pf-filters .chip{cursor:pointer}
.pf-add{border-color:#F2E7D4;background:linear-gradient(160deg,#FFFEFB,#FBFAF4)}
.pf-timeline{position:relative;padding:6px 0 0 4px;margin-top:12px}
.pf-timeline::before{
  content:"";position:absolute;left:17px;top:16px;bottom:14px;width:2px;
  background:linear-gradient(180deg,#CDE9DD,#F5E3CE);border-radius:2px;
}
.pf-item{position:relative;display:flex;gap:12px;padding-bottom:12px}
.pf-dot{
  width:30px;height:30px;flex:0 0 30px;border-radius:50%;display:grid;place-items:center;
  background:#fff;border:2px solid #DFF0E8;font-size:14px;z-index:1;box-shadow:var(--shadow-soft);
}
.pf-card{
  flex:1;min-width:0;background:#fff;border:1px solid var(--line);border-radius:15px;
  padding:12px 13px;box-shadow:var(--shadow-soft);
}
.pf-title{font-size:13px;line-height:1.4}
.pf-meta{margin-top:3px}
.pf-img{width:100%;max-height:240px;object-fit:cover;border-radius:11px;margin-top:9px;background:var(--cream)}
.pf-note{font-size:11px;color:var(--ink-2);line-height:1.75;margin:8px 0 0}
.pf-card .btn{margin-top:9px}

/* ---------- homework camera ---------- */
.import-pick{display:flex;flex-direction:column;gap:8px}
.import-pick .import-drop{flex:1}
.camera-btn{width:100%;justify-content:center}
.import-preview-row{
  display:flex;align-items:center;gap:10px;margin:10px 0;padding:9px 11px;
  background:#fff;border:1px solid var(--line);border-radius:12px;
}
.import-preview{width:74px;height:74px;object-fit:cover;border-radius:9px;flex:0 0 74px;background:var(--cream)}

/* ---------- mobile tweaks for new blocks ---------- */
@media (max-width:899px){
  .pet-stage{height:360px;border-radius:18px}
  .pet-rig{width:184px;height:230px}
  .pet-face{font-size:17px;right:-12px;top:4px}
  .pet-shadow{width:118px;margin-bottom:-8px}
  .pet-bubble{top:52px;font-size:11.5px;max-width:84%}
  .stage-foot{left:10px;right:10px;bottom:8px}
  .stage-hud{max-width:60%}
  .skill-grid{grid-template-columns:1fr 1fr}
  .deed-form{grid-template-columns:1fr}
  .deed-form .deed-place{max-width:none}
  .import-grid{grid-template-columns:1fr}
  .imp-head{display:none}
  .imp-row{display:flex;flex-wrap:wrap;gap:6px;padding:10px 0}
  .imp-row > .input[data-field="title"]{flex:1 1 100%}
  .imp-row > .select{flex:1 1 32%}
  .imp-min{flex:0 0 64px}
  .imp-due{flex:1 1 34%}
  .imp-row .imp-no{flex:0 0 18px}
  .imp-row .icon-btn{flex:0 0 30px;margin-left:auto}
}
@media (prefers-reduced-motion:reduce){
  .pet-live,.pet-rig,.pet-rig *,.cloud,.pet-bubble,.pet-face{animation:none!important;transition:none!important}
}
