:root{font-family:'Nunito','Noto Sans SC',sans-serif;color:#252a2a;background:#f7f6f2;font-synthesis:none}*{box-sizing:border-box}body{margin:0;min-width:320px}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #edb749;outline-offset:3px}.app-shell{min-height:100vh;max-width:1600px;margin:auto}.topbar{height:76px;display:flex;align-items:center;justify-content:space-between;padding:0 4.1%;border-bottom:1px solid #e8e7e1;background:#fff}.brand{text-decoration:none;color:#242d2b;display:flex;gap:11px;align-items:center;font-size:19px;font-weight:900;line-height:1.05}.brand-mark{width:39px;height:39px;background:#f6d376;border-radius:10px;display:grid;place-items:center;font-size:27px;color:#343b32;transform:rotate(-9deg)}.brand small{display:block;font:700 9px 'DM Mono',monospace;color:#8e9790;letter-spacing:1.8px;margin-top:5px}.topbar-right{display:flex;align-items:center;gap:26px}.save-label{color:#939a93;font-size:12px;font-weight:700}.save-dot,.live-dot{display:inline-block;width:7px;height:7px;background:#70b99d;border-radius:50%;margin-right:5px}.coin-pill{display:flex;align-items:center;gap:8px;background:#fff8e6;color:#9d7417;padding:8px 14px;border:1px solid #f6e9ca;border-radius:20px;font-size:12px}.coin-pill>span:first-child{font-size:18px;color:#edae37}.coin-pill strong{font-size:16px;color:#30372d}.layout{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:calc(100vh - 130px)}.sidebar{border-right:1px solid #e8e7e1;background:#fcfbf8;padding:33px 16px 24px;display:flex;flex-direction:column}.sidebar-heading{display:flex;justify-content:space-between;padding:0 13px;color:#333b37;font-size:13px;font-weight:900}.sidebar-heading span:last-child{font:500 11px 'DM Mono',monospace;color:#a0a69e}.nav-chapter{font-size:10px;font-weight:900;color:#a3a9a2;letter-spacing:1.2px;margin:27px 13px 10px;text-transform:uppercase;display:flex;justify-content:space-between}.nav-chapter span{font:400 10px 'DM Mono',monospace;letter-spacing:0}.level-item{width:100%;display:flex;align-items:center;gap:11px;text-align:left;border:0;background:transparent;padding:10px 12px;border-radius:6px;color:#68716b;font-size:12px;font-weight:800;white-space:nowrap}.level-item:not(:disabled):hover{background:#f0f4ec}.level-item.active{background:#e9f2e8;color:#2c704d}.level-item.locked{opacity:.52;cursor:not-allowed}.level-number{font:600 11px 'DM Mono',monospace;color:#7e8b81;display:grid;place-items:center;min-width:24px;height:24px;border-radius:5px;background:#f1f1eb}.active .level-number{background:#cce5d3;color:#287047}.level-name{flex:1}.level-status{font-size:12px;color:#bf9d48}.active .level-status{color:#34875c}.sidebar-footer{margin-top:auto;padding:25px 10px 4px;display:flex;gap:10px;align-items:center;color:#a0a69e;font-size:11px;font-weight:700;border-top:1px solid #efeee9}.footer-icon{font-size:24px;color:#7eab8c}.main-panel{padding:31px clamp(28px,4.4vw,76px) 52px;max-width:1200px;width:100%;margin:0 auto}.chapter-bar{display:flex;align-items:center;justify-content:space-between;color:#8c968e;font:500 11px 'DM Mono','Noto Sans SC',monospace;letter-spacing:.4px}.chapter-label{display:flex;align-items:center;gap:10px}.chapter-icon{display:grid;place-items:center;width:22px;height:22px;background:#e6f1e8;color:#398258;border-radius:5px;font-size:16px}.chapter-divider{color:#c6cbc4}.intro{display:flex;align-items:center;justify-content:space-between;min-height:182px;overflow:hidden}.eyebrow{font:700 10px 'DM Mono',monospace;letter-spacing:2.1px;color:#4c9874;display:flex;align-items:center;gap:14px}.eyebrow-line{width:27px;height:1px;background:#80b79c}.intro h1{font-size:clamp(24px,2.6vw,36px);letter-spacing:0;line-height:1.35;margin:17px 0 9px;font-weight:900;color:#222c2a}.intro p{color:#929991;font-size:13px;margin:0;font-weight:700;line-height:1.7}.intro-art{width:225px;height:172px;position:relative;flex:none}.orbit{position:absolute;border:1px dashed #e0e6db;border-radius:50%}.orbit-one{width:151px;height:151px;top:11px;left:39px}.orbit-two{width:103px;height:103px;top:36px;left:63px}.art-star{position:absolute;top:41px;left:80px;font-size:80px;color:#f1bf54;line-height:1;filter:drop-shadow(0 10px 0 #f7e7bd);animation:float 4s ease-in-out infinite}.floating-key{position:absolute;display:grid;place-items:center;background:white;color:#5b725f;border:1px solid #e5e8dd;box-shadow:0 4px 0 #e8e9df;border-radius:6px;width:29px;height:29px;font:700 13px 'DM Mono',monospace}.key-a{top:17px;left:45px;transform:rotate(-14deg)}.key-s{bottom:19px;left:25px;transform:rotate(12deg)}.key-j{top:18px;right:30px;transform:rotate(14deg)}.floating-spark{position:absolute;bottom:18px;right:23px;color:#86b89c;font-size:27px}.game-area{background:white;border:1px solid #eaece5;box-shadow:0 12px 38px #526c4b0b;border-radius:8px;overflow:hidden}.game-top{min-height:58px;padding:0 26px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #f0f1eb}.game-label{font-size:13px;font-weight:900}.live-dot{margin-right:9px}.mode-badge{font-size:10px;font-weight:800;color:#5a9271;background:#eef6ef;padding:5px 8px;border-radius:4px;margin-left:9px}.icon-button{border:0;background:#f7f8f3;color:#79867c;border-radius:5px;height:29px;width:29px;font-size:20px;line-height:1}.icon-button:hover{background:#e8f0e5}.challenge{padding:26px 34px 0}.challenge-meta{display:flex;justify-content:space-between;color:#969e96;font-size:11px;font-weight:800}.challenge-meta span:last-child{font:500 11px 'DM Mono',monospace}.target-wrap{height:202px;display:flex;flex-direction:column;align-items:center;justify-content:center}.target-hint{height:27px;color:#3e8563;font-size:20px;font-weight:900;visibility:hidden}.target-hint.visible{visibility:visible}.target{font:500 clamp(65px,8vw,112px) 'DM Mono',monospace;line-height:1.1;letter-spacing:0;color:#283b30;white-space:nowrap;max-width:100%;overflow:hidden;display:flex;justify-content:center}.target.word-target{font-size:clamp(30px,4vw,54px)}.target-char{display:inline-block;min-width:.62em;text-align:center}.target-char.current{color:#378855;border-bottom:4px solid #63aa79}.target-char.typed{color:#b8d5ba}.feedback{margin-top:14px;height:19px;color:#a6ada4;font-size:12px;font-weight:800}.feedback.success{color:#3c9661}.feedback.error{color:#d47064}.shake{animation:shake .24s ease-in-out}.progress-track{height:6px;background:#f0f2ec;border-radius:5px;overflow:hidden}.progress-fill{height:100%;background:#70be8d;border-radius:5px;transition:width .22s ease}.game-stats{display:grid;grid-template-columns:repeat(4,1fr);padding:19px 0 22px}.game-stats>div{display:flex;flex-direction:column;gap:5px;padding-left:24px;border-left:1px solid #eff0eb}.game-stats>div:first-child{padding-left:0;border:0}.stat-label{font-size:10px;color:#a0a7a0;font-weight:800}.game-stats strong{font:800 19px 'Nunito','Noto Sans SC',sans-serif;color:#303b34}.stat-unit{font-size:12px}.bottom-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(260px,1fr);gap:19px;margin-top:23px}.keyboard-section,.rewards-section{min-width:0}.section-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;gap:8px}.section-heading>div{display:flex;align-items:center;gap:9px}.section-heading strong{font-size:13px;font-weight:900}.section-heading>span{font-size:10px;color:#9ca59a;font-weight:800;text-align:right}.section-icon{font-size:17px;color:#508962}.reward-icon{color:#d9a43d}.keyboard{padding:16px 10px 13px;border:1px solid #e7eae3;background:#f0f2ed;border-radius:7px}.keyboard-row{display:flex;justify-content:center;gap:5px;margin-bottom:5px}.keyboard-row:last-child{margin-bottom:0}.keyboard-key{display:grid;place-items:center;min-width:0;width:clamp(27px,3vw,39px);height:clamp(29px,3vw,39px);background:white;border:1px solid #dce1d9;border-bottom:3px solid #cfd6cd;border-radius:5px;font:500 clamp(11px,1.2vw,15px) 'DM Mono',monospace;color:#6b776f;transition:background .1s,transform .1s,border-color .1s}.keyboard-key.highlight{background:#74b88a;border-color:#5ca774;color:white;transform:translateY(-2px);box-shadow:0 3px 9px #64ad7955}.space-key{width:42%;height:24px;font-size:9px;color:#abb2a8}.keyboard-note{display:flex;align-items:center;gap:8px;margin-top:11px;color:#a1a9a0;font-size:10px;font-weight:700}.note-orb{width:7px;height:7px;background:#71b98b;border-radius:50%}.reward-feature{min-height:155px;border-radius:7px;background:#fff7e8;border:1px solid #f8e9ce;display:flex;align-items:center;gap:18px;padding:22px}.reward-medal{width:62px;height:62px;border-radius:50%;border:5px solid #f5dc9e;background:#f8c962;color:#fff2c9;display:grid;place-items:center;font-size:35px;box-shadow:0 5px 0 #e9d4a5;flex:none}.reward-feature>div:last-child{display:flex;flex-direction:column;gap:6px}.reward-kicker{font-size:10px;font-weight:900;color:#bc955c}.reward-feature strong{font-size:16px;color:#423d30;font-weight:900}.reward-feature>div:last-child>span:last-child{color:#a38c68;font-size:11px;font-weight:800}.reward-footer{font-size:10px;color:#aab09e;margin-top:13px;font-weight:800}.page-footer{display:flex;justify-content:space-between;padding:17px 4.1%;font-size:10px;color:#a5aba4;border-top:1px solid #e8e7e1}.modal-backdrop{position:fixed;inset:0;background:#26362eae;z-index:10;display:grid;place-items:center;padding:20px}.modal-backdrop[hidden]{display:none}.result-dialog{background:#fffdfa;border-radius:8px;max-width:460px;width:100%;padding:32px 38px 35px;text-align:center;box-shadow:0 30px 80px #1b2a1b48;animation:appear .3s ease-out}.result-art{font-size:69px;line-height:1;color:#edba53;filter:drop-shadow(0 6px 0 #f5e5ba)}.result-overline{color:#4b9770;font-size:11px;font-weight:900;margin-top:14px}.result-dialog h2{font-size:25px;margin:9px 0;color:#28352d}.result-dialog p{font-size:12px;color:#8e998e;margin:0 0 23px;line-height:1.7}.result-metrics{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #e9ebe5;border-bottom:1px solid #e9ebe5;padding:18px 0}.result-metrics>div{display:flex;flex-direction:column;gap:5px}.result-metrics span{font-size:10px;color:#a2aaa0}.result-metrics strong{font-size:18px;color:#394b3d}.result-condition{color:#bb9143;font-size:11px;font-weight:800;margin:18px 0}.result-actions{display:flex;gap:10px}.primary-button,.secondary-button{flex:1;padding:11px 8px;border-radius:5px;font-size:12px;font-weight:900}.primary-button{background:#3b895e;border:1px solid #3b895e;color:white}.primary-button:hover{background:#30774f}.secondary-button{background:white;color:#6c8371;border:1px solid #dce7d9}.secondary-button:hover{background:#f1f7ef}@keyframes float{50%{transform:translateY(-7px) rotate(7deg)}}@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}@keyframes appear{from{opacity:0;transform:translateY(15px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:980px){.layout{grid-template-columns:195px minmax(0,1fr)}.sidebar{padding-left:10px;padding-right:10px}.main-panel{padding:27px 25px 42px}.bottom-grid{grid-template-columns:1fr}.reward-feature{min-height:120px}.keyboard-key{width:min(7vw,45px);height:35px}}@media(max-width:680px){.topbar{height:65px;padding:0 17px}.save-label{display:none}.layout{display:block}.sidebar{border-right:0;border-bottom:1px solid #e8e7e1;padding:14px 14px 12px;display:block}.sidebar-heading,.sidebar-footer{display:none}.level-list{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.nav-chapter{display:none}.level-item{flex:none;width:auto;padding:8px 10px;border:1px solid #ebece6}.level-item.locked{display:none}.level-number{width:22px;height:22px}.level-status{display:none}.main-panel{padding:22px 17px 40px}.intro{min-height:140px}.intro-art{width:87px;height:108px;opacity:.7}.orbit-one{width:94px;height:94px;left:4px;top:7px}.orbit-two,.floating-key,.floating-spark{display:none}.art-star{font-size:51px;left:23px;top:28px}.intro h1{font-size:24px}.intro p{font-size:11px}.eyebrow{font-size:8px}.chapter-bar{font-size:10px}.challenge{padding:22px 20px 0}.target-wrap{height:188px}.target{font-size:76px}.target.word-target{font-size:clamp(25px,7vw,42px)}.game-stats>div{padding-left:10px}.game-stats strong{font-size:16px}.stat-label{font-size:9px}.keyboard-key{width:min(7.8vw,38px);height:34px}.page-footer{display:block;text-align:center}.page-footer span:last-child{display:none}}@media(max-width:380px){.intro-art{display:none}.intro{min-height:143px}.keyboard{padding:12px 4px}.keyboard-row{gap:3px}.keyboard-key{width:8vw;height:30px}.reward-feature{padding:17px}.result-dialog{padding:26px 20px}}