
:root{--bg:#f6f7fb;--panel:#fff;--text:#161827;--sub:#73778a;--line:#e7e8ef;--brand:#7557ff;--brand2:#9b62ff;--yellow:#ffd84d;--green:#25b76b;--red:#ef5f71;--ink:#151827;--soft:#f0edff;--r:24px;--shadow:0 14px 40px rgba(25,27,45,.08)}
*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","PingFang SC","Helvetica Neue",Arial,sans-serif;color:var(--text);background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}a{color:inherit}.hidden{display:none!important}.muted{color:var(--sub)}.tiny{font-size:12px}.strong{font-weight:850}.score{font-weight:950;font-size:28px}.pill{display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border-radius:999px;background:#f0f1f6;color:#626677;font-size:12px}.pill.licensed{background:#dff7e9;color:#17633a}.pill.pending{background:#fff0df;color:#86520e}.btn{border:0;border-radius:16px;padding:12px 16px;font-weight:850}.btn.primary{background:var(--brand);color:#fff}.btn.dark{background:var(--ink);color:#fff}.btn.soft{background:var(--soft);color:#5437d7}.btn.white{background:white;color:#4c32c7}.btn.outline{background:white;border:1px solid var(--line)}.btn:disabled{opacity:.45;cursor:not-allowed}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:0 5px 20px rgba(25,27,45,.035)}
.licensed-player{margin-top:14px}.licensed-player.compact{width:min(560px,100%);margin:12px auto 0}.audio-progress{height:8px;border-radius:999px;background:rgba(255,255,255,.2);overflow:hidden;margin:12px 0 5px}.audio-progress span{display:block;width:0;height:100%;background:#8f7cff;border-radius:inherit;transition:width .12s linear}.audio-time{display:flex;justify-content:space-between;font-size:12px;color:#c9cbd4}.rights{margin-top:10px;padding:10px 12px;border-radius:12px;background:rgba(86,196,130,.14);font-size:12px;text-align:left}.rights p{margin:5px 0}.rights a{color:inherit;text-decoration:underline}.rights.unavailable{background:#fff4e9;color:#684516}.stage .rights.unavailable{background:rgba(255,174,73,.12);color:#f4d7ad}.stage .rights{color:#d8eede}.lyrics .lyric{transition:opacity .18s,transform .18s}
/* auth */
.auth{min-height:100dvh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 20% 0,#ece7ff 0,transparent 40%),radial-gradient(circle at 100% 30%,#fff0c9 0,transparent 34%),var(--bg)}.auth-card{width:min(520px,100%);background:white;border:1px solid var(--line);border-radius:34px;padding:28px;box-shadow:var(--shadow)}.logo{font-size:38px;font-weight:950;letter-spacing:-1px}.logo-mark{font-size:66px;text-align:center}.auth-card h1{text-align:center;margin:4px 0}.auth-card>p{text-align:center}.roles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:20px 0}.roles button{border:1px solid var(--line);background:white;border-radius:14px;padding:12px 8px;font-weight:800}.roles button.active{background:var(--ink);color:white}.input{width:100%;border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-top:10px;background:white}.wechat{background:#12b65d;color:white;width:100%;margin-top:14px}.divider{display:flex;gap:10px;align-items:center;color:#9ca0ae;font-size:12px;margin:14px 0}.divider:before,.divider:after{content:"";height:1px;background:var(--line);flex:1}
/* shell */
.shell{min-height:100dvh;display:grid;grid-template-columns:248px minmax(0,1fr)}.side{height:100dvh;position:sticky;top:0;background:var(--ink);color:white;padding:26px 18px}.side .logo{font-size:28px}.side small{display:block;color:#9ca3b4;margin-top:5px}.nav{display:grid;gap:8px;margin-top:28px}.nav button{border:0;background:transparent;color:#c7cad5;text-align:left;padding:13px 14px;border-radius:15px;font-weight:800}.nav button.active,.nav button:hover{background:#25293a;color:white}.side-bottom{position:absolute;bottom:24px;left:18px;right:18px}.main{padding:26px 30px 100px;max-width:1240px;width:100%;margin:auto}.top{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;gap:14px}.top h1{font-size:28px;margin:0}.user{display:flex;align-items:center;gap:9px;background:white;border:1px solid var(--line);border-radius:999px;padding:7px 9px 7px 12px}.user button{padding:7px 10px}.mobile-nav{display:none}
/* home */
.hero{border-radius:32px;padding:28px;background:linear-gradient(135deg,#7455ff,#a25fff);color:#fff;display:grid;grid-template-columns:1.4fr .6fr;gap:18px;box-shadow:var(--shadow);overflow:hidden}.hero h2{font-size:38px;margin:4px 0 10px}.hero p{line-height:1.7;color:#eeeaff}.hero-animal{font-size:130px;display:grid;place-items:center;filter:drop-shadow(0 12px 20px rgba(0,0,0,.15))}.hero-actions{display:flex;gap:10px;flex-wrap:wrap}.section{margin-top:26px}.sec-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.sec-head h3{margin:0;font-size:20px}.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.song{display:flex;flex-direction:column;gap:12px;transition:.15s}.song:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.song-top{display:flex;align-items:center;gap:12px}.animal{font-size:44px}.song h4{font-size:17px;margin:0}.song-foot{display:flex;justify-content:space-between;align-items:end}.feed{display:grid;gap:10px}.feed-row{display:flex;align-items:center;gap:12px}.avatar{font-size:34px}.grow{flex:1}.rank{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.rank:last-child{border:0}
/* lesson */
.steps{display:grid;grid-template-columns:repeat(5,1fr);gap:7px;margin-bottom:16px}.step{background:#edeef3;color:#6f7382;border-radius:13px;padding:10px 7px;font-size:12px;text-align:center;font-weight:800}.step.active{background:var(--ink);color:white}.step.done{background:#ddf8e9;color:#147848}.lesson{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px}.lesson-panel{background:white;border:1px solid var(--line);border-radius:26px;padding:20px}.words{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px;margin-top:16px}.word{border:1px solid var(--line);border-radius:18px;padding:14px}.word b{font-size:21px}.lesson-side{display:grid;gap:12px;align-content:start}.progressbox{background:white;border:1px solid var(--line);border-radius:20px;padding:15px}.bar{height:8px;background:#e8e9ef;border-radius:999px;overflow:hidden}.bar span{height:100%;display:block;background:var(--green)}
/* karaoke */
.stage{background:linear-gradient(160deg,#10131f,#24283b);color:white;border-radius:30px;padding:18px;display:grid;grid-template-columns:minmax(0,1fr) 255px;gap:15px;min-height:660px}.kmain{display:grid;grid-template-rows:auto 1fr auto;min-width:0}.khead{display:flex;justify-content:space-between;gap:8px;align-items:center}.modes{display:flex;gap:5px}.modes button{border:1px solid #515568;background:transparent;color:#cfd1da;padding:6px 9px;border-radius:999px;font-size:12px}.modes button.active{background:white;color:#161827}.lyrics{min-height:460px;padding:22px 12px;overflow:hidden;mask-image:linear-gradient(to bottom,transparent,#000 8%,#000 92%,transparent)}.lyric-stack{display:grid;gap:17px}.lyric{opacity:.38;border-left:3px solid transparent;padding-left:10px}.lyric .en{font-size:20px;font-weight:780;line-height:1.35}.lyric .zh{color:#c2c6d2;font-size:14px;margin-top:4px}.lyric.active{opacity:1;border-color:var(--yellow);transform:translateX(3px)}.lyric.active .en{font-size:28px;font-weight:950}.lyric.active .zh{font-size:16px;color:white}.hot{color:#ffe166;background:rgba(255,225,102,.1);padding:0 3px;border-radius:5px}.timeline{height:5px;background:#484c60;border-radius:999px;overflow:hidden}.timeline span{height:100%;display:block;background:var(--yellow);width:38%}.kcontrols{padding:8px 4px}.control-row{display:flex;justify-content:center;gap:10px;margin-top:13px}.circle{border:0;border-radius:50%;width:50px;height:50px;font-size:19px}.circle.mic{width:68px;height:68px;background:var(--brand);color:white}.kside{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.11);border-radius:23px;padding:15px}.mascot{text-align:center;font-size:84px}.live-score{text-align:center;font-size:43px;font-weight:950}.kwordlist{display:flex;gap:7px;flex-wrap:wrap}.kword{border:1px solid #505467;border-radius:999px;padding:6px 9px;font-size:12px;color:#e5e7ef}.meter{height:54px;display:flex;align-items:center;justify-content:center;gap:3px}.meter i{width:4px;background:#9a72ff;border-radius:99px;display:block}.rec-state{text-align:center;color:#c9cbd4;font-size:12px;margin-top:7px}.audio-list{display:grid;gap:8px;margin-top:12px}.audio-item{display:flex;gap:8px;align-items:center;background:#f7f7fa;border-radius:14px;padding:10px}.audio-item audio{width:100%;height:34px}
/* quiz/results */
.option{width:100%;text-align:left;border:1px solid var(--line);background:white;border-radius:16px;padding:14px;margin-top:9px;font-weight:780}.option.correct{background:#e2f8eb;border-color:#96e3b6}.option.wrong{background:#fff0f2;border-color:#ffc3cb}.metrics{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;margin-top:15px}.metric{text-align:center;background:#f7f7fa;border-radius:17px;padding:13px 7px}.metric b{font-size:23px;display:block}.big-result{text-align:center;font-size:76px;font-weight:950}.challenge{background:linear-gradient(135deg,#fff5db,#ffebbd);border:1px solid #f4d88c;border-radius:20px;padding:16px;margin-top:15px}
/* role dashboards */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat{background:white;border:1px solid var(--line);border-radius:20px;padding:16px}.stat b{font-size:25px;display:block;margin-top:5px}.teacher-grid,.family-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:14px}.mistakes{display:grid;gap:9px}.mistake{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}.sharecard{background:linear-gradient(135deg,#151827,#312e81);color:white;border-radius:28px;padding:22px;text-align:center}.sharecard .share-score{font-size:74px;font-weight:950}.badge-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.achievement{text-align:center;background:white;border:1px solid var(--line);border-radius:20px;padding:14px}.achievement .emoji{font-size:36px}
/* modal/toast */
.modal{position:fixed;inset:0;z-index:30;background:rgba(18,20,31,.55);display:grid;place-items:center;padding:16px}.modal-card{width:min(1040px,100%);max-height:92dvh;overflow:auto;background:white;border-radius:28px;padding:14px}.toast{position:fixed;left:50%;bottom:90px;transform:translate(-50%,20px);opacity:0;pointer-events:none;background:#151827;color:white;border-radius:999px;padding:10px 16px;font-size:13px;z-index:50;transition:.2s}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:960px){.shell{grid-template-columns:1fr}.side{display:none}.main{padding:18px 18px 95px}.mobile-nav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;background:rgba(255,255,255,.94);backdrop-filter:blur(18px);border-top:1px solid var(--line);z-index:20;padding:8px 6px calc(8px + env(safe-area-inset-bottom))}.mobile-nav button{border:0;background:transparent;font-size:11px;color:#7a7e8f;padding:7px 0}.mobile-nav button.active{color:var(--brand);font-weight:900}.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hero{grid-template-columns:1fr .35fr}.hero-animal{font-size:92px}.lesson{grid-template-columns:1fr}.stage{grid-template-columns:1fr}.kside{display:grid;grid-template-columns:90px 1fr;align-items:center}.kside .kwordlist,.kside>h4,.audio-list{grid-column:1/-1}.lyrics{min-height:520px}.teacher-grid,.family-grid{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(3,1fr)}}
@media(max-width:580px){.main{padding-left:12px;padding-right:12px}.top h1{font-size:23px}.user b{display:none}.hero{padding:20px;grid-template-columns:1fr}.hero h2{font-size:29px}.hero-animal{font-size:84px;order:-1}.grid{grid-template-columns:1fr}.steps{overflow:auto;grid-template-columns:repeat(5,minmax(78px,1fr))}.words{grid-template-columns:1fr}.stage{padding:12px;border-radius:21px;min-height:auto}.lyrics{min-height:56dvh;max-height:61dvh;padding:15px 5px}.lyric .en{font-size:18px}.lyric.active .en{font-size:24px}.lyric .zh{font-size:13px}.lyric.active .zh{font-size:15px}.kside{grid-template-columns:70px 1fr}.mascot{font-size:59px}.live-score{font-size:34px}.metrics{grid-template-columns:repeat(2,1fr)}.stats{grid-template-columns:repeat(2,1fr)}.badge-grid{grid-template-columns:repeat(2,1fr)}.auth-card{padding:20px;border-radius:25px}.logo-mark{font-size:54px}}
