:root{--ink:#263238;--muted:#788487;--cream:#fffaf1;--coral:#ff796d;--mint:#6fc9b6;--yellow:#f7c850;--line:#eee7dc;--shadow:0 16px 40px rgba(71,59,42,.10)}
*{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--ink);background:var(--cream);font-family:"Noto Sans SC",sans-serif;background-image:radial-gradient(#eadfcd 1px,transparent 1px);background-size:28px 28px}button{font:inherit;color:inherit}.is-hidden{display:none!important}.topbar{height:84px;display:flex;align-items:center;justify-content:space-between;max-width:1100px;margin:auto;padding:0 32px}.brand{border:0;background:none;display:flex;align-items:center;gap:10px;font-weight:700;font-size:21px;cursor:pointer}.brand-mark{display:grid;place-items:center;width:38px;height:38px;border-radius:13px;background:var(--coral);color:white;font-family:"Baloo 2";font-size:25px;transform:rotate(-4deg)}.language-pill{border:1px solid var(--line);background:#fff;padding:10px 16px;border-radius:99px;font-weight:600;cursor:pointer}.welcome{max-width:1100px;margin:auto;padding:70px 32px 30px}.hero-copy{text-align:center}.eyebrow{font-size:13px;font-weight:700;letter-spacing:2px;color:#d76359}.hero-copy h1{font-family:"Baloo 2","Noto Sans SC";font-size:58px;line-height:1.08;margin:16px 0 14px;letter-spacing:-2px}.hero-copy h1 em{font-style:normal;color:var(--coral);position:relative}.hero-copy h1 em:after{content:"";position:absolute;height:7px;background:#f8d7a1;left:0;right:0;bottom:-2px;border-radius:50%;transform:rotate(-1deg);z-index:-1}.hero-copy p,.section-intro p{color:var(--muted)}.language-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin:48px auto 28px;max-width:900px}.language-card{min-height:270px;border:1px solid rgba(0,0,0,.04);border-radius:26px;padding:25px;background:#fff;display:flex;flex-direction:column;align-items:center;cursor:pointer;box-shadow:0 7px 0 rgba(0,0,0,.04);transition:.2s}.language-card:hover{transform:translateY(-7px);box-shadow:var(--shadow)}.language-card:active{transform:translateY(0)}.language-card.japanese{background:#fff1ef}.language-card.korean{background:#effaf7}.language-card.spanish{background:#fff8df}.card-icon{display:grid;place-items:center;width:88px;height:88px;border-radius:50%;background:rgba(255,255,255,.8);font-size:44px;margin-bottom:15px}.native-name{font-family:"Baloo 2","Noto Sans SC";font-size:26px;font-weight:700}.language-card strong{font-size:14px;color:var(--muted);margin:2px 0 20px}.start-label{font-size:14px;font-weight:600}.start-label b{display:inline-grid;place-items:center;margin-left:5px;width:25px;height:25px;border-radius:50%;background:white}.parent-note{text-align:center;color:#a0988c;font-size:13px}.parent-note span,footer span{color:var(--coral)}.learning{max-width:980px;margin:auto;padding:40px 32px 70px}.learning-head{display:flex;align-items:center;justify-content:space-between}.learning-head h2{font-family:"Baloo 2","Noto Sans SC";font-size:38px;margin:7px 0}.streak{background:white;border:1px solid var(--line);border-radius:18px;padding:10px 16px;display:flex;gap:10px;align-items:center}.streak>span{color:var(--yellow);font-size:25px}.streak strong,.streak small{display:block}.streak small{font-size:11px;color:var(--muted)}.lesson-tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:25px 0 38px;padding:7px;border-radius:18px;background:#eee9df}.tab{border:0;background:transparent;padding:13px;border-radius:13px;font-weight:600;cursor:pointer}.tab span{margin-right:5px}.tab.active{background:white;box-shadow:0 3px 9px rgba(64,53,39,.09);color:#d65f56}.section-intro{text-align:center;margin-bottom:25px}.section-intro h3{font-size:27px;margin:0 0 5px}.section-intro p{margin:0}.song-list{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.song{background:white;border:1px solid var(--line);border-radius:20px;padding:17px;display:flex;align-items:center;gap:15px}.song-art{width:76px;height:76px;border-radius:16px;display:grid;place-items:center;font-size:38px;background:#fff2dc}.song-info{min-width:0;flex:1}.song-info h4{margin:0 0 4px;font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-info p{margin:0;color:var(--muted);font-size:12px}.play-song{width:44px;height:44px;border:0;border-radius:50%;background:var(--coral);color:white;cursor:pointer;font-size:15px;box-shadow:0 5px 12px rgba(255,121,109,.3)}.progress-line{display:flex;align-items:center;gap:13px;color:var(--muted);font-size:12px;max-width:590px;margin:0 auto 15px}.progress-line>div{height:7px;background:#e9e3d9;border-radius:99px;flex:1;overflow:hidden}.progress-line i{display:block;height:100%;width:25%;background:var(--coral);border-radius:99px;transition:.3s}.practice-card{max-width:590px;margin:auto;background:white;border:1px solid var(--line);border-radius:28px;padding:30px;text-align:center;box-shadow:var(--shadow)}.picture-bubble,.scene-emoji{width:122px;height:122px;border-radius:50%;background:#fff3de;display:grid;place-items:center;margin:0 auto 13px;font-size:66px}.scene-emoji{border-radius:28px;background:#ebf8f5}.translation{color:var(--muted);margin:0 0 7px;font-size:14px}.target-text{font-family:"Baloo 2","Noto Sans SC";font-size:42px;margin:0;line-height:1.3}.sentence-card .target-text{font-size:32px}.romanization{margin:1px 0 17px;color:#9b897c}.listen-button{border:0;border-radius:99px;background:#edf8f6;color:#337d70;padding:10px 18px;font-weight:600;cursor:pointer}.listen-button span{font-size:11px;margin-right:5px}.record-area{border-top:1px dashed var(--line);margin-top:23px;padding-top:17px}.record-area p{font-size:13px;margin:0 0 10px;color:var(--muted)}.record-button{width:64px;height:64px;border-radius:50%;border:7px solid #ffe3df;background:var(--coral);color:white;cursor:pointer;box-shadow:0 5px 13px rgba(255,121,109,.27)}.record-button.recording{animation:pulse 1s infinite}.record-area small{display:block;margin-top:6px;color:#aaa}.score{margin:16px auto 0;padding:12px;border-radius:13px;background:#fff7d9;font-weight:700;color:#936b05}.card-controls{max-width:590px;margin:18px auto;display:flex;justify-content:space-between}.card-controls button{border:1px solid var(--line);background:white;border-radius:12px;padding:11px 17px;cursor:pointer}.card-controls .primary{background:var(--ink);color:#fff;border-color:var(--ink)}footer{text-align:center;color:#aaa196;font-size:12px;padding:22px}@keyframes pulse{50%{transform:scale(1.08);box-shadow:0 0 0 15px rgba(255,121,109,.12)}}
@media(max-width:700px){.topbar{height:70px;padding:0 18px}.welcome{padding:40px 18px 20px}.hero-copy h1{font-size:43px}.language-grid{grid-template-columns:1fr;gap:14px;margin-top:32px}.language-card{min-height:120px;display:grid;grid-template-columns:76px 1fr auto;grid-template-rows:auto auto;text-align:left;padding:17px}.card-icon{width:64px;height:64px;font-size:34px;margin:0;grid-row:1/3}.native-name{font-size:23px}.language-card strong{margin:0}.start-label{grid-column:3;grid-row:1/3;align-self:center;font-size:0}.start-label b{font-size:14px}.learning{padding:24px 16px 50px}.learning-head h2{font-size:29px}.streak{display:none}.lesson-tabs{margin-bottom:28px}.song-list{grid-template-columns:1fr}.practice-card{padding:24px 18px}.target-text{font-size:36px}.sentence-card .target-text{font-size:28px}.tab{font-size:14px}}
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:20;max-width:calc(100vw - 32px);padding:12px 18px;border-radius:12px;background:#263238;color:white;font-size:13px;box-shadow:var(--shadow)}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
.language-grid.four-languages{grid-template-columns:repeat(4,1fr);max-width:1060px}.language-card.cantonese{background:#eef5ff}.landmark{display:grid;place-items:center;width:102px;height:88px;border-radius:22px;background:rgba(255,255,255,.82);font-size:52px;margin-bottom:8px;box-shadow:inset 0 -5px 0 rgba(0,0,0,.035)}.city-name{font-size:11px;color:var(--muted);font-weight:700;letter-spacing:.5px;margin-bottom:7px}@media(max-width:900px) and (min-width:701px){.language-grid.four-languages{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.language-grid.four-languages{grid-template-columns:1fr}.landmark{width:64px;height:64px;font-size:34px;margin:0;grid-row:1/4}.city-name{grid-column:2;margin:0}.language-card{grid-template-rows:auto auto auto}.native-name{grid-column:2}.language-card strong{grid-column:2}.start-label{grid-row:1/4}}
.source-badge{display:inline-block;margin-top:7px;padding:3px 7px;border-radius:99px;background:#edf8f6;color:#397a6f;font-size:10px;font-weight:700}.score.pop{animation:score-pop .55s cubic-bezier(.2,1.5,.5,1)}.celebration{position:fixed;inset:0;z-index:15;pointer-events:none;overflow:hidden}.celebration span{position:absolute;top:46%;left:50%;color:var(--coral);font-size:24px;animation:confetti 1.15s ease-out forwards}.celebration span:nth-child(2){color:#f7c850;--x:-120px;--y:-130px}.celebration span:nth-child(3){color:#6fc9b6;--x:105px;--y:-110px}.celebration span:nth-child(4){color:#829ddd;--x:-90px;--y:80px}.celebration span:nth-child(5){color:#f0a2bf;--x:115px;--y:70px}.celebration span:first-child{--x:0px;--y:-165px}@keyframes score-pop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes confetti{0%{transform:translate(-50%,-50%) scale(.4) rotate(0);opacity:0}20%{opacity:1}100%{transform:translate(calc(-50% + var(--x)),calc(-50% + var(--y))) scale(1.2) rotate(280deg);opacity:0}}
