@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800&display=swap');
:root{color-scheme:dark;--ink:#eff3ff;--muted:#b9c2de;--panel:#202747;--line:#424969;--mint:#a0ead2;--gold:#ffdc92;--night:#11172f;font-family:'DM Sans',system-ui,sans-serif;background:var(--night);color:var(--ink)}
*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(ellipse at 75% 5%,#35385f55,transparent 65%)}button,input,textarea,select{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button,.button{border:1px solid var(--line);background:#303857;color:var(--ink);border-radius:12px;padding:12px 18px;cursor:pointer;text-decoration:none;display:inline-flex;justify-content:center;align-items:center;gap:8px;font-weight:600;min-height:44px}button:hover,.button:hover{border-color:var(--mint);background:#3c4764}button:disabled{opacity:.45;cursor:default}button.primary,.button.primary{background:var(--mint);color:#112e2e;border-color:var(--mint)}button.gold{background:var(--gold);color:#34251a;border-color:var(--gold)}button.danger{color:#ffc4ba}input,textarea,select{color:var(--ink);background:#121a31;border:1px solid var(--line);border-radius:10px;padding:12px;width:100%;min-width:0}textarea{min-height:86px;resize:vertical}input[type=checkbox]{width:20px;height:20px;vertical-align:middle}label{display:block;color:var(--muted);font-size:14px;line-height:1.5}label input,label select,label textarea{margin-top:6px}h1,h2,h3{font-family:Outfit,system-ui,sans-serif;line-height:1.1;margin:0 0 14px}h1{font-size:clamp(32px,5vw,60px);letter-spacing:-1.5px}h2{font-size:27px}h3{font-size:20px}p{line-height:1.6}header{padding:18px 4%;display:flex;gap:20px;align-items:center;border-bottom:1px solid #ffffff15;position:relative;z-index:2}.brand{text-decoration:none;color:white;font-weight:800}.brand span{color:var(--mint)}.wordmark{font-size:12px;letter-spacing:3px;color:var(--gold)}.tools{margin-left:auto;display:flex;gap:8px}.tools button{font-size:12px;padding:8px 12px}main{max-width:1240px;margin:0 auto;padding:38px 24px 90px;position:relative;z-index:1}.sky{position:fixed;inset:0;pointer-events:none;overflow:hidden}.moon{position:absolute;width:330px;height:330px;border-radius:50%;right:-60px;top:65px;background:radial-gradient(circle at 40% 30%,#ffe7ac,#c6b67d);opacity:.15;box-shadow:0 0 100px #ffe7ac33}.lantern{position:absolute;width:32px;height:42px;background:#ffc77a;border-radius:45%;box-shadow:0 0 32px #ffdc9244;opacity:.25;animation:float 8s ease-in-out infinite}.lantern:after{content:'';position:absolute;bottom:-14px;left:15px;height:14px;width:2px;background:#eabd77}.l1{left:7%;top:21%}.l2{left:78%;top:58%;animation-delay:-3s}.l3{left:91%;top:84%;animation-delay:-5s}@keyframes float{50%{transform:translateY(-20px) rotate(6deg)}}.hero{display:grid;grid-template-columns:1fr 180px;align-items:center;gap:24px;margin:20px 0 35px}.eyebrow{text-transform:uppercase;letter-spacing:2px;font-size:12px;color:var(--gold);font-weight:700}.hero p{max-width:680px;color:var(--muted);font-size:17px}.mascot{width:150px;animation:float 6s ease-in-out infinite}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:18px}.card,.panel{border:1px solid var(--line);background:#202747eb;padding:24px;border-radius:20px;margin-bottom:18px}.card p,.muted,small{color:var(--muted)}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.row.spread{justify-content:space-between}.grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.stack{display:grid;gap:16px}.pill{display:inline-block;background:#ffffff12;border:1px solid #ffffff18;color:var(--gold);border-radius:100px;padding:6px 12px;font-size:12px}.editor{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(260px,1fr);gap:20px}.diagram{position:relative;background:#fff;border-radius:16px;overflow:hidden;line-height:0}.diagram img{width:100%;display:block;height:auto}.diagram svg{position:absolute;inset:0;width:100%;height:100%;touch-action:none}.diagram polygon{fill:#538a9b18;stroke:#277d8d;stroke-width:.003;cursor:pointer;vector-effect:non-scaling-stroke;stroke-width:2px}.diagram polygon:hover{fill:#51cbaf66}.diagram polygon.selected{fill:#34b89966;stroke:#006f59;stroke-width:5px}.diagram polygon.correct{fill:#53d19788;stroke:#00683d;stroke-width:5px}.diagram polygon.wrong{fill:#ff957477;stroke:#a83213;stroke-width:5px}.diagram polygon.draft{fill:#ffc76655;stroke:#b77b00;stroke-dasharray:6 4}.region-list{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.region-list button{font-size:14px}.region-list button.selected{border:3px solid var(--mint)}.region-list button.correct{border:3px solid #70e998}.question-card{border-top:1px solid var(--line);padding:20px 0}.stage{text-align:center;max-width:900px;margin:0 auto 25px}.stage h1{font-size:clamp(28px,4vw,46px);letter-spacing:-.5px}.timer{font:700 40px Outfit,system-ui;color:var(--gold);min-height:50px}.live-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px}.live-layout.solo{grid-template-columns:1fr;max-width:900px;margin:auto}.stat{font-size:30px;font-weight:700;color:var(--mint)}.control{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.control button{flex:1;font-size:14px}.learners{max-height:320px;overflow:auto}.learner{padding:10px 0;border-bottom:1px solid #ffffff16;font-size:13px;display:flex;justify-content:space-between;gap:8px}.learner button{font-size:11px;padding:5px;min-height:30px}.qr{background:white;border-radius:12px;width:140px;padding:8px}.code{font-size:clamp(24px,5vw,46px);letter-spacing:4px;color:var(--gold);font-weight:800;overflow-wrap:anywhere}.answers{margin-top:15px}.answer-status{padding:12px;color:var(--mint);text-align:center;line-height:1.5}.queue{border:1px solid #edc77b66;background:#302d43;padding:15px;border-radius:14px;margin-top:15px}.queue textarea{margin:8px 0}.report-wrap{overflow:auto}table{width:100%;border-collapse:collapse;min-width:650px;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--line);padding:12px;vertical-align:top}#notice{position:fixed;bottom:15px;left:50%;transform:translateX(-50%);z-index:10;margin:0;background:#fff1d8;color:#3b2917;border-radius:12px;max-width:90vw;width:max-content;padding:12px 20px;box-shadow:0 10px 35px #0004}#notice:empty{display:none}.intro{max-width:760px;margin:30px auto;text-align:center}.intro .mascot{margin:auto}.celebrate .lantern{opacity:.8;animation:float 3s ease-in-out infinite}.error{color:#ffc1ac}.connection{font-size:12px;color:var(--muted)}:focus-visible{outline:3px solid var(--gold);outline-offset:3px}details{margin-bottom:16px}summary{cursor:pointer;padding:10px 0}button.small{padding:8px 12px;min-height:36px}.diagram-wrap{max-width:850px;margin:auto}.preview-note{padding:12px;background:#755e1c;color:white;text-align:center;font-weight:700;border-radius:10px;margin-bottom:15px}
@media(max-width:780px){header{gap:10px;padding:14px}.wordmark{display:none}main{padding:22px 14px 90px}.editor,.live-layout,.grid{grid-template-columns:1fr}.hero{grid-template-columns:1fr 80px}.mascot{width:85px}.card,.panel{padding:18px}.live-layout>aside{order:-1}.teacher-private{max-height:none}.hero p{font-size:15px}.tools button{padding:8px}.diagram img{max-height:none}}
body[data-view=live] main{padding-top:18px}body[data-view=live] .stage{margin-top:14px!important;margin-bottom:16px}body[data-view=live] .stage h1{font-size:clamp(24px,3vw,36px);margin-bottom:4px}body[data-view=live] .stage h2{font-size:clamp(20px,2vw,28px);margin-bottom:8px}body[data-view=live] .stage .eyebrow{margin:10px 0}body[data-view=live] .timer{font-size:32px;min-height:0}body[data-view=live] .timer:empty{display:none}#version{display:inline-block;font-size:10px;letter-spacing:0;margin-left:12px}.lantern{border-top:3px solid #deb16c;border-bottom:3px solid #deb16c;background:repeating-linear-gradient(90deg,#ffc77a 0 8px,#f1b766 9px 10px)}
.diagram{margin-inline:auto}.region-list{justify-content:center}.region-list button:disabled{opacity:1;background:#262e48;color:var(--muted);cursor:default}.audio-settings{position:relative;z-index:3;text-align:right;margin:0 4%;font-size:12px}.audio-settings[open]{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px;max-width:330px;margin-left:auto}.audio-settings label{text-align:left}.audio-settings summary{padding:6px}.audio-settings input{padding:0}
@media(max-width:480px){.brand{font-size:13px}.tools{gap:4px}.tools button{font-size:11px;padding:6px}.audio-settings{margin-right:14px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
/* Classroom focus: questions lead, diagrams remain stationary. */
body[data-view=live] .question-focus{background:#fff8e8;color:#172238;border:3px solid #ffdb8b;border-radius:22px;padding:22px 28px;box-shadow:0 8px 30px #0002;margin-bottom:16px;text-align:left}
.question-label{display:block;color:#77571f;font-size:13px;font-weight:800;letter-spacing:2px;margin-bottom:9px}
body[data-view=live] .question-focus h1{font-size:clamp(28px,3.6vw,48px);line-height:1.2;letter-spacing:-.4px;margin:0}
body[data-view=live] .stage .stage-instruction{font-size:clamp(18px,2vw,24px);color:var(--mint)}
body[data-view=live] .timer{display:inline-block;font-size:36px;font-variant-numeric:tabular-nums;padding:6px 18px;border-radius:14px;background:#ffffff0c}.timer.urgent{color:#ffce99;border:2px solid #ffce99}
.live-dashboard{display:flex;align-items:center;gap:24px;border:1px solid var(--line);background:linear-gradient(120deg,#263a48,#252b4c);padding:20px 24px;border-radius:20px;margin:0 0 24px;flex-wrap:wrap}
.response-ring{width:106px;height:106px;flex-shrink:0;border-radius:50%;background:radial-gradient(circle,#202b43 61%,transparent 63%),conic-gradient(var(--mint) var(--progress),#46516a 0);display:flex;flex-direction:column;align-items:center;justify-content:center}.response-ring strong{font-size:25px}.response-ring span{font-size:12px;color:var(--muted)}
.dashboard-detail{flex:1;min-width:170px}.dashboard-detail p{margin:5px 0}.dashboard-detail h2{font-size:23px}.lantern-trail{display:flex;gap:7px;color:#657086}.lantern-trail i{font-style:normal;font-size:23px;transition:color .25s}.lantern-trail .lit{color:var(--gold);text-shadow:0 0 10px #ffd58088}
.evidence{flex:1;min-width:240px}.evidence p{font-size:13px;margin:6px 0}.distribution{display:grid;grid-template-columns:minmax(90px,1fr) 1fr 24px;align-items:center;gap:8px;font-size:12px;margin-top:6px}.distribution meter{width:100%;height:12px;accent-color:var(--mint)}
.discussion-cue{background:#2c3e4c;border:2px solid var(--mint);border-radius:16px;padding:16px;text-align:center;margin:12px 0}.discussion-cue strong{font-size:23px}.discussion-cue p{margin:6px 0}.teaching-alert{border-left:4px solid var(--gold);padding:12px;background:#ffd88812}.learner.has-answered{background:#92e0c210;padding-inline:8px}.learner-choice{display:block;margin-top:4px;color:var(--mint)}.reveal-explanation{font-size:22px;line-height:1.5}
body[data-audience=student][data-view=live] header,body[data-audience=student][data-view=live] .audio-settings,body[data-audience=student][data-view=live] .sky,body[data-audience=student][data-view=live] .mission-meta .pill{display:none}
body[data-audience=student][data-view=live] .connection:not(.interrupted){display:none}body[data-audience=student][data-view=live] .mission-meta{justify-content:center}.connection.interrupted{background:#774022;color:white;padding:8px 12px;border-radius:10px}
body[data-audience=student][data-view=live] main{padding-top:10px;padding-bottom:18px}body[data-audience=student][data-view=live] .preview-note{font-size:11px;padding:4px;margin-bottom:5px}body[data-audience=student][data-view=live] .stage>.eyebrow{display:none}
body[data-audience=student][data-phase=discuss] .diagram{opacity:.72}body[data-audience=student] .diagram polygon[aria-disabled=true]{cursor:default}.learner-result{font-size:24px;color:var(--mint)}
@media(max-width:600px){body[data-view=live] .question-focus{padding:16px}body[data-view=live] .question-focus h1{font-size:27px}.live-dashboard{padding:16px;gap:14px}.evidence{min-width:0;width:100%;flex-basis:100%}.response-ring{width:84px;height:84px}.discussion-cue strong{font-size:20px}}
.teacher-transport{position:sticky;top:8px;z-index:5;background:#202747f5;box-shadow:0 6px 20px #0004;border:1px solid var(--line);border-radius:14px;padding:10px;max-width:600px;margin:0 auto 15px!important}.teacher-transport button{min-height:44px}.teacher-transport button[data-action=pause]{background:var(--gold);color:#332713}
body[data-audience=student] .discussion-cue{margin-top:0;margin-bottom:14px}body[data-audience=student] .discussion-cue p{font-size:15px}
body[data-audience=board][data-phase=choose] .diagram,body[data-audience=board][data-phase=discuss] .diagram,body[data-audience=board][data-phase=reconsider] .diagram,body[data-audience=board][data-phase=read] .diagram,body[data-audience=board] .region-list,body[data-audience=board] .answer-status{display:none}
body[data-audience=board] .stage>.eyebrow{display:none}body[data-audience=board] .live-dashboard{max-width:1000px;margin-inline:auto}body[data-audience=board] .question-focus{text-align:center}
body[data-audience=student][data-phase=reveal] .region-list{display:none}
/* Festival orbit: code-native scenery, independent of the teacher's diagram. */
.sky{background:radial-gradient(ellipse at 15% 20%,#49327070,transparent 40%),radial-gradient(ellipse at 86% 50%,#12666b55,transparent 45%),linear-gradient(165deg,#080d20,#172847 65%,#0c1630)}
.sky:before{content:'';position:absolute;inset:0;background-image:radial-gradient(1.5px 1.5px at 12% 20%,#fff,transparent),radial-gradient(2px 2px at 72% 36%,#ffe9bd,transparent),radial-gradient(1px 1px at 42% 77%,#b9deff,transparent),radial-gradient(1.5px 1.5px at 85% 87%,#fff,transparent);background-size:153px 197px,277px 239px,181px 293px,337px 311px;opacity:.75}
.sky:after{content:'';position:absolute;bottom:-110px;left:-10%;width:120%;height:220px;border-radius:50% 50% 0 0;background:linear-gradient(#223e65,#0a1327);border-top:2px solid #64cbc055;box-shadow:0 -15px 80px #69c6d333}
.moon{width:360px;height:360px;right:-115px;top:100px;opacity:.65;background:radial-gradient(circle at 30% 30%,#e4f1dd 0, #8baac0 35%,#3c5b80 65%,#142647 85%);box-shadow:inset -50px -20px 60px #071020aa,0 0 90px #9fcbe744;border:1px solid #b7e0ef66}
.moon:before{content:'';position:absolute;inset:14%;border-radius:50%;background:radial-gradient(ellipse at 28% 40%,#47668166 0 12%,transparent 13%),radial-gradient(circle at 65% 30%,#486a8566 0 8%,transparent 9%),radial-gradient(circle at 57% 76%,#50678477 0 17%,transparent 18%);transform:rotate(-22deg)}
.moon:after{content:'';position:absolute;inset:37% -40%;border:10px solid #8fc8d329;border-top:2px solid #c9efff66;border-bottom:12px solid #6892b344;border-radius:50%;transform:rotate(-26deg);box-shadow:0 0 18px #7ad0d433}
.lantern{opacity:.65;width:27px;height:38px;background:repeating-linear-gradient(90deg,#eeb85c 0 6px,#f8dba0 7px 9px);box-shadow:0 0 22px #ffc15b77,0 0 70px #ffb95533}.l1{left:3%;top:42%}.l2{left:94%;top:68%}.l3{left:82%;top:12%}
body[data-view=live] .live-dashboard{background:linear-gradient(130deg,#173d48ee,#21244bed);border:1px solid #7ce7d266;box-shadow:0 10px 50px #0003,inset 0 1px #b3fff426;position:relative}
.live-dashboard:before{content:'';position:absolute;top:-1px;left:8%;right:8%;height:2px;background:linear-gradient(90deg,transparent,#abf5da,transparent)}
.response-ring{box-shadow:0 0 22px #8af5cc22}.lantern-trail{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:3px;max-width:280px}.lantern-trail i{font-size:clamp(13px,2vw,23px);text-align:center}
.crew-status{flex-basis:100%;display:flex;flex-wrap:wrap;gap:8px;padding-top:14px;border-top:1px solid #ffffff20}.crew-chip{display:flex;align-items:center;gap:7px;border:1px solid #8fadd344;border-radius:10px;padding:9px 12px;font-size:14px;background:#0c193077}.crew-chip small{font-size:11px}.crew-chip.answered{border-color:#83ddbf99;background:#1c584f66}.crew-chip.answered b{color:#b0ffdd}.crew-chip.waiting b{color:#c4d1e5}.crew-chip small{margin-left:6px}.board-signin{text-align:center}
.opening-scene{height:min(760px,calc(100svh - 150px));min-height:470px;position:relative;overflow:hidden;text-align:center;isolation:isolate;border-radius:28px;background:radial-gradient(ellipse at center,#10203766,#060d20cc);border:1px solid #e2c17633;box-shadow:0 0 100px #3a53a322}
.opening-brand{position:absolute;z-index:2;top:18px;left:0;right:0;font:800 clamp(34px,6vw,72px) Outfit,system-ui;letter-spacing:.1em;color:var(--gold);text-shadow:0 0 35px #ffd07b44}.opening-brand span{display:block;font:600 12px 'DM Sans',sans-serif;letter-spacing:.45em;color:#d3e3fc;margin-top:5px}
.crawl-window{position:absolute;inset:120px 0 65px;perspective:420px;overflow:hidden;mask-image:linear-gradient(transparent,black 15%,black 93%,transparent)}
.story-crawl{position:absolute;top:100%;width:82%;left:9%;font:600 clamp(22px,3.2vw,38px)/1.6 Outfit,system-ui;color:#ffdc92;transform-origin:50% 100%;animation:moon-crawl 24s linear both;animation-delay:var(--elapsed,0s);will-change:transform}.story-crawl p{line-height:1.55;margin:0 0 1em}.story-crawl h1{font-size:1.25em;letter-spacing:.08em;margin-bottom:1em}.story-crawl .episode{font-size:.6em;letter-spacing:.22em}
@keyframes moon-crawl{from{transform:rotateX(18deg) translateY(0)}to{transform:rotateX(18deg) translateY(-140%)}}
.launch-status{position:absolute;bottom:12px;left:0;right:0;z-index:2;color:#c4d7f2;font-size:13px;background:linear-gradient(transparent,#080f23);padding:12px}.launch-status .timer{display:block!important;font-size:22px!important;background:transparent!important;padding:0!important}
body[data-phase=intro] .sky{display:block!important}body[data-phase=intro] .moon{opacity:.8;right:-50px}body[data-phase=intro] main{max-width:1200px;padding-top:10px}body[data-phase=intro][data-audience=student] .opening-scene{height:96svh;min-height:440px}.presenter-controls{max-width:550px}
@media(max-width:600px){.opening-scene{border-radius:18px}.story-crawl{width:90%;left:5%;font-size:23px}.opening-brand{font-size:38px}.crew-chip{font-size:12px;padding:8px}.crew-chip small{font-size:10px}}
@media(prefers-reduced-motion:reduce){.crawl-window{perspective:none;overflow:auto;mask-image:none;inset:100px 16px 80px}.story-crawl{position:static;width:100%;font-size:20px;transform:none!important;animation:none!important}.story-crawl p{margin-bottom:.6em}.story-crawl h1{font-size:22px}.opening-scene{min-height:530px}}
@media(min-width:900px){body[data-audience=board] main{padding-bottom:24px}body[data-audience=board]:not([data-phase=intro]) .presenter-controls{position:sticky;top:8px;left:auto;transform:none;width:340px;padding:6px}body[data-audience=board]:not([data-phase=intro]) .preview-note{padding:6px;font-size:12px}body[data-audience=board] .question-focus{padding:16px 24px}body[data-audience=board] .question-focus h1{font-size:clamp(28px,3vw,40px)}body[data-audience=board] .live-dashboard{padding:16px 20px;gap:16px}body[data-audience=board] .crew-chip{padding:7px 10px}}
/* The classroom is the crew: names drift above a shared, illuminated school. */
.school-mission{position:relative;isolation:isolate;overflow:hidden;margin:20px auto 26px;max-width:1080px;padding:22px 26px 0;border:1px solid #87d9ff50;border-radius:28px;background:radial-gradient(ellipse at 50% 110%,#43ddc64d,transparent 65%),linear-gradient(140deg,#111937ee,#1b2857e6);box-shadow:0 20px 60px #03091b55}
.mission-caption{display:flex;align-items:center;gap:15px;flex-wrap:wrap;position:relative;z-index:2}.mission-caption .eyebrow{margin:0}.mission-caption strong{color:#fff2c4;font-size:20px}.mission-caption>span:last-child{margin-left:auto;color:#a3ebd7;font-size:14px}
.hero-sky{position:relative;z-index:2;display:flex;justify-content:center;flex-wrap:wrap;gap:12px;padding:25px 0 21px;min-height:92px}.hero-badge{display:inline-flex;align-items:center;gap:8px;padding:8px 13px;border-radius:30px;background:#162342e6;border:1px solid #839fcd88;color:#e7edff;font-size:13px;max-width:100%;overflow-wrap:anywhere;animation:hero-hover 5s ease-in-out infinite;animation-delay:var(--hero-delay)}.hero-badge>span{color:hsl(var(--hero-hue) 90% 78%);font-size:20px}.hero-badge.powered{background:#20463f;border-color:#91ead4;box-shadow:0 0 19px #8effcb30}.hero-badge.powered>span{color:#ffe093}
.school-building{height:116px;max-width:740px;margin:0 auto;display:flex;justify-content:center;align-items:flex-end;position:relative;z-index:1;filter:drop-shadow(0 0 24px #69c5f622)}.school-wing{height:78px;width:30%;background:linear-gradient(#293854,#182943);border-top:6px solid #669ba9;display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:12px 17px}.school-wing i{background:#ffe7a5;box-shadow:0 0 10px #ffde7770;border-radius:2px}.school-centre{position:relative;align-self:stretch;display:flex;align-items:center;flex-direction:column;width:40%;min-width:155px;padding:13px 8px 0;background:linear-gradient(#415779,#273656);border-top:5px solid #9bc9d9}.school-centre strong{font-size:clamp(18px,2.5vw,28px);letter-spacing:3px;color:#ffe3a0}.school-centre>span{font-size:8px;letter-spacing:2px;color:#d7e3f5}.school-door{width:45px;flex:1;margin-top:10px;background:linear-gradient(90deg,#d2f4f0 48%,#426882 49%,#426882 52%,#d2f4f0 53%);border:4px solid #597693;border-bottom:0;border-radius:18px 18px 0 0}.school-roof{position:absolute;top:-24px;left:-12px;right:-12px;height:22px;background:#77a1b5;clip-path:polygon(50% 0,100% 100%,0 100%)}.shield-arc{position:absolute;z-index:0;bottom:-70%;left:15%;width:70%;height:110%;border:2px solid #a4ffe440;border-radius:50%;box-shadow:inset 0 0 40px #7ffffc10;pointer-events:none}.shield-lit .shield-arc{border-color:#a4ffe4bb;box-shadow:0 0 35px #7ffffc55,inset 0 0 30px #7ffffc22}
.selection-rule{font-weight:800;font-size:clamp(17px,2.5vw,23px);color:#102e38;background:#a4ead9;padding:12px 18px;border-radius:14px;margin:0 auto 16px;text-align:center;max-width:800px}.answer-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin:12px 0 20px}.answer-status{font-weight:750}.hero-welcome{text-align:center;color:#ffe09d;font-size:24px}
body[data-audience=student] .school-mission{display:none}body[data-phase=reveal] .stage-instruction{color:#ffe09d}
@keyframes hero-hover{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-6px) rotate(1deg)}}
@media(min-width:900px){body[data-audience=board] .school-mission{max-width:1000px}.school-mission:has(+.live-dashboard){margin-bottom:15px}}
@media(max-width:600px){.school-mission{padding:18px 14px 0}.mission-caption{gap:5px;flex-direction:column}.mission-caption>span:last-child{margin-left:0}.hero-sky{gap:10px}.hero-badge{font-size:12px;padding:6px 9px}.school-wing{gap:6px;padding:10px 7px}.school-centre>span{letter-spacing:.5px}}
@media(prefers-reduced-motion:reduce){.hero-badge{animation:none}}

body[data-audience=student] .diagram polygon[aria-disabled=true]{pointer-events:none}body[data-audience=student] .region-list button.selected:disabled{opacity:1;background:#255549;color:#e5fff5}
/* During feedback the diagram and explanation take priority over the scenery. */
body[data-phase=reveal] .school-mission{display:none}
@media(min-width:800px){body[data-audience=board][data-phase=reveal] .diagram-wrap{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1fr);gap:22px;align-items:start;max-width:1000px}body[data-audience=board][data-phase=reveal] .diagram{grid-column:1;max-width:100%}body[data-audience=board][data-phase=reveal] .diagram-wrap>.panel{grid-column:2;grid-row:1;margin:0;padding:18px}body[data-audience=board][data-phase=reveal] .live-dashboard{padding:12px 20px;margin-bottom:14px}body[data-audience=board][data-phase=reveal] .dashboard-detail .lantern-trail,body[data-audience=board][data-phase=reveal] .dashboard-detail>.muted{display:none}}
.teacher-transport button[data-action=continue-meeting]{background:var(--gold);color:#332713}
/* Keep the question, timer, response count and whole class in view on a Smartboard. */
@media(min-width:1000px){
 body[data-audience=board][data-phase=choose] header{padding-block:10px}
 body[data-audience=board][data-phase=choose] #app{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:10px 22px;max-width:1500px;padding:10px 24px 24px;align-items:start}
 body[data-audience=board][data-phase=choose] .presenter-controls{grid-column:1/-1;grid-row:1;margin-bottom:0!important}
 body[data-audience=board][data-phase=choose] .preview-note{grid-column:1/-1;grid-row:2;padding:5px;margin:0;font-size:12px}
 body[data-audience=board][data-phase=choose] .mission-meta{grid-column:1/-1;grid-row:3}
 body[data-audience=board][data-phase=choose] .stage{grid-column:1;grid-row:4;margin:0!important;width:100%}
 body[data-audience=board][data-phase=choose] .question-focus{padding:22px;margin-bottom:12px}
 body[data-audience=board][data-phase=choose] .question-focus h1{font-size:clamp(28px,2.6vw,40px)}
 body[data-audience=board][data-phase=choose] [data-action=enable-audio]{grid-column:1;grid-row:5;justify-self:center}
 body[data-audience=board][data-phase=choose] .live-dashboard{grid-column:1;grid-row:6;width:100%;margin:0;padding:16px;gap:16px}
 body[data-audience=board][data-phase=choose] .school-mission{grid-column:2;grid-row:4/7;margin:0;width:100%;padding:16px 16px 0}
 body[data-audience=board][data-phase=choose] .mission-caption{gap:6px;justify-content:center}.mission-caption strong{font-size:18px}
 body[data-audience=board][data-phase=choose] .mission-caption>span:last-child{margin:0}
 body[data-audience=board][data-phase=choose] .hero-sky{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;padding:14px 0 24px}
 body[data-audience=board][data-phase=choose] .hero-badge{font-size:12px;padding:5px 8px;min-width:0;min-height:30px;line-height:1.2;border-radius:12px;gap:4px}
 body[data-audience=board][data-phase=choose] .hero-badge small{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
 body[data-audience=board][data-phase=choose] .school-building{height:94px}.school-mission .school-wing{height:68px}
 body[data-audience=board][data-phase=choose] .live-layout{display:none}
}
@media(min-width:1000px){body[data-audience=board][data-phase=choose] .hero-sky{gap:6px;padding-block:12px 20px}body[data-audience=board][data-phase=choose] .hero-badge{font-size:13px;padding:5px 8px;min-height:28px}body[data-audience=board][data-phase=choose] .hero-badge>span{font-size:16px;line-height:1}}
.learner-invite{margin:18px 0;padding:14px;border:1px solid #91e6d455;border-radius:12px;background:#142939}.learner-invite input{font-size:12px;margin-bottom:10px}.learner-invite button{width:100%}.learner-invite p{font-size:13px;margin-bottom:0}.join-names{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:20px 0}.join-names button{padding:16px 12px;min-height:56px}.join-names button[aria-pressed=true]{background:var(--mint);color:#112e2e;border:2px solid #e2fff4}[hidden]{display:none!important}

/* Teacher editing: answer areas can be dragged; corners resize the selection. */
body[data-view=editor] #diagram svg{touch-action:none;user-select:none}
body[data-view=editor] #diagram polygon[data-region]{cursor:grab}
body[data-view=editor] #diagram polygon[data-region]:active{cursor:grabbing}
body[data-view=editor] #diagram [data-resize]{pointer-events:all}

/* Moon Festival: lacquer red, warm gold and jade against a quiet indigo sky. */
:root{--night:#15152e;--panel:#28233e;--line:#66536b;--gold:#f8d68b;--mint:#b1e7ce;--muted:#d1c7da}
body{background:radial-gradient(ellipse at 90% 10%,#aa5b4638,transparent 45%),radial-gradient(ellipse at 5% 75%,#255e6240,transparent 50%),linear-gradient(160deg,#29213c,#121a30 75%)}
header{background:#201b32db;border-bottom:1px solid #e7bd6c40;backdrop-filter:blur(12px)}
.sky .moon{opacity:.55;width:280px;height:280px;right:-55px;top:100px;background:radial-gradient(circle at 34% 28%,#fff7d7,#e6b566 75%);box-shadow:0 0 0 14px #f4d28a09,0 0 0 35px #f4d28a07,0 0 110px #eab75930}
.sky:after{content:'';position:absolute;inset:auto -10% -110px;height:230px;border-radius:50%;border:1px solid #d6b36b30;background:repeating-radial-gradient(ellipse at 50% 100%,transparent 0 35px,#f0ce8a0b 36px 38px,transparent 39px 65px)}
.sky .lantern{width:44px;height:60px;opacity:.7;background:repeating-linear-gradient(90deg,#a43147 0 9px,#e35c60 10px 12px,#b2384b 13px 17px);border:2px solid #ebc77b;border-radius:40%;box-shadow:inset 0 0 18px #ffcd7444,0 0 32px #d5663533;animation-duration:12s}
.sky .lantern:before{content:'';position:absolute;bottom:100%;left:50%;width:1px;height:90px;background:#d8b77855}.sky .lantern:after{left:20px;width:3px;height:22px;background:#edcb87;box-shadow:-4px 8px #cc6c54,4px 8px #cc6c54}
.sky .l1{left:3%;top:28%}.sky .l2{left:94%;top:62%}.sky .l3{left:6%;top:85%;transform:scale(.7)}
.hero{padding:35px;border:1px solid #ecc77f55;border-radius:28px;background:radial-gradient(ellipse at 100% 20%,#edb76e22,transparent 65%),linear-gradient(120deg,#38243ce8,#202a42e8);box-shadow:0 18px 60px #06081433;grid-template-columns:1fr 240px}
.hero .mascot{width:240px}.mascot{width:180px;filter:drop-shadow(0 12px 24px #0b132650)}
.card,.panel{background:linear-gradient(140deg,#30273fed,#20283eed);border-color:#c29d6850;box-shadow:0 8px 28px #080d201a}
button.primary,.button.primary{background:linear-gradient(135deg,#bcebd1,#91d5bc);box-shadow:0 3px 12px #7de0bb15}button.gold{background:linear-gradient(135deg,#ffe9b0,#eac077)}
.opening-brand{color:#ffe3a0;text-shadow:0 0 30px #f0bd6144}.opening-scene{border:1px solid #e4bb6c50;border-radius:28px;background:radial-gradient(ellipse at 50% 0,#ab4a3c20,transparent 70%),#13182bcf}
.music-caption{font-size:12px;color:var(--gold);margin:4px 0 12px}.school-mission{border-color:#e6bf7250}
body[data-audience=student][data-phase=choose] .sky{opacity:.3}
@media(max-width:650px){.hero{grid-template-columns:1fr;padding:24px}.hero .mascot{width:165px;justify-self:center;grid-row:1}.sky .moon{width:180px;height:180px}.sky .lantern{opacity:.35}header{gap:8px;flex-wrap:wrap}.wordmark{letter-spacing:1px}.tools{gap:4px}}
@media(prefers-reduced-motion:reduce){.sky .lantern,.mascot{animation:none!important}}

/* Illustrated courtyard and story rewards. All decoration stays away from diagrams. */
.festival-school{position:relative;isolation:isolate;border:1px solid #f4d38c70;border-radius:24px;overflow:hidden;margin:20px auto;max-width:1100px;background:#19223a;min-height:260px}
.festival-school>img{display:block;width:100%;max-height:500px;object-fit:cover;filter:brightness(.68) saturate(.8);transition:filter 1s}.festival-school.chapter-1>img{filter:brightness(.82)}.festival-school.chapter-2>img,.festival-school.chapter-3>img{filter:brightness(1)}
.festival-caption{position:absolute;top:0;left:0;right:0;padding:18px 22px;background:linear-gradient(#11152fe8,transparent);display:grid;gap:7px;text-shadow:0 2px 5px #000}.festival-caption strong{font-size:clamp(18px,2vw,28px)}
.festival-rabbit{position:absolute;bottom:8%;left:42%;width:18%;max-width:160px;filter:drop-shadow(0 12px 12px #0007)}.festival-rabbit .mascot{width:100%;animation:rabbit-bob 4s ease-in-out infinite}.restored-lights{position:absolute;right:5%;top:28%;font-size:32px;filter:drop-shadow(0 0 12px #ffcd62)}
.festival-heroes{position:absolute;inset:auto 12px 12px;display:flex;flex-wrap:wrap;gap:5px;justify-content:center;max-height:120px;overflow:auto}.hero-lantern{font-size:12px;padding:5px 9px;border-radius:12px;background:#17233ae8;border:1px solid #f2d29666;color:#fff3d7}.hero-lantern.lit{background:#ffe5a3;color:#223333;box-shadow:0 0 12px #ffc97388}
.rabbit-timer{display:flex;justify-content:center;align-items:center;gap:4px;height:105px;margin:0 auto;position:relative}.rabbit-guide .mascot{width:88px;animation:rabbit-bob 3s ease-in-out infinite}.countdown-lantern{background:linear-gradient(90deg,#962d46,#c95157,#962d46);border:2px solid #f7d895;border-radius:22px;min-width:80px;box-shadow:0 0 22px #f9c96120}.countdown-lantern .timer{background:none!important;color:#fff1c6!important;font-size:30px!important;white-space:nowrap;max-width:100%}.rabbit-urgent .rabbit-guide{animation:rabbit-cheer 1s ease-in-out infinite}.rabbit-urgent .countdown-lantern{box-shadow:0 0 24px #f9c96170}
body[data-phase=reveal] .rabbit-timer{height:65px}body[data-phase=reveal] .rabbit-guide .mascot{width:65px}body[data-phase=reveal] .countdown-lantern:has(.timer:empty){display:none}
.story-chapter{text-align:center;max-width:1100px;margin:auto}.story-chapter h1{font-size:clamp(28px,4vw,46px)}.story-chapter .festival-school{max-width:820px}.story-chapter .festival-school>img{max-height:350px}.story-options{display:grid;grid-template-columns:1fr 1fr;gap:18px;max-width:850px;margin:20px auto}.story-options button{flex-direction:column;padding:20px;background:linear-gradient(130deg,#49314e,#233d48);border:2px solid #e7c589;font-size:22px;opacity:1}.story-options button>span{font-size:48px}.story-options button.chosen{background:#365d4e;box-shadow:0 0 25px #bcebd144}.story-result{position:relative;padding:20px;border:1px solid #e8cc8a;border-radius:20px;background:#25263ee8}.story-object{display:block;font-size:54px;animation:story-delivery 4s ease-in-out both}.coin-flip{color:#ffe1a0;animation:coin-arrival 1s ease-out}.unanswered-private{border:2px solid #e4b880}.unanswered-private li{padding:4px}
.festival-fireworks{position:fixed;inset:0;pointer-events:none;z-index:8;overflow:hidden}.firework{position:absolute}.firework i{position:absolute;width:5px;height:12px;border-radius:100%;background:var(--colour);box-shadow:0 0 8px var(--colour);opacity:0;animation:festival-burst 1.9s var(--delay) ease-out both;transform:rotate(var(--angle))}
@keyframes festival-burst{0%{opacity:0;transform:rotate(var(--angle)) translateY(0)}15%{opacity:1}80%{opacity:.7}100%{opacity:0;transform:rotate(var(--angle)) translateY(-115px)}}
@keyframes rabbit-bob{50%{transform:translateY(-5px) rotate(2deg)}}@keyframes rabbit-cheer{50%{transform:translateY(-7px) rotate(-5deg)}}@keyframes story-delivery{0%{transform:translateX(-110px) scale(.65);opacity:0}20%{opacity:1}70%{transform:translateX(20px) scale(1.1)}100%{transform:translateX(0) scale(1)}}@keyframes coin-arrival{from{transform:rotateY(720deg)}to{transform:rotateY(0)}}
.mission-paused .mascot,.mission-paused .rabbit-guide,.mission-paused .story-object{animation-play-state:paused!important}
body[data-audience=student] .rabbit-timer{height:78px}body[data-audience=student] .rabbit-guide .mascot{width:68px}body[data-audience=student] .festival-fireworks{opacity:.65}
body[data-audience=board][data-phase=choose] .festival-school{margin-block:8px;min-height:200px}body[data-audience=board][data-phase=choose] .festival-school>img{max-height:270px}body[data-audience=board][data-phase=choose] .festival-heroes{max-height:110px}
@media(max-width:650px){.festival-school>img{min-height:280px}.festival-rabbit{bottom:24%;left:40%;width:25%}.story-options{gap:8px}.story-options button{font-size:17px;padding:14px 8px}.festival-heroes{max-height:85px}.countdown-lantern .timer{font-size:23px!important}}
@media(prefers-reduced-motion:reduce){.rabbit-guide,.festival-rabbit .mascot,.rabbit-guide .mascot,.story-object,.coin-flip{animation:none!important}.festival-fireworks{background:radial-gradient(ellipse at 50% 0,#f8d18425,transparent 50%)}.firework{display:none}}
.story-illustration{width:100px;height:100px;display:block;margin:auto;filter:drop-shadow(0 5px 10px #0003)}.story-result .story-illustration{width:76px;height:76px}.story-options button .story-illustration{transition:transform .2s}.story-options button:not(:disabled):hover .story-illustration{transform:translateY(-5px) rotate(4deg)}
.playing-stars .festival-rabbit,.playing-kite .festival-rabbit{animation:rabbit-flight 4s ease-in-out both}.playing-bridge .festival-rabbit,.playing-mooncakes .festival-rabbit,.playing-drums .festival-rabbit{animation:rabbit-journey 4s ease-in-out both}.playing-garden .restored-lights{animation:garden-bloom 4s ease-out both}
@keyframes rabbit-flight{50%{transform:translate(70px,-50px) rotate(8deg)}}@keyframes rabbit-journey{30%{transform:translateX(-85px) rotate(-5deg)}70%{transform:translateX(70px) rotate(5deg)}}@keyframes garden-bloom{from{transform:scale(.3);opacity:.1}to{transform:scale(1.1);opacity:1}}
.mission-paused .festival-rabbit,.mission-paused .restored-lights{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.festival-rabbit,.restored-lights{animation:none!important}.story-illustration{transition:none}}
body[data-audience=teacher]:is([data-phase=choose],[data-phase=reveal],[data-phase=read],[data-phase=discuss],[data-phase=reconsider]) #app>.festival-school{display:none}
body[data-audience=board][data-phase=reveal] .festival-school{min-height:100px;height:100px;margin-block:8px}body[data-audience=board][data-phase=reveal] .festival-school>img{height:100px;object-position:50% 65%}body[data-audience=board][data-phase=reveal] .festival-rabbit{width:65px;bottom:0;left:85%}body[data-audience=board][data-phase=reveal] .festival-heroes{display:none}
body[data-phase=story-action] .rabbit-timer{display:none}
@media(min-width:1000px){body[data-audience=board][data-phase=choose] .festival-school{grid-column:2;grid-row:4/7;margin:0;width:100%;height:440px}body[data-audience=board][data-phase=choose] .festival-school>img{height:440px;max-height:none}body[data-audience=board][data-phase=choose] .festival-heroes{max-height:190px}.story-workspace{display:grid;grid-template-columns:minmax(0,1fr);gap:24px}body[data-audience=teacher] .story-workspace{grid-template-columns:minmax(0,1fr) 330px}.story-workspace .teacher-private{min-width:0}.story-chapter .festival-school>img{max-height:300px}.story-options{margin:10px auto}.story-options button{padding:12px}.story-options .story-illustration{width:70px;height:70px}body[data-phase=story-vote] main,body[data-phase=story-action] main{padding-top:10px}.story-chapter .eyebrow{margin:8px}.story-chapter h1{margin-bottom:12px}}
.story-workspace{align-items:start}.story-chapter{margin:0 auto;min-width:0;width:100%}
body:is([data-phase=story-vote],[data-phase=story-action]) .story-chapter .festival-school{min-height:160px;margin:10px auto}body:is([data-phase=story-vote],[data-phase=story-action]) .story-chapter .festival-school>img{height:clamp(160px,29svh,260px);min-height:0;object-position:50% 65%}body:is([data-phase=story-vote],[data-phase=story-action]) .rabbit-timer{height:75px}.story-chapter>p{margin:8px 0}.story-chapter .festival-caption strong{font-size:18px}
body[data-answer-locked=true][data-phase=choose] .rabbit-guide{animation:rabbit-nod .65s ease-out both}@keyframes rabbit-nod{40%{transform:translateY(5px) rotate(8deg)}100%{transform:none}}
@media(prefers-reduced-motion:reduce){body[data-answer-locked=true] .rabbit-guide{animation:none!important}}
body[data-audience=student][data-view=live] .mission-meta .pill.reward-progress{display:inline-block;font-size:12px;padding:4px 10px;color:#d8b56d}

/* A stable, full-viewport learner workspace. SVG focus uses its stroke rather
   than CSS outlines, which can expand across normalized SVG coordinates. */
.diagram polygon:focus-visible{outline:none;stroke:#ffb900;stroke-width:5px}
.diagram polygon.selected{fill:rgba(255,200,60,.32);stroke:#bf7500;stroke-width:5px}
body.learner-round main{height:100dvh;max-width:1600px;padding:12px!important;display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:8px}
.learner-question{display:grid;grid-template-columns:minmax(0,1fr) 95px;align-items:center;gap:12px}
.learner-question .question-focus{margin:0;padding:14px 20px}.learner-question .question-focus h1{font-size:clamp(25px,3vw,42px)}
.learner-question .rabbit-timer{margin:0;transform:none}.learner-question .rabbit-guide{display:none}
.learner-prompt{text-align:center;font-size:20px;font-weight:750;margin:0;color:#a4ead9;line-height:1.2}
.learner-workspace{min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:14px}
.learner-picture{min-height:0;min-width:0;display:flex;align-items:center;justify-content:center}
.learner-picture .diagram{flex:none;margin:0;opacity:1!important}.learner-picture .diagram img{height:100%;width:100%}
.learner-answer-tools{min-height:0;display:flex;flex-direction:column;justify-content:center;gap:8px;overflow:auto}
.learner-answer-tools .region-list{display:grid;gap:6px;margin:0}.learner-answer-tools .region-list button{font-size:16px;padding:8px;min-height:44px}
.learner-answer-tools .answer-status{padding:4px;font-size:17px}.learner-answer-tools .answer-actions{margin:0;display:grid;gap:6px}
body.learner-round[data-phase=reveal] .region-list{display:none}
@media(max-width:600px){.learner-question{grid-template-columns:minmax(0,1fr) 62px;gap:6px}.learner-question .question-focus{padding:10px}.learner-question .question-focus h1{font-size:23px}.learner-question .rabbit-timer{width:60px}.learner-workspace{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;gap:6px}.learner-answer-tools{overflow:visible}.learner-answer-tools .region-list{display:none}.learner-answer-tools .answer-actions{display:flex;margin:0}.learner-prompt{font-size:17px}}

.learner-question .countdown-lantern{min-width:0;width:100%;padding:10px 2px}.learner-question .timer{font-size:30px;min-height:36px}
/* Moon Festival team duels: expressive SVG rabbits, kept away from answer areas. */
.duel-rabbit{width:76px;height:100px;overflow:visible;flex:none}.rabbit-body{transform-origin:60px 150px;animation:duel-breathe 3s ease-in-out infinite}
@keyframes duel-breathe{50%{transform:translateY(-3px) rotate(2deg)}}
.duel-strip{display:flex;align-items:center;justify-content:center;gap:16px;min-height:0;border:1px solid #e8c78177;border-radius:16px;background:linear-gradient(90deg,#16483d99,#342849aa,#57422599);padding:3px 14px}
.duel-strip .duel-rabbit{width:45px;height:58px}.duel-strip strong{font-size:19px;display:block}.duel-strip small{display:block;font-size:13px;color:#ffe5a8}.duel-strip>div{text-align:center}
body.duel-round main{grid-template-rows:auto auto auto minmax(0,1fr)}
.duel-win .duel-rabbit:first-child .rabbit-body,.duel-draw .rabbit-body{animation:rabbit-duel-win .7s ease-in-out 3}
@keyframes rabbit-duel-win{50%{transform:translateY(-12px) rotate(-7deg)}}
.duel-lobby{text-align:center;max-width:720px;margin:auto}.rabbit-picker{display:flex;justify-content:center;gap:14px}.rabbit-picker button{flex-direction:column;min-width:95px}.rabbit-picker button[aria-pressed=true]{background:#315d55;border:3px solid #f8d17d}
.duel-race{padding:18px;border:1px solid #efca7888;border-radius:22px;margin:8px auto 18px;max-width:1100px;background:linear-gradient(130deg,#153d40ec,#302742ee);box-shadow:0 12px 35px #0003}.duel-race h2{text-align:center;font-size:25px;color:#ffe6a6}.duel-race p{text-align:center;font-size:12px;margin:4px;color:#bddedc}.race-crews{display:grid;grid-template-columns:1fr 1fr;gap:20px}.race-crew>strong{font-size:18px}.race-crew>span{float:right;color:#ffe3a0}.race-track{position:relative;height:86px;margin-top:4px;border-bottom:5px dotted #e5c57788}.race-glow{position:absolute;left:0;bottom:0;height:10px;background:#8de4b8;box-shadow:0 0 18px #a7eccc;transition:width 1.5s ease}.crew-1 .race-glow{background:#ffcb63;box-shadow:0 0 18px #ffcb63}.race-runner{position:absolute;bottom:0;transition:left 1.5s ease}.race-runner .duel-rabbit{width:52px;height:74px}.race-finish{position:absolute;right:0;bottom:2px;font-size:32px}.team-assignments{display:grid;grid-template-columns:1fr 1fr;gap:10px}.crew-story-results{display:grid;grid-template-columns:1fr 1fr;gap:15px}.crew-story{padding:15px;text-align:center;border:1px solid #e3c47466;border-radius:20px}.crew-story .story-illustration{width:80px;height:80px}.crew-story .duel-rabbit{animation:rabbit-duel-win 1s ease-in-out 3}
@media(max-width:600px){.duel-strip{gap:6px;padding:2px 8px}.duel-strip strong{font-size:15px}.duel-strip small{font-size:11px}.duel-strip .duel-rabbit{width:32px;height:45px}.race-crews{grid-template-columns:1fr}.rabbit-picker{gap:6px}.rabbit-picker button{min-width:0;padding:8px}.team-assignments{grid-template-columns:1fr}.crew-story-results{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.rabbit-body,.duel-win .rabbit-body,.duel-draw .rabbit-body,.crew-story .duel-rabbit{animation:none}.race-glow,.race-runner{transition:none}}
body.mission-paused .rabbit-body{animation-play-state:paused}
body.duel-board header,body.duel-board .audio-settings{display:none}
body.duel-board main{height:100dvh;padding:10px 18px!important;max-width:1600px;display:grid!important;grid-template-columns:1fr!important;grid-template-rows:auto auto auto minmax(0,1fr);gap:8px}
.duel-board-toolbar{display:flex;justify-content:space-between;align-items:center}.duel-board-toolbar>span{font-size:13px;color:#ffe3a0}.duel-board-toolbar .teacher-transport{position:static!important;width:auto!important;margin:0!important;padding:3px;box-shadow:none}.duel-board-toolbar .teacher-transport button{padding:5px 15px;min-height:34px}
body.duel-board .question-focus{max-width:none;margin:0;padding:10px 18px!important}body.duel-board .question-focus h1{font-size:clamp(26px,2.8vw,38px)!important}body.duel-board .duel-race{width:100%;max-width:none;padding:10px 18px;margin:0}body.duel-board .duel-race h2{font-size:21px;margin-bottom:5px}body.duel-board .race-track{height:70px}
.duel-board-bottom{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(220px,1fr);gap:18px;min-height:0}.duel-board-bottom .festival-school{display:block!important;grid-area:auto!important;height:100%!important;min-height:0!important;margin:0!important;width:100%;max-width:none!important}.duel-board-bottom .festival-school>img{height:100%;min-height:0;object-fit:cover}.duel-board-bottom .festival-caption{padding:12px}.duel-board-bottom .festival-caption strong{font-size:21px}.duel-board-bottom .festival-heroes{max-height:110px!important;overflow:auto}.duel-feedback{display:flex;flex-direction:column;justify-content:center;text-align:center;gap:8px}.duel-feedback h2{margin:0;color:#ffe0a3}.duel-feedback p{font-size:22px;margin:0}.duel-feedback strong{font-size:16px;color:#a4ead9}body.duel-board .diagram{display:block!important}
@media(max-width:600px){body.duel-board main{height:auto;min-height:100dvh}.duel-board-bottom{min-height:260px;grid-template-columns:1fr}.duel-board-toolbar>span{display:none}}
.duel-media{display:flex;gap:6px}.duel-media button{padding:5px 10px;min-height:34px;font-size:12px}
/* Calm, evidence-led teacher review; intentionally separate from the game scene. */
body[data-view=report]{background:#f3f6fb;color:#172b45}body[data-view=report] .sky,body[data-view=report] .audio-settings,body[data-view=report] header .tools{display:none}body[data-view=report] header{background:#fff;border-bottom:1px solid #dae3ef}body[data-view=report] .brand{color:#172b45}body[data-view=report] .wordmark{color:#556482}
body[data-view=report] main{max-width:1440px;padding:30px 28px 60px}body[data-view=report] button{background:#fff;color:#21416b;border:1px solid #cbd8e7;box-shadow:none}body[data-view=report] button:hover{background:#eff5ff;border-color:#6599d5}body[data-view=report] h1{font-size:clamp(28px,3vw,42px);letter-spacing:-.6px}body[data-view=report] h2{font-size:23px;letter-spacing:-.3px}body[data-view=report] h3{font-size:17px}body[data-view=report] p{color:#52627b;line-height:1.5}body[data-view=report] small{color:#62728a}body[data-view=report] label{color:#314968}body[data-view=report] input,body[data-view=report] textarea,body[data-view=report] select{background:#fff;color:#172b45;border-color:#c3d0e1}
.review-heading{display:flex;justify-content:space-between;align-items:start;gap:20px}.review-heading p{margin:6px 0}.review-eyebrow{color:#087e7c!important;letter-spacing:2px;font-size:11px;font-weight:800}.review-actions{display:flex;gap:7px;flex-wrap:wrap;justify-content:end}.review-actions button{font-size:12px;min-height:38px;padding:8px 12px}.review-context{font-size:13px;border-left:3px solid #41b6a1;padding:6px 12px;margin:18px 0}
.review-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:22px 0}.review-metric{padding:22px;background:#fff;border:1px solid #dce5ef;border-radius:17px;box-shadow:0 8px 25px #1b3b6510;display:flex;flex-direction:column;gap:9px}.review-metric>span{font-size:13px;font-weight:650;color:#52647e}.review-metric>strong{font:750 clamp(26px,3vw,39px) Outfit,system-ui;color:#154879}.review-metric:nth-child(2)>strong{color:#087c72}.review-metric>small{font-size:12px}.review-tabs{display:flex;gap:8px;border-bottom:1px solid #d2deeb;margin:24px 0 20px;padding-bottom:10px}.review-tabs button[aria-selected=true]{background:#173d67;color:#fff;border-color:#173d67}
.review-columns{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(280px,1fr);gap:18px;align-items:start}.review-card{background:#fff;border:1px solid #dce5ef;border-radius:18px;padding:24px;margin-bottom:18px;box-shadow:0 5px 20px #1b3b6508}.review-card>p{font-size:14px}.review-card-title{display:flex;justify-content:space-between;gap:10px;align-items:center}.review-card-title h2{margin:0}.review-card-title>span{font-size:12px;color:#63768e;white-space:nowrap}.chart-legend{display:flex;gap:20px;font-size:12px;margin:18px 0}.chart-legend span{display:flex;align-items:center;gap:6px}.chart-legend i{width:12px;height:12px;border-radius:4px}.chart-legend .first{background:#548bd9}.chart-legend .final{background:#13a58e}
body[data-view=report] .review-chart-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(80px,1fr) 105px;gap:12px;align-items:center;width:100%;text-align:left;border:0;border-bottom:1px solid #e7edf5;border-radius:0;padding:12px 0;font-weight:400}.chart-question{display:flex;gap:9px;align-items:start;min-width:0}.chart-question>b{font-size:12px;color:#31628f;padding-top:3px}.chart-question>span{font-size:13px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.chart-bars{display:grid;gap:5px;background:repeating-linear-gradient(90deg,transparent,transparent calc(25% - 1px),#e5ecf5 calc(25% - 1px),#e5ecf5 25%);padding:2px 0}.chart-bar{height:9px;width:var(--value);border-radius:0 4px 4px 0;min-width:0}.chart-bar.first{background:#548bd9}.chart-bar.final{background:#13a58e}.chart-values{font-size:13px;font-weight:750;text-align:right}.chart-values small{display:block;font-size:10px;font-weight:400;margin-top:5px}.review-footnote{font-size:11px!important;color:#6d7c91!important;margin:18px 0 0}.review-priority{display:flex!important;flex-direction:column;align-items:start!important;text-align:left;width:100%;gap:10px!important;padding:15px!important;margin:12px 0}.review-priority strong{font-size:15px;line-height:1.4}.review-priority small{font-size:12px;font-weight:400;line-height:1.4}.review-badge{display:inline-block;border-radius:20px;background:#e9f4f5;color:#16666a;padding:4px 8px;font-size:11px;font-weight:700;margin:0 4px 3px 0}.review-badge.amber{background:#fff1df;color:#915b16}.review-badge.muted{background:#eef1f6;color:#59677f}.review-link{font-size:12px;color:#256d9d}.review-later{display:flex!important;flex-direction:column;align-items:start!important;text-align:left;width:100%;margin:10px 0;gap:8px}.review-later span{font-size:13px}.review-empty{padding:18px;background:#f7f9fc;border-radius:12px}.evidence-card{border-top:4px solid #138d85}.evidence-columns{display:grid;grid-template-columns:repeat(3,1fr);gap:25px}.evidence-columns p{font-size:13px}.reflection-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:18px}.reflection-fields textarea{min-height:100px}.reflection-fields label{font-weight:600}.reflection-fields textarea{font-weight:400}#reflection-status{font-size:13px;margin-left:12px;color:#287668}.review-filters{display:flex;gap:16px;margin:20px 0}.review-filters label{flex:1}.review-table{overflow:auto;border:1px solid #dce5ef;border-radius:12px}body[data-view=report] th,body[data-view=report] td{border-bottom:1px solid #e1e8f1;padding:13px}body[data-view=report] thead{background:#f1f5fa}body[data-view=report] tbody tr:hover{background:#f8fbff}.heatmap table{min-width:100%}.heatmap th:first-child{position:sticky;left:0;background:#f7f9fc;min-width:180px;z-index:1}.heatmap th button{border:0!important;background:transparent!important;padding:3px;font-size:12px;text-align:left}.heatmap .heat-cell{min-width:36px;min-height:36px;padding:4px;border:0!important}.heatmap .heat-cell.good{background:#dff5ed;color:#126b4f}.heatmap .heat-cell.needs{background:#fff0dc;color:#885211}.heatmap .heat-cell.missing{background:#edf0f5;color:#6b7789}
.review-dialog{color:#172b45;background:#fff;border:0;border-radius:20px;width:min(740px,94vw);max-height:88dvh;padding:25px;box-shadow:0 20px 90px #10273f55}.review-dialog::backdrop{background:#10273f88}.dialog-close{display:flex!important;margin-left:auto;margin-bottom:15px}.review-dialog p{font-size:15px}.detail-counts{margin:15px 0}.learner-detail-question{border-top:1px solid #dbe5f0;margin-top:18px;padding-top:18px}
@media(max-width:850px){.review-heading{flex-direction:column}.review-actions{justify-content:start}.review-columns{grid-template-columns:1fr}.review-metrics{grid-template-columns:1fr 1fr}.evidence-columns{grid-template-columns:1fr;gap:10px}}
@media(max-width:500px){body[data-view=report] main{padding:18px 12px}.review-card{padding:16px}.review-metric{padding:15px}.review-tabs{gap:5px}.review-tabs button{font-size:12px;padding:8px 10px}.reflection-fields{grid-template-columns:1fr}.review-card-title{flex-direction:column;align-items:start}.review-chart-row{grid-template-columns:95px minmax(40px,1fr) 85px!important;gap:7px!important}.chart-values{font-size:11px}.review-filters{flex-direction:column}}
@media print{body[data-view=report]{background:white!important;color:black!important}body[data-view=report] header,.review-actions,.review-tabs,.review-filters,#reflection-form>button,.dialog-close{display:none!important}body[data-view=report] main{padding:0!important;max-width:none}.review-card,.review-metric{box-shadow:none;break-inside:avoid}.review-columns{display:block}.review-metrics{gap:8px}.review-chart-row{break-inside:avoid}.chart-bar{-webkit-print-color-adjust:exact;print-color-adjust:exact}.review-table{overflow:visible}.reflection-fields textarea{border:0!important;min-height:80px}.review-dialog{display:none!important}}

.print-reflection{display:none;white-space:pre-wrap;overflow-wrap:anywhere}@media print{.print-reflection{display:block}.reflection-fields textarea{display:none}}
/* Shared school illumination: only revealed learning earns light. */
.lighting-school{isolation:isolate}.lighting-school>img:first-child{filter:brightness(var(--school-brightness,.25)) saturate(.65)!important}.lighting-school>img.lit-school-zone{position:absolute;inset:0;width:100%;height:100%;max-height:none;min-height:0;object-fit:cover;filter:none!important;pointer-events:none;transition:opacity 1.4s ease}.lighting-school .festival-caption{z-index:3;background:linear-gradient(#0e173ded,transparent);padding-bottom:32px}.lighting-school .festival-rabbit{z-index:2;bottom:14%;width:12%;left:44%}.school-light-meter{display:flex;gap:10px;align-items:center;font-size:13px;color:#fff0bd;font-weight:700;text-shadow:0 1px 3px #000}.school-light-meter>div{height:9px;border-radius:12px;background:#101a38;flex:1;min-width:45px;max-width:260px;overflow:hidden;border:1px solid #f4d68b66}.school-light-meter i{display:block;height:100%;background:linear-gradient(90deg,#86dfc4,#ffdc7d);box-shadow:0 0 12px #ffda85;transition:width 1.4s ease}.learner-question>.school-light-meter{grid-column:1/-1;font-size:11px;justify-content:center;margin-top:-5px}.lighting-zones{position:absolute;inset:auto 8px 8px;display:flex;justify-content:center;gap:5px;flex-wrap:wrap;z-index:3}.lighting-zones span{background:#111b35e8;color:#c4cbdc;padding:4px 7px;border-radius:12px;font-size:11px;border:1px solid #b7c3df55}.lighting-zones .restored{color:#ffdfa0;border-color:#edc875;background:#4a371deb;box-shadow:0 0 10px #ffe09755}.lighting-lanterns{position:absolute;top:48%;left:15%;right:15%;text-align:center;font-size:clamp(20px,3vw,40px);letter-spacing:14px;filter:drop-shadow(0 0 14px #ffcc55);z-index:2}.school-spark-trails{position:absolute;inset:0;pointer-events:none;z-index:4;overflow:hidden}.school-spark-trails i{display:none;position:absolute;left:var(--sx);bottom:0;color:var(--spark-colour);font-style:normal;font-size:24px;text-shadow:0 0 13px currentColor}.sparks-arriving .school-spark-trails i{display:block;animation:spark-home 3.4s both ease-out;animation-delay:calc(var(--spark-elapsed) + var(--sd))}@keyframes spark-home{0%{opacity:0;transform:translateY(20px) scale(.3)}20%{opacity:1}80%{opacity:1}100%{opacity:0;transform:translateY(-180px) scale(.2)}}.rabbit-parade{position:absolute;bottom:12%;left:25%;right:25%;display:flex;justify-content:center;z-index:2}.rabbit-parade svg{height:100px;width:70px;animation:festival-hop 2s ease-in-out infinite}.rabbit-parade svg:nth-child(2){animation-delay:.35s}.school-complete .festival-rabbit{display:none}@keyframes festival-hop{50%{transform:translateY(-9px) rotate(3deg)}}.lighting-answer-diagram{height:140px;min-height:0}.lighting-answer-diagram .diagram{max-height:140px;margin:auto}.lighting-answer-diagram img{height:100%;width:auto;object-fit:contain}.duel-board-bottom .lighting-school>img{object-fit:cover}.mission-paused .school-spark-trails i,.mission-paused .rabbit-parade svg{animation-play-state:paused}@media(max-width:600px){.lighting-school .festival-caption strong{font-size:16px}.lighting-zones span{font-size:10px}.learner-question>.school-light-meter{font-size:10px}.rabbit-parade svg{height:70px}}@media(prefers-reduced-motion:reduce){.school-spark-trails i{display:none!important}.rabbit-parade svg{animation:none}.school-light-meter i,.lit-school-zone{transition:none!important}}
.duel-board-bottom .lighting-school>img{height:100%!important;max-height:none!important;object-position:center!important}.lighting-answer-diagram img{width:100%;height:100%;object-fit:contain}

.lighting-school.school-complete>img:first-child{filter:brightness(1) saturate(1)!important}

.lighting-school .lighting-heroes{bottom:44px;max-height:44px!important;z-index:2}.lighting-school .lighting-heroes .hero-lantern{font-size:10px;padding:3px 6px}.lighting-school .lighting-heroes:empty{display:none}

.sparks-arriving .lit-school-zone{animation:restore-school-zone 2s ease both;animation-delay:var(--spark-elapsed)}@keyframes restore-school-zone{from{opacity:var(--zone-before)}to{opacity:var(--zone-after)}}@media(prefers-reduced-motion:reduce){.sparks-arriving .lit-school-zone{animation:none}}
/* Moon Festival game art and cinematic board composition. */
.game-lantern{width:40px;height:62px;overflow:visible;filter:drop-shadow(0 0 8px #ffd46a88)}.race-finish .game-lantern{width:27px;height:42px}.duel-rabbit{overflow:visible;filter:drop-shadow(0 5px 5px #06112d55)}.rabbit-eyes{transform-origin:60px 78px;animation:festival-blink 7s infinite}.rabbit-ears{transform-origin:60px 66px;animation:festival-ears 4s ease-in-out infinite}.rabbit-moon-gem{filter:drop-shadow(0 0 4px #ffde72)}@keyframes festival-blink{0%,43%,47%,100%{transform:scaleY(1)}45%{transform:scaleY(.12)}}@keyframes festival-ears{50%{transform:rotate(3deg)}}
.festival-depth{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1;background:linear-gradient(0deg,#081429bb,transparent 35%,transparent 80%,#11173744)}.moon-halo{position:absolute;width:30%;aspect-ratio:1;left:57%;top:0;background:radial-gradient(ellipse,#fbe4ac44,transparent 65%);mix-blend-mode:screen}.mist-layer{position:absolute;bottom:0;left:-15%;width:130%;height:30%;background:radial-gradient(ellipse at 25% 80%,#bdedd92b,transparent 55%),radial-gradient(ellipse at 70% 80%,#cfdcf722,transparent 55%);animation:festival-mist 20s ease-in-out infinite alternate}.sky-lanterns>span{position:absolute;left:var(--lx);top:var(--ly);opacity:.65;animation:lantern-drift 8s var(--drift) ease-in-out infinite alternate}.sky-lanterns .game-lantern{width:18px;height:29px}.festival-fireflies i{position:absolute;left:var(--fx);top:var(--fy);width:3px;height:3px;background:#fff2b0;border-radius:50%;box-shadow:0 0 7px 2px #ffd77577;animation:festival-firefly 5s var(--fd) ease-in-out infinite}.scene-rabbit{position:absolute;bottom:10%;width:clamp(65px,10%,130px);filter:drop-shadow(0 8px 6px #07132bbb)}.rabbit-jade{left:8%;transform:rotate(-5deg)}.rabbit-gold{right:8%;transform:rotate(5deg)}.scene-rabbit svg{width:100%;height:auto}.lighting-school .festival-rabbit{display:none}.lighting-lanterns{display:flex;justify-content:center;gap:22px;top:50%;opacity:.95}.lighting-lanterns .game-lantern{width:32px;height:49px;animation:lantern-drift 5s ease-in-out infinite alternate}.lighting-lanterns .game-lantern:nth-child(even){animation-delay:-2s}.lighting-school{border:1px solid #e0c18a80;box-shadow:inset 0 0 80px #080f28,0 16px 45px #040b1c66}.lighting-school .festival-caption{padding:20px 24px 40px;background:linear-gradient(180deg,#071427f2,#07142788 65%,transparent);text-shadow:0 2px 4px #020917}.lighting-school .festival-caption .eyebrow{font-size:10px;letter-spacing:2px;color:#f4d6a0}.lighting-school .school-light-meter{background:#091b32bb;border:1px solid #eed08d44;border-radius:20px;padding:7px 12px;width:fit-content;min-width:260px}.lighting-zones span{background:linear-gradient(#142c42ee,#0d1b30f2);box-shadow:0 3px 8px #0004}.lighting-zones .restored{background:linear-gradient(#936737ee,#573d23ee);box-shadow:0 0 13px #f3c87455,inset 0 1px #ffefb944}
@keyframes lantern-drift{to{transform:translate(9px,-16px) rotate(6deg)}}@keyframes festival-mist{to{transform:translateX(8%)}}@keyframes festival-firefly{0%,100%{opacity:.15;transform:translateY(0)}50%{opacity:.95;transform:translate(8px,-15px)}}
body.duel-board{background:radial-gradient(ellipse at 50% 0,#243b60,#071426 75%)}body.duel-board main{gap:10px;padding:12px 18px!important;grid-template-rows:auto auto auto minmax(0,1fr)}body.duel-board .question-focus{border:1px solid #f0cf89!important;border-radius:18px;background:linear-gradient(130deg,#fff8e9,#ffefce)!important;box-shadow:0 5px 20px #0003,inset 0 1px #fff}body.duel-board .question-focus h1{font-size:clamp(25px,2.5vw,35px)!important}body.duel-board .duel-race{background:linear-gradient(110deg,#133a3cec,#172f46ee 50%,#403225ec);border:1px solid #cbb57455;border-radius:16px;padding:8px 18px!important;box-shadow:0 5px 18px #0002}body.duel-board .duel-race h2{font-size:14px;letter-spacing:.4px;margin:0 0 4px}body.duel-board .duel-race>p{display:none}body.duel-board .race-track{height:38px;border-bottom:2px solid #ead39b55}body.duel-board .race-runner{bottom:0}body.duel-board .race-runner .duel-rabbit{height:50px;width:38px}body.duel-board .race-crew>strong,body.duel-board .race-crew>span{font-size:14px}body.duel-board .race-glow{height:6px;box-shadow:0 0 12px currentColor}body.duel-board .race-finish{bottom:-3px}body.duel-board .race-finish .game-lantern{height:32px;width:22px}
body.duel-board .duel-board-bottom{display:block;position:relative;overflow:hidden;border-radius:22px;isolation:isolate}body.duel-board .duel-board-bottom .lighting-school{height:100%!important;border-radius:22px}body.duel-board .duel-board-bottom .festival-caption{max-width:65%;z-index:3}body.duel-board .duel-board-bottom .festival-caption strong{font-size:clamp(17px,1.7vw,24px);line-height:1.25}body.duel-board .duel-feedback{position:absolute;right:16px;top:16px;bottom:auto;width:29%;max-height:calc(100% - 75px);overflow:auto;padding:18px;gap:10px;border-radius:18px;border:1px solid #a6d5d966;background:linear-gradient(145deg,#0b233bee,#10243af2);box-shadow:0 10px 28px #0005;backdrop-filter:blur(10px);z-index:4}body.duel-board .duel-feedback h2{font-size:clamp(20px,2vw,28px);line-height:1.15}body.duel-board .duel-feedback p{font-size:clamp(15px,1.3vw,20px);line-height:1.35}body.duel-board .lighting-answer-diagram{height:105px}body.duel-board .lighting-zones{justify-content:flex-start;padding:5px 12px;right:10px;bottom:8px}body.duel-board .lighting-heroes{max-width:60%;right:auto;justify-content:flex-start;bottom:48px;left:20px}body.duel-board .scene-rabbit{bottom:12%;width:95px}body.duel-board .rabbit-jade{left:20%}body.duel-board .rabbit-gold{right:24%}body.duel-board .lighting-lanterns{left:20%;right:25%}
.mission-paused .festival-depth *,.mission-paused .game-lantern,.mission-paused .rabbit-ears,.mission-paused .rabbit-eyes{animation-play-state:paused!important}
@media(max-width:700px){body.duel-board main{height:auto;min-height:100dvh}body.duel-board .duel-board-bottom{min-height:520px}body.duel-board .duel-board-bottom .lighting-school{min-height:520px!important}body.duel-board .duel-board-bottom .festival-caption{max-width:100%;padding:16px}body.duel-board .duel-feedback{top:auto;bottom:65px;right:10px;width:47%;padding:12px}body.duel-board .scene-rabbit{width:75px}body.duel-board .rabbit-gold{display:none}.lighting-school .school-light-meter{min-width:200px}.lighting-zones span{font-size:9px}.lighting-lanterns{gap:10px}}@media(prefers-reduced-motion:reduce){.festival-depth *,.game-lantern,.rabbit-ears,.rabbit-eyes{animation:none!important}.mist-layer{display:none}}
.scene-rabbit::after{content:"";position:absolute;bottom:-5px;left:5%;width:90%;height:12px;border-radius:50%;border:1px solid #f9dd9477;background:radial-gradient(ellipse,#8ae6cc55,transparent 70%);box-shadow:0 0 14px #9cf1d344}.rabbit-gold::after{background:radial-gradient(ellipse,#ffe29d55,transparent 70%)}body.duel-board .rabbit-gold{right:34%}.firework::after{content:"";position:absolute;width:12px;height:12px;border:2px solid var(--colour);border-radius:50%;box-shadow:0 0 18px var(--colour);animation:festival-shockwave 1.8s var(--delay) ease-out both}.firework i{width:4px;height:9px;background:linear-gradient(#fffbe3,var(--colour));box-shadow:0 0 9px var(--colour),0 0 2px white}@keyframes festival-shockwave{0%,10%{opacity:0;transform:scale(.2)}20%{opacity:.8}100%{opacity:0;transform:scale(12)}}
.rabbit-picker{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;max-width:650px;margin:18px auto}.rabbit-picker button{min-width:0;position:relative;border:1px solid #c4d6ef55;background:linear-gradient(145deg,#243b54,#17283f);border-radius:18px;padding:12px 8px;transition:background .2s,box-shadow .2s}.rabbit-picker .duel-rabbit{width:85px;height:115px}.rabbit-picker button span{font-size:14px}.rabbit-picker button:hover{box-shadow:0 0 18px #a8e9ce33}.rabbit-picker button[aria-pressed=true]{border:1px solid #ffe19b;box-shadow:0 0 0 2px #ffe19b66,inset 0 0 25px #ffe19b22;background:linear-gradient(145deg,#376b5b,#203e47)}.rabbit-picker button[aria-pressed=true]::after{content:'✓';position:absolute;right:8px;top:7px;border-radius:50%;background:#ffe19b;color:#1c3842;width:22px;height:22px;font-weight:bold}@media(max-width:600px){.rabbit-picker{gap:8px}.rabbit-picker .duel-rabbit{width:65px;height:92px}.rabbit-picker button span{font-size:12px}}
/* Shared, server-timed duel ceremony. */
.duel-cinema{min-height:80dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;background:radial-gradient(ellipse at 25% 50%,#257b7455,transparent 55%),radial-gradient(ellipse at 75% 50%,#b77b3055,transparent 55%);overflow:hidden}
.duel-cinema h1{font-size:clamp(26px,4vw,54px);margin:0;color:#ffe5a6}.duel-cinema .lighting-school{width:100%;min-height:40dvh}.duel-cinema .duel-race{width:100%}
.matchup-arena{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px;width:100%;position:relative;z-index:2}.matchup-card{background:linear-gradient(130deg,#173c49ee,#302944ee);border:1px solid #e4ce8f77;border-radius:22px;padding:15px;text-align:center;box-shadow:0 12px 35px #0004}.matchup-players{display:flex;align-items:center;justify-content:center;gap:8px}.duel-hero{min-width:0;flex:1;display:flex;flex-direction:column;align-items:center;gap:6px}.duel-hero svg{width:90px;max-width:100%;height:auto;filter:drop-shadow(0 8px 8px #0005)}.duel-hero strong{overflow-wrap:anywhere}.duel-hero span{font-size:13px;color:#bce8dc}.versus-mark{font-size:clamp(22px,4vw,56px);color:#ffdb86;font-style:italic;text-shadow:0 0 20px #ffba55}.matchup-large{max-width:960px;display:block}.matchup-large .duel-hero svg{width:clamp(110px,23vw,280px)}.matchup-large .duel-hero strong{font-size:clamp(18px,2.5vw,30px)}.duel-victor svg{filter:drop-shadow(0 0 24px #ffe48b);animation:duel-victory .7s ease-in-out infinite alternate}.duel-verdict{color:#ffe7a8;font-size:clamp(20px,3vw,34px);margin:14px 0 0}.duel-explanation{font-size:clamp(18px,2vw,25px);max-width:800px;background:#141e37;padding:12px 24px;border-radius:16px}.stage-matchup .duel-hero{animation:duel-arrive .6s ease-out both}.stage-matchup .duel-hero:last-child{animation-name:duel-arrive-right}.duel-board-bottom>.matchup-arena{position:absolute;inset:10px;width:auto;overflow:auto;align-content:start;background:#121d39e8;border-radius:20px;padding:12px}.duel-board-bottom:has(>.matchup-arena)>.duel-feedback{display:none}
@keyframes duel-arrive{from{transform:translateX(-130px);opacity:0}to{transform:none;opacity:1}}@keyframes duel-arrive-right{from{transform:translateX(130px);opacity:0}to{transform:none;opacity:1}}@keyframes duel-victory{to{transform:translateY(-9px) rotate(3deg)}}
.mission-paused .duel-hero svg{animation-play-state:paused}@media(prefers-reduced-motion:reduce){.duel-hero,.duel-hero svg{animation:none!important}}@media(max-width:600px){.duel-cinema{min-height:75dvh;gap:6px}.matchup-card{padding:10px}.duel-cinema .rabbit-timer{max-height:70px}.matchup-large .duel-hero span{font-size:12px}.duel-explanation{margin:4px;font-size:17px}}
.duel-cinema-board .matchup-arena{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));max-height:65dvh;overflow:auto}.duel-cinema-board .duel-hero svg,.duel-board-bottom .duel-hero svg{width:52px}.duel-cinema-board .matchup-card,.duel-board-bottom .matchup-card{padding:8px}.duel-cinema-board .duel-hero strong,.duel-board-bottom .duel-hero strong{font-size:14px}.duel-cinema-board .duel-verdict{font-size:17px}.duel-cinema-board .matchup-card p{font-size:12px;margin:4px}.duel-cinema-board .versus-mark,.duel-board-bottom .versus-mark{font-size:24px}.duel-cinema-board .duel-explanation{margin:0}.duel-cinema-board .rabbit-timer{display:none}

/* Class teams are visible before any learner signs in. */
.team-setup{max-width:1100px;margin:24px auto}.team-plan{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:12px}.team-plan th{padding:16px;background:#244d52;color:#fff;border-radius:12px;font-size:22px}.team-plan th:nth-child(2){background:#68502b}.team-plan th small{display:block;font-size:15px;margin-top:6px}.team-plan td{vertical-align:top;background:#ffffff0d;border-radius:12px;padding:12px}.team-person{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.team-person strong{display:block;width:100%;font-size:20px}.team-person span{font-size:13px;width:100%}.team-person button,.team-person select{font-size:14px;padding:8px;max-width:100%}.team-person.is-absent strong{text-decoration:line-through;opacity:.65}@media(max-width:600px){.team-plan{border-spacing:4px}.team-plan th{font-size:16px;padding:9px}.team-person strong{font-size:16px}.team-plan td{padding:8px}}
body[data-audience="board"] .team-setup{margin:8px auto;padding:18px}body[data-audience="board"] .team-setup h1{font-size:30px;margin:8px 0}body[data-audience="board"] .team-plan{border-spacing:6px}body[data-audience="board"] .team-plan td{padding:6px 12px}body[data-audience="board"] .team-person strong{font-size:18px;line-height:1.15}body[data-audience="board"] .team-person span{font-size:11px}body[data-audience="board"] .team-setup .qr{width:96px}body[data-audience="board"] .team-setup .code{display:inline-block;margin:10px 24px 10px 0}

#assessment-form{display:grid;gap:14px;padding:18px;border:1px solid #bdd7db;border-radius:12px;background:#f2faf8}#assessment-form label{display:grid;gap:6px}#assessment-form select,#assessment-form textarea{color:#17364c;background:white;border:1px solid #9ebac7;padding:10px;border-radius:8px}#assessment-form textarea{min-height:85px}

/* Large, named festival celebrations on learners and the shared board. */
.victory-screen{min-height:calc(100dvh - 80px);text-align:center;padding:32px 20px;background:radial-gradient(ellipse at 50% 15%,#715c9266,transparent 65%),radial-gradient(ellipse at 50% 90%,#dbab3e33,transparent 60%);border-radius:28px}
.victory-screen>h1{font-size:clamp(34px,5vw,76px);color:#ffe69c;text-shadow:0 4px 28px #e6ae4d66;margin:12px 0 24px;line-height:1.1}
.victory-screen .matchup-arena{width:100%;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr))}
.victory-screen .matchup-large{grid-template-columns:1fr;max-width:1000px;margin:auto}
.victory-screen .duel-hero svg{width:clamp(100px,15vw,220px);max-height:32dvh}
.victory-screen .duel-hero strong{font-size:clamp(20px,2.5vw,36px);white-space:normal;overflow-wrap:anywhere}
.victory-screen .duel-victor{background:radial-gradient(ellipse,#ffe47d55,transparent 72%);border-radius:24px}
.victory-screen .duel-victor svg{animation:champion-hop 1s ease-in-out infinite}
.victory-screen .duel-verdict{font-size:clamp(26px,3vw,46px);color:#ffe69c}
.winner-parade{display:flex;justify-content:center;align-items:end;flex-wrap:wrap;gap:16px;padding:22px;border-radius:28px;background:linear-gradient(#ffe5a010,#a3e6d520);border-bottom:6px solid #e5c775}
.festival-winner{width:155px;display:flex;flex-direction:column;align-items:center;justify-content:end}
.festival-winner>strong{font-size:18px;line-height:1.2;padding:9px 12px;border-radius:14px;background:#162b4e;color:white;overflow-wrap:anywhere;max-width:100%;box-shadow:0 3px 15px #0003}
.festival-winner>svg{width:110px;height:155px;animation:champion-hop 1.3s ease-in-out infinite;animation-delay:var(--hop)}
.podium-line{display:flex;align-items:end;justify-content:center;flex-wrap:wrap;gap:12px;padding:20px 0}
.podium-place{width:200px}.podium-place>strong{font-size:22px}.podium-place>svg{width:140px;height:185px}
.podium-block{width:100%;height:calc(180px - var(--place)*30px);min-height:70px;background:linear-gradient(145deg,#ffe5a6,#b87927);border:3px solid #fff0c2;border-radius:14px 14px 0 0;color:#30264b;display:flex;justify-content:center;align-items:center;flex-direction:column;font-size:24px;box-shadow:0 10px 30px #0003}.podium-block b{font-size:32px}.podium-block span{font-size:16px;font-weight:800}
.team-podium{margin:30px 0}.final-victory details{margin-top:30px}.final-victory summary{font-size:20px;cursor:pointer}
@keyframes champion-hop{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-12px) rotate(3deg)}}
@media(prefers-reduced-motion:reduce){.victory-screen *{animation:none!important}}
@media(max-width:600px){.victory-screen{padding:18px 8px}.festival-winner{width:125px}.podium-place{width:145px}.podium-place>strong{font-size:18px}.winner-parade{padding:10px;gap:10px}}
.victory-screen .duel-hero{display:flex;flex-direction:column;align-items:center}.victory-screen .duel-hero strong{order:-1;padding:8px 12px;background:#192a4f;border-radius:12px}
.podium-place[style*="--place:1;"]{order:2}.podium-place[style*="--place:2;"]{order:1}.podium-place[style*="--place:3;"]{order:3}
