:root{font-family:PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:#283d2b;background:#f8f6ee;font-synthesis:none;font-size:15px;--green: #3a5937;--muted: #7a8371;--border: #e3e5d6;--paper: #fffef9;--gold: #bc8f36}*{box-sizing:border-box}body{margin:0}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,summary:focus-visible{outline:3px solid #b59040;outline-offset:4px}button{border:0}svg{display:block}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:650}button{transition:background .18s,transform .18s,border-color .18s}.header{height:94px;max-width:1280px;padding:0 34px;margin:auto;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:12px;text-align:left;background:none;font-size:21px;letter-spacing:2px;font-weight:700}.brand small{display:block;font-size:11px;letter-spacing:1px;color:var(--muted);margin-top:5px;font-weight:400}.brand-mark{background:var(--green);color:#f2efdc;border-radius:13px;width:43px;height:43px;padding:10px}.brand svg{width:100%}nav{display:flex;gap:10px}nav button{background:none;padding:12px 18px;border-radius:24px;color:#757d6c;font-size:14px}nav button.active{background:#e7ecd9;color:var(--green);font-weight:650}.nav-count{font-size:10px;margin-left:5px}.star-counter{display:flex;align-items:center;gap:7px;font-size:19px;color:var(--gold);background:#f0ecda;border:1px solid #e8dfc2;border-radius:30px;padding:9px 15px}.star-counter span{font-size:11px;color:#8b805f}.map,.game-page,.library-page{max-width:1200px;margin:auto;padding:0 34px}.hero{min-height:324px;display:grid;grid-template-columns:1.1fr 1fr .7fr;align-items:center;gap:24px;padding:36px 0 38px}.eyebrow{font-size:10px;font-weight:650;letter-spacing:1.4px;text-transform:uppercase;color:#7b8868}.hero h1{font-family:Songti SC,STSong,serif;font-size:48px;line-height:1.28;letter-spacing:2px;margin:13px 0;color:#2d412b;font-weight:700}.hero h1 span{color:#849954}.hero p{font-size:13px;color:#848977;line-height:1.85}.hero-tags{display:flex;gap:8px;margin-top:21px;font-size:10px;color:#7e866c}.hero-tags span{padding:6px 9px;border:1px solid #dfe3ce;border-radius:5px;background:#f5f3e8}.book-art{width:100%;max-width:350px}.journey{align-self:center;border-left:1px solid #e0e3d2;padding:20px 0 20px 27px}.journey strong{font-weight:500;display:block;font-size:48px;margin:16px 0 20px}.journey small{font-size:15px;color:#90947d}.journey p{font-size:11px;margin-top:13px}.progress-track{height:5px;background:#e7eadc;overflow:hidden;border-radius:10px}.progress-track i{height:100%;display:block;background:#8ca668;transition:width .3s;border-radius:10px}.section-heading{display:flex;justify-content:space-between;align-items:end;margin-bottom:22px;gap:20px}.section-heading h2{font-size:23px;margin-top:8px;letter-spacing:1px}.section-heading p{color:#949784;font-size:11px}.units{display:grid;grid-template-columns:repeat(8,1fr);gap:10px}.unit-tile{background:#f2f1e7;border:1px solid #e3e4d4;position:relative;overflow:hidden;border-radius:10px;text-align:left;padding:15px 13px;min-height:124px}.unit-tile.selected{background:#3a5937;color:#f8f6e9;border-color:#3a5937;box-shadow:0 6px 16px #3a593718}.unit-tile:hover{transform:translateY(-3px)}.unit-no{font-family:Georgia,serif;font-size:27px;color:#acb69a;font-style:italic;display:block;margin-bottom:10px}.selected .unit-no{color:#bfca9e}.unit-name{display:block;font-size:13px;font-weight:650}.unit-state{display:block;font-size:9px;color:#969d85;margin-top:8px}.selected .unit-state{color:#c9d2bc}.unit-tile i{position:absolute;bottom:0;left:0;background:#a9bd7d;height:3px}.chapter{margin-top:31px;background:var(--paper);border:1px solid var(--border);border-radius:17px;padding:27px;box-shadow:0 8px 30px #4a5b3010}.chapter-banner{display:flex;justify-content:space-between;gap:30px;align-items:center}.chapter-banner h2{font-family:Songti SC,serif;font-size:28px;margin:9px 0}.chapter-banner p{font-size:12px;color:#858d78;margin-bottom:9px}.lesson-note{font-size:10px;color:#9a9e8a;line-height:1.8;display:block}.primary{background:#3a5937;color:#fffdf2;border-radius:8px;padding:13px 21px;font-weight:600;font-size:13px;white-space:nowrap}.primary:hover{background:#2d492b;transform:translateY(-1px)}.primary span{margin-left:18px}.secondary{background:#edf0e3;border:1px solid #dce2ca;padding:12px 18px;border-radius:8px;font-size:13px;font-weight:600}.secondary:hover{background:#e1e7d1}.filters{display:flex;gap:8px;flex-wrap:wrap;border-top:1px solid #eef0e5;padding-top:20px;margin:21px 0}.filters button{background:transparent;border:1px solid #e4e8d8;border-radius:6px;padding:7px 12px;font-size:11px;color:#8a937c}.filters button.selected{background:#e9eedc;color:#425c35;border-color:#c8d5b4}.levels{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.level{border:1px solid #e6e7db;border-radius:10px;background:#fffef9;padding:17px;text-align:left}.level:hover{transform:translateY(-3px);border-color:#b8c69f;box-shadow:0 5px 15px #3a593710}.level-top{display:flex;align-items:center;gap:9px;margin-bottom:19px}.level-num{font-size:13px;color:#a0ab8d;font-family:Georgia,serif}.kind-tag{padding:4px 6px;font-size:9px;background:#eef1e4;color:#85906b;border-radius:4px}.kind-poetry{background:#f4eadd;color:#aa8964}.kind-errors{background:#f4e4dd;color:#b97f62}.kind-idioms{background:#e7edf2;color:#768da4}.level-stars{margin-left:auto;display:flex;gap:2px;font-size:15px}.level-stars i{font-style:normal;color:#e3e6d7}.level-stars i.lit{color:#c49b47}.level h3{font-size:13px;line-height:1.6;min-height:42px}.level-bottom{margin-top:15px;display:flex;align-items:center;justify-content:space-between;color:#989e8a;font-size:9px}.go{color:#69835a;font-size:10px}.passed{background:#fbfcf5}footer{text-align:center;color:#a5a68f;font-size:10px;padding:28px}.game-page{padding-top:28px}.breadcrumb{display:flex;justify-content:space-between;align-items:center;color:#8f9782;font-size:11px}.breadcrumb button{background:none;font-size:12px;color:#6d7e5e}.game-heading{text-align:center;margin:35px 0 30px}.game-heading h1{font-family:Songti SC,serif;font-size:31px;margin:12px 0}.game-heading p{color:#89917c;font-size:13px}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 245px;gap:29px;align-items:start}.game-toolbar{display:flex;align-items:center;gap:20px;padding:16px 20px;background:#eeefe3;border-radius:10px 10px 0 0;font-size:12px;color:#828e73}.game-toolbar .progress-track{flex:1;background:#dfe5ce}.game-toolbar b{font-size:19px;color:#425b35}.timer{font-variant-numeric:tabular-nums}.board{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:20px;background:#f1f2e7;border:1px solid #e4e7d8;border-top:0;border-radius:0 0 12px 12px}.tile,.empty-slot{min-height:140px;border-radius:10px;position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;padding:15px 10px}.tile{border:1px solid #dde3d0;background:#fffefa;box-shadow:0 3px #dbe0cd;color:#354d30;gap:12px}.tile.right{background:#f9f5e9;border-color:#e9dec2;box-shadow:0 3px #e6ddc5}.tile small{font-size:10px;line-height:1.6;color:#99a186;font-weight:400}.tile.right small{color:#a49371}.tile strong{font-size:22px;font-weight:600;line-height:1.55;overflow-wrap:anywhere}.tile strong.long{font-size:15px}.tile.left:has(strong.long) strong{font-size:18px}.tile:hover{transform:translateY(-2px);border-color:#92a679}.tile.chosen{outline:2px solid #648554;outline-offset:2px;background:#eef4e3;transform:translateY(-3px)}.tile-dot{width:3px;height:3px;position:absolute;bottom:12px;background:#c3cfb1;border-radius:50%}.tile.right .tile-dot{background:#d4c6a5}.tile.wrong{outline-color:#cd8670;background:#f7e7df;animation:shake .25s linear}.tile.hinted{outline:2px solid #d4af5d;background:#fff7db}.empty-slot{border:1px dashed #dce1ce;color:#ced7bd;animation:leave .3s}.empty-slot span{font-size:25px}.board-status{font-size:11px;color:#8c987b;text-align:center;min-height:36px;padding:14px 5px 0}.feedback{background:#eeefdf;border-radius:8px;text-align:center;padding:12px 14px;font-size:12px;line-height:1.8;color:#778364;min-height:45px;margin-top:10px}.game-aside{background:#fffef9;border:1px solid #e2e6d5;border-radius:13px;padding:23px}.game-aside h3{font-size:17px;margin:13px 0 25px}.aside-stats{display:grid;gap:15px;font-size:12px}.aside-stats>div{display:flex;justify-content:space-between;color:#8d9780}.aside-stats b{font-weight:500;color:#4d6242}.game-aside p{border-top:1px solid #e8ebdc;margin:21px 0;padding-top:17px;color:#8c967d;font-size:11px;line-height:2}.game-aside b{color:#68854c}.game-aside .secondary{width:100%}.text-button{background:none;padding:12px;font-size:11px;color:#83916b;width:100%}.star-guide{border-top:1px dashed #e2e5d3;font-size:10px;line-height:2.1;color:#a3a98f;padding-top:16px;margin-top:9px}.result{background:#e8edda;border:1px solid #c9d6b3;text-align:center;border-radius:12px;padding:26px;margin-top:17px}.result-stars{font-size:35px;color:#bf9b44;letter-spacing:10px}.result h2{font-size:23px;margin:10px 0}.result p{font-size:12px;color:#839072;margin:10px 0 22px}.result>div:last-child{display:flex;gap:12px;justify-content:center}.library-page{padding-top:40px;padding-bottom:40px}.library-page h1{font-family:Songti SC,serif;font-size:35px;margin-top:10px}.library-intro{color:#8b937e;line-height:2;font-size:13px;max-width:850px;margin:22px 0}.count-pill{font-size:12px;border:1px solid #dce2cf;padding:9px 14px;border-radius:25px;color:#82936a}.coverage{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}.coverage>div{background:#edf0e2;border:1px solid #dce3ce;border-radius:10px;padding:22px}.coverage b{display:block;font-size:31px;font-weight:500}.coverage span{display:block;font-size:11px;color:#8b957e;margin-top:8px}.source-panel{margin:30px 0}.source-panel h2{font-size:20px;margin-bottom:12px}.source-panel>p{font-size:11px;color:#9ba28b;margin-bottom:18px}.study-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.study-grid article{background:#fffdf7;border:1px solid #e4e6d5;border-radius:9px;padding:18px}.study-answer{display:flex;align-items:center;gap:10px;justify-content:space-between;font-size:13px;line-height:1.7}.study-answer span{color:#c0c8ad}.study-grid p{font-size:11px;color:#8b937e;line-height:1.9;margin:13px 0}.study-grid small{font-size:9px;color:#a9ad96;line-height:1.9}.library-level{background:#fffef9;border:1px solid #e3e6d7;padding:18px 22px;border-radius:10px;margin-top:12px}.library-level summary{cursor:pointer;display:flex;justify-content:space-between;gap:15px;align-items:center;font-size:13px}.library-level small{color:#9aa287;font-size:10px}.library-level .source-panel{margin:18px 0}.source-note{font-size:10px;line-height:1.9;color:#a1a78f;margin-top:30px}.blank{text-align:center;background:#eef0e2;border-radius:14px;padding:70px;margin:30px 0}.blank>span{display:block;color:#a5b78a;width:65px;margin:auto auto 25px}.blank h2{font-size:23px}.blank p{font-size:13px;color:#9aa588;margin:18px 0 30px}@keyframes arrive{0%{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}@keyframes leave{0%{background:#dfe6cf}to{background:transparent}}@keyframes shake{25%{transform:translate(-3px)}75%{transform:translate(3px)}}@media(max-width:1050px){.units{grid-template-columns:repeat(4,1fr)}.hero{grid-template-columns:1fr 1fr}.journey{display:none}.game-layout{grid-template-columns:minmax(0,1fr) 210px;gap:16px}.tile,.empty-slot{min-height:130px}.tile strong{font-size:18px}.tile strong.long{font-size:14px}.header{padding:0 24px}}@media(max-width:760px){.header{height:auto;min-height:85px;flex-wrap:wrap;padding:17px 20px;gap:18px}.brand{font-size:18px}.brand small{font-size:10px}.star-counter{margin-left:auto;font-size:16px}.header nav{order:3;width:100%;justify-content:center;gap:7px}.header nav button{padding:9px 15px;font-size:12px}.map,.game-page,.library-page{padding-left:18px;padding-right:18px}.hero{gap:0;padding-top:26px;min-height:280px;grid-template-columns:1.2fr .8fr}.hero h1{font-size:35px}.hero p{font-size:11px}.hero-tags{gap:4px;flex-wrap:wrap}.hero-tags span{font-size:9px}.book-art{min-width:125px}.eyebrow{font-size:9px;letter-spacing:.6px}.section-heading p{display:none}.section-heading h2{font-size:21px}.units{gap:7px}.unit-tile{padding:13px 10px;min-height:114px}.unit-no{font-size:24px}.unit-name{font-size:12px}.chapter{padding:17px;margin-top:24px}.chapter-banner{align-items:start;gap:10px}.chapter-banner h2{font-size:25px}.chapter-banner .primary{font-size:11px;padding:10px 12px;margin-top:15px}.lesson-note{font-size:9px}.levels{grid-template-columns:repeat(2,1fr);gap:10px}.level{padding:13px}.level-top{gap:5px}.level-stars{font-size:12px;gap:0}.kind-tag{font-size:8px}.level h3{font-size:12px;min-height:56px}.level-bottom{font-size:8px;gap:5px}.go{font-size:9px;white-space:nowrap}.filters{gap:6px}.filters button{font-size:10px;padding:6px 9px}.game-layout{grid-template-columns:1fr}.game-aside{margin-bottom:20px}.game-heading h1{font-size:26px}.board{padding:12px;gap:9px}.tile,.empty-slot{min-height:126px;padding:10px 5px}.tile strong{font-size:18px}.tile strong.long{font-size:12px}.tile small{font-size:9px}.breadcrumb{font-size:9px;gap:8px}.breadcrumb button{font-size:10px}.game-heading p{font-size:11px;line-height:1.8}.study-grid{grid-template-columns:repeat(2,1fr)}.coverage{grid-template-columns:repeat(2,1fr);gap:10px}.library-page h1{font-size:30px}.library-level summary{font-size:12px;align-items:start;flex-direction:column}.game-aside .aside-stats{grid-template-columns:repeat(3,1fr);gap:15px}.aside-stats>div{flex-direction:column;gap:8px}.blank{padding:40px 18px}.result h2{font-size:21px}.star-guide{font-size:11px}}@media(max-width:390px){.board{gap:7px;padding:9px}.tile,.empty-slot{min-height:115px}.tile strong{font-size:16px}.tile strong.long{font-size:11px}.tile small{font-size:8px}.levels{grid-template-columns:1fr}.hero h1{font-size:31px}.hero-tags span{font-size:8px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}.poem-reader pre{font:17px/2.2 Songti SC,PingFang SC,serif;white-space:pre-wrap;text-align:center;padding:25px;color:#5c7150}body{padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}button,summary{touch-action:manipulation}.pwa-panel{max-width:1280px;margin:0 auto;padding:0 24px 24px;color:var(--muted);font-size:13px}.pwa-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.pwa-panel button{min-height:44px;padding:8px 16px;border:1px solid var(--border);border-radius:12px;background:var(--paper)}.pwa-panel summary{cursor:pointer;padding:14px 0;min-height:44px}.pwa-panel p{max-width:680px;line-height:1.8;margin:0 0 12px}@media(pointer:coarse){.filters button,.header nav button,.text-button,.breadcrumb button{min-height:44px}.tile{user-select:none;-webkit-user-select:none}}.audio-controls{display:flex;gap:4px}.audio-controls button{min-height:44px;padding:7px 9px;border:1px solid var(--border);border-radius:12px;background:var(--paper);font-size:12px;white-space:nowrap}.audio-controls button[aria-pressed=false]{color:var(--muted);background:transparent}.win-dialog{position:fixed;border:1px solid #e3e5d6;border-radius:28px;background:var(--paper);color:#283d2b;width:min(520px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:40px 28px 26px;text-align:center;box-shadow:0 24px 90px #1c301f30;overflow-y:auto}.win-dialog::backdrop{background:#20342680;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.win-close{position:absolute;right:10px;top:10px;width:44px;height:44px;font-size:26px;background:none;border:none;color:var(--muted)}.win-sparkles{color:#98aa77;font-size:32px;letter-spacing:15px}.win-stars{color:var(--gold);font-size:46px;letter-spacing:8px;margin:14px 0;animation:reward-arrive .4s ease-out both}.win-dialog h2{margin:10px 0;font-size:clamp(23px,4vw,30px)}.win-dialog p{line-height:1.8}.win-summary{color:var(--muted);font-size:13px}.win-actions{display:grid;gap:10px;margin-top:24px}.win-actions button{min-height:48px}@keyframes reward-arrive{0%{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}@media(max-width:760px){.audio-controls{justify-content:center}.header{flex-wrap:wrap}}@media(prefers-reduced-motion:reduce){.win-stars{animation:none}}
