.pet-artwork{position:relative;overflow:visible;box-sizing:border-box;border-radius:16px;aspect-ratio:1 / 1}.pet-artwork-pet,.pet-artwork-fallback{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;width:100%;height:100%;object-fit:contain}.pet-artwork-fallback{display:grid;place-items:center;font-size:inherit}.pet-artwork-background,.pet-artwork-hat,.pet-artwork-effect{position:absolute;pointer-events:none;-webkit-user-select:none;user-select:none}.pet-artwork-background{z-index:1;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border-radius:inherit;object-fit:cover}.pet-artwork-effect{z-index:1;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border-radius:inherit;object-fit:cover;opacity:.85;transform:scale(1.12);animation:pet-effect-drift 7s ease-in-out infinite alternate}.pet-artwork-effect[data-effect=fx-bubbles]{animation-name:pet-effect-rise;animation-duration:6s}.pet-artwork-effect[data-effect=fx-meteor]{animation-name:pet-effect-streak;animation-duration:4.5s;animation-timing-function:ease-in;animation-direction:normal}.pet-artwork-effect[data-effect=fx-osmanthus]{animation-name:pet-effect-fall;animation-duration:8s;animation-timing-function:linear;animation-direction:normal}@keyframes pet-effect-rise{0%{transform:translateY(6%) scale(1.12);opacity:.55}to{transform:translateY(-6%) scale(1.18);opacity:.9}}@keyframes pet-effect-streak{0%{transform:translate(-7%,-7%) scale(1.14);opacity:0}15%{opacity:.9}85%{opacity:.75}to{transform:translate(7%,7%) scale(1.14);opacity:0}}@keyframes pet-effect-fall{0%{transform:translateY(-8%) scale(1.16);opacity:0}20%{opacity:.85}80%{opacity:.85}to{transform:translateY(8%) scale(1.16);opacity:0}}@keyframes pet-effect-drift{0%{transform:translate(-2%,1%) scale(1.12)}to{transform:translate(2%,-1%) scale(1.12)}}.pet-artwork-hat{z-index:3;height:auto;object-fit:contain}.pet-artwork-badges{position:absolute;left:3%;bottom:3%;z-index:4;display:flex;gap:2%;width:50%;pointer-events:none}.pet-artwork-badge{width:30%;height:auto;filter:drop-shadow(0 1px 2px rgb(43 42 38 / 30%))}@media(prefers-reduced-motion:reduce){.pet-artwork-effect{animation:none;transform:none}}.pet-artwork-animation{display:block;pointer-events:none}.gacha-corner{--gacha-ink: #25262c;--gacha-paper: #fffdf8;--gacha-red: #e51d2a;position:relative;max-width:1180px;margin:2rem auto;padding:1.4rem;border:1px solid rgba(53,48,40,.12);border-radius:28px;color:var(--gacha-ink);background:linear-gradient(145deg,#fffefb,#f5f0e7);box-shadow:0 18px 48px #37302a21}.gacha-corner-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.gacha-corner-header h2,.gacha-machine-title h3,.gacha-reveal-card h2,.gacha-popover h3{margin:0}.gacha-kicker,.gacha-reveal-kicker{margin:0 0 .3rem;color:#a84d2d;font-size:.78rem;font-weight:800;letter-spacing:.08em}.gacha-fragments{flex:0 0 auto;padding:.5rem .85rem;border:1px solid #ddd1b6;border-radius:999px;background:#fff7d9;font-size:.9rem}.gacha-fragments strong{font-size:1.15rem}.gacha-loading,.gacha-error{margin:.7rem 0}.gacha-error{color:#a32837;font-weight:700}.gacha-machines{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch;gap:.75rem;padding:.6rem .35rem .35rem;border-radius:18px;background:linear-gradient(180deg,rgba(218,213,203,.35),transparent 16%),repeating-linear-gradient(90deg,transparent 0 32.8%,rgba(99,91,78,.05) 33% 33.2%)}.gacha-machine{--poster-primary: #efbd3a;--poster-deep: #d98216;--poster-soft: #fff3bd;position:relative;display:flex;flex-direction:column;min-width:0;padding:10px 10px 0;border:1px solid #c8c6bf;border-radius:15px 15px 9px 9px;background:linear-gradient(90deg,#e9e7df 0,#fffefa 7%,#f7f5ed 92%,#deddd6);box-shadow:0 12px 20px #2d2b262b,inset 0 1px #fff}.gacha-machine-ability{--poster-primary: #55bfe5;--poster-deep: #167da9;--poster-soft: #d8f5ff}.gacha-machine-limited{--poster-primary: #e68fc7;--poster-deep: #a84e96;--poster-soft: #fae0f4}.gacha-machine[data-state=drawing]{box-shadow:0 0 0 4px #e51d2a29,0 14px 25px #2d2b2638}.gacha-poster-frame{position:relative;z-index:1;display:flex;flex:1 0 auto;flex-direction:column;padding:6px;border:2px solid #aaa9a4;border-bottom-width:4px;border-radius:7px 7px 4px 4px;background:linear-gradient(125deg,#ffffffeb,#dce0e08c);box-shadow:0 3px 5px #36373533,inset 0 0 0 2px #ffffffa8}.gacha-poster-frame:after{position:absolute;top:3px;right:3px;bottom:3px;left:3px;border:1px solid rgba(255,255,255,.8);border-radius:4px;content:"";pointer-events:none}.gacha-showcase-card{position:relative;display:flex;flex:1;flex-direction:column;min-height:202px;overflow:hidden;padding:.65rem .65rem .42rem;border:1px solid color-mix(in srgb,var(--poster-deep) 55%,white);border-radius:2px;background:radial-gradient(circle at 14% 16%,rgba(255,255,255,.72) 0 5%,transparent 5.5%),radial-gradient(circle at 82% 82%,rgba(255,255,255,.32) 0 10%,transparent 10.5%),linear-gradient(145deg,var(--poster-soft),color-mix(in srgb,var(--poster-primary) 48%,white))}.gacha-showcase-card:before{position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(-35deg,transparent 0 18px,rgba(255,255,255,.11) 19px 21px);content:"";pointer-events:none}.gacha-machine-title{position:relative;z-index:1;min-height:52px;padding:1px 62px 5px 3px;color:#352716;text-shadow:0 1px rgba(255,255,255,.65)}.gacha-machine-title p{margin:0 0 1px;color:var(--poster-deep);font-size:.55rem;font-weight:950;letter-spacing:.13em}.gacha-machine-title h3{font-size:clamp(1.15rem,2.1vw,1.55rem);font-weight:950;line-height:1.05;letter-spacing:.02em}.gacha-machine-title span{display:block;margin-top:2px;color:var(--poster-deep);font-size:.67rem;font-weight:900}.gacha-price{position:absolute;z-index:2;top:9px;right:8px;display:grid;width:57px;height:57px;place-content:center;border:3px solid #ee3529;border-radius:50%;color:#c72820;background:#ffe45b;box-shadow:0 2px #8b3c1838,inset 0 0 0 2px #ffffff80;text-align:center;transform:rotate(7deg)}.gacha-price small,.gacha-price strong{display:block;line-height:1}.gacha-price small{font-size:.65rem;font-weight:900}.gacha-price strong{margin-top:2px;font-size:.78rem;font-weight:950}.gacha-lineup{position:relative;z-index:1;display:grid;flex:1;grid-template-columns:repeat(3,minmax(0,1fr));align-content:space-evenly;gap:.32rem}.gacha-lineup-card{position:relative;min-width:0;min-height:96px;padding:.3rem .18rem .25rem;overflow:hidden;border:2px solid rgba(255,255,255,.9);border-radius:5px;background:#ffffffe8;box-shadow:0 2px 4px #2d2a252b;cursor:pointer;text-align:center}.gacha-lineup-card:focus-visible{outline:3px solid #4e46b8;outline-offset:1px}.gacha-lineup-card.rarity-common{border-color:#ffffffeb}.gacha-lineup-card.rarity-rare{border-color:#62aaf1;box-shadow:0 0 7px #3895ef6b}.gacha-lineup-card.rarity-epic{border-color:#e5ba32;box-shadow:0 0 8px #d69f107a}.gacha-item-image-wrap{position:relative;display:grid;height:43px;place-items:center}.gacha-item-image{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain}.gacha-item-image-fallback{display:none;font-size:1.7rem}.gacha-item-emoji{display:grid;height:43px;place-items:center;font-size:1.7rem}.gacha-item-name{display:block;overflow:hidden;font-size:.68rem;font-weight:850;text-overflow:ellipsis;white-space:nowrap}.gacha-item-rarity{display:block;color:#6e6673;font-size:.59rem}.gacha-owned{position:absolute;top:2px;right:2px;display:grid;width:19px;height:19px;place-items:center;border-radius:50%;color:#fff;background:#269264;font-weight:900}.gacha-lineup-card.is-owned:after{position:absolute;top:0;right:0;bottom:0;left:0;background:#ffffff2b;content:"";pointer-events:none}.gacha-lineup-card.is-selected{transform:translateY(-2px)}.gacha-pity-line{position:relative;z-index:1;min-height:1.05rem;margin:.42rem 0 0;padding:.18rem .25rem;border-radius:3px;color:#4e4650;background:#ffffffa3;font-size:.63rem;font-weight:700;text-align:center}.gacha-capsule-bay{position:relative;height:127px;margin:-1px 7px 0;overflow:hidden;border:5px solid #d5d4ce;border-top-width:7px;border-radius:3px;background:linear-gradient(116deg,rgba(255,255,255,.72) 0 12%,transparent 13% 72%,rgba(255,255,255,.3) 73%),linear-gradient(180deg,#d7ebee94,#f6faf7e0);box-shadow:inset 0 -8px 13px #545e5b26,inset 0 0 0 1px #747f7d47}.gacha-capsule-bay:before,.gacha-capsule-bay:after{position:absolute;z-index:2;content:"";pointer-events:none}.gacha-capsule-bay:before{top:8px;bottom:8px;left:17%;width:7px;border-radius:999px;background:#ffffff87;transform:skew(-14deg)}.gacha-capsule-bay:after{right:0;bottom:0;left:0;height:12px;background:linear-gradient(180deg,#8f959126,#ffffffad)}.gacha-capsule-bay i{position:absolute;width:30px;height:19px;border:1px solid rgba(69,65,73,.13);border-radius:999px;background:linear-gradient(180deg,rgba(255,255,255,.92) 0 47%,var(--capsule-color) 49% 100%);box-shadow:inset -3px -2px 3px #4c455626,0 2px 4px #3435482e;opacity:.94}.gacha-capsule-bay i:before{position:absolute;top:calc(50% - 1px);right:0;left:0;height:2px;background:#564f5d36;content:""}.gacha-capsule-bay i:nth-child(1){bottom:14px;left:12%;transform:rotate(-18deg)}.gacha-capsule-bay i:nth-child(2){bottom:11px;left:35%;transform:rotate(13deg)}.gacha-capsule-bay i:nth-child(3){right:13%;bottom:15px;transform:rotate(-6deg)}.gacha-capsule-bay i:nth-child(4){bottom:36px;left:23%;transform:rotate(29deg)}.gacha-capsule-bay i:nth-child(5){bottom:39px;left:48%;transform:rotate(-24deg)}.gacha-capsule-bay i:nth-child(6){right:18%;bottom:48px;transform:rotate(11deg)}.gacha-capsule-bay i:nth-child(7){bottom:68px;left:35%;transform:rotate(-12deg)}.gacha-capsule-bay i:nth-child(8){right:28%;bottom:74px;transform:rotate(24deg)}.gacha-capsule-bay i:nth-child(9){bottom:92px;left:48%;transform:rotate(-29deg)}.gacha-machine[data-state=drawing] .gacha-capsule-bay{animation:gacha-bay-shake .38s ease-in-out infinite}.gacha-body{position:relative;min-height:255px;margin:-1px 2px 0;padding:8px 9px 10px;border:5px solid #d3d2cc;border-top-width:8px;border-radius:3px 3px 11px 11px;background:linear-gradient(100deg,#efeee8,#fffefa 14%,#fffefa 82%,#e8e6df);box-shadow:inset 0 1px #fff,inset 0 -8px 13px #56524714}.gacha-control-panel{position:relative;height:155px;border:1px solid #e5e3dc;border-radius:5px;background:linear-gradient(145deg,#fffefa,#f5f3ed);box-shadow:inset 0 0 12px #5e5b520f}.gacha-turn-guide{position:absolute;top:4px;left:calc(50% - 72px);width:144px;height:144px;overflow:visible;pointer-events:none}.gacha-turn-ring{fill:none;stroke:var(--gacha-red);stroke-linecap:round;stroke-width:13px}.gacha-turn-arrowhead{fill:var(--gacha-red)}.gacha-turn-copy{position:absolute;z-index:1;top:33px;left:7px;color:#4a4945;font-size:.59rem;font-weight:850;letter-spacing:.12em;writing-mode:vertical-rl}.gacha-handle{position:absolute;z-index:2;top:32px;left:calc(50% - 44px);width:88px;height:88px;padding:0;border:0;border-radius:50%;background:transparent;cursor:grab;touch-action:none;transition:transform .35s ease-out}.gacha-handle.is-dragging{cursor:grabbing;transition:none}.gacha-machine[data-state=armed] .gacha-handle{filter:drop-shadow(0 0 7px rgba(229,29,42,.42))}.gacha-handle:disabled{cursor:not-allowed;opacity:.64}.gacha-handle:focus-visible{outline:3px solid #255bb4;outline-offset:4px}.gacha-handle-knob{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;border:5px solid #d6d4ce;border-radius:50%;background:radial-gradient(circle at 42% 35%,#fff 0,#fff 18%,#f8f7f2 52%,#dfddd6);box-shadow:0 5px 7px #37352f4d,inset 0 3px 1px #fff,inset 0 -4px 7px #66635926}.gacha-handle-grip{display:block;width:61px;height:21px;border:2px solid #cfcdc6;border-radius:10px;background:linear-gradient(180deg,#fff 0,#e9e8e2 53%,#d7d5ce);box-shadow:inset 0 2px 2px #fffffff2,inset 0 -2px 2px #62605826,0 2px 3px #4c48412b}.gacha-panel-logo{position:absolute;z-index:2;top:128px;left:calc(50% + 27px);color:#4a4945;font-size:.52rem;font-style:italic;font-weight:950;letter-spacing:-.03em;transform:rotate(-8deg)}.gacha-coin-control{position:absolute;z-index:3;top:14px;right:7px;width:51px;text-align:center}.gacha-coin-button{position:relative;display:block;width:51px;height:62px;padding:0;border:0;background:transparent;cursor:pointer}.gacha-coin-slot{position:absolute;top:0;left:4px;width:43px;height:43px;border:4px solid #333432;border-radius:50%;background:radial-gradient(circle at 42% 36%,#454643 0,#454643 12%,#151615 58%,#050505);box-shadow:0 3px 3px #0000004d,inset 0 1px 1px #ffffff4d}.gacha-coin-slot:after{position:absolute;top:7px;bottom:7px;left:calc(50% - 2px);width:4px;border-radius:99px;background:#090909;box-shadow:1px 0 #ffffff36;content:""}.gacha-coin-label{position:absolute;right:0;bottom:0;left:0;color:#44433f;font-size:.58rem;font-weight:850}.gacha-coin-button:disabled{cursor:not-allowed;filter:grayscale(.5);opacity:.55}.gacha-coin-button:focus-visible{border-radius:6px;outline:3px solid #255bb4;outline-offset:2px}.gacha-coin-return{display:grid;margin-top:5px;padding:0;place-items:center;border:0;background:transparent;color:#595853;font-family:inherit;font-size:.52rem;font-weight:800;cursor:pointer}.gacha-coin-return:disabled{cursor:default;opacity:.6}.gacha-coin-return:focus-visible{border-radius:6px;outline:3px solid #255bb4;outline-offset:2px}.gacha-coin-return:not(:disabled) i{border-color:#d98216;background:radial-gradient(circle at 40% 35%,#fff2c2,#f0b429);box-shadow:0 0 0 3px #f0b42947,0 2px 2px #3a38332e}.gacha-coin-return:not(:disabled):active i{transform:translateY(1px)}.gacha-coin-return i{display:block;width:20px;height:20px;margin-bottom:2px;border:3px solid #b8b7b1;border-radius:50%;background:radial-gradient(circle at 40% 35%,#fdfcf7,#cfcdc6);box-shadow:0 2px 2px #3a38332e}.gacha-falling-coin{position:absolute;z-index:5;top:-30px;right:18px;opacity:0;pointer-events:none}.gacha-falling-coin-active{animation:gacha-coin-fall .4s ease-in forwards}.gacha-drop-slot{position:relative;height:74px;margin-top:7px;overflow:visible;border:4px solid #292a29;border-radius:6px;background:linear-gradient(180deg,#171918 0,#080909 35%,#202220);box-shadow:inset 0 8px 10px #000,inset 0 -2px 1px #ffffff21,0 2px 1px #fff}.gacha-drop-slot:before{position:absolute;top:8px;right:17px;bottom:10px;left:17px;border:1px solid rgba(255,255,255,.06);border-radius:3px;background:linear-gradient(180deg,rgba(255,255,255,.05),transparent 28%);content:""}.gacha-drop-slot:after{position:absolute;right:16px;bottom:5px;color:#dbdfda33;content:"GASHA";font-size:.55rem;font-weight:900;letter-spacing:.18em;pointer-events:none}.gacha-capsule,.gacha-drawing-capsule{position:absolute;z-index:2;right:calc(50% - 23px);bottom:4px;width:46px;height:46px;border-radius:50%;filter:drop-shadow(0 2px 2px rgba(0,0,0,.55))}.gacha-capsule{padding:0;border:0;background:transparent;cursor:pointer;animation:gacha-capsule-bounce .56s ease-in-out 2}.gacha-capsule:focus-visible{outline:3px solid #ffe27c;outline-offset:2px}.gacha-capsule-top,.gacha-capsule-bottom{position:absolute;right:0;left:0;height:50%}.gacha-capsule-top{top:0;border-radius:50px 50px 3px 3px;background:#f8fbff}.gacha-capsule-bottom{bottom:0;border-radius:3px 3px 50px 50px;background:#ffdb60}.gacha-drawing-capsule{display:block;animation:gacha-capsule-roll .82s cubic-bezier(.2,.8,.3,1) forwards}.gacha-drawing-capsule .gacha-capsule-top,.gacha-drawing-capsule .gacha-capsule-bottom{position:absolute;right:0;left:0;height:50%}.gacha-drawing-capsule .gacha-capsule-top{top:0;border-radius:50px 50px 3px 3px;background:#f8fbff}.gacha-drawing-capsule .gacha-capsule-bottom{bottom:0;border-radius:3px 3px 50px 50px;background:#ffdb60}.gacha-capsule.is-opening{pointer-events:none}.gacha-capsule.is-opening .gacha-capsule-top{animation:gacha-shell-top .45s ease-out forwards}.gacha-capsule.is-opening .gacha-capsule-bottom{animation:gacha-shell-bottom .45s ease-out forwards}.gacha-foot{height:18px;margin:0 13px;border:1px solid #b8b7b1;border-top:0;border-radius:0 0 7px 7px;background:linear-gradient(90deg,#c9c8c2,#e5e4de 18%,#e5e4de 82%,#bdbcb6);box-shadow:0 5px 5px #38363130,inset 0 -3px 3px #5c595229}.gacha-popover{position:absolute;z-index:4;top:7rem;right:1.4rem;width:min(280px,calc(100% - 2.8rem));padding:1rem;border:2px solid #eacb7b;border-radius:18px;background:var(--gacha-paper);box-shadow:0 18px 40px #23192e38;text-align:center}.gacha-popover-close{position:absolute;top:.2rem;right:.45rem;border:0;color:#665b68;background:transparent;cursor:pointer;font-size:1.5rem}.gacha-popover .gacha-item-image-wrap,.gacha-popover .gacha-item-emoji{height:72px}.gacha-popover h3{margin-top:.2rem}.gacha-popover-rarity{margin:.2rem 0;font-weight:800}.rarity-text-common{color:#81778a}.rarity-text-rare{color:#267bd1}.rarity-text-epic{color:#bc8210}.gacha-ability-copy{margin:.45rem 0;color:#ad442d;font-weight:800}.gacha-redeem,.gacha-reveal-close{padding:.55rem .8rem;border:0;border-radius:999px;color:#fff;background:#b74a56;cursor:pointer;font-weight:800}.gacha-redeem:disabled{cursor:not-allowed;opacity:.45}.gacha-popover small{display:block;margin-top:.45rem;color:#ad3344}.gacha-reveal-backdrop{position:fixed;z-index:10;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:1rem;background:#191a359e}.gacha-reveal-card{position:relative;width:min(360px,100%);padding:2rem 1.3rem 1.3rem;overflow:hidden;border:5px solid #fff;border-radius:28px;background:linear-gradient(160deg,#fff,#fff6df);box-shadow:0 20px 70px #0c0e3166;text-align:center}.gacha-reveal-card.rarity-rare{box-shadow:0 0 35px #5cbaff,0 20px 70px #0c0e3166}.gacha-reveal-card.rarity-epic{box-shadow:0 0 35px #ffd94e,0 20px 70px #0c0e3166}.gacha-reveal-card.rarity-epic:before,.gacha-reveal-card.rarity-epic:after{position:absolute;width:7px;height:7px;border-radius:2px;background:#f5c841;content:"";animation:gacha-sparkle 1.3s ease-in-out infinite alternate}.gacha-reveal-card.rarity-epic:before{top:17%;left:16%}.gacha-reveal-card.rarity-epic:after{right:18%;bottom:22%;animation-delay:.45s}.gacha-reveal-card .gacha-item-image-wrap,.gacha-reveal-card .gacha-item-emoji{height:145px;font-size:5rem}.gacha-reveal-card h2{margin-top:.5rem}.gacha-reveal-rarity{margin:.35rem;color:#ae7b13;font-weight:900}.gacha-duplicate{padding:.6rem;border-radius:12px;color:#774b16;background:#fff0b4;font-weight:800}.gacha-reveal-close{margin-top:.8rem;background:#274e95}@keyframes gacha-bay-shake{0%,to{transform:translate(0) rotate(0)}25%{transform:translate(-2px) rotate(-.45deg)}75%{transform:translate(2px) rotate(.45deg)}}@keyframes gacha-coin-fall{0%{opacity:0;transform:translateY(-7px) rotate(0)}20%{opacity:1}to{opacity:1;transform:translateY(56px) rotate(170deg)}}@keyframes gacha-capsule-bounce{0%,to{transform:translateY(0)}35%{transform:translateY(-10px)}68%{transform:translateY(-3px)}}@keyframes gacha-capsule-roll{0%{opacity:0;transform:translate(-44px,-83px) rotate(-240deg)}18%{opacity:1}64%{transform:translate(3px,2px) rotate(270deg)}76%{transform:translateY(-8px) rotate(320deg)}88%,to{transform:translate(0) rotate(360deg)}}@keyframes gacha-shell-top{to{opacity:0;transform:translate(-38px,-39px) rotate(-30deg)}}@keyframes gacha-shell-bottom{to{opacity:0;transform:translate(38px,39px) rotate(30deg)}}@keyframes gacha-sparkle{0%{opacity:.5;transform:scale(.5) rotate(0)}to{opacity:1;transform:scale(1.6) rotate(90deg)}}@media(max-width:1020px){.gacha-machines{grid-template-columns:repeat(2,minmax(0,1fr));background:transparent}.gacha-machine{width:100%;max-width:410px;margin:0 auto}}@media(max-width:700px){.gacha-machines{grid-template-columns:1fr;background:transparent}}@media(max-width:460px){.gacha-corner{padding:.85rem}.gacha-corner-header{align-items:flex-start}.gacha-fragments{padding:.4rem .62rem}.gacha-machines{padding-inline:0}.gacha-machine{padding-inline:7px}.gacha-turn-copy{left:4px}}@media(prefers-reduced-motion:reduce){.gacha-capsule-bay,.gacha-handle,.gacha-capsule,.gacha-falling-coin-active,.gacha-drawing-capsule,.gacha-capsule.is-opening .gacha-capsule-top,.gacha-capsule.is-opening .gacha-capsule-bottom,.gacha-reveal-card.rarity-epic:before,.gacha-reveal-card.rarity-epic:after{animation:none;transition:none}}.pet-wardrobe-modal{width:min(100%,760px);max-height:min(86vh,820px);overflow-y:auto;padding:1.35rem 1.6rem 1.6rem;border:1px solid var(--line);border-radius:18px;background:var(--paper);box-shadow:0 20px 60px #2b2a2647}.pet-wardrobe-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:.85rem}.pet-panel-header-actions{display:flex;align-items:center;gap:.45rem}.pet-wardrobe-header h2,.pet-wardrobe-group h3{margin:0;font-family:var(--serif)}.pet-wardrobe-fragments{margin:.3rem 0 0;color:var(--coin);font-weight:700}.pet-wardrobe-groups{display:flex;flex-direction:column;gap:1rem}.pet-wardrobe-group{display:flex;flex-direction:column;gap:.55rem}.pet-wardrobe-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.65rem}.pet-wardrobe-item{position:relative;display:flex;min-height:165px;flex-direction:column;align-items:center;gap:.28rem;padding:.6rem .45rem;border:2px solid var(--line);border-radius:13px;background:var(--paper);color:var(--ink);font:inherit;cursor:pointer;text-align:center}.pet-wardrobe-item:hover,.pet-wardrobe-item:focus-visible{border-color:var(--accent);box-shadow:0 4px 14px #b3502c29}.pet-wardrobe-item:disabled{cursor:wait;opacity:.68}.pet-wardrobe-rarity-common{border-color:#fff;box-shadow:0 0 0 1px #d7d2c8}.pet-wardrobe-rarity-rare{border-color:#5b91d8}.pet-wardrobe-rarity-epic{border-color:#e2b932;box-shadow:0 0 9px #e2b93259}.pet-wardrobe-item.is-equipped{background:#fff8e4;box-shadow:inset 0 0 0 1px #c68a2e42}.pet-wardrobe-item-image{display:grid;width:92px;height:92px;place-items:center;border-radius:9px;background:var(--accent-soft)}.pet-wardrobe-preview{width:100%;height:100%;object-fit:contain}.pet-wardrobe-preview-fallback{font-size:2.8rem;line-height:1}.pet-wardrobe-item-name{max-width:100%;overflow:hidden;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.pet-wardrobe-item-rarity{color:var(--muted);font-size:.78rem}.pet-wardrobe-item-ability{color:var(--accent);font-size:.86rem;font-weight:700}.pet-wardrobe-equipped{position:absolute;top:.35rem;right:.35rem;padding:.12rem .3rem;border-radius:999px;background:var(--accent);color:#fff;font-size:.7rem;font-weight:700}.pet-wardrobe-button{padding:.4rem .68rem;border:1px solid var(--line);border-radius:999px;background:var(--accent-soft);color:var(--ink);font:inherit;cursor:pointer;white-space:nowrap}.pet-wardrobe-button:hover,.pet-wardrobe-button:focus-visible{border-color:var(--accent);color:var(--accent)}@media(max-width:680px){.pet-wardrobe-modal{max-height:calc(100vh - 1.5rem);padding:1rem}.pet-wardrobe-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@font-face{font-family:LXGWWenKaiTC;font-display:swap;src:url(https://cdn.jsdelivr.net/gh/yelban/font-lxgw-wenkai-tc@v1.0.0/LXGWWenKaiTC-Regular.woff2) format("woff2")}@font-face{font-family:Iansui;font-display:swap;src:url(https://cdn.jsdelivr.net/gh/yelban/font-iansui@v1.0.0/Iansui-Regular.woff2) format("woff2")}:root{--bg: #f3efe7;--paper: #fffdf8;--ink: #2b2a26;--muted: #7a7466;--accent: #b3502c;--accent-soft: #f4e3d7;--coin: #8a6214;--line: #e3dccd;--serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, LXGWWenKaiTC, "Noto Serif TC", serif;--sans: "Avenir Next", "Helvetica Neue", Iansui, "PingFang TC", "Noto Sans TC", sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans)}.app{min-height:100vh;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 1.6rem;background:var(--paper);border-bottom:1px solid var(--line);flex-wrap:wrap}.app-title{margin:0;font-family:var(--serif);font-size:1.5rem;letter-spacing:.02em}.app-title-link{color:inherit;text-decoration:none}.app-title .amp{color:var(--accent)}.app-title .subtitle{margin-left:.7rem;font-size:.9rem;color:var(--muted);font-family:var(--sans);font-weight:400}.tabs{display:flex;gap:.5rem}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:1rem;flex-wrap:wrap}.auth-user{display:flex;align-items:center;gap:.65rem;color:var(--muted);white-space:nowrap}.coin-chip{min-height:42px;display:inline-flex;align-items:center;gap:.42rem;padding:.35rem .72rem;border:1px solid var(--coin);border-radius:999px;background:#fff7df;color:#765413;box-shadow:0 2px 9px #c9962e21;font-variant-numeric:tabular-nums;white-space:nowrap}.coin-chip-icon{font-size:1.12rem}.coin-chip-balance{min-width:1ch}.tab{border:1px solid var(--line);background:transparent;padding:.55rem 1.1rem;border-radius:999px;font-size:.95rem;cursor:pointer;color:var(--ink)}.tab.active{background:var(--accent);border-color:var(--accent);color:#fff}.app-main{flex:1;padding:1.4rem;max-width:1240px;width:100%;margin:0 auto}.card{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:1.4rem 1.6rem;margin-bottom:1.2rem;box-shadow:0 1px 4px #0000000a}.card h2{margin-top:0;font-family:var(--serif)}.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.9rem;flex:1;min-width:180px}.field>span{font-size:.85rem;color:var(--muted)}.field input,.field select,.field textarea{font:inherit;padding:.55rem .7rem;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}.field textarea{resize:vertical}.field-row{display:flex;gap:1rem;flex-wrap:wrap}button.primary{font:inherit;background:var(--accent);color:#fff;border:none;border-radius:10px;padding:.7rem 1.4rem;cursor:pointer}button.primary:disabled{opacity:.6;cursor:wait}button.secondary{font:inherit;background:transparent;color:var(--accent);border:1px solid var(--accent);border-radius:10px;padding:.7rem 1.4rem;cursor:pointer}button.secondary:disabled{opacity:.6;cursor:wait}.button-row{display:flex;gap:.8rem;flex-wrap:wrap}.sequel-direction{flex:1 1 16rem;min-width:0;font:inherit;line-height:1.5;color:inherit;background:#fff;border:1px solid var(--accent);border-radius:10px;padding:.6rem .9rem;resize:none}.sequel-direction:focus{outline:2px solid var(--accent);outline-offset:1px}.sequel-direction:disabled{opacity:.6;cursor:wait}.premises{margin:.4rem 0 1rem;display:flex;flex-direction:column;gap:.5rem}.premise-card{font:inherit;text-align:left;background:#fff;border:1px solid var(--line);border-radius:10px;padding:.7rem .9rem;cursor:pointer;display:flex;flex-direction:column;gap:.2rem}.premise-card.selected{border-color:var(--accent);background:var(--accent-soft)}.premise-en{font-family:var(--serif)}.premise-zh{font-size:.85rem;color:var(--muted)}button.link{background:none;border:none;color:var(--accent);cursor:pointer;font:inherit;padding:0}.error{color:#a3341f;background:#fbeae5;border-radius:8px;padding:.5rem .8rem}.hint-text{color:var(--muted);font-size:.88rem}.practice-assessing-dots:after{content:"";animation:practiceAssessingDots 1.2s steps(1,end) infinite}@keyframes practiceAssessingDots{0%{content:""}25%{content:"."}50%{content:".."}75%,to{content:"..."}}.auth-shell{min-height:100vh;display:grid;place-items:center;padding:1.5rem}.auth-card{width:min(100%,28rem);margin:0;padding:2rem}.auth-card h1{margin:.45rem 0 1.4rem;font-family:var(--serif);font-size:1.65rem}.auth-brand{color:var(--ink);font-family:var(--serif);font-size:1.15rem}.auth-brand .amp{color:var(--accent)}.auth-submit{width:100%;margin-top:.3rem}.auth-alternate{display:block;margin:1rem auto 0}.auth-invitation{padding:.8rem 1rem;border-left:3px solid var(--accent);border-radius:6px;background:var(--accent-soft);line-height:1.6}.auth-link{color:var(--accent)}.settings-body h3{font-size:.95rem;color:var(--muted);margin:1rem 0 .5rem}.viewer-toolbar{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-bottom:1rem}.viewer-toolbar select{font:inherit;padding:.45rem .6rem;border:1px solid var(--line);border-radius:8px;background:#fff;max-width:260px}.mode-buttons{display:flex;gap:.4rem}button.mode{font:inherit;font-size:.9rem;border:1px solid var(--line);background:var(--paper);border-radius:999px;padding:.45rem .9rem;cursor:pointer}button.mode.active{background:var(--accent);border-color:var(--accent);color:#fff}button.mode.stop{border-color:#a3341f;color:#a3341f}.zh-toggle{display:flex;align-items:center;gap:.35rem;font-size:.9rem;color:var(--muted)}.spread{display:grid;grid-template-columns:minmax(280px,5fr) 7fr;gap:0;background:var(--paper);border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:0 8px 28px #3c2d141a;min-height:70vh}.page{padding:2.2rem}.page-left{position:relative;max-height:82vh;border-right:1px solid var(--line);background:linear-gradient(to right,#0000 96%,#0000000d),var(--accent-soft);display:flex;align-items:center;justify-content:center}.illustration{flex:0 1 auto;min-height:0;height:74vh;max-width:100%;aspect-ratio:2 / 3;object-fit:cover;border-radius:12px;box-shadow:0 4px 16px #3c2d142e}.illustration-placeholder{text-align:center;color:var(--muted)}.illustration-wrap{display:flex;flex-direction:column;align-items:center;gap:.6rem;width:100%;height:100%;min-height:0;justify-content:center}.illustration-tools{display:flex;align-items:center;gap:.6rem;justify-content:center;flex-wrap:wrap;margin-top:.6rem}.illustration-tools select{font:inherit;font-size:.85rem;padding:.35rem .5rem;border:1px solid var(--line);border-radius:8px;background:#fff}.page-right{background:linear-gradient(to left,#0000 97%,#0000000a),var(--paper);overflow-y:auto;max-height:82vh}.story-title{font-family:var(--serif);font-size:1.7rem;margin:0 0 .2rem}.story-title-zh{color:var(--muted);margin:0 0 1.4rem}.concept-reveal{margin:1.4rem 0;border:1px solid var(--line);border-radius:12px;background:var(--accent-soft);overflow:hidden}.concept-reveal summary{padding:.9rem 1rem;cursor:pointer;font-weight:650}.concept-reveal-body{padding:0 1rem 1rem;border-top:1px solid var(--line)}.concept-reveal-body h3{margin-bottom:.4rem}.concept-reveal-body p{margin:0;line-height:1.8;white-space:pre-wrap}.story-text{font-family:var(--serif);font-size:1.18rem;line-height:1.95;letter-spacing:.012em}.para-block{margin-bottom:1.15em}.para-block.page-break{-webkit-column-break-before:always;break-before:column}.para-en{margin:0}.para-zh{margin:.3em 0 0;font-family:var(--sans);font-size:.92rem;line-height:1.8;color:var(--muted)}.sentence{border-bottom:2px solid transparent;transition:background-color .25s ease,border-color .25s ease}.sentence.active{border-bottom-color:var(--accent);background:var(--accent-soft)}.word.clickable{cursor:pointer;border-radius:3px}.word.clickable:hover{background:var(--accent-soft)}.phrase{border-radius:4px;background:#b3502c17;box-shadow:0 1px #b3502c59}.phrase.clickable{cursor:pointer}.phrase.clickable:hover{background:var(--accent-soft)}.word-popover{position:fixed;z-index:50;width:320px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:.9rem 1.1rem;box-shadow:0 10px 30px #00000029}.popover-word{font-family:var(--serif);font-size:1.2rem;font-weight:600;margin-bottom:.3rem}.popover-phonetic{font-family:var(--serif);font-size:.85rem;font-weight:400;color:var(--muted);margin-left:.4rem}.popover-tabs{display:flex;gap:.3rem;border-bottom:1px solid var(--line);margin-bottom:.4rem}.popover-tab{background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font-size:.85rem;color:var(--muted);padding:.15rem .4rem .3rem}.popover-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.popover-body{max-height:260px;overflow-y:auto}.popover-sense{margin:.15rem 0;font-weight:400;font-size:.92rem}.popover-meta{margin:.2rem 0;font-size:.92rem}.popover-meta-label{display:inline-block;color:var(--muted);font-size:.78rem;margin-right:.45rem}.popover-def{margin:.2rem 0}.popover-example{margin:.2rem 0;color:var(--muted);font-style:italic}.popover-zh{margin:.3rem 0 .5rem;color:var(--accent);font-weight:600}.viewer-empty{max-width:720px;margin:3rem auto;text-align:center}.speak-btn{background:none;border:none;cursor:pointer;color:var(--accent);font-size:.72em;line-height:1;opacity:.55;padding:0 .15rem;vertical-align:.1em;transition:opacity .15s ease}.speak-btn:hover{opacity:1}.history-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#2b2a2666;display:flex;align-items:center;justify-content:center;padding:2rem}.history-panel{background:var(--paper);border:1px solid var(--line);border-radius:16px;padding:1.2rem 1.5rem 1.5rem;max-width:860px;width:100%;max-height:80vh;overflow-y:auto;box-shadow:0 18px 50px #00000040}.history-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.8rem}.history-header h3{margin:0;font-family:var(--serif)}.history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1rem}.history-card{font:inherit;text-align:left;background:#fff;border:1px solid var(--line);border-radius:12px;padding:.6rem;cursor:pointer;display:flex;flex-direction:column;gap:.4rem;transition:box-shadow .15s ease,transform .15s ease}.history-card:hover{box-shadow:0 6px 18px #3c2d1426;transform:translateY(-2px)}.series-stack{position:relative;display:block;width:100%;z-index:0}.series-stack:before,.series-stack:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:0 2px 8px #3c2d1414;z-index:-1}.series-stack:before{transform:rotate(-2.5deg) translate(-3px,3px)}.series-stack:after{transform:rotate(1.8deg) translate(3px,1px)}.series-count{position:absolute;top:.4rem;right:.4rem;z-index:1;background:var(--accent);color:#fff;font-size:.72rem;font-weight:600;padding:.12rem .55rem;border-radius:999px;box-shadow:0 1px 4px #00000040}.history-card img,.history-noimg{width:100%;aspect-ratio:2 / 3;object-fit:cover;border-radius:8px;background:var(--accent-soft);display:flex;align-items:center;justify-content:center;font-size:2rem}.history-title{font-family:var(--serif);font-size:.95rem;line-height:1.3}.history-zh{font-size:.8rem;color:var(--muted)}@media(max-width:860px){.spread{grid-template-columns:1fr}.page-left{border-right:none;border-bottom:1px solid var(--line)}}.practice-panel{margin:0 0 14px;border-left:4px solid var(--accent);max-height:min(560px,55vh);overflow-y:auto}.practice-header{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:10px}.practice-progress{font-weight:600}.practice-threshold{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:.9rem}.practice-threshold input{width:4.5em}.practice-sentence{font-family:var(--serif);font-size:1.25rem;line-height:1.6;margin:6px 0 10px}.practice-recording{color:var(--accent);font-weight:600}.practice-feedback{border-top:1px dashed var(--line);padding-top:10px}.practice-pass{color:#2f7d3a;font-weight:600}.practice-fail{color:var(--accent);font-weight:600}.practice-guess{margin:8px 0 4px}.practice-guess-title{margin:0 0 6px;font-weight:650}.practice-guess-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.practice-guess-chip{padding:6px 14px;border:2px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);font-size:1.05rem;font-weight:700;cursor:pointer;transition:transform .12s ease-out,border-color .12s ease-out}.practice-guess-chip:hover{transform:translateY(-1px)}.practice-guess-chip-active{border-color:var(--accent);background:#b3502c1a;color:var(--accent)}.practice-guess-chip{transition:transform .25s ease,border-color .25s ease,background-color .25s ease,box-shadow .25s ease}.practice-guess-chip-spot{border-color:var(--accent);background:#b3502c1f;transform:translateY(-2px) scale(1.06);box-shadow:0 4px 12px #b3502c33}@media(prefers-reduced-motion:reduce){.practice-guess-chip{transition:none}.practice-guess-chip-spot{transform:none;box-shadow:none}}.practice-listen-word{display:inline-flex;align-items:center;gap:6px;padding:12px 22px;border:0;border-radius:14px;background:var(--accent);color:#fff;font-size:1.25rem;font-weight:750;cursor:pointer;box-shadow:0 4px 14px #b3502c47}.practice-listen-word{transition:transform .14s cubic-bezier(.34,1.56,.64,1),box-shadow .14s ease-out,filter .14s ease-out}.practice-listen-word:hover{filter:brightness(1.06);transform:translateY(-2px) scale(1.04);box-shadow:0 8px 20px #b3502c5c}.practice-listen-word:hover .listen-icon{animation:listen-icon-wiggle .5s ease-in-out}.practice-listen-word:active{transform:translateY(1px) scale(.97);box-shadow:0 2px 8px #b3502c4d}@keyframes listen-icon-wiggle{0%,to{transform:rotate(0)}25%{transform:rotate(-14deg) scale(1.15)}60%{transform:rotate(10deg) scale(1.1)}}.practice-listen-word-pop{animation:listen-word-pop .38s cubic-bezier(.34,1.56,.64,1) both}@keyframes listen-word-pop{0%{transform:translateY(8px) scale(.6);opacity:0}60%{transform:translateY(-2px) scale(1.06);opacity:1}to{transform:translateY(0) scale(1);opacity:1}}.listen-icon{display:inline-flex;line-height:0}.listen-wave{opacity:.35}.practice-listen-word[data-speaking]{animation:listen-word-pulse .9s ease-in-out infinite}.practice-listen-word[data-speaking] .listen-wave{animation:listen-wave-on .9s ease-in-out infinite}.practice-listen-word[data-speaking] .listen-wave-2{animation-delay:.15s}.practice-listen-word[data-speaking] .listen-wave-3{animation-delay:.3s}@keyframes listen-wave-on{0%,20%{opacity:.35}45%,65%{opacity:1}to{opacity:.35}}@keyframes listen-word-pulse{0%,to{box-shadow:0 4px 14px #b3502c47,0 0 #b3502c73}50%{box-shadow:0 4px 14px #b3502c47,0 0 0 8px #b3502c00}}@media(prefers-reduced-motion:reduce){.practice-listen-word-pop,.practice-listen-word[data-speaking],.practice-listen-word[data-speaking] .listen-wave,.practice-listen-word:hover .listen-icon{animation:none}.practice-listen-word,.practice-listen-word:hover,.practice-listen-word:active{transform:none;transition:none}.practice-listen-word[data-speaking] .listen-wave{opacity:1}}.practice-issue-source{margin-left:8px;padding:1px 8px;border-radius:999px;background:var(--accent-soft);color:var(--muted);font-size:.8rem;font-weight:600;vertical-align:middle}.practice-guess-verdict{margin:4px 0 8px;font-weight:650}.practice-score-line{display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap;margin:6px 0 2px}.practice-score-big{font-size:2.6rem;font-weight:800;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:.02em;transform-origin:left center}.practice-score-counting{color:var(--ink);opacity:.85}.practice-score-pass{color:#2f7d3a}.practice-score-fail{color:var(--accent)}.practice-score-settled{animation:practiceScorePop .42s cubic-bezier(.2,.8,.25,1) both}@keyframes practiceScorePop{0%{transform:scale(1)}40%{transform:scale(1.25)}to{transform:scale(1)}}.practice-rewards{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem 1rem;margin:.35rem 0 .7rem}.practice-coins-earned{color:var(--coin);font-size:1.12rem}.practice-streak{color:#9b5527;font-weight:650}.practice-prosody{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 14px;margin:6px 0 8px;color:var(--muted);font-size:.9rem}.practice-prosody.is-flat{color:var(--accent)}.practice-prosody small{font-size:.82rem}.practice-word-scores{display:flex;flex-wrap:wrap;gap:7px;margin:10px 0;padding:0;list-style:none}.practice-word-scores li{display:inline-flex;align-items:baseline;gap:5px;padding:4px 8px;border:1px solid var(--line);border-radius:8px;background:#fff}.practice-word-scores li span{font-variant-numeric:tabular-nums;font-weight:700}.practice-word-scores .word-score-pass span{color:#2f7d3a}.practice-word-scores .word-score-low span{color:var(--accent)}.practice-word-scores .word-score-stalled{border-color:var(--accent);background:var(--accent-soft)}.practice-word-scores small{color:var(--muted);font-size:.7rem}.practice-coach{margin:12px 0;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#ffffff8c}.practice-coach h4{margin:0 0 6px}.practice-coach-loading,.practice-coach-error{margin:5px 0;color:var(--muted)}.practice-coach-loading:before{content:"⏳ "}.practice-coach-error:before{content:"ℹ️ "}.practice-issues{margin:8px 0;padding-left:0;list-style:none}.practice-issues li{margin-bottom:10px}.practice-issue-point{margin:0 0 4px;font-size:1.05rem}.practice-suggestion{margin:0 0 8px;color:var(--muted);font-size:.95rem}.practice-listen-word-sm{padding:8px 16px;font-size:1.05rem}.practice-advice{background:var(--accent-soft);border-radius:8px;padding:8px 12px}.practice-auto{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:.9rem;cursor:pointer}.speak-btn svg{vertical-align:-2px}.practice-feedback{position:relative}.practice-check-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#fffdf899;pointer-events:none;animation:practice-check-fade .3s ease}.practice-check{width:96px;height:96px}.practice-check circle,.practice-check path{stroke:#2f7d3a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.practice-check circle{stroke-dasharray:151;stroke-dashoffset:151;animation:practice-check-draw .5s ease forwards}.practice-check path{stroke-dasharray:36;stroke-dashoffset:36;animation:practice-check-draw .4s ease .35s forwards}@keyframes practice-check-draw{to{stroke-dashoffset:0}}@keyframes practice-check-fade{0%{opacity:0}}.practice-issues .speak-btn{padding:2px 6px;opacity:.75}.practice-issues .speak-btn svg{vertical-align:-4px}.library-filters{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.chip-row{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.chip{font:inherit;font-size:.85rem;padding:.25rem .7rem;border:1px solid var(--line);border-radius:999px;background:#fff;cursor:pointer}.chip.active{background:var(--accent);border-color:var(--accent);color:#fff}.chip-count{margin-left:.35em;font-size:.75em;opacity:.7}.library-search input{font:inherit;font-size:.85rem;padding:.25rem .7rem;border:1px solid var(--line);border-radius:999px;min-width:180px}.chip-select{font:inherit;font-size:.85rem;padding:.25rem 1.7rem .25rem .7rem;border:1px solid var(--line);border-radius:999px;background:#fff;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%237a7466' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .65rem center}.library-cover-wrap{position:relative;display:block}.level-badge{position:absolute;top:6px;left:6px;font-size:.75rem;font-weight:700;padding:.1rem .45rem;border-radius:6px;background:var(--accent);color:#fff}.level-badge.estimated{background:var(--muted)}.library-detail .level-badge{position:static}.book-status{position:absolute;bottom:6px;right:6px;font-size:.7rem;padding:.1rem .4rem;border-radius:6px;background:#0000008c;color:#fff}.library-detail-head{display:flex;gap:1.2rem;margin:.8rem 0 1rem;align-items:flex-start}.library-detail-cover{width:140px;aspect-ratio:2 / 3;object-fit:cover;border-radius:8px;flex-shrink:0}.library-book-author{color:var(--muted);margin:.2rem 0 .4rem}.library-book-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.8rem;font-size:.85rem;color:var(--muted)}.chapter-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}.chapter-list li{border-bottom:1px solid var(--line)}.chapter-item{font:inherit;width:100%;display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:.55rem .4rem;background:none;border:0;cursor:pointer;text-align:left}.chapter-title{font-family:var(--serif)}.chapter-meta{font-size:.8rem;color:var(--muted);white-space:nowrap}.chapter-resume{color:var(--accent);font-weight:600}.chapter-nav{align-items:center;gap:.8rem;margin-bottom:.9rem}.chapter-pos{font-size:.85rem;color:var(--muted)}.translate-panel{border:1px dashed var(--line);border-radius:10px;padding:.7rem .9rem;margin-bottom:.8rem}.library-spread{grid-template-columns:250px 1fr}.library-side{position:relative;display:flex;flex-direction:column;align-items:center;gap:.6rem;padding:1.2rem 1rem}.library-side-cover{width:100%;max-width:150px;aspect-ratio:2 / 3;object-fit:cover;border-radius:8px;font-size:2.4rem}.library-side-title{font-family:var(--serif);font-size:.95rem;text-align:center;line-height:1.35;margin:0}.library-side-pos{color:var(--muted);font-size:.85rem;margin:0}.side-card{width:100%;display:flex;flex-direction:column;align-items:center;gap:.35rem;border-top:1px solid var(--line);padding-top:.6rem;margin-top:.2rem}.side-line{margin:0;font-size:.82rem;line-height:1.5;text-align:center}.side-author{font-weight:600}.side-muted{color:var(--muted);font-size:.78rem}.side-tags{display:flex;flex-wrap:wrap;gap:.3rem;justify-content:center}.side-tags span{background:var(--accent-soft);border-radius:6px;padding:.05rem .45rem;font-size:.78rem}.side-tags span.side-level{background:var(--accent);color:#fff;font-weight:600}.side-progress{width:100%;height:6px;background:var(--accent-soft);border-radius:3px;overflow:hidden}.side-progress-fill{height:100%;background:var(--accent);border-radius:3px}.chapter-panel{max-width:420px}.side-toc-btn{width:100%}.chapter-list{max-height:62vh;overflow-y:auto;width:100%;display:flex;flex-direction:column;gap:2px}.chapter-item{display:flex;gap:.45rem;align-items:baseline;background:none;border:none;text-align:left;cursor:pointer;padding:.3rem .4rem;border-radius:8px;font-size:.82rem;width:100%;color:inherit}.chapter-item:hover{background:var(--accent-soft)}.chapter-item.active{background:var(--accent-soft);font-weight:600;color:var(--accent)}.chapter-no{color:var(--muted);font-size:.75rem;min-width:1.6em;text-align:right;flex-shrink:0}.chapter-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chapter-zh{font-size:.7rem;flex-shrink:0}.side-toggle{position:absolute;top:.7rem;right:.7rem;z-index:2;background:var(--paper);border:1px solid var(--line);border-radius:50%;width:1.8rem;height:1.8rem;line-height:1;cursor:pointer;color:var(--muted);font-size:1rem}.side-toggle:hover{color:var(--accent);border-color:var(--accent)}.library-audio{width:100%;margin-top:.4rem}.library-audio audio{width:100%;height:36px}.library-audio-label{font-size:.78rem;color:var(--muted);margin:0 0 .3rem;text-align:center}.pager-wrap{position:relative}.flip-sheet{position:absolute;perspective:1600px;pointer-events:none;z-index:5}.flip-leaf{position:relative;width:100%;height:100%;overflow:hidden;background:var(--paper);will-change:transform,opacity}.flip-leaf:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.flip-forward .flip-leaf{transform-origin:left center;animation:flip-fwd .32s ease-in forwards;box-shadow:8px 0 24px #2b2a262e}.flip-forward .flip-leaf:after{background:linear-gradient(to right,rgba(255,255,255,.5),transparent 25%,transparent 60%,rgba(43,42,38,.14))}.flip-back .flip-leaf{transform-origin:right center;animation:flip-bwd .32s ease-in forwards;box-shadow:-8px 0 24px #2b2a262e}.flip-back .flip-leaf:after{background:linear-gradient(to left,rgba(255,255,255,.5),transparent 25%,transparent 60%,rgba(43,42,38,.14))}@keyframes flip-fwd{0%{transform:rotateY(0);opacity:1}75%{opacity:1}to{transform:rotateY(-100deg);opacity:0}}@keyframes flip-bwd{0%{transform:rotateY(0);opacity:1}75%{opacity:1}to{transform:rotateY(100deg);opacity:0}}@media(prefers-reduced-motion:reduce){.flip-sheet{display:none}}.hall-view{display:flex;max-width:1040px;flex-direction:column;gap:1.2rem;margin-inline:auto}.hall-view>.card{margin-bottom:0}.hall-heading,.hall-pets-heading,.class-goal-heading{display:flex;align-items:center;justify-content:space-between;gap:1rem}.hall-heading h2,.hall-pets-heading h2,.class-goal-heading h3{margin:0;font-family:var(--serif)}.hall-class-filter{display:flex;align-items:center;gap:.55rem;color:var(--muted);font-size:.9rem}.hall-class-filter select{max-width:15rem;padding:.48rem .65rem;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font:inherit}.hall-goal-list,.class-goal-list{display:grid;gap:.8rem;margin:1rem 0 0;padding:0;list-style:none}.class-goal-card{position:relative;margin:0;padding:.95rem 1rem;border:1px solid var(--line);border-radius:12px;background:#fff}.class-goal-card.is-celebrating{border-color:#d7a832;animation:classGoalCelebrate .62s ease-out both;box-shadow:0 0 0 4px #d7a83226}.class-goal-card h3,.class-goal-card h4{margin:0}.class-goal-class-name,.class-goal-meta,.class-goal-deadline,.class-goal-contribution{color:var(--muted);font-size:.88rem}.class-goal-meta{display:flex;flex-wrap:wrap;gap:.35rem .9rem}.class-goal-progress-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;margin:.7rem 0;font-variant-numeric:tabular-nums}.class-goal-card progress{width:100%;accent-color:var(--accent)}.class-goal-reached{color:#8a5d00;font-weight:700}.class-goal-status{display:inline-flex;padding:.22rem .55rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.78rem;font-weight:700}.class-goal-card details{margin-top:.7rem}.class-goal-card summary{color:var(--accent);cursor:pointer}.class-goal-contributions{display:grid;gap:.3rem;margin:.55rem 0 0;padding:0;list-style:none}.class-goal-contributions li{display:flex;justify-content:space-between;gap:1rem}.class-goal-cancel{margin-top:.7rem;padding:.4rem .65rem;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--accent);font:inherit;cursor:pointer}.class-goal-section{margin:0 0 1.35rem;padding:1rem;border:1px solid var(--line);border-radius:14px;background:var(--accent-soft)}.class-goal-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;margin:1rem 0}.class-goal-form label{display:flex;min-width:0;flex-direction:column;gap:.3rem;color:var(--muted);font-size:.82rem}.class-goal-form label:first-child{grid-column:1 / -1}.class-goal-form input,.class-goal-form select{width:100%;min-height:40px;padding:.5rem .65rem;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font:inherit}.class-goal-form button{align-self:end;min-height:40px}.hall-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.8rem;margin-top:1rem}.hall-card{position:relative;min-width:0;margin:0;padding:.7rem;text-align:center}.hall-card.is-me{border-color:var(--accent);box-shadow:0 0 0 3px #b3502c1f}.hall-card-artwork{display:block;width:100%;aspect-ratio:1 / 1;margin-bottom:.5rem;background:linear-gradient(145deg,var(--accent-soft),var(--paper))}.hall-card-name,.hall-card-nickname{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hall-card-name{display:block;margin-top:.45rem}.hall-card-nickname{margin:.15rem 0 0;color:var(--muted);font-size:.85rem}.hall-me-tag{position:absolute;top:.55rem;right:.55rem;z-index:6;padding:.18rem .45rem;border-radius:999px;background:var(--accent);color:#fff;font-size:.72rem;font-weight:700}.hall-load-more{display:block;margin:1rem auto 0}@keyframes classGoalCelebrate{0%{transform:scale(.96)}55%{transform:scale(1.025)}to{transform:scale(1)}}.avatar-export-open{padding:.4rem .68rem;border:1px solid var(--line);border-radius:999px;background:var(--accent-soft);color:var(--ink);font:inherit;cursor:pointer;white-space:nowrap}.avatar-export-open:hover,.avatar-export-open:focus-visible{border-color:var(--accent);color:var(--accent)}.avatar-export-overlay{z-index:90}.avatar-export-modal{width:min(100%,430px);max-height:min(90vh,640px);overflow-y:auto;padding:1.25rem;border:1px solid var(--line);border-radius:18px;background:var(--paper);box-shadow:0 20px 60px #2b2a2647;text-align:center}.avatar-export-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.avatar-export-header h2{margin:0;font-family:var(--serif)}.avatar-export-preview{display:block;width:min(100%,256px);aspect-ratio:1 / 1;margin:0 auto 1rem;border:1px solid var(--line);border-radius:14px;object-fit:contain}.avatar-export-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:.65rem}.avatar-export-actions a,.avatar-export-actions button{padding:.6rem .9rem;border:1px solid var(--accent);border-radius:9px;background:var(--accent);color:#fff;font:inherit;text-decoration:none;cursor:pointer}.avatar-export-hint{margin:.85rem 0 0;color:var(--muted);font-size:.85rem}@media(max-width:600px){.hall-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hall-pets-heading,.class-goal-heading{align-items:flex-start;flex-direction:column}.class-goal-form{grid-template-columns:1fr}.class-goal-form label:first-child{grid-column:auto}.avatar-export-modal{padding:1rem}}@media(prefers-reduced-motion:reduce){.class-goal-card.is-celebrating{animation:none}}.pager{overflow:hidden;height:calc(100vh - 400px);min-height:320px}.pager-inner{height:100%;column-fill:auto}.pager-zone{position:absolute;top:0;bottom:1.6rem;width:40px;display:flex;align-items:center;justify-content:center;background:none;border:0;cursor:pointer;font-size:2.2rem;line-height:1;color:var(--muted);opacity:.35;z-index:2;transition:opacity .15s ease}.pager-zone:hover{opacity:.95}.pager-zone-left{left:-46px}.pager-zone-right{right:-46px}.pager-pos{text-align:center;color:var(--muted);font-size:.8rem;margin:.5rem 0 0}@media(max-width:860px){.library-spread{grid-template-columns:1fr}.pager-zone-left{left:-10px}.pager-zone-right{right:-10px}}.voice-studio{display:flex;flex-direction:column;gap:1rem}.voice-script-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-top:1rem}.voice-script-head h3{font-size:.95rem;color:var(--muted);margin:0}.voice-script{font-family:var(--serif);font-size:1.15rem;line-height:1.9;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:1rem 1.2rem;margin:.4rem 0}.voice-recorder{display:flex;align-items:center;gap:.8rem;margin:.8rem 0 .3rem}.voice-recorder .recording{background:#a3341f;border-color:#a3341f}.voice-meter{flex:1;height:10px;background:var(--line);border-radius:5px;overflow:hidden}.voice-meter-fill{height:100%;background:var(--accent);transition:width 80ms linear}.voice-timer{font-variant-numeric:tabular-nums;color:var(--muted);min-width:4.5rem;text-align:right}.voice-timer.good{color:var(--accent);font-weight:600}.voice-clip{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin:.6rem 0;color:var(--muted);font-size:.88rem}.voice-advanced{margin:.8rem 0;color:var(--muted);font-size:.88rem}.voice-advanced summary{cursor:pointer}.voice-consent{display:flex;flex-direction:column;gap:.4rem;margin:.8rem 0}.checkbox{display:flex;align-items:flex-start;gap:.5rem;font-size:.9rem;line-height:1.5}.checkbox input{margin-top:.25rem}.voice-ab{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.voice-ab audio{width:100%}.voice-list{list-style:none;margin:0;padding:0}.voice-list-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:.7rem 0;border-bottom:1px solid var(--line)}.voice-list-row:last-child{border-bottom:none}.voice-tag{margin-left:.5rem;padding:.1rem .5rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.75rem}.voice-status{margin-left:.5rem;font-size:.8rem;color:var(--muted)}.voice-status.ready{color:#3f7d3f}.voice-status.failed{color:#a3341f}.voice-row-actions{display:flex;gap:.6rem;white-space:nowrap}.link.danger{color:#a3341f;font-weight:600}@media(max-width:860px){.voice-ab{grid-template-columns:1fr}}.hint-text.warn{color:#8a5a1f;background:#fdf3e3;border-left:3px solid #c98a2e;border-radius:6px;padding:.5rem .8rem}.pet-widget{min-height:42px;display:inline-flex;align-items:center;gap:.45rem;padding:.3rem .7rem;border:1px solid var(--line);border-radius:999px;background:var(--accent-soft);color:var(--ink);font:inherit;cursor:pointer;white-space:nowrap}.pet-widget:hover,.pet-widget:focus-visible{border-color:var(--accent);box-shadow:0 3px 12px #b3502c29}.pet-widget-empty{color:var(--accent);font-weight:700}.pet-widget-artwork .pet-artwork-badges,.chat-pet-avatar .pet-artwork-badges,.pet-adoption-artwork .pet-artwork-badges{display:none}.pet-widget-artwork{width:32px;height:32px;display:grid;place-items:center;flex:0 0 32px;border-radius:50%;object-fit:contain;background:var(--paper);font-size:1.35rem}.pet-widget-name{max-width:8rem;overflow:hidden;text-overflow:ellipsis}.pet-widget-vigor{font-size:1.05rem}.pet-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;display:flex;align-items:center;justify-content:center;padding:2rem;background:#2b2a2670}.pet-panel,.pet-adoption-modal{width:min(100%,720px);max-height:min(86vh,820px);overflow-y:auto;padding:1.35rem 1.6rem 1.6rem;border:1px solid var(--line);border-radius:18px;background:var(--paper);box-shadow:0 20px 60px #2b2a2647}.pet-panel{width:min(100%,620px)}.pet-panel-header,.pet-modal-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.8rem}.pet-panel-header h2,.pet-modal-header h2,.pet-wallet h3,.pet-attributes h3,.pet-vigor-section h3{margin:0;font-family:var(--serif)}.pet-close,.pet-retry,.pet-secondary,.pet-primary,.pet-rename-actions button{padding:.48rem .8rem;border:1px solid var(--line);border-radius:9px;background:var(--paper);color:var(--ink);font:inherit;cursor:pointer}.pet-primary,.pet-rename-actions button[type=submit]{border-color:var(--accent);background:var(--accent);color:#fff}.pet-close:hover,.pet-retry:hover,.pet-secondary:hover,.pet-rename-actions button:not([type=submit]):hover{border-color:var(--accent);color:var(--accent)}.pet-close:disabled,.pet-retry:disabled,.pet-secondary:disabled,.pet-primary:disabled,.pet-rename-actions button:disabled{cursor:default;opacity:.55}.pet-panel-content{display:flex;flex-direction:column;gap:1rem}.pet-wallet{margin:.9rem 0 1rem;padding:.95rem 1rem;border:1px solid #ead9ad;border-radius:12px;background:#fffaf0}.pet-wallet-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.7rem;margin:.8rem 0 1rem}.pet-wallet-summary div{padding:.65rem;border:1px solid #eee1c3;border-radius:9px;background:var(--paper)}.pet-wallet-summary dt{color:var(--muted);font-size:.8rem}.pet-wallet-summary dd{margin:.22rem 0 0;font-weight:700;font-variant-numeric:tabular-nums}.pet-wallet-balance,.pet-wallet-earned,.coin-delta-positive{color:var(--coin)}.pet-wallet h4{margin:0 0 .45rem;font-family:var(--serif)}.pet-wallet-ledger{margin:0;padding:0;list-style:none}.pet-wallet-ledger li{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.55rem 0;border-top:1px dashed var(--line)}.pet-wallet-ledger li>span{display:flex;flex-direction:column;gap:.12rem}.pet-wallet-ledger time,.pet-wallet-status{color:var(--muted);font-size:.82rem}.pet-wallet-status{margin:.65rem 0 0}.pet-wallet-status.is-error,.coin-delta-negative{color:#a3341f}.coin-delta-positive,.coin-delta-negative{font-variant-numeric:tabular-nums;white-space:nowrap}.pet-panel-artwork{width:min(100%,240px);height:auto;aspect-ratio:1 / 1;display:grid;place-items:center;align-self:center;object-fit:contain;border-radius:16px;background:linear-gradient(145deg,var(--accent-soft),var(--paper));font-size:7rem}.pet-name-button{display:inline-flex;align-items:center;align-self:center;gap:.45rem;padding:.25rem .5rem;border:0;border-bottom:1px dashed var(--accent);background:transparent;color:var(--ink);font:inherit;font-size:1.35rem;cursor:pointer}.pet-field{display:flex;flex-direction:column;gap:.4rem}.pet-field>span,.pet-modal-intro,.pet-status,.pet-care-hint{color:var(--muted)}.pet-field input{width:100%;padding:.6rem .7rem;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font:inherit}.pet-rename-form,.pet-adoption-form{display:flex;flex-direction:column;gap:1rem}.pet-rename-actions,.pet-modal-actions{display:flex;justify-content:flex-end;gap:.65rem}.pet-stage-section,.pet-attributes,.pet-vigor-section{padding:.9rem 1rem;border:1px solid var(--line);border-radius:12px;background:#fff}.pet-stage-heading,.pet-attribute-heading{display:flex;justify-content:space-between;gap:1rem;margin-bottom:.45rem;font-size:.9rem}.pet-stage-heading span:last-child,.pet-attribute-heading span:last-child{color:var(--muted);font-variant-numeric:tabular-nums}.pet-stage-progress,.pet-attribute-progress{width:100%;height:10px;overflow:hidden;border:0;border-radius:999px;background:var(--accent-soft);accent-color:var(--accent)}.pet-stage-progress::-webkit-progress-bar,.pet-attribute-progress::-webkit-progress-bar{border-radius:999px;background:var(--accent-soft)}.pet-stage-progress::-webkit-progress-value,.pet-attribute-progress::-webkit-progress-value{border-radius:999px;background:var(--accent)}.pet-stage-progress::-moz-progress-bar,.pet-attribute-progress::-moz-progress-bar{border-radius:999px;background:var(--accent)}.pet-attributes{display:grid;grid-template-columns:1fr 1fr;gap:.85rem 1rem}.pet-attributes h3{grid-column:1 / -1}.pet-vigor-text,.pet-care-hint{margin:.35rem 0 0}.pet-error{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin:.6rem 0;padding:.65rem .75rem;border-radius:9px;background:#fff0ec;color:#a3341f}.pet-empty{color:var(--muted);text-align:center}.pet-species-group{margin:0;padding:0;border:0}.pet-species-group legend{margin-bottom:.55rem;color:var(--muted)}.pet-species-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem}.pet-species-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:.45rem;padding:.8rem;border:1px solid var(--line);border-radius:14px;background:#fff;cursor:pointer}.pet-species-card:hover,.pet-species-card-selected{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 5px 16px #b3502c1f}.pet-species-card input{position:absolute;top:.65rem;right:.65rem;accent-color:var(--accent)}.pet-adoption-artwork{width:132px;height:132px;margin-inline:auto;display:grid;place-items:center;object-fit:contain;font-size:4.6rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.pet-chat-window{position:fixed;right:4.2rem;bottom:1rem;z-index:40;width:min(360px,calc(100vw - 5.5rem));height:min(560px,calc(100vh - 2rem));display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--paper);box-shadow:0 16px 46px #2b2a263d;animation:floatingPetBubbleIn .18s ease-out both}.pet-chat-header{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.8rem .9rem;border-bottom:1px solid var(--line);background:linear-gradient(145deg,var(--accent-soft),var(--paper))}.pet-chat-header>div:first-child{min-width:0;display:flex;flex-direction:column;gap:.15rem}.pet-chat-header strong{overflow:hidden;font-family:var(--serif);font-size:1.08rem;text-overflow:ellipsis;white-space:nowrap}.pet-chat-header small{color:var(--muted);font-size:.75rem}.pet-chat-header-actions,.pet-chat-compose-actions{display:flex;align-items:center;gap:.45rem}.pet-chat-icon-button{width:34px;height:34px;display:grid;place-items:center;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink);cursor:pointer}.pet-chat-icon-button:hover,.pet-chat-icon-button:focus-visible{border-color:var(--accent)}.pet-chat-messages{flex:1;min-height:0;overflow-y:auto;padding:.9rem;scroll-behavior:smooth}.chat-timeline{display:flex;flex-direction:column;gap:.72rem}.chat-message{width:fit-content;max-width:90%;display:flex;align-items:flex-start;gap:.48rem}.chat-message-user{align-self:flex-end;flex-direction:row-reverse;margin-left:auto}.chat-message-pet{align-self:flex-start;margin-right:auto}.chat-message-content{min-width:0;display:flex;flex-direction:column;gap:.18rem}.chat-message-user .chat-message-content{align-items:flex-end}.chat-bubble{padding:.58rem .72rem;border:1px solid var(--line);border-radius:15px 15px 15px 5px;background:var(--accent-soft);line-height:1.45;overflow-wrap:anywhere;white-space:pre-wrap}.chat-message-user .chat-bubble{border-color:#d9d2c4;border-radius:15px 15px 5px;background:#f0ede6}.chat-message time{color:var(--muted);font-size:.66rem}.chat-pet-avatar{width:38px;height:38px;flex:0 0 38px;display:grid;place-items:center;object-fit:contain;font-size:1.7rem;filter:drop-shadow(0 2px 2px rgb(43 42 38 / 14%))}.chat-pet-avatar-fallback{border:1px solid var(--line);border-radius:50%;background:var(--accent-soft);font-size:1rem}.chat-empty,.chat-loading,.classes-empty{margin:1rem auto;color:var(--muted);line-height:1.55;text-align:center}.chat-typing{min-width:52px;display:flex;align-items:center;justify-content:center;gap:.25rem}.chat-typing>span:not(.sr-only){width:6px;height:6px;border-radius:50%;background:var(--accent);animation:petChatTyping .9s ease-in-out infinite}.chat-typing>span:nth-child(3){animation-delay:.12s}.chat-typing>span:nth-child(4){animation-delay:.24s}.pet-chat-error{margin:0;padding:.55rem .9rem;border-top:1px solid #e7b3a3;background:#fff1ec;color:#8e321c;font-size:.82rem}.pet-chat-composer{padding:.72rem;border-top:1px solid var(--line);background:var(--paper)}.pet-chat-composer textarea{width:100%;min-height:58px;max-height:120px;margin-bottom:.52rem;padding:.58rem .65rem;resize:vertical;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font:inherit;line-height:1.4}.pet-chat-composer textarea[data-listening=true]{border-color:#b52f25;box-shadow:0 0 0 3px #b52f251f}.pet-chat-compose-actions{justify-content:space-between}.pet-chat-voice-actions{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem}.pet-chat-language-actions{display:inline-flex;align-items:center;gap:.2rem}.pet-chat-language-button{min-height:30px;padding:.2rem .38rem;border:1px solid var(--line);border-radius:6px;background:var(--paper);color:var(--muted);font-size:.68rem;cursor:pointer}.pet-chat-language-button[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--ink);font-weight:700}.pet-chat-language-button:disabled{cursor:wait;opacity:.58}.pet-chat-voice-fallback{color:#8e321c;font-size:.75rem;font-weight:700}.pet-chat-record{min-height:36px;padding:.38rem .62rem;border:1px solid var(--line);border-radius:999px;background:var(--paper);color:var(--ink);cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none}.pet-chat-record.recording{border-color:#b52f25;background:#b52f25;color:#fff;box-shadow:0 0 0 4px #b52f2524}.pet-chat-record:disabled,.pet-chat-send:disabled{cursor:wait;opacity:.58}button.primary.pet-chat-send{min-height:36px;padding:.42rem .85rem}.pet-chat-limit{margin:0;padding:1rem;border-top:1px solid var(--line);background:var(--accent-soft);color:var(--muted);text-align:center}.classes-view{max-width:860px;margin-inline:auto}.classes-heading{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.classes-heading h2{margin:.1rem 0 0}.classes-heading>span,.classes-roster-note{padding:.32rem .65rem;border-radius:999px;background:var(--accent-soft);color:var(--muted);font-size:.82rem}.classes-eyebrow{margin:0;color:var(--accent);font-size:.78rem;font-weight:700;letter-spacing:.08em}.classes-inline-form{display:flex;align-items:flex-end;gap:.7rem;margin:0 0 1.1rem}.classes-inline-form label{flex:1;display:flex;flex-direction:column;gap:.35rem}.classes-inline-form label>span{color:var(--muted);font-size:.82rem}.classes-inline-form input{width:100%;min-height:42px;padding:.55rem .7rem;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font:inherit}.classes-inline-form button{min-height:42px;white-space:nowrap}.class-list,.class-member-list{display:grid;gap:.7rem;margin:0;padding:0;list-style:none}.class-list button,.class-member-list button{width:100%;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--ink);font:inherit;text-align:left;cursor:pointer}.class-list button:hover,.class-member-list button:hover{border-color:var(--accent);background:var(--accent-soft)}.class-member-list button>span:first-child{min-width:0;display:flex;flex-direction:column;gap:.18rem}.class-member-list small{overflow:hidden;color:var(--muted);text-overflow:ellipsis;white-space:nowrap}.class-list button>span,.class-member-list button>span:last-child{flex:0 0 auto;color:var(--accent);font-size:.82rem}.classes-back{margin:-.25rem 0 .75rem;padding:0;border:0;background:transparent;color:var(--accent);font:inherit;cursor:pointer}.class-chat-timeline{min-height:220px;padding:1rem;border:1px solid var(--line);border-radius:14px;background:linear-gradient(to left,#0000 97%,#00000008),var(--paper)}@keyframes petChatTyping{0%,60%,to{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.floating-pet{position:fixed;right:1.25rem;bottom:1.1rem;z-index:30;pointer-events:none;transition:transform .45s cubic-bezier(.2,.8,.25,1)}.floating-pet-row{display:flex;align-items:flex-end;gap:.3rem;pointer-events:none}.floating-pet-body{position:relative;width:184px;height:188px;padding:4px;border:0;background:transparent;color:var(--ink);cursor:pointer;pointer-events:auto}.floating-pet-body:focus-visible,.floating-pet-controls button:focus-visible,.floating-pet-paw:focus-visible{outline:3px solid rgb(179 80 44 / 34%);outline-offset:3px}.floating-pet-motion{width:176px;height:176px;display:grid;place-items:center;transform-origin:center bottom}.floating-pet-artwork{width:176px;height:176px;display:grid;place-items:center;object-fit:contain;filter:drop-shadow(0 5px 5px rgb(43 42 38 / 18%));font-size:8.5rem;animation:floatingPetIdle 3.6s ease-in-out infinite}.floating-pet-sleepy .floating-pet-artwork{opacity:.72;animation-name:floatingPetSleep}.floating-pet-sleep-mark{position:absolute;top:-.2rem;right:-.15rem;font-size:1.25rem;animation:floatingPetFade 2.2s ease-in-out infinite}.floating-pet-listen-mark{position:absolute;top:-.2rem;right:-.15rem;font-size:1.25rem}.floating-pet-docked .floating-pet-body,.floating-pet-docked .floating-pet-motion,.floating-pet-docked .floating-pet-artwork{width:128px;height:128px}.floating-pet-docked .floating-pet-artwork{font-size:3.15rem}.floating-pet-listening .floating-pet-motion{animation:floatingPetListening 1.6s ease-in-out infinite}.floating-pet-effect{position:absolute;top:-.65rem;left:50%;font-size:1.45rem;transform:translate(-50%);animation:floatingPetEffect .9s ease-out both}.floating-pet-bubble{position:absolute;right:.15rem;bottom:calc(100% + .55rem);width:max-content;max-width:min(240px,calc(100vw - 2rem));padding:.58rem .78rem;border:1px solid var(--line);border-radius:14px 14px 4px;background:var(--paper);color:var(--ink);box-shadow:0 7px 22px #2b2a262b;font-size:.92rem;font-weight:650;line-height:1.3;text-align:center;pointer-events:none;animation:floatingPetBubbleIn .18s ease-out both}.floating-pet-controls{display:flex;flex-direction:column;gap:.32rem;padding-bottom:.55rem;pointer-events:none}.floating-pet-docked .floating-pet-bubble{right:calc(100% - .4rem);bottom:auto;top:.9rem;border-radius:14px 4px 14px 14px}.floating-pet-controls[hidden]{display:none}.floating-pet-controls button,.floating-pet-paw{display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink);box-shadow:0 3px 10px #2b2a2624;cursor:pointer;pointer-events:auto}.floating-pet-controls button{width:30px;height:30px;padding:0;font-size:.9rem}.floating-pet-controls button:hover,.floating-pet-paw:hover{border-color:var(--accent);background:var(--accent-soft)}.floating-pet-paw{width:46px;height:46px;padding:0;font-size:1.35rem;animation:floatingPetBubbleIn .18s ease-out both}.floating-pet-reaction-listen{--floating-pet-reaction-first: translateY(-10px) scale(1.04);--floating-pet-reaction-second: translateY(-2px) scale(1.01);animation-duration:.52s;animation-timing-function:ease-out}.floating-pet-reaction-vocab{--floating-pet-reaction-first: rotate(-5deg) translateY(-3px);--floating-pet-reaction-second: rotate(4deg);animation-duration:.7s;animation-timing-function:ease-out}.floating-pet-reaction-speak-pass,.floating-pet-reaction-pet{--floating-pet-reaction-first: translateY(-25px) scale(1.1, .95);--floating-pet-reaction-second: translateY(2px) scale(.96, 1.05);animation-duration:.85s;animation-timing-function:cubic-bezier(.2,.8,.25,1)}.floating-pet-reaction-speak-fail{--floating-pet-reaction-first: rotate(-4deg);--floating-pet-reaction-second: rotate(4deg);animation-duration:.65s;animation-timing-function:ease-in-out}.floating-pet-reaction-evolve{--floating-pet-reaction-first: translateY(-32px) rotate(190deg) scale(1.2);--floating-pet-reaction-second: translateY(-8px) rotate(360deg) scale(1.12);animation-duration:1.3s;animation-timing-function:cubic-bezier(.2,.8,.25,1)}.floating-pet-reaction-cycle-0{animation-name:floatingPetReactionA}.floating-pet-reaction-cycle-1{animation-name:floatingPetReactionB}@keyframes floatingPetIdle{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes floatingPetSleep{0%,to{transform:translateY(2px) rotate(-2deg)}50%{transform:translateY(-2px) rotate(1deg)}}@keyframes floatingPetListening{0%,to{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}@keyframes floatingPetFade{0%,to{opacity:.45;transform:translateY(3px)}50%{opacity:1;transform:translateY(-3px)}}@keyframes floatingPetEffect{0%{opacity:0;transform:translate(-50%,8px) scale(.7)}28%{opacity:1;transform:translate(-50%,-3px) scale(1.18)}to{opacity:0;transform:translate(-50%,-24px) scale(.9)}}@keyframes floatingPetBubbleIn{0%{opacity:0;transform:translateY(5px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes floatingPetReactionA{0%,to{transform:translateY(0) scale(1)}35%{transform:var(--floating-pet-reaction-first)}68%{transform:var(--floating-pet-reaction-second)}}@keyframes floatingPetReactionB{0%,to{transform:translateY(0) scale(1)}35%{transform:var(--floating-pet-reaction-first)}68%{transform:var(--floating-pet-reaction-second)}}@keyframes floatingPetReducedFade{0%{opacity:0}to{opacity:1}}@keyframes floatingPetReducedEffect{0%,to{opacity:0}28%{opacity:1}}@media(max-width:680px){.pet-chat-window{top:.65rem;right:3.35rem;bottom:.65rem;left:.65rem;width:auto;height:auto;border-radius:14px}.classes-inline-form{align-items:stretch;flex-direction:column}.classes-heading,.class-list button,.class-member-list button{align-items:flex-start}.pet-overlay{align-items:flex-start;padding:.75rem}.pet-panel,.pet-adoption-modal{max-height:calc(100vh - 1.5rem);padding:1rem}.pet-species-cards,.pet-attributes,.pet-wallet-summary{grid-template-columns:1fr}.pet-attributes h3{grid-column:auto}.pet-adoption-artwork{width:92px;height:92px}.pet-stage-heading,.pet-attribute-heading{align-items:flex-start;flex-direction:column;gap:.2rem}.pet-widget-name{display:none}.floating-pet{right:.65rem;bottom:.65rem}.floating-pet-body{width:136px;height:140px}.floating-pet-motion,.floating-pet-artwork{width:128px;height:128px}.floating-pet-artwork{font-size:3.15rem}.floating-pet-controls{padding-bottom:.25rem}}@media(max-width:640px){.floating-pet-docked .floating-pet-body,.floating-pet-docked .floating-pet-motion,.floating-pet-docked .floating-pet-artwork{width:96px;height:96px}}@media(prefers-reduced-motion:reduce){.pet-chat-window,.chat-typing>span:not(.sr-only){animation:none}.floating-pet-artwork,.floating-pet-sleep-mark,.floating-pet-listening .floating-pet-motion,.floating-pet-motion,.floating-pet-paw{animation:none}.floating-pet-effect{animation:floatingPetReducedEffect .9s ease-out both}.floating-pet-bubble,.floating-pet-paw{animation:floatingPetReducedFade .18s ease-out both}.floating-pet{transition:none}.practice-score-settled{animation:none}}.mylib-view{display:flex;max-width:1100px;flex-direction:column;gap:1.2rem;margin-inline:auto}.mylib-view>.card{width:100%;margin-bottom:0}.mylib-view h2{margin-top:0;font-family:var(--serif)}.mylib-view form{display:grid;gap:.75rem}.mylib-view .terms-text{margin:0;padding:.75rem;border-radius:8px;background:var(--paper);color:var(--muted);line-height:1.6;white-space:pre-wrap}.mylib-view .success{color:#2f7d3a}.mylib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:.9rem;margin-top:1rem}.mylib-book-card,.mylib-shared-card,.mylib-report,.mylib-series{min-width:0;padding:.85rem;border:1px solid var(--line);border-radius:12px;background:#fff}.mylib-book-card,.mylib-shared-card{display:flex;flex-direction:column;gap:.55rem}.mylib-book-card p,.mylib-shared-card p,.mylib-report p{margin:0;color:var(--muted);font-size:.84rem;line-height:1.5}.mylib-book-open{display:flex;min-width:0;flex-direction:column;gap:.55rem;padding:0;border:0;background:transparent;color:var(--ink);font:inherit;text-align:left}.mylib-book-open:not(:disabled){cursor:pointer}.mylib-book-open:disabled{opacity:1}.mylib-book-open img,.mylib-book-open>span[aria-hidden=true]{display:grid;width:100%;aspect-ratio:2 / 3;place-items:center;border-radius:8px;object-fit:cover}.mylib-book-open>span[aria-hidden=true]{background:linear-gradient(145deg,var(--accent-soft),var(--paper));font-size:2.2rem}.mylib-book-open>span:last-child,.mylib-shared-card h3,.mylib-report h3,.mylib-series h3{margin:0;font-family:var(--serif);font-weight:700;line-height:1.35}.mylib-book-card label,.mylib-story-card label,.mylib-shared-card label{display:grid;gap:.3rem;color:var(--muted);font-size:.82rem}.mylib-book-card select,.mylib-story-card select,.mylib-shared-card select,.mylib-shared-card textarea{width:100%;padding:.45rem .55rem;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font:inherit}.mylib-shared-card textarea{min-height:5rem;resize:vertical}.mylib-book-card>button:not(.mylib-book-open),.mylib-shared-card>button,.mylib-shared-card form button,.mylib-report button,.mylib-story-card>button:not(.link){min-height:36px;padding:.45rem .7rem;border:1px solid var(--accent);border-radius:9px;background:var(--accent);color:#fff;font:inherit;cursor:pointer}.mylib-reports,.mylib-story-series{margin-top:1rem;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.mylib-series-cover{width:100%;border:0;padding:0;box-shadow:none}.mylib-series-cover:hover{box-shadow:none;transform:none}.mylib-series-cover img,.mylib-series-cover .history-noimg{transition:transform .15s ease}.mylib-series-cover:hover img,.mylib-series-cover:hover .history-noimg{transform:translateY(-2px)}.mylib-more{margin:1rem 0 0;text-align:center}.mylib-more button{font:inherit;font-size:.9rem;padding:.45rem 1.2rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--accent);cursor:pointer}.mylib-more button:hover{background:var(--accent-soft)}.mylib-story-visibility{font-size:.8rem;color:var(--muted)}.mylib-report .button-row{display:flex;gap:.55rem;margin-top:.7rem}.mylib-story-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.55rem .8rem;padding:.7rem 0;border-top:1px solid var(--line)}.mylib-story-card:first-of-type{margin-top:.65rem}.mylib-story-card .link{min-width:0;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.mylib-story-card>span,.mylib-story-card>label{font-size:.8rem}.mylib-story-card>label{grid-column:1 / -1}.mylib-story-card>button:not(.link){grid-column:2;grid-row:1}@media(max-width:600px){.mylib-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mylib-book-card,.mylib-shared-card{padding:.65rem}}.review-view{display:block;min-width:0;max-width:1080px;margin-inline:auto;--review-zero-bg: #f9e4e0;--review-zero-ink: #9a3a30;--review-partial-bg: #fbeec9;--review-partial-ink: #7a5a10;--review-complete-bg: #dff0e2;--review-complete-ink: #2f6b44;--review-average: #a09786}.review-toolbar,.review-detail,.review-editor,.review-daily-note,.review-detail-columns,.review-sentence,.review-scroll,.review-note-summary,.review-trend,.review-week,.pet-review-notes,.practice-notice,.practice-teacher-note{display:block}.review-heading{margin-bottom:.4rem}.review-heading h2{margin:.1rem 0 0;font-family:var(--serif)}.review-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.8rem 1.2rem;padding:.7rem .9rem;margin:.6rem 0 1.1rem;border:1px solid var(--line);border-radius:12px;background:#fff}.review-date-nav{display:inline-flex;align-items:center;gap:.35rem}.review-date{min-width:10.5rem;text-align:center;font-family:var(--serif);font-size:1.15rem;letter-spacing:.02em}.review-nav,.review-today,.review-play{font:inherit;cursor:pointer;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);line-height:1}.review-nav{width:2.1rem;height:2.1rem;font-size:1.15rem}.review-nav:not(:disabled):hover,.review-today:not(:disabled):hover{border-color:var(--accent);color:var(--accent)}.review-nav:disabled,.review-today:disabled,.review-play:disabled{opacity:.45;cursor:default}.review-today{padding:.45rem .85rem;margin-left:.3rem;font-size:.88rem}.review-target{display:inline-flex;align-items:center;gap:.45rem;color:var(--muted);font-size:.9rem}.review-target input{width:4.2rem;padding:.4rem .55rem;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font:inherit;text-align:center}.review-save-status{color:var(--muted);font-size:.82rem;min-width:2.4em}.review-summary{display:flex;flex-wrap:wrap;gap:.5rem;margin:0 0 .9rem}.review-stat{display:inline-flex;align-items:baseline;gap:.3rem;padding:.3rem .75rem;border-radius:999px;background:var(--accent-soft);color:var(--muted);font-size:.85rem}.review-stat strong{font-size:1.05rem;color:var(--ink)}.review-stat.is-complete{background:var(--review-complete-bg);color:var(--review-complete-ink)}.review-stat.is-complete strong{color:inherit}.review-stat.is-zero{background:var(--review-zero-bg);color:var(--review-zero-ink)}.review-stat.is-zero strong{color:inherit}.review-trend{margin:0 0 1.2rem;padding:.8rem 1rem .4rem;border:1px solid var(--line);border-radius:12px;background:#fff}.review-trend figcaption{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:.2rem;color:var(--muted);font-size:.82rem}.review-legend-item:before{content:"";display:inline-block;width:1.4rem;height:0;margin-right:.4rem;vertical-align:middle;border-top:2px solid var(--review-average)}.review-legend-item.is-student:before{border-top-color:var(--accent);border-top-width:3px}.review-legend-item.is-target:before{border-top-style:dashed;border-top-color:var(--review-complete-ink)}.review-legend-hint{color:var(--muted);font-size:.78rem}.review-trend{position:relative}.review-week-range{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--ink);font-size:.85rem;font-weight:600}.review-trend-arrow{position:absolute;top:50%;width:3rem;height:3rem;transform:translateY(-40%);border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--accent);font:inherit;font-size:2rem;line-height:1;cursor:pointer;box-shadow:0 1px 4px #0000000f;transition:transform .12s,background .12s;z-index:1}.review-trend-arrow.is-prev{left:0}.review-trend-arrow.is-next{right:0}.review-trend-arrow:not(:disabled):hover{background:var(--accent-soft);transform:translateY(-40%) scale(1.08)}.review-trend-arrow:disabled{opacity:.35;cursor:default}.review-trend svg{touch-action:pan-y;-webkit-user-select:none;user-select:none}.review-trend-stage{position:relative;width:min(100%,calc(240px * 640 / 210));margin-inline:auto}.review-trend svg{display:block;width:100%;height:auto;max-height:240px;overflow:visible}.review-trend-grid{stroke:var(--line);stroke-width:1}.review-trend-tick{fill:var(--muted);font-size:11px}.review-trend-day{fill:var(--muted);font-size:11px;cursor:pointer;transition:fill .12s,font-size .12s}.review-trend-col{cursor:pointer}.review-trend-col.is-hover .review-trend-day{fill:var(--ink);font-size:12px}.review-trend-col.is-today .review-trend-day{fill:var(--accent);font-weight:700}.review-trend-target{stroke:var(--review-complete-ink);stroke-width:1.5;stroke-dasharray:6 5;animation:reviewTrendDash 30s linear infinite}.review-trend-cursor{stroke:var(--accent);stroke-width:1;stroke-dasharray:3 3;opacity:.7}.review-trend-area{animation:reviewTrendFade .9s ease-out both;animation-delay:.3s}.review-trend-average{fill:none;stroke:var(--review-average);stroke-width:2;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:reviewTrendDraw .9s ease-out forwards}.review-trend-student{fill:none;stroke:var(--accent);stroke-width:3;stroke-linejoin:round;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;animation:reviewTrendDraw 1s ease-out forwards;animation-delay:.12s}.review-trend-average-dot{fill:#fff;stroke:var(--review-average);stroke-width:2;transform-box:fill-box;transform-origin:center;animation:reviewTrendPop .36s cubic-bezier(.3,1.6,.5,1) both;transition:r .12s}.review-trend-student-dot{fill:var(--accent);stroke:#fff;stroke-width:2;transform-box:fill-box;transform-origin:center;animation:reviewTrendPop .42s cubic-bezier(.3,1.6,.5,1) both;transition:r .12s}.review-trend-tip rect{fill:var(--ink);opacity:.9}.review-trend-tip text{fill:#fff;font-size:11px}.review-trend-tip text.is-student{fill:#ffd9c9;font-weight:700}@keyframes reviewTrendDraw{to{stroke-dashoffset:0}}@keyframes reviewTrendPop{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes reviewTrendFade{0%{opacity:0}to{opacity:1}}@keyframes reviewTrendDash{to{stroke-dashoffset:-220}}@media(prefers-reduced-motion:reduce){.review-trend-average,.review-trend-student,.review-trend-average-dot,.review-trend-student-dot,.review-trend-area,.review-trend-target{animation:none;stroke-dashoffset:0;opacity:1}}.review-scroll{overflow-x:auto;max-width:100%;margin:0 0 1rem;border:1px solid var(--line);border-radius:12px;background:#fff}.review-overview{width:100%;min-width:56rem;border-collapse:collapse}.review-overview th{padding:.65rem .8rem;text-align:left;color:var(--muted);font-size:.78rem;font-weight:700;letter-spacing:.04em;border-bottom:1px solid var(--line);background:#fbf9f4;white-space:nowrap}.review-overview td{padding:.7rem .8rem;vertical-align:middle;border-bottom:1px solid var(--line)}.review-overview tbody tr:last-child td{border-bottom:0}.review-overview tbody tr{cursor:pointer;transition:background .12s}.review-overview tbody tr:hover{background:#fbf6f0}.review-overview tbody tr.is-selected{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}.review-student{padding:.28rem .7rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);font:inherit;font-weight:600;cursor:pointer}.review-student[aria-expanded=true]{border-color:var(--accent);color:var(--accent)}.review-week{display:inline-flex;gap:.3rem}.review-heat-cell{width:2rem;height:2rem;padding:0;border:1px solid transparent;border-radius:7px;font:inherit;font-size:.78rem;font-weight:700;font-variant-numeric:tabular-nums;cursor:pointer;transition:transform .12s}.review-heat-cell:hover{transform:translateY(-1px);border-color:var(--accent)}.review-heat-cell.is-zero{background:#fff;border:1px dashed #d8b2a9;color:#c98d82}.review-heat-cell.is-zero:before{content:"–";font-weight:400}.review-heat-cell.is-partial{background:var(--review-partial-bg);color:var(--review-partial-ink)}.review-heat-cell.is-complete{background:var(--review-complete-bg);color:var(--review-complete-ink)}.review-heat-cell.is-complete:after{content:"✓"}.review-heat-cell.is-complete:not(:empty):after{content:""}.review-heat-cell.is-today{box-shadow:0 0 0 2px var(--accent)}.review-today-cell{display:flex;flex-direction:column;gap:.3rem;min-width:9rem}.review-today-count{font-variant-numeric:tabular-nums;color:var(--muted);font-size:.88rem;white-space:nowrap}.review-today-count strong{font-size:1.1rem;color:var(--ink)}.review-today-count em{margin-left:.4rem;font-style:normal;font-size:.78rem}.review-today-cell.is-zero em{color:var(--review-zero-ink)}.review-today-cell.is-complete em{color:var(--review-complete-ink)}.review-bar{display:block;height:5px;border-radius:999px;background:var(--line);overflow:hidden}.review-bar>span{display:block;height:100%;border-radius:inherit;background:var(--accent)}.review-today-cell.is-complete .review-bar>span{background:var(--review-complete-ink)}.review-num{font-variant-numeric:tabular-nums;white-space:nowrap}.review-chips{display:flex;flex-wrap:wrap;gap:.3rem}.review-chip{display:inline-flex;align-items:baseline;gap:.25rem;padding:.18rem .55rem;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:.85rem;white-space:nowrap}.review-chip.is-phone{font-family:var(--serif);font-size:.95rem;border-color:#e6cdb9;background:#fff8f2;color:var(--accent)}.review-chip small{color:var(--muted);font-size:.72rem}.review-none{color:var(--line)}.review-detail{margin-top:1.4rem;padding-top:1.2rem;border-top:1px solid var(--line)}.review-detail-heading{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.8rem 1.2rem;margin-bottom:1rem}.review-detail-heading h3{margin:.1rem 0 0;font-family:var(--serif);font-size:1.45rem}.review-detail-date{margin-left:.7rem;color:var(--muted);font-family:var(--sans);font-size:.9rem;font-weight:400}.review-playback{display:inline-flex;align-items:center;gap:.5rem}.review-playback .review-nav{width:auto;padding:0 .85rem;font-size:.88rem}.review-play{width:2.6rem;height:2.6rem;background:var(--accent);border-color:var(--accent);color:#fff;font-size:1rem}.review-play.is-playing{background:#fff;color:var(--accent)}.review-play:not(:disabled):hover{filter:brightness(1.06)}.review-counter{color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums}.review-flag{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .7rem;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:.85rem;color:var(--muted);cursor:pointer}.review-flag input{margin:0;accent-color:var(--accent)}.review-flag.is-on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.review-detail-columns{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:1rem;margin:0 0 1rem}.review-attempts{display:flex;flex-direction:column;gap:.55rem;list-style:none;padding:.2rem;margin:0;max-height:40rem;overflow-y:auto}.review-attempt{flex:none;border:1px solid var(--line);border-radius:12px;background:#fff}.review-attempt.is-selected{border-color:var(--accent);box-shadow:0 0 0 3px #b3502c1f}.review-attempt-select{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.7rem .9rem;border:0;background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer}.review-attempt-select:hover{background:#fbf6f0}.review-attempt-meta{display:flex;flex-direction:column;gap:.15rem;min-width:0}.review-attempt-meta time{color:var(--muted);font-size:.78rem;font-variant-numeric:tabular-nums}.review-attempt-story{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.review-attempt-audio{font-size:.75rem;color:var(--muted)}.review-attempt-audio.is-available:before{content:"♪ ";color:var(--accent)}.review-attempt-audio.is-purged,.review-attempt-audio.is-none{color:var(--line)}.review-score{flex:0 0 auto;font-family:var(--serif);font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.review-score small{margin-left:.15rem;font-family:var(--sans);font-size:.72rem;font-weight:400;color:var(--muted)}.review-score.is-pass{color:var(--review-complete-ink)}.review-score.is-low{color:var(--accent)}.review-note-summary{margin:0;padding:0 .9rem .6rem;color:var(--muted);font-size:.82rem;overflow-wrap:anywhere}.review-words-allpass{margin:.2rem 0 .4rem;color:var(--muted);font-size:.85rem}.review-editor{padding:.2rem .9rem .8rem;border-top:1px dashed var(--line)}.review-editor-row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.6rem 0 .5rem}.review-editor select{padding:.3rem .5rem;border:1px solid var(--line);border-radius:8px;background:#fff;font:inherit;font-size:.85rem}.review-editor>input{width:100%;padding:.5rem .7rem;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font:inherit}.review-editor>input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #b3502c1f}.review-sentence{align-self:start;padding:1rem 1.1rem;border:1px solid var(--line);border-radius:12px;background:#fff;overflow-wrap:anywhere}.review-sentence-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.8rem}.review-sentence-text{margin:0 0 .4rem;font-family:var(--serif);font-size:1.35rem;line-height:1.4}.review-play-inline{width:auto;height:auto;flex:0 0 auto;display:inline-flex;align-items:center;gap:.45rem;padding:.5rem .9rem;font-size:.88rem}.review-play-inline:disabled{background:#fff;color:var(--muted);border-color:var(--line)}.review-download{margin-left:.5rem;background:#fff;color:var(--accent);border:1px solid var(--accent);border-radius:999px;text-decoration:none}.review-download:hover{background:var(--accent-soft)}.chapter-latest-row{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.5rem}.chapter-latest-download{display:inline-flex;align-items:center;box-sizing:border-box;min-height:40px;padding:.5rem 1rem;border:1px solid var(--accent);border-radius:10px;color:var(--accent);font:inherit;text-decoration:none}.chapter-latest-download:hover{background:var(--accent-soft)}.review-coach{margin-top:.8rem;padding:.7rem .9rem .3rem;border-radius:10px;background:#fbf9f4}.review-coach-label{margin:0 0 .3rem;color:var(--accent);font-size:.78rem;font-weight:700;letter-spacing:.08em}.review-coach .practice-issues{margin-top:0}.review-coach .practice-advice{margin:.4rem 0 .5rem;padding:.7rem .9rem;border-left:3px solid var(--accent);border-radius:0 8px 8px 0;background:var(--accent-soft)}.review-coach .practice-advice strong{color:var(--accent);margin-right:.2rem}.review-daily-note{padding:.9rem 1rem;border:1px solid var(--line);border-radius:12px;background:#fff}.review-daily-note label{display:flex;flex-direction:column;gap:.3rem}.review-daily-note-title{font-weight:600}.review-daily-note textarea{width:100%;min-height:4.6rem;margin-top:.3rem;padding:.6rem .75rem;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);font:inherit;resize:vertical}.review-daily-note textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #b3502c1f}.review-view .error .secondary{margin-left:.6rem;padding:.3rem .8rem}.classes-heading-actions{display:flex;align-items:center;gap:.6rem}.classes-heading-actions>span{padding:.32rem .65rem;border-radius:999px;background:var(--accent-soft);color:var(--muted);font-size:.82rem}.classes-review-link{display:inline-flex;align-items:center;gap:.3rem;padding:.38rem .85rem;border:1px solid var(--accent);border-radius:999px;color:var(--accent);font-size:.85rem;text-decoration:none;white-space:nowrap}.classes-review-link:hover{background:var(--accent-soft)}.class-list-row{display:flex;align-items:stretch;gap:.6rem}.class-list-row>button{flex:1}.class-list-row .classes-review-link{align-self:center}.practice-notice{font-size:.8rem;color:var(--muted);margin:0 0 .6rem}.practice-teacher-note{padding:.7rem;border-left:3px solid var(--accent);background:var(--accent-soft);overflow-wrap:anywhere}.pet-review-notes{pointer-events:auto;position:absolute;bottom:100%;right:0;width:min(22rem,calc(100vw - 2rem));max-height:60vh;overflow-y:auto;padding:1rem;border:1px solid var(--line);border-radius:1rem;background:var(--paper);color:var(--ink);box-shadow:0 5px 24px #0003;z-index:5}.pet-review-notes h3{margin:0 0 .6rem;font-family:var(--serif);font-size:1.15rem}.pet-review-notes article{display:block;margin:0 0 .6rem;padding:.6rem .8rem;border-radius:10px;background:var(--accent-soft);overflow-wrap:anywhere}.pet-review-notes article strong{display:block;margin-bottom:.2rem;color:var(--accent);font-size:.82rem;font-weight:600}.pet-review-notes article p{margin:.15rem 0;line-height:1.5}.pet-review-notes>button{display:block;margin:.4rem 0 0 auto;padding:.4rem 1.1rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--accent);font:inherit;font-size:.88rem;cursor:pointer}.pet-review-notes>button:hover{background:var(--accent-soft)}button.floating-pet-bubble{cursor:pointer;pointer-events:auto;font:inherit}.review-view [hidden],.pet-review-notes[hidden]{display:none}@media(max-width:760px){.review-detail-columns{grid-template-columns:minmax(0,1fr)}.review-attempts{max-height:none}}.review-view .practice-word-scores .word-score-pass span{color:#2f6b44}.chapter-read-panel{display:block;position:relative;margin:1rem 0;padding:1.25rem 1.4rem;border:1px solid var(--line);border-radius:14px;background:var(--paper);box-shadow:0 1px 4px #0000000a}.chapter-read-panel h3{margin:0 0 .6rem;font-family:var(--serif)}.chapter-read-panel>p{margin:.35rem 0;color:var(--muted)}.chapter-read-panel>p[role=status]{color:var(--ink);font-weight:600}.chapter-read-panel progress{display:block;width:100%;height:6px;margin:.4rem 0 .8rem;accent-color:var(--accent)}.chapter-main{display:block;min-height:48px;margin:.8rem 0 .5rem;padding:.8rem 1.4rem;font-size:1.1rem}.chapter-read-panel .secondary{min-height:40px;padding:.5rem 1rem}.chapter-countdown{display:block;margin:1rem;text-align:center;font-family:var(--serif);font-size:5rem;font-weight:700;color:var(--accent)}.chapter-record-controls{display:block;position:fixed;bottom:max(12px,env(safe-area-inset-bottom));left:50%;transform:translate(-50%);z-index:40;width:min(92vw,560px);padding:.6rem;background:var(--paper);border:1px solid var(--line);border-radius:16px;box-shadow:0 4px 24px #00000024;text-align:center}.chapter-record-controls .chapter-main{width:100%;margin:0 0 .35rem}.viewer:has(.chapter-record-controls){padding-bottom:150px}.chapter-result-head{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1.2rem;margin:.4rem 0 1rem}.chapter-result-stats{display:flex;flex-wrap:wrap;gap:.45rem}.review-stat.is-coin{background:#fff4d6;color:var(--coin);font-weight:700}.chapter-segments{display:flex;flex-direction:column;gap:.5rem;padding:0;margin:.6rem 0;list-style:none}.chapter-row{display:block;border:1px solid var(--line);border-radius:12px;background:#fff}.chapter-row.is-unmatched{border-style:dashed;background:transparent}.chapter-row.is-open,.chapter-row.is-selected{border-color:var(--accent);box-shadow:0 0 0 3px #b3502c1f}.chapter-row-main{display:flex;align-items:center;gap:.5rem;padding-right:.6rem}.chapter-sentence{flex:1;display:flex;align-items:center;gap:.7rem;min-height:48px;padding:.55rem .85rem;border:0;background:transparent;color:var(--ink);font:inherit;text-align:left;line-height:1.5;cursor:pointer}.chapter-sentence:not(:disabled):hover{background:#fbf6f0;border-radius:12px}.chapter-sentence:disabled{color:var(--muted);cursor:default}.chapter-no{flex:0 0 auto;min-width:1.9rem;padding:.1rem .4rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.78rem;font-weight:700;text-align:center;font-variant-numeric:tabular-nums}.chapter-row.is-unmatched .chapter-no{background:#f0ece4;color:var(--muted)}.chapter-text{flex:1;min-width:0;overflow-wrap:anywhere}.chapter-score{flex:0 0 auto;font-family:var(--serif);font-size:1.3rem;font-weight:700;font-variant-numeric:tabular-nums}.chapter-score small{margin-left:.15rem;font-family:var(--sans);font-size:.7rem;font-weight:400;color:var(--muted)}.chapter-score.is-pass{color:var(--review-complete-ink, #2f6b44)}.chapter-score.is-low{color:var(--accent)}.chapter-unmatched{flex:0 0 auto;padding:.15rem .55rem;border:1px dashed #d8b2a9;border-radius:999px;color:#c98d82;font-size:.78rem}.review-play-mini{width:2.1rem;height:2.1rem;font-size:.8rem;flex:0 0 auto}.chapter-sentence-detail{display:block;padding:0 .85rem .8rem;border-top:1px dashed var(--line)}.chapter-sentence-detail>p{margin:.4rem 0;color:var(--muted);font-size:.9rem}.chapter-sentence-detail .review-editor{padding-left:0;padding-right:0;border-top:0}.review-chapters{display:block;margin-top:1.4rem;padding-top:1rem;border-top:1px solid var(--line)}.review-chapters h3{margin:0 0 .6rem;font-family:var(--serif);font-size:1.2rem}.review-chapter-card{display:block;margin:0 0 .6rem;border:1px solid var(--line);border-radius:12px;background:#fff}.review-chapter-card.is-open{border-color:var(--accent);box-shadow:0 0 0 3px #b3502c1f}.review-chapter-head{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.75rem .9rem;border:0;background:transparent;color:var(--ink);font:inherit;text-align:left;cursor:pointer}.review-chapter-head:hover{background:#fbf6f0;border-radius:12px}.review-chapter-summary{font-size:.82rem;color:var(--muted)}.review-chapter-body{display:block;padding:0 .9rem .9rem}.review-chapter-controls{display:flex;align-items:center;gap:.6rem;margin:.2rem 0 .6rem}.chapter-read-panel [hidden],.review-chapters [hidden]{display:none}@media(max-width:600px){.chapter-read-panel{padding:1rem}.chapter-read-panel button,.review-chapters button{min-height:48px}.chapter-read-panel p{line-height:1.7;overflow-wrap:anywhere}}.class-invite-section{min-width:0;margin:0 0 1.35rem;padding:1rem;border:1px solid var(--line);border-radius:14px;background:var(--accent-soft)}.class-invite-form{flex-wrap:wrap}.class-invite-form label{min-width:0;flex-basis:150px}.class-invite-list{display:grid;gap:.7rem;padding:0;list-style:none}.class-invite-card{min-width:0;padding:.7rem;border:1px solid var(--line);border-radius:9px;background:#fff}.class-invite-url{display:block;padding:.5rem .7rem;border-radius:8px;background:var(--accent-soft);color:var(--ink);font-size:.88rem;overflow-wrap:anywhere;-webkit-user-select:text;user-select:text}.class-invite-actions button{font:inherit;font-size:.88rem;padding:.35rem 1rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--accent);cursor:pointer;transition:background .15s ease,color .15s ease}.class-invite-actions button:hover:not(:disabled){background:var(--accent-soft)}.class-invite-actions button:disabled{opacity:.6;cursor:default}.class-invite-actions button.is-confirming{background:var(--accent);border-color:var(--accent);color:#fff}.class-invite-actions [role=status],.class-invite-actions>span{color:var(--muted);font-size:.82rem}.class-invite-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;margin-top:.7rem}.class-invite-meta{color:var(--muted);font-size:.82rem}
