/* v4 additions, layered on local base.css. No external fonts or assets. */
:root{--ink:#274853;--teal:#347c83;--gold:#e5ac4e;--peach:#e99876}
body{background:#f4f8ee}.site-header{max-width:1320px}.content{max-width:1320px;padding-bottom:120px}.brand-sub{letter-spacing:1.5px}.header-tools .rank-pill{gap:8px;padding:7px 15px;background:#e2eddb}.rank-pill b{font-size:15px;color:#367668}.rank-pill .mini-xp{height:5px;width:70px;background:#c9ddc2;border-radius:10px;overflow:hidden}.mini-xp i{display:block;height:100%;background:#69a18b}.avatar{position:relative;display:block;width:100%}.avatar>.dog{width:100%;height:auto}.avatar-hat{position:absolute;left:39%;top:6%;font-size:clamp(17px,3vw,30px);filter:drop-shadow(0 2px 0 #fff6)}.avatar.hat_astronaut:after{content:'';position:absolute;left:20%;top:6%;width:58%;height:52%;border:3px solid #c5e8ef;border-radius:50%;box-shadow:inset 0 0 0 5px #d9f3f132;pointer-events:none}
.expedition-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 2px 16px}.expedition-head h2{font-size:29px;margin:4px 0}.expedition-head p{font-size:12px;color:#789080}.expedition-head .primary{padding:12px 18px;font-size:14px}.expedition-layout{display:grid;grid-template-columns:minmax(0,1fr) 246px;gap:18px;align-items:start}.route-panel{background:#fcf8e8;border:2px solid #d3dfc6;border-radius:29px;box-shadow:0 6px 0 #dae3ca;overflow:hidden}.route-scroll{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}.route-canvas{position:relative;aspect-ratio:960 / 660;min-width:700px;width:100%;isolation:isolate}.route-terrain{position:absolute;inset:0;width:100%;height:100%;z-index:-1}.route-node{position:absolute;transform:translate(-50%,-50%);width:54px;height:54px;min-height:54px;border-radius:50%;background:#fff9e8;border:3px solid #e5d1a0;box-shadow:0 4px 0 #b5b38a;z-index:3;font-weight:900;font-size:19px;color:#9b9d77;display:grid;place-items:center}.route-node>small{position:absolute;top:58px;left:50%;transform:translateX(-50%);font-size:10px;color:#647e65;white-space:nowrap;font-weight:650;background:#fcfff1bb;border-radius:7px;padding:2px 7px}.route-node .node-stars{position:absolute;bottom:-10px;display:flex;font-size:10px;letter-spacing:1px;color:#c98c27;text-shadow:0 1px #fff;pointer-events:none}.route-node.done{background:#7dac92;border-color:#e9f6d8;color:white;box-shadow:0 4px 0 #598c78}.route-node.current{background:#edba5f;border-color:#fff3bb;color:#624b26;box-shadow:0 5px 0 #b99246,0 0 0 7px #f4ce736b}.route-node.boss{border-radius:19px;transform:translate(-50%,-50%) rotate(-6deg)}.route-node.locked{filter:saturate(.2);background:#e0e6d0;box-shadow:0 3px 0 #b6c1a5;color:#8a9d86}.route-node.treasure{width:48px;height:48px;font-size:23px;border-radius:16px;background:#fae1a6}.route-node.treasure.locked{opacity:.55}.route-node.treasure.done{background:#d7e8c9;filter:none}.route-actor{position:absolute;width:79px;transform:translate(-50%,-94%);z-index:6;pointer-events:none;will-change:transform;filter:drop-shadow(0 6px 1px #38644818)}.route-actor.walking>.avatar{animation:walking .24s ease-in-out infinite alternate;transform-origin:50% 100%}.route-actor.flip>.avatar{scale:-1 1}.route-actor .avatar-hat{font-size:21px}.route-canvas.is-travelling .route-node{pointer-events:none}.route-caption{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;font-size:11px;color:#839478;border-top:1px solid #e1e6d2;background:#fffced}.route-caption b{color:#557e64}.route-tools{display:flex;gap:8px;align-items:center}.route-tools button{min-height:39px;font-size:11px;padding:8px 10px}.journey-side{display:grid;gap:14px}.profile-card{background:#fffcf0;border:1.5px solid #dfe5d0;border-radius:24px;padding:18px}.profile-top{display:flex;align-items:center;gap:10px}.profile-avatar{width:70px;flex-shrink:0}.profile-title{font-size:16px;font-weight:850}.profile-name{font-size:11px;color:#8c987d;margin-top:4px}.xp-track{height:10px;background:#e5ecd8;border-radius:9px;overflow:hidden;margin:13px 0 7px}.xp-track i{display:block;height:100%;background:linear-gradient(90deg,#77af94,#c0d78f);border-radius:9px}.xp-label{font-size:10px;color:#8c987f;display:flex;justify-content:space-between}.next-gift{font-size:11px;margin-top:13px;padding:10px 11px;background:#fbefd2;border-radius:13px;color:#9c8050}.side-title{font-size:14px;margin-bottom:12px}.mission-row{border-top:1px solid #e7ead9;padding-top:11px;margin-top:11px;font-size:11px}.mission-row .row{gap:7px}.mission-row b{font-size:11px}.mission-row .claim{padding:4px 11px;min-height:35px;border-radius:10px;background:#e6eed9;color:#62826b;font-size:11px}.mission-row .claim.ready{background:#f2c66e;color:#684d27}.mission-row .small{font-size:10px}.mission-track{height:5px;background:#e9ecde;border-radius:8px;margin:8px 0}.mission-track i{display:block;height:100%;background:#a4c591;border-radius:8px}.daily-bar{margin-top:15px}.expedition-footer{display:flex;gap:10px;align-items:center;justify-content:space-between}.xp-toast{padding:8px 13px;background:#f8edd4;color:#a48042;border-radius:15px;font-size:12px;font-weight:700}
.atlas-grid{position:relative;display:grid;grid-template-columns:repeat(4,1fr);gap:17px;padding:27px;border-radius:30px;border:2px solid #c4dfd4;overflow:hidden;background:#bde2da}.atlas-grid .sea-art{z-index:0}.atlas-entry{position:relative;z-index:1;border:1.5px solid #fff8dfc9;background:#fffbedce;border-radius:24px;padding:15px 14px 19px;min-width:0;text-align:center}.atlas-entry svg{height:132px;width:100%}.atlas-entry h3{font-size:17px}.atlas-entry p{font-size:11px;color:#8b997e;margin:5px 0}.atlas-entry.locked{filter:saturate(.3);opacity:.65}.atlas-entry .tag{margin-top:7px}.atlas-boat{font-size:40px;position:absolute;z-index:8;pointer-events:none;transform:translate(-50%,-50%)}
.intro-layout{display:grid;grid-template-columns:140px 1fr;gap:22px;align-items:center}.intro-text{background:#f1f5e4;padding:20px;border-radius:24px;border:1px solid #dce7c9}.intro-text p{font-size:17px;line-height:1.9;color:#587467}.narration-button{background:#fff8e3;border:1px dashed #dbcda3;border-radius:12px;padding:8px 12px;min-height:43px;font-size:12px;color:#967d50;margin-top:12px;display:inline-flex;align-items:center;gap:8px}.narration-button .icon{width:17px}.narration-button.ready{border-style:solid;background:#dfeeeb;color:#397f7f}.lesson-meta{display:flex;gap:8px;margin:16px 0;flex-wrap:wrap}.learn-card small{font-size:10px}.learn-card.word .py{font-size:23px}.learn-card.word .wordemoji{font-size:30px}.lesson-grid-expanded{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.mission-banner{padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:16px;border-radius:18px;background:#eef5e8;color:#597b69;margin:12px 0}.mission-banner p{font-size:12px;max-width:660px}.mission-banner .narration-button{margin:0;white-space:nowrap}.game-panel{max-width:1040px}.scene.v4{height:157px}.scene.v4 .traveller{width:73px;transition:left .75s ease;bottom:13%}.scene.v4 .scene-caption{font-size:11px}.task-description{font-size:13px;color:#738775;max-width:590px}.task-instruction{display:flex;justify-content:space-between;align-items:center;gap:10px}.task-instruction .narration-button{margin:0;font-size:10px;min-height:37px;padding:7px 10px}.type-badge{font-size:10px;padding:5px 10px;background:#f7ecd4;border-radius:10px;color:#a18755}.game-topbar{display:flex;align-items:center;gap:12px;margin:0 0 12px}.game-topbar .route-progress{flex:1;display:flex;gap:6px;align-items:center}.route-progress i{height:8px;flex:1;border-radius:6px;background:#e2e8d8}.route-progress i.done{background:#8ab895}.route-progress i.on{background:#e5bc70}.game-topbar .small{white-space:nowrap}.build-source .py{font-size:34px}.display-target{font-size:55px;text-align:center;line-height:1.6;color:#497b7c;margin:10px 0}.display-target.long{font-size:30px}.word-illustration{text-align:center;display:flex;justify-content:center;align-items:center;gap:17px;margin:12px 0}.word-illustration .emoji{font-size:55px}.word-illustration h3{font-size:26px}.word-illustration small{font-size:10px;color:#94a081}.sequence-legend{display:flex;gap:10px;justify-content:center;margin:8px 0}.sequence-legend span{width:52px;height:46px;display:grid;place-items:center;background:#edf3df;border-radius:13px;font-size:21px;border:1px solid #d1dfc6}.sequence-legend span.playing{background:#f8d685;border-color:#dbad52;transform:translateY(-3px)}.pairs-letters{display:flex;gap:12px;justify-content:center;margin:16px 0}.envelope{width:77px;height:60px;background:#f4e7ca;border:2px solid #dec59a;border-radius:12px;display:grid;place-items:center;font-size:24px}.envelope.current{background:#ffdc8d;box-shadow:0 0 0 4px #faedc8}.envelope.done{background:#b7d7b4;border-color:#8db894}.tone-choice-svg{width:66px;height:37px;margin:0 auto 5px}.tone-choice-label{font-size:16px;white-space:nowrap}.choice .py.long{font-size:24px}.missing-text{display:flex;justify-content:center;align-items:center;gap:7px;font-family:var(--py);font-size:48px;color:#537972;margin:14px 0}.missing-space{display:inline-flex;align-items:center;justify-content:center;border:2px dashed #baa56f;border-radius:12px;background:#fff0c4;min-width:59px;height:62px;color:#be964b}.letter-bank .tile{max-width:190px;font-size:32px}.slot{max-width:170px}.order-captions{display:flex;justify-content:center;gap:10px;color:#a49062;font-size:12px}.order-captions span{width:90px;text-align:center}.task-help{padding:12px 15px;margin-top:12px;background:#fff2d8;border-radius:15px;color:#8e7143;font-size:13px}.task-help .py{font-size:23px}.hint-button{font-size:12px}.feedback{min-height:60px}.feedback .small{font-size:11px}.result .avatar{width:150px;margin:auto}.result .stat b{font-size:24px}.result .result-title{font-size:29px}.level-up-card{background:#ffedbe;border:2px solid #ebc474;border-radius:23px;margin:16px 0;padding:18px;color:#966f30}.level-up-card h3{font-size:24px}.level-up-card p{font-size:13px;margin-top:7px}.medal-card{display:flex;gap:17px;align-items:center;justify-content:center;padding:17px;background:#e6f0df;border-radius:20px;margin:14px 0}.medal-card span{font-size:42px}.room-v4 .room-scene{min-height:365px}.room-v4 .room-avatar{position:absolute;width:134px;bottom:21px;left:39%;z-index:3}.room-slot{position:absolute;width:83px;height:84px;display:grid;place-items:center;z-index:4;cursor:pointer}.room-slot .emoji{font-size:50px}.room-slot svg{width:80px;height:80px}.room-slot.empty-slot{border:2px dashed #bfb39469;border-radius:16px;opacity:.5;font-size:20px;color:#bca583;background:#ffffff21}.room-slot.empty-slot:hover{opacity:1}.room-scene.room_space .room-bg{filter:hue-rotate(100deg) saturate(.75);opacity:.92}.room-scene.room_sunset .room-bg{filter:sepia(.2) saturate(1.2)}.shop-grid.v4{grid-template-columns:repeat(4,1fr)}.shop-card .emoji{font-size:38px;height:62px;display:grid;place-items:center}.shop-card .small{font-size:10px}.shop-card .locked-price{color:#9b9584}.closet{display:flex;gap:10px;flex-wrap:wrap;margin-top:13px}.closet button{min-height:49px;padding:10px 15px;background:#fff5dc;border:1.5px solid #e2d5b4;border-radius:15px;font-size:12px}.closet button.equipped{background:#d9ead8;border-color:#92b394}.closet button:disabled{opacity:.45}.rank-timeline{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.rank-milestone{border:1.5px solid #dfdfc9;background:#f7f6e9;border-radius:20px;padding:18px}.rank-milestone.achieved{border-color:#cba24e;background:#fff4ce}.rank-milestone b{font-size:21px;display:block;color:#7e9b78}.rank-milestone h4{margin:6px 0;font-size:14px}.rank-milestone p{font-size:11px;color:#8a947d}.stamp-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:8px;max-height:330px;overflow:auto;padding:3px}.stamp{background:#eaf2e1;border:1px solid #ccdfbd;border-radius:12px;min-height:49px;display:grid;place-items:center;font-family:var(--py);font-size:19px;color:#6b976a}.stamp.missing{color:#a7b5a0;background:#f4f5ed;border-style:dashed}.practice-hero{display:flex;justify-content:space-between;align-items:center;gap:20px;background:#e6f0df;padding:22px 27px;border-radius:25px;border:1.5px solid #d2e1c3}.practice-hero .avatar{width:105px;flex-shrink:0}.practice-hero h2{font-size:28px;margin-bottom:8px}.practice-hero p{font-size:12px;color:#798f78;max-width:650px}.practice-controls{display:flex;gap:10px;align-items:end;flex-wrap:wrap;background:#fffdf3;padding:18px;border:1px solid #dfe6d3;border-radius:22px;margin:18px 0}.practice-controls label{font-size:11px;display:flex;flex-direction:column;gap:7px;color:#829177}.practice-controls input,.practice-controls select{min-height:47px;border:1px solid #d7dfca;border-radius:12px;padding:9px 12px;background:white;max-width:210px;font-size:13px}.practice-controls .primary{font-size:13px}.practice-stats{font-size:12px;color:#899679;margin:10px 3px}.bank-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:11px}.bank-card{background:#fffaf0;border:1.5px solid #e0e5d1;border-radius:19px;padding:13px 6px;min-height:99px;position:relative;display:flex;align-items:center;flex-direction:column;gap:4px}.bank-card .py{font-size:29px;color:#5b7e74}.bank-card .py.long{font-size:17px}.bank-card .small{font-size:10px}.bank-card .master-dot{width:7px;height:7px;border-radius:50%;background:#a6c687;position:absolute;right:10px;top:10px}.pager{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-top:19px;font-size:12px;color:#8d9883}.audio-status{font-size:11px;color:#8d9c7d;min-height:18px}.audio-status.playing{color:#2f8581}.source-boundary{font-size:11px;color:#8c947f;line-height:1.8;margin-top:10px}.narration-table{display:grid;gap:9px;max-height:450px;overflow:auto}.narration-row{padding:13px;background:#f3f3e6;border-radius:13px}.narration-row code{font-size:11px;color:#7c8d72}.narration-row p{margin:6px 0;font-size:12px}.diagnostic-list{display:grid;gap:10px;margin:17px 0}.diagnostic-list div{display:flex;justify-content:space-between;gap:10px;background:#f1f3e7;padding:12px 15px;border-radius:12px;font-size:12px}.diagnostic-list b.no{color:#a57b48}.storage-banner{position:relative;z-index:55}.parent-note{font-size:12px;background:#fff0d4;border:1px solid #ebd7aa;border-radius:15px;padding:13px;margin:12px 0}.stats-grid.four{grid-template-columns:repeat(4,1fr)}.upgrade-summary{font-size:11px;color:#8c987d;margin:10px 0}
@keyframes walking{from{transform:translateY(0) rotate(-2deg)}to{transform:translateY(-5px) rotate(2deg)}}
@media(max-width:1150px){.expedition-layout{grid-template-columns:minmax(0,1fr) 220px;gap:14px}.route-canvas{min-width:650px}.journey-side .profile-card{padding:15px}.route-node{width:49px;height:49px;min-height:49px}.route-node>small{font-size:9px;top:52px;max-width:104px}.route-node.treasure{width:46px;height:48px}.route-actor{width:68px}.expedition-head h2{font-size:26px}.shop-grid.v4{grid-template-columns:repeat(3,1fr)}.bank-grid{grid-template-columns:repeat(7,1fr)}.scene.v4{height:138px}.quest-card{padding:17px 25px}.content{padding-left:20px;padding-right:20px}}
@media(max-width:980px){.expedition-layout{display:block}.journey-side{grid-template-columns:1fr 1fr;margin-top:18px}.route-canvas{min-width:680px}.route-node>small{font-size:10px}.journey-side .profile-card:nth-child(3){display:none}.profile-card{padding:17px}.profile-avatar{width:60px}.scene.v4{height:144px}.rank-timeline{grid-template-columns:repeat(3,1fr)}.stamp-grid{grid-template-columns:repeat(8,1fr)}.header-tools .rank-pill .mini-xp{width:45px}.atlas-grid{gap:12px;padding:16px}.atlas-entry{padding:12px 6px}.atlas-entry h3{font-size:14px}.atlas-entry svg{height:95px}.bank-grid{grid-template-columns:repeat(6,1fr)}}
@media(min-width:981px) and (max-height:850px){.expedition-head{margin-top:3px;margin-bottom:12px}.expedition-head h2{font-size:25px}.route-caption{padding:9px 13px}.profile-card{padding:15px}.profile-avatar{width:58px}.profile-card p{font-size:11px}.journey-side{gap:11px}.daily-bar{margin-top:14px;padding:13px 18px}.site-header{padding-top:13px}.mission-banner{padding:11px 15px}.task-content{margin-top:8px}.scene.v4{height:127px}.feedback{min-height:54px}.display-target{font-size:45px;margin:7px 0}.task-instruction .task-description{font-size:12px}}
@media(max-width:600px){.site-header{padding:12px}.brand-sub{font-size:8px}.rank-pill .mini-xp{display:none}.header-tools .rank-pill{padding:6px 10px;min-height:39px}.header-tools .rank-pill b{font-size:12px}.content{padding:3px 12px 115px}.expedition-head{flex-wrap:wrap;margin:9px 3px 13px}.expedition-head h2{font-size:25px}.expedition-head .row{gap:6px}.expedition-head p{font-size:10px}.expedition-head .primary{padding:10px 14px;min-height:43px;font-size:12px}.expedition-head .pill{font-size:11px;min-height:43px}.route-panel{border-radius:24px}.route-canvas{min-width:700px}.route-node{width:49px;height:49px}.route-caption{padding:11px 13px;flex-wrap:wrap;font-size:10px}.journey-side{gap:10px;margin-top:13px}.journey-side .profile-card{padding:13px;border-radius:20px}.profile-title{font-size:13px}.profile-avatar{width:47px}.profile-top{gap:6px}.profile-name{font-size:10px}.next-gift{font-size:10px;padding:9px}.xp-label{font-size:9px}.mission-row{font-size:10px}.mission-row b{font-size:10px}.mission-row .claim{padding:4px 7px;font-size:10px}.mission-row .row{gap:4px;flex-wrap:wrap}.atlas-grid{grid-template-columns:repeat(2,1fr);padding:15px;gap:13px}.atlas-entry{border-radius:21px}.atlas-entry svg{height:112px}.atlas-entry h3{font-size:15px}.atlas-entry p{font-size:10px}.intro-layout{grid-template-columns:75px 1fr;gap:12px}.intro-text{padding:13px;border-radius:18px}.intro-text p{font-size:13px}.narration-button{font-size:10px;padding:7px 9px}.lesson-grid-expanded{grid-template-columns:repeat(3,1fr);gap:9px}.mission-banner{padding:12px;display:block}.mission-banner .narration-button{margin-top:8px}.learn-card.word .py{font-size:19px}.game-topbar{gap:8px}.game-topbar .small{font-size:10px}.scene.v4{height:123px}.scene.v4 .traveller{width:68px}.scene.v4 .scene-caption{font-size:10px}.task-instruction{align-items:flex-start}.task-description{font-size:11px}.task-instruction .narration-button{font-size:9px;padding:6px;min-height:35px;flex-shrink:0}.word-illustration{gap:12px}.word-illustration .emoji{font-size:43px}.word-illustration h3{font-size:23px}.letter-bank .tile{font-size:25px;min-height:55px;min-width:54px}.slot{font-size:26px;min-width:53px}.choice .py.long{font-size:22px}.envelope{width:60px;height:47px;font-size:21px}.missing-text{font-size:37px}.missing-space{min-width:53px;height:53px}.tone-choice-svg{width:59px;height:28px}.rank-timeline{grid-template-columns:repeat(2,1fr);gap:10px}.rank-milestone{padding:13px;border-radius:17px}.stamp-grid{grid-template-columns:repeat(5,1fr)}.shop-grid.v4{grid-template-columns:repeat(3,1fr);gap:8px}.shop-card{padding:12px 5px;min-height:150px}.shop-card h3{font-size:11px}.shop-card button{font-size:11px}.room-v4 .room-scene{min-height:295px}.room-v4 .room-avatar{width:108px}.room-slot{width:65px;height:64px}.room-slot svg{width:64px;height:64px}.room-slot .emoji{font-size:40px}.practice-hero{padding:18px;gap:10px}.practice-hero .avatar{width:75px}.practice-hero h2{font-size:24px}.practice-hero p{font-size:11px}.practice-controls{gap:8px;padding:13px}.practice-controls label{width:calc(50% - 5px)}.practice-controls input,.practice-controls select{max-width:100%;width:100%;font-size:12px}.practice-controls .primary{width:100%}.bank-grid{grid-template-columns:repeat(3,1fr);gap:9px}.bank-card{min-height:99px}.bank-card .py{font-size:29px}.bank-card .py.long{font-size:17px}.stats-grid.four{grid-template-columns:repeat(2,1fr)}.result .stats-grid{gap:7px}.result .stat b{font-size:20px}.result .avatar{width:125px}.result .result-title{font-size:26px}}
@media(prefers-reduced-motion:reduce){.route-actor,.traveller{transition:none!important}.route-actor.walking>.avatar{animation:none!important}}

/* Comfortable tablet-size tap targets and compact overview. */
.rank-pill{display:flex;align-items:center;min-height:44px;border-radius:16px}.header-tools .mini-xp{display:block}.journey-side .profile-card{padding:13px}.journey-side .profile-avatar{width:48px}.journey-side .xp-track{margin:9px 0 6px}.journey-side .next-gift{margin-top:8px;padding:8px}.journey-side .mission-row{margin-top:8px;padding-top:8px}.journey-side .mission-track{margin:6px 0}.mission-row .claim{min-height:40px;min-width:48px}.profile-title{line-height:1.5}.journey-side .side-title{margin-bottom:8px}.journey-side .profile-card:last-child .small{font-size:11px}.route-tools button{min-height:44px}.task-instruction .narration-button{min-height:44px}.route-node.treasure{min-width:48px}.side-title .small{display:block;font-weight:400;font-size:10px}.expedition-layout{gap:16px}.scene.v4{overflow:hidden}
@media(min-width:821px) and (max-height:950px){.journey-side{gap:10px}.journey-side .profile-card{padding:10px 12px}.journey-side .profile-card:last-child{display:none}.journey-side .profile-title{font-size:14px}.journey-side .profile-card:first-child .textbtn{min-height:32px}.route-caption{min-height:55px}.daily-bar{padding:11px 18px}.expedition-head{margin-top:7px;margin-bottom:11px}}

.room-slot{background:transparent;border:0}.room-slot.empty-slot{border:1.5px dashed #cbb88d;background:#fff8dd60}.room-slot:hover{background:#fff8d940}

/* v4.0.1: articulated vector gait, independent joints; no raster animation frames. */
.route-actor{transform:translate3d(var(--travel-x,0px),var(--travel-y,0px),0) translate(-50%,-94%);will-change:auto}
.route-actor.walking{will-change:transform}
.route-actor.walking>.avatar{animation:none}
.dog-leg,.dog-arm-left,.dog-arm-right,.dog-tail,.dog-head,.dog-rig,.dog-bag{transform-box:view-box}
.dog-leg-left{transform-origin:83px 218px}.dog-leg-right{transform-origin:133px 218px}
.dog-arm-left{transform-origin:64px 178px}.dog-arm-right{transform-origin:147px 178px}
.dog-tail{transform-origin:56px 222px}.dog-head{transform-origin:108px 166px}
.dog-rig{transform-origin:109px 235px}.dog-bag{transform-origin:91px 196px}
.walking .dog-wave{animation:none;transform:none}
.walking .dog-leg-left{animation:step-left .56s linear infinite}
.walking .dog-leg-right{animation:step-right .56s linear infinite}
.walking .dog-arm-left{animation:arm-left .56s ease-in-out infinite}
.walking .dog-arm-right{animation:arm-right .56s ease-in-out infinite}
.walking .dog-rig{animation:body-step .28s ease-in-out infinite}
.walking .dog-head{animation:head-step .56s ease-in-out infinite}
.walking .dog-tail{animation:tail-step .56s ease-in-out infinite}
.walking .dog-bag{animation:bag-step .56s ease-in-out infinite}
.walking .dog-ground-shadow{animation:shadow-step .28s ease-in-out infinite;transform-origin:104px 273px}
.route-actor:not(.walking) .dog-rig{animation:quiet-breath 4s ease-in-out infinite}
.route-actor:not(.walking) .dog-tail{animation:tail-idle 3s ease-in-out infinite}
.dog-cheer .dog-rig{animation:celebrate-pop .7s ease-out both}
@keyframes step-left{0%,100%{transform:rotate(-20deg)}45%{transform:rotate(20deg)}70%{transform:translateY(-7px) rotate(5deg)}}
@keyframes step-right{0%,100%{transform:rotate(20deg)}45%{transform:rotate(-20deg)}95%{transform:translateY(-7px) rotate(5deg)}}
@keyframes arm-left{0%,100%{transform:rotate(10deg)}50%{transform:rotate(-12deg)}}
@keyframes arm-right{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(10deg)}}
@keyframes body-step{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes head-step{0%,100%{transform:rotate(-.6deg)}50%{transform:rotate(.6deg)}}
@keyframes tail-step{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(11deg)}}
@keyframes bag-step{0%,100%{transform:rotate(2deg)}50%{transform:rotate(-2deg)}}
@keyframes shadow-step{0%,100%{transform:scaleX(1);opacity:1}50%{transform:scaleX(.94);opacity:.78}}
@keyframes quiet-breath{0%,100%{transform:translateY(0)}50%{transform:translateY(-1.5px)}}
@keyframes tail-idle{0%,65%,100%{transform:rotate(0)}78%{transform:rotate(9deg)}90%{transform:rotate(-4deg)}}
@keyframes celebrate-pop{0%{transform:translateY(0) scale(1)}18%{transform:translateY(2px) scale(1.02,.98)}48%{transform:translateY(-12px) scale(.98,1.02)}75%{transform:translateY(0) scale(1.02,.98)}100%{transform:translateY(0) scale(1)}}
body.reduce-motion .dog *,body.reduce-motion .route-actor{animation:none!important;transition:none!important}
@media(prefers-reduced-motion:reduce){.dog *,.route-actor{animation:none!important;transition:none!important}}

.local-feedback{margin:18px auto;max-width:600px;text-align:left;background:#eef4e6;border:1.5px solid #d1dfbe;padding:18px 21px;border-radius:20px;font-size:14px;line-height:1.8}.local-feedback[data-status="uncertain"],.local-feedback[data-status="tone_hint"],.local-feedback[data-status="difference_candidate"]{background:#fff3d9;border-color:#e8d4a4}

/* Guided, unscored speaking practice: no public pass/fail or model probability. */
.read-welcome{color:#597f73;font-size:16px;margin:10px 0 14px}.read-steps{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:16px 0}.read-step{font-size:13px;padding:7px 14px;border-radius:30px;background:#eef0e3;color:#87927d}.read-step.on{background:#d9edda;color:#3c7962;font-weight:700}.read-invitation{font-size:21px;font-weight:700;color:#436e69;background:#fff3da;border:1px solid #ecdfbd;border-radius:20px;padding:16px 20px;margin:8px auto 14px;max-width:660px}.quiet-track{height:6px;max-width:240px;background:#e9ecdf;border-radius:8px;margin:0 auto 9px;overflow:hidden}.quiet-track i{height:100%;display:block;background:#9cc8ae;transition:width .15s linear}.reading-celebration{font-size:17px;background:#f8efd2;color:#937038;border-radius:18px;padding:14px 20px;margin:18px auto;max-width:630px}.reading-count{color:#6c9278;font-size:13px;margin:17px 0}.read-parent{text-align:left;max-width:670px;margin:19px auto 0;border-top:1px solid #e1e7d7;padding-top:12px;color:#84917f;font-size:11px}.read-parent p{line-height:1.9;margin-top:7px}.read-parent summary{cursor:pointer}.guided-reading .read-actions{margin-top:17px}.guided-reading .read-hero{padding:2px 0}.guided-reading .read-actions .textbtn{min-height:48px}.guided-reading .modal-actions{margin-top:15px}.guided-reading h2{font-size:27px}@media(max-width:560px){.read-step{font-size:11px;padding:6px 8px}.read-steps{gap:6px}.read-invitation{font-size:17px;padding:13px 12px}.read-welcome{font-size:14px}.guided-reading h2{font-size:24px}.reading-celebration{font-size:14px}.guided-reading .read-hero>div:first-child{max-width:95px}.guided-reading .read-actions{gap:6px}.guided-reading .read-actions .secondary{padding:10px 12px;font-size:13px}}
