.celebration-layer{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:1000}.celebration-bit{position:absolute;font-style:normal;line-height:1;pointer-events:none}.celebration-status{position:fixed;top:clamp(80px,16vh,170px);left:50%;transform:translateX(-50%);width:min(420px,calc(100vw - 32px));pointer-events:none;z-index:1001}.celebration-message{display:flex;align-items:center;justify-content:center;gap:14px;padding:18px 24px;border:1px solid #d6bf85;border-radius:24px;background:#fffaf0;box-shadow:0 12px 36px #483c2829;color:#34392d;text-align:center}.celebration-message img{width:74px;height:74px;object-fit:contain}.celebration-message strong{font-family:Heartbreak,Georgia,serif;font-weight:400;font-size:32px;line-height:1.1}@media(max-width:500px){.celebration-message{padding:14px 18px;gap:8px}.celebration-message strong{font-size:27px}.celebration-message img{width:60px;height:60px}}

.program-finish{pointer-events:auto;width:min(470px,calc(100vw - 32px))}.program-message{align-items:flex-start}.program-message p{font:16px/1.4 Lato,sans-serif;margin:8px 0 16px}.see-academy{background:#526344;color:#fffaf0;border:0;border-radius:12px;padding:13px 18px;font:700 16px Lato,sans-serif;cursor:pointer}.finish-later{display:block;margin:10px auto 0;background:transparent;border:0;text-decoration:underline;color:#4b5444;font:14px Lato,sans-serif;cursor:pointer;padding:8px}.program-message button:focus-visible,.preview-finish-button:focus-visible{outline:3px solid #a97928;outline-offset:4px}.preview-finish-button{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:1002;background:#fffaf0;color:#39432f;border:1px solid #aab59b;border-radius:20px;padding:12px 20px;font:700 14px Lato,sans-serif;box-shadow:0 3px 18px #3332;cursor:pointer}
.rainbow-bloom{position:absolute;left:35%;top:25%;width:38%;height:53%;pointer-events:none;z-index:3;border-radius:50%;background:radial-gradient(ellipse,#fff5bf99 0%,#f6bad77a 25%,#bee6db66 45%,#c9c6ed44 60%,transparent 72%);animation:campus-bloom 3.8s ease-out both;mix-blend-mode:screen}
.program-reveal .wish-tree-layer{animation:tree-arrives 2s ease-out both}
.program-reveal .wish-tree-layer>image:last-of-type{animation:ribbon-arrives 2.8s ease-out both}
@keyframes campus-bloom{0%{opacity:0;transform:scale(.5)}25%{opacity:1}70%{opacity:.8}100%{opacity:0;transform:scale(1.5)}}
@keyframes tree-arrives{0%,15%{opacity:0}100%{opacity:1}}
@keyframes ribbon-arrives{0%,65%{opacity:0}100%{opacity:1}}
@media(prefers-reduced-motion:reduce){.program-reveal .wish-tree-layer{animation:tree-arrives .3s ease-out both}.program-reveal .wish-tree-layer>image:last-of-type{animation:none}.rainbow-bloom{display:none}}

.program-reveal .wish-tree-layer>g[transform]{transform-box:fill-box;transform-origin:top center;animation:stars-arrive 2.4s ease-out both}@keyframes stars-arrive{0%,45%{opacity:0}70%{opacity:1;rotate:-5deg}85%{rotate:3deg}100%{opacity:1;rotate:0deg}}@media(prefers-reduced-motion:reduce){.program-reveal .wish-tree-layer>g[transform]{animation:none}}

/* A centered reward, followed by a larger campus reveal. */
.celebration-status.program-finish{top:50%;transform:translate(-50%,-50%);width:min(440px,calc(100vw - 32px))}
.program-message{flex-direction:column;align-items:center;gap:8px;padding:28px 28px 22px;border-radius:30px;box-shadow:0 18px 70px #34412d38,0 0 0 8px #fffaf033;animation:finish-card-in .6s cubic-bezier(.16,1,.3,1) both}
.program-message>img{width:110px;height:110px;filter:drop-shadow(0 5px 12px #e4b34a55);animation:reward-pop 1s ease-out both}
.program-message>div{width:100%}
.program-message strong{font-size:48px}
.program-message p{margin:10px 0 22px;font-size:18px}
.see-academy{min-height:48px;padding:14px 24px}
.see-academy:hover{background:#405335}
.finish-later:hover{color:#283520}
.rainbow-bloom{left:29%;top:19%;width:48%;height:65%;background:radial-gradient(ellipse,#fff7bfe6 0%,#f6bad7b3 22%,#bee6db99 43%,#c9c6ed80 60%,transparent 73%);animation:campus-bloom 5.5s ease-out both}
@keyframes finish-card-in{from{opacity:0;transform:translateY(24px) scale(.9)}to{opacity:1;transform:none}}
@keyframes reward-pop{0%{transform:scale(.35) rotate(-18deg)}60%{transform:scale(1.15) rotate(8deg)}100%{transform:scale(1) rotate(0)}}
@media(max-width:500px){.program-message{padding:22px 20px 16px}.program-message>img{width:90px;height:90px}.program-message strong{font-size:40px}.program-message p{font-size:16px}}
@media(prefers-reduced-motion:reduce){.program-message,.program-message>img{animation:none}.rainbow-bloom{display:none}}
