:root{color-scheme:light;--bg: #eaf4ff;--surface: #ffffff;--surface-2: #f1f6fd;--ink: #12263f;--muted: #5b6b84;--line: #dceafb;--primary: #1273d4;--primary-dark: #0c5aaa;--success-bg: #dcfce7;--success-ink: #166534;--error-bg: #ffe4e9;--error-ink: #a21c42;--gold: #ffb400;--focus: #7c3aed;--a1-bg: #b98bff;--a1-ink: #2c0a5e;--a1-edge: #7c3aed;--a2-bg: #ff8fc4;--a2-ink: #5a0a38;--a2-edge: #db2777;--a3-bg: #ff8a6b;--a3-ink: #4e1200;--a3-edge: #e4502a;--a4-bg: #57d9a5;--a4-ink: #073b2a;--a4-edge: #0e9f6e;--a5-bg: #57c4ff;--a5-ink: #06314f;--a5-edge: #1e8fd6;--a6-bg: #ffc93c;--a6-ink: #4a3600;--a6-edge: #e09a00;--bar-bg: #ffe8a3;--bar-edge: #f2b400;--r-tile: 22px;--r-card: 20px;--r-pill: 999px;--r-bubble: 20px;--stroke: #12263f;font-family:ui-rounded,SF Pro Rounded,Nunito,"Baloo 2",system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0;-webkit-text-size-adjust:100%}body{min-height:100dvh;color:var(--ink);line-height:1.5;background-color:var(--bg);background-image:radial-gradient(circle at 1px 1px,rgba(18,115,212,.07) 1.4px,transparent 0);background-size:22px 22px;background-attachment:fixed}a{color:var(--primary)}.wrap{max-width:760px;margin:0 auto;padding:14px 14px 72px}.topbar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--bar-bg);color:var(--ink);border-bottom:4px solid var(--bar-edge);position:sticky;top:0;z-index:10}.topbar .title{font-weight:900;font-size:1.1rem;flex:1;letter-spacing:.2px}.back{flex:0 0 auto;width:46px;height:46px;border-radius:50%;border:3px solid var(--stroke);background:var(--surface);color:var(--ink);font-size:1.5rem;line-height:1;display:grid;place-items:center;text-decoration:none;box-shadow:0 4px 0 var(--stroke);cursor:pointer;touch-action:manipulation;transition:transform .06s ease,box-shadow .06s ease}.back:active{transform:translateY(3px);box-shadow:0 1px 0 var(--stroke)}.h1{font-size:1.5rem;font-weight:900;margin:14px 2px 2px;letter-spacing:.2px}.sub{color:var(--muted);font-size:.95rem;margin:0 2px 14px;font-weight:600}.center{text-align:center;color:var(--muted);padding:12px 0;font-weight:600}.center-state{display:flex;flex-direction:column;align-items:center;gap:10px;padding:44px 0;text-align:center}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:focus-visible{outline:4px solid var(--focus);outline-offset:3px;border-radius:6px}.btn{display:inline-block;border:none;background:var(--primary);color:#fff;border-radius:var(--r-pill);padding:13px 20px;font-weight:900;font-size:1rem;cursor:pointer;text-decoration:none;min-height:46px;box-shadow:0 5px 0 var(--primary-dark);touch-action:manipulation;transition:transform .06s ease,box-shadow .06s ease}.btn:active{transform:translateY(4px);box-shadow:0 1px 0 var(--primary-dark)}.btn.block{display:block;width:100%;text-align:center}.star-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;background:var(--surface);color:var(--ink);border:2px solid var(--stroke);border-radius:var(--r-pill);padding:5px 12px;font-weight:900;font-size:.95rem;white-space:nowrap;box-shadow:0 3px 0 var(--stroke)}.candy-banner{display:flex;align-items:center;gap:12px;background:var(--surface);border:3px solid var(--stroke);border-radius:24px;box-shadow:0 6px 0 var(--stroke);padding:14px 16px;margin:16px 0}.banner-mid{flex:1;min-width:0}.speech{position:relative;background:var(--a6-bg);color:var(--a6-ink);border:2px solid var(--stroke);border-radius:16px 16px 16px 5px;padding:9px 12px;font-weight:800;font-size:.98rem}.track{position:relative;height:14px;margin-top:14px;border-radius:var(--r-pill);background:var(--surface-2);border:2px solid var(--stroke);overflow:visible}.track-fill{height:100%;border-radius:var(--r-pill);background:linear-gradient(90deg,#ff8a6b,#ffc93c,#57d9a5,#57c4ff,#b98bff);transition:width .5s cubic-bezier(.34,1.4,.5,1)}.track-bubu{position:absolute;top:50%;transform:translateY(-58%);line-height:0;transition:left .5s cubic-bezier(.34,1.4,.5,1)}.resume-pill{display:flex;align-items:center;justify-content:center;gap:8px;min-height:52px;margin:0 0 16px;border:none;border-radius:var(--r-pill);background:var(--a3-bg);color:var(--a3-ink);font-weight:900;font-size:1.05rem;text-decoration:none;box-shadow:0 5px 0 var(--a3-edge);touch-action:manipulation;transition:transform .06s ease,box-shadow .06s ease}.resume-pill:active{transform:translateY(4px);box-shadow:0 1px 0 var(--a3-edge)}.unit-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:16px}.unit-tile{position:relative;display:flex;flex-direction:column;gap:8px;min-height:152px;padding:14px;border-radius:var(--r-tile);border:3px solid var(--stroke);box-shadow:0 6px 0 var(--edge, var(--stroke));text-decoration:none;color:var(--ink);background:var(--surface);animation:pop-in .42s cubic-bezier(.34,1.56,.64,1) both;transition:transform .07s ease,box-shadow .07s ease}.unit-tile:nth-child(10n+1){animation-delay:0ms}.unit-tile:nth-child(10n+2){animation-delay:45ms}.unit-tile:nth-child(10n+3){animation-delay:90ms}.unit-tile:nth-child(10n+4){animation-delay:135ms}.unit-tile:nth-child(10n+5){animation-delay:.18s}.unit-tile:nth-child(10n+6){animation-delay:225ms}.unit-tile:nth-child(10n+7){animation-delay:.27s}.unit-tile:nth-child(10n+8){animation-delay:315ms}.unit-tile:nth-child(10n+9){animation-delay:.36s}.unit-tile:nth-child(10n){animation-delay:405ms}.unit-tile:active{transform:translateY(5px);box-shadow:0 1px 0 var(--edge, var(--stroke))}.unit-tile:active .gumball{transform:rotate(-10deg) scale(1.06)}.unit-tile.next{animation:pop-in .42s cubic-bezier(.34,1.56,.64,1) both,wobble 1.6s ease-in-out .5s infinite}.tile-top{display:flex;align-items:center;gap:10px;min-height:56px}.tile-illo{flex:1;min-width:0;display:flex;align-items:center;justify-content:flex-end}.tile-illo svg{height:62px;width:auto;max-width:100%}.unit-tile:active .tile-illo svg{transform:scale(1.07) rotate(-3deg);transition:transform .12s ease}.gumball{position:relative;flex:0 0 auto;width:56px;height:56px;display:grid;place-items:center;transition:transform .12s cubic-bezier(.34,1.7,.5,1)}.gumball .ring{position:absolute;inset:0;width:56px;height:56px;transform:rotate(-90deg)}.ring-bg,.ring-fg{fill:none;stroke-width:5}.ring-bg{stroke:#00000024}.ring-fg{stroke:var(--edge, var(--primary));stroke-linecap:round;stroke-dasharray:157;transition:stroke-dashoffset .5s ease}.gumball .num{position:relative;width:40px;height:40px;border-radius:50%;background:var(--surface);border:2px solid var(--stroke);display:grid;place-items:center;font-weight:900;font-size:1.3rem;color:var(--ink)}.num-check{position:absolute;right:-3px;bottom:-3px;width:22px;height:22px;border-radius:50%;background:var(--gold);color:#3a2a00;border:2px solid var(--stroke);font-size:.8rem;font-weight:900;display:grid;place-items:center}.unit-name{font-weight:900;font-size:1.12rem;line-height:1.22;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.count-pill{align-self:flex-start;margin-top:auto;background:var(--surface);color:var(--ink);border:2px solid var(--stroke);border-radius:var(--r-pill);padding:3px 11px;font-size:.82rem;font-weight:900}.done-star{position:absolute;top:-12px;right:-8px;font-size:1.7rem;transform:rotate(-10deg);filter:drop-shadow(0 2px 0 var(--stroke))}.next-tag{position:absolute;right:8px;bottom:10px;background:var(--primary);color:#fff;border:2px solid var(--stroke);border-radius:var(--r-pill);padding:2px 10px;font-size:.78rem;font-weight:900;box-shadow:0 2px 0 var(--primary-dark)}.unit-tile.done .ring-fg{stroke:var(--gold)}.sticker{display:inline-flex;align-items:center;gap:8px;margin:26px 0 14px;border:3px solid var(--stroke);border-radius:14px;padding:8px 16px;font-weight:900;font-size:1.08rem;box-shadow:0 4px 0 var(--stroke);transform:rotate(-2deg);transform-origin:left center;max-width:100%}.s-dialog{background:var(--a1-bg);color:var(--a1-ink)}.s-bacaan{background:var(--a3-bg);color:var(--a3-ink)}.s-khusus{background:var(--a5-bg);color:var(--a5-ink)}.s-kosakata{background:var(--a4-bg);color:var(--a4-ink)}.dialog-card{background:var(--surface);border:3px solid var(--stroke);border-left-width:9px;border-left-color:var(--frame, var(--a1-edge));border-radius:var(--r-card);padding:14px;margin-bottom:14px;box-shadow:0 5px 0 var(--stroke)}.dialog-card.f-bacaan{--frame: var(--a3-edge)}.dialog-card.f-khusus{--frame: var(--a5-edge)}.dialog-card.playing{box-shadow:0 5px 0 var(--primary-dark);border-color:var(--primary)}.dialog-play{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:58px;border:none;border-radius:16px;background:var(--primary);color:#fff;font-weight:900;font-size:1.08rem;cursor:pointer;box-shadow:0 6px 0 var(--primary-dark);touch-action:manipulation;transition:transform .06s ease,box-shadow .06s ease}.dialog-play:active{transform:translateY(5px);box-shadow:0 1px 0 var(--primary-dark)}.dialog-play.attract{animation:nudge 2.4s ease-in-out infinite}.dialog-play.playing{background:var(--primary-dark);box-shadow:0 3px #083f78;transform:translateY(2px)}.dp-icon{display:inline-flex;line-height:0}.eq{display:inline-flex;align-items:flex-end;gap:3px;height:20px}.eq i{width:4px;height:100%;background:#fff;border-radius:2px;transform-origin:bottom;animation:eq .5s ease-in-out infinite}.eq i:nth-child(2){animation-delay:.1s}.eq i:nth-child(3){animation-delay:.2s}.eq i:nth-child(4){animation-delay:.3s}.dots{display:inline-flex;gap:5px}.dots span{width:7px;height:7px;border-radius:50%;background:currentColor;animation:dot .6s ease-in-out infinite}.dots span:nth-child(2){animation-delay:.15s}.dots span:nth-child(3){animation-delay:.3s}.chat{display:flex;flex-direction:column;gap:10px;margin-top:14px;border-radius:14px}.brow{display:flex}.brow.right{justify-content:flex-end}.bubble{position:relative;max-width:82%;border-radius:var(--r-bubble);padding:10px 14px;font-size:1.15rem;line-height:1.5;font-weight:800;word-break:break-word;background:var(--surface);color:var(--ink);border:2px solid var(--stroke);border-bottom-left-radius:6px;box-shadow:0 3px 0 var(--stroke)}.bubble.right{background:var(--a2-bg);color:var(--ink);border-bottom-right-radius:6px;border-bottom-left-radius:var(--r-bubble)}.bubble.speaking{transform:scale(1.04) translateY(-1px);box-shadow:0 3px 0 var(--primary-dark);border-color:var(--primary);z-index:1}.bubble.dim{opacity:.45}.bubble.speaking,.bubble.dim{transition:transform .15s ease,opacity .2s ease,box-shadow .15s ease}.kara-fill{position:absolute;left:12px;right:12px;bottom:5px;height:4px;transform-origin:left center;background:var(--primary);border-radius:var(--r-pill);transition:transform .18s linear}.who{display:inline-block;font-size:.72rem;font-weight:900;color:#fff;background:var(--a1-edge);border-radius:var(--r-pill);padding:2px 9px;margin-bottom:5px}.bubble.right .who{background:var(--a2-edge)}.btr{margin-top:6px;padding-top:6px;border-top:2px dashed var(--line);color:var(--muted);font-size:.9rem;line-height:1.45;font-weight:600;animation:fadeUp .25s ease-out}.dialog-top{display:flex;flex-direction:column;gap:12px}.dialog-top .tr-toggle{align-self:flex-start}.tr-toggle{display:inline-flex;align-items:center;gap:6px;min-height:44px;margin-top:0;border:3px solid var(--a1-edge);background:var(--surface);color:var(--a1-ink);border-radius:var(--r-pill);padding:8px 16px;font:inherit;font-weight:900;cursor:pointer;touch-action:manipulation;box-shadow:0 4px 0 var(--a1-edge);transition:transform .06s ease,box-shadow .06s ease}.tr-toggle.on{background:var(--a1-bg)}.tr-toggle:active{transform:translateY(3px);box-shadow:0 1px 0 var(--a1-edge)}.tr-ic{font-size:1rem;line-height:1}.story-text{margin:14px 2px 2px;font-size:1.08rem;line-height:1.65;color:var(--ink);font-weight:600}.series-sub{margin-top:12px;color:var(--muted);font-size:.9rem;font-weight:600}.chips{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}.chip{border:2px solid var(--stroke);border-radius:12px;padding:6px 13px;font-weight:900;font-size:1rem;box-shadow:0 3px 0 var(--stroke)}.dialog-card.playing .chip{animation:shimmer .9s ease-in-out infinite}.dialog-card.playing .chip:nth-child(2n){animation-delay:.15s}.dialog-card.playing .chip:nth-child(3n){animation-delay:.3s}.audio-item{position:relative;display:flex;align-items:center;gap:14px;background:var(--surface);border:3px solid var(--stroke);border-left-width:9px;border-left-color:var(--a4-edge);border-radius:var(--r-card);padding:12px 14px;margin-bottom:14px;box-shadow:0 5px 0 var(--stroke)}.audio-item.playing{background:var(--a4-bg);border-color:var(--stroke)}.audio-item.playing .item-en,.audio-item.playing .item-tr,.audio-item.playing .repeat-hint{color:var(--a4-ink)}.audio-item.error{background:var(--error-bg);border-left-color:var(--error-ink)}.play-btn{position:relative;flex:0 0 auto;width:58px;height:58px;border-radius:50%;border:none;background:var(--primary);color:#fff;display:grid;place-items:center;cursor:pointer;box-shadow:0 5px 0 var(--primary-dark);touch-action:manipulation;transition:transform .06s ease,box-shadow .06s ease}.play-btn:active{transform:translateY(4px);box-shadow:0 1px 0 var(--primary-dark)}.audio-item.playing .play-btn{background:var(--primary-dark);box-shadow:0 2px #083f78;transform:translateY(2px)}.audio-item.playing .play-btn:after{content:"";position:absolute;inset:-7px;border-radius:50%;border:3px solid var(--primary);animation:halo 1.4s ease-out infinite}.audio-item.error .play-btn{animation:shake .4s ease 1}.item-body{min-width:0;flex:1}.item-en{font-weight:900;font-size:1.3rem;letter-spacing:.2px;word-break:break-word}.item-tr{color:var(--muted);font-size:.95rem;margin-top:1px;font-weight:600}.item-msg{color:var(--error-ink);font-size:.9rem;margin-top:2px;font-weight:800}.repeat-hint{color:var(--a4-edge);font-size:.85rem;font-weight:900;margin-top:3px}.row-star{position:absolute;top:-10px;right:12px;font-size:1.5rem;filter:drop-shadow(0 2px 0 var(--stroke));animation:star .5s cubic-bezier(.34,1.56,.64,1)}.retry{flex:0 0 auto;width:46px;height:46px;border-radius:50%;border:3px solid var(--error-ink);background:var(--surface);color:var(--error-ink);font-size:1.2rem;display:grid;place-items:center;cursor:pointer;touch-action:manipulation;box-shadow:0 4px 0 var(--error-ink);transition:transform .06s ease,box-shadow .06s ease}.retry:active{transform:translateY(3px);box-shadow:0 1px 0 var(--error-ink)}.confetti-layer{position:fixed;inset:0;pointer-events:none;z-index:1000;overflow:hidden}.confetti{position:absolute;top:-14px;width:11px;height:15px;border-radius:3px;animation:confetti 1.3s ease-in forwards}.bubu{display:block;overflow:visible}.bubu .bubu-body,.bubu .rab-ears,.bubu .rab-mouth,.bubu .rab-paws,.bubu .eye{transform-box:fill-box}.bubu .bubu-body{transform-origin:center;animation:bob 2.8s ease-in-out infinite alternate}.bubu.talk .bubu-body{animation-duration:.5s}.bubu .rab-mouth{transform-origin:center}.bubu.talk .rab-mouth{animation:mouth .28s ease-in-out infinite alternate}.bubu .rab-ears{transform-origin:bottom center}.bubu.talk .rab-ears{transform:translateY(-2px) scaleY(1.05)}.bubu.load .rab-ears{animation:earwiggle .5s ease-in-out infinite alternate}.bubu.load .eye{transform-origin:center;animation:blink 1.1s steps(1) infinite}.bubu.sad .rab-ears{transform:translateY(5px) scaleY(.78)}.bubu .rab-paws{transform-origin:bottom center}.bubu.cheer{animation:hop .6s ease}.bubu.cheer .rab-paws{transform:translateY(-9px) rotate(-6deg)}@keyframes bob{to{transform:translateY(-6px)}}@keyframes mouth{to{transform:scaleY(.4)}}@keyframes earwiggle{0%{transform:rotate(-6deg)}to{transform:rotate(6deg)}}@keyframes blink{0%,90%{transform:scaleY(1)}95%{transform:scaleY(.1)}}@keyframes hop{0%{transform:translateY(0)}30%{transform:translateY(-16px) scaleY(1.08) scaleX(.94)}55%{transform:translateY(0) scaleY(.86) scaleX(1.12)}to{transform:translateY(0)}}@keyframes pop-in{0%{opacity:0;transform:translateY(16px) scale(.9)}to{opacity:1;transform:none}}@keyframes nudge{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes wobble{0%,to{transform:rotate(0)}25%{transform:rotate(-1.5deg)}75%{transform:rotate(1.5deg)}}@keyframes dot{50%{transform:translateY(-5px)}}@keyframes eq{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}@keyframes halo{0%{transform:scale(.8);opacity:.55}to{transform:scale(1.5);opacity:0}}@keyframes star{0%{transform:scale(0) rotate(-30deg)}60%{transform:scale(1.3) rotate(6deg)}to{transform:scale(1) rotate(0)}}@keyframes confetti{to{transform:translateY(130px) rotate(400deg);opacity:0}}@keyframes fadeUp{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}@keyframes shake{25%{transform:translate(-6px)}50%{transform:translate(6px)}75%{transform:translate(-3px)}}@keyframes shimmer{50%{opacity:.55}}:root.is-playing .attract,:root.is-playing .unit-tile.next{animation-play-state:paused}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition-duration:.01ms!important}}
