.bana-answer-reaction{position:fixed;z-index:50;right:32px;bottom:28px;width:205px;height:205px;pointer-events:none;animation:banaReactionIn 1.85s cubic-bezier(.16,.84,.3,1) both}.bana-answer-reaction .reaction-glow{position:absolute;inset:15px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.98) 0 14%,rgba(143,235,255,.78) 37%,rgba(71,196,235,0) 73%);animation:banaGlow 1.35s ease-out both}.bana-answer-reaction.wrong .reaction-glow{background:radial-gradient(circle,rgba(255,255,255,.95) 0 16%,rgba(255,192,136,.52) 39%,rgba(255,178,125,0) 74%)}.bana-answer-reaction img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 14px 13px rgba(77,48,18,.24));animation:banaJump .72s cubic-bezier(.2,.85,.35,1.25) both}.reaction-spark{position:absolute;z-index:2;font-size:25px;animation:sparkFly 1.25s ease-out both}.reaction-spark.one{top:15px;left:8px}.reaction-spark.two{top:3px;right:20px;animation-delay:.08s}.reaction-spark.three{top:61px;right:-2px;animation-delay:.15s}.wrong .reaction-spark{font-size:22px}@keyframes banaReactionIn{0%{opacity:0;transform:translateY(38px) scale(.62)}14%{opacity:1;transform:translateY(0) scale(1)}76%{opacity:1;transform:translateY(-2px) scale(1)}100%{opacity:0;transform:translateY(-28px) scale(.9)}}@keyframes banaJump{0%{transform:translateY(25px) scale(.68) rotate(-6deg)}50%{transform:translateY(-20px) scale(1.05) rotate(3deg)}100%{transform:translateY(0) scale(1) rotate(0)}}@keyframes banaGlow{0%{opacity:0;transform:scale(.35)}42%{opacity:1;transform:scale(1.1)}100%{opacity:.15;transform:scale(1.42)}}@keyframes sparkFly{0%{opacity:0;transform:translateY(16px) scale(.4) rotate(0)}35%{opacity:1}100%{opacity:0;transform:translate(var(--fly-x,8px),-45px) scale(1.1) rotate(28deg)}}.reaction-spark.two{--fly-x:20px}.reaction-spark.three{--fly-x:15px}@media(max-width:700px){.bana-answer-reaction{right:12px;bottom:18px;width:160px;height:160px}.reaction-spark{font-size:20px}}
/* Student review book: a small quest rather than a plain answer list. */
.review-hub{max-width:920px;margin:35px auto;padding:30px}.review-hub>.back{display:inline-flex;margin-bottom:20px}.review-hero{position:relative;display:grid;grid-template-columns:1.25fr .75fr;min-height:280px;overflow:hidden;border:1px solid #ead8ae;border-radius:22px;background:linear-gradient(115deg,#fff3c9 0%,#fff9e8 59%,#ffe28b 100%)}.review-copy{position:relative;z-index:2;padding:37px 40px}.review-copy h1{font:700 48px Fraunces,"Noto Sans SC",serif;letter-spacing:-.04em;margin:11px 0}.review-copy p{max-width:465px;margin:0;color:#795b3f;line-height:1.8}.review-reward{display:inline-flex;align-items:center;gap:10px;margin-top:19px;padding:8px 13px;border:1px solid #e4bc54;border-radius:12px;background:rgba(255,253,231,.84);color:#754622}.review-coin{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:radial-gradient(circle at 34% 28%,#fff8bf 0 10%,#ffd65a 11% 53%,#edae22 54% 100%);border:2px solid #b87813;color:#754622;font:800 17px Fraunces,serif}.review-reward b,.review-reward small{display:block}.review-reward small{margin-top:1px;color:#947047;font-size:11px}.review-start{display:block;margin-top:21px;box-shadow:0 9px 18px rgba(102,61,19,.18)}.review-start span{display:inline-grid;place-items:center;min-width:22px;height:22px;margin:0 3px;border-radius:50%;background:#fff0bd;color:#754622;font-size:12px}.review-art{position:relative;display:grid;place-items:center;overflow:hidden}.review-art img{position:relative;z-index:2;width:min(80%,210px);filter:drop-shadow(0 18px 13px rgba(95,60,17,.2));animation:reviewFloat 3.2s ease-in-out infinite}.review-glow{position:absolute;width:230px;height:230px;border-radius:50%;background:radial-gradient(circle,#fffef0 0 19%,rgba(255,222,111,.74) 39%,rgba(255,207,62,0) 70%)}@keyframes reviewFloat{50%{transform:translateY(-11px) rotate(-2deg)}}.review-mission-head{display:flex;align-items:end;justify-content:space-between;margin:31px 2px 14px}.review-mission-head h2{margin:5px 0 0;font:700 29px Fraunces,"Noto Sans SC",serif}.mission-count{border-radius:999px;background:#fff0bd;color:#8a5b1f;padding:7px 11px;font:700 12px "DM Mono",monospace}.review-mission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.review-mission{display:grid;grid-template-columns:38px 1fr auto;gap:12px;align-items:center;padding:16px;border:1px solid #ead8ae;border-radius:16px;background:#fffdf7;box-shadow:0 7px 16px rgba(104,68,22,.05)}.mission-number{font:700 12px "DM Mono",monospace;color:#a77920}.review-mission h3{margin:0;font:700 23px Fraunces,"Noto Sans SC",serif}.review-mission p{margin:3px 0 0;color:#8a6c50;font-size:12px}.mission-reward{border-radius:999px;background:#fff3c1;color:#8a5b1f;padding:6px 8px;font:800 11px "DM Mono",monospace}.review-complete{display:inline-block;margin-top:22px;padding:12px 14px;border-radius:12px;background:#e7f2eb;color:#39714b;font-weight:700}@media(max-width:700px){.review-hub{padding:20px;margin:20px auto}.review-hero{grid-template-columns:1fr}.review-copy{padding:31px 26px}.review-copy h1{font-size:42px}.review-art{min-height:180px}.review-art img{width:150px}.review-mission-grid{grid-template-columns:1fr}.review-mission h3{font-size:20px}}
.review-mission .primary-small{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:10px 17px;border:1px solid #7b4824;border-radius:13px;background:linear-gradient(135deg,#8b5129,#6f3d1e);color:#fff9e9;box-shadow:0 7px 14px rgba(102,61,19,.18),inset 0 1px rgba(255,255,255,.16);font:700 14px "Noto Sans SC",sans-serif;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,filter .18s ease}
.review-mission .primary-small:hover{transform:translateY(-2px);filter:brightness(1.06);box-shadow:0 10px 19px rgba(102,61,19,.24),inset 0 1px rgba(255,255,255,.2)}
.review-mission .primary-small:active{transform:translateY(1px);box-shadow:0 4px 8px rgba(102,61,19,.18)}
@media(max-width:700px){.review-mission .primary-small{width:100%;margin-top:10px}.review-mission{grid-template-columns:32px 1fr}.review-mission .primary-small{grid-column:1/-1}}
