/* Harmony: separate score components, independent of campaign node geometry. */
:root{--gold:#ecd58c;--star-empty:#557268}
.move-meter{position:fixed;left:50%;bottom:auto;transform:translateX(-50%);margin:0;width:240px;display:flex;flex-direction:column;align-items:center;gap:3px;pointer-events:none;z-index:3;text-align:center}
.move-meter strong{font:750 58px/1 var(--sans);font-variant-numeric:tabular-nums;letter-spacing:-2px;color:#f0f5e6;transform-origin:center;display:block}
.move-meter>span{font:600 11px/1.4 var(--sans);letter-spacing:2.3px;color:#a9c1ad}
.move-benchmark{font:400 12px/1.5 var(--sans);color:#a4bda5;margin-top:1px;letter-spacing:0}
.move-benchmark b{color:#d4e3bf;font-weight:600}.key-legend{display:none}
.rating-stars{display:flex;flex:none;align-items:center;gap:4px;color:var(--star-empty)}
.rating-star{display:grid;place-items:center;width:18px;height:18px;position:relative;color:var(--star-empty)}
.rating-star svg{width:100%;height:100%;stroke-width:1.3;fill:none}
.rating-star.earned{color:var(--gold)}.rating-star.earned svg{fill:currentColor;stroke:currentColor}
.rating-stars.large{justify-content:flex-start;gap:10px;margin-top:25px}
.rating-stars.large .rating-star{width:48px;height:48px}
.rating-stars.reveal .rating-star{animation:star-slot .32s ease both;animation-delay:calc(var(--reveal) - 180ms)}
.rating-stars.reveal .rating-star.earned{animation:star-light .55s cubic-bezier(.19,1,.22,1) both;animation-delay:var(--reveal)}
.rating-stars.reveal .rating-star.earned::after{content:'';position:absolute;inset:-7px;border:1px solid #ebdbaa9a;border-radius:50%;animation:star-ring .65s ease-out both;animation-delay:var(--reveal);pointer-events:none}
@keyframes star-slot{from{opacity:.25;transform:scale(.8)}to{opacity:1;transform:scale(1)}}
@keyframes star-light{0%{opacity:.25;transform:scale(.55) rotate(-16deg);color:var(--star-empty)}55%{opacity:1;transform:scale(1.17) rotate(4deg);color:#f8e8a4}100%{opacity:1;transform:scale(1);color:var(--gold)}}
@keyframes star-ring{from{opacity:.8;transform:scale(.4)}to{opacity:0;transform:scale(1.35)}}
.blossom .rating-stars{margin-top:5px;gap:4px}.blossom .rating-star{width:17px;height:17px}.blossom-status{color:#aabd9e}
.chapter-badges span{font-size:11px}
.title-rating{position:fixed;left:30px;bottom:26px;display:flex;align-items:center;gap:7px;color:#99b59c;font-size:13px;letter-spacing:.1px}
.title-rating svg{width:18px;height:18px;color:var(--gold);fill:var(--gold)}.title-rating strong{font-variant-numeric:tabular-nums;color:#e9efd9;font-weight:650}
body[data-screen=success] #screen{display:grid;align-items:center;justify-items:center;overflow:auto;padding:28px;}
.success-layout{display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,1fr);gap:54px;align-items:center;width:min(1020px,100%);min-width:0;margin:auto}
.success-art{min-width:0;text-align:center;align-self:center}
.success-hero{margin:0 auto;width:min(100%,500px)}
.bloom-caption{font:500 16px/1.5 var(--sans);color:#b0c4a9}.bloom-caption span{display:block;font:600 10px/2 var(--sans);letter-spacing:2px;color:#779783;margin-top:10px}
.success-copy{min-width:0}.success-copy .eyebrow{font:650 11px/1.5 var(--sans);color:#a5c08f;letter-spacing:2px}
#screen .success-copy h2{font:650 42px/1.14 var(--sans);letter-spacing:-1.5px;margin:13px 0 0;color:#f1f5e5;max-width:420px}
.rating-caption{font:500 13px/1.6 var(--sans);color:#b5c5a9;margin:8px 0 23px}
.run-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;border-block:1px solid #b9d5c024;padding:20px 0;}
.run-stats>div{display:flex;flex-direction:column;gap:7px}.run-stats strong{font:650 32px/1 var(--sans);font-variant-numeric:tabular-nums;color:#eaf1d8;letter-spacing:-1px}
.run-stats span{font:450 12px/1.4 var(--sans);color:#9caf9a}
.next-star-goal{font:400 13px/1.7 var(--sans);color:#a9bd9f;margin-top:14px}.next-star-goal b{font-weight:550;color:#d2e0be}
.global-score-line{margin-top:18px;display:flex;align-items:center;justify-content:space-between;gap:10px;color:#a7b9a3;font:400 12px/1.5 var(--sans)}
.global-score-line>span{display:flex;align-items:center;gap:5px;min-width:0}.global-score-line svg{width:15px;height:15px;color:var(--gold);fill:var(--gold)}
.global-score-line strong{color:#e6efd2;font-weight:700;font-variant-numeric:tabular-nums}.score-gain{font-weight:550;color:#d5eaa8;white-space:nowrap}
.score-progress{height:4px;border-radius:8px;background:#9aaf931c;overflow:hidden;margin-top:9px}.score-progress i{display:block;height:100%;background:linear-gradient(90deg,#accc8b,#ecd58c);border-radius:8px;animation:score-fill .8s ease-out .5s both;transform-origin:left}
@keyframes score-fill{from{transform:scaleX(.92);opacity:.7}to{transform:scaleX(1);opacity:1}}
.success-buttons{display:grid;gap:9px;margin-top:25px}.success-buttons .primary,.success-buttons .secondary{width:100%;font:600 14px/1.4 var(--sans);gap:12px;min-height:48px}
.success-links{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:7px}.success-links .text-btn{font-size:12px;color:#97b295;padding:10px 0}
.chapter-open-note{font:500 12px/1.6 var(--sans);color:#d2dfb3;margin:15px 0 0}
.music-note{font:400 12px/1.7 var(--sans);color:#93ae98;margin:4px 0 16px}.settings-row label{line-height:1.6}
.rating-guide{margin-top:20px}.rating-guide>div{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 0;border-bottom:1px solid #abc2941a;font:500 14px var(--sans);color:#c5d4b7}
.rating-guide>p{font-size:13px;line-height:1.75;color:#a9bda6;margin:16px 0}.rating-guide .rating-stars{gap:5px}.rating-guide .rating-star{width:19px;height:19px}
/* SVG positions are on outer groups; animation only scales the inner local group.
   None of these classes reuse campaign .blossom, which has layout rules. */
.bloom-art{display:block;width:100%;height:auto;overflow:visible;fill:none;stroke:none;--b-wood:#709766;--b-leaf:#94c47c;--b-petal:#e7f1c8;--b-alt:#cbdcaa;--b-heart:#e5d082}
.bloom-art.theme-2{--b-wood:#6b9b88;--b-leaf:#8fcab0;--b-petal:#d7f2de;--b-alt:#a1d7c4}
.bloom-art.theme-3{--b-wood:#8985ac;--b-leaf:#b2a0d2;--b-petal:#e9dbf5;--b-alt:#b7abd9}
.bloom-art.theme-4{--b-wood:#af956a;--b-leaf:#cfb379;--b-petal:#f4e3c4;--b-alt:#e3c998}
.bloom-art.theme-5{--b-wood:#7c9b62;--b-leaf:#bbd693;--b-petal:#f1f4d1;--b-alt:#d6e3af}
.bloom-art.theme-6{--b-wood:#90809e;--b-leaf:#b59ac6;--b-petal:#f2dcf2;--b-alt:#d2b6e2}
.bloom-trunk,.bloom-branch{stroke:var(--b-wood);stroke-linecap:round;fill:none;stroke-dasharray:1;stroke-dashoffset:1;animation:twig-draw .75s cubic-bezier(.2,.65,.3,1) forwards;animation-delay:var(--delay,0ms)}
.bloom-trunk{stroke-width:6}.bloom-branch{stroke-width:3.5}
.bloom-pop{opacity:0;transform-origin:0 0;animation:local-bloom .6s cubic-bezier(.2,.9,.3,1.1) forwards;animation-delay:var(--delay)}
.bloom-petal{fill:var(--b-petal);stroke:none}.bloom-petal.alt{fill:var(--b-alt)}.bloom-heart{fill:var(--b-heart);stroke:none}
.bloom-leaf{fill:var(--b-leaf);stroke:none;opacity:0;transform-box:fill-box;transform-origin:center;animation:local-bloom .55s ease forwards;animation-delay:var(--delay)}
.bloom-ring{fill:none;stroke:var(--b-petal);stroke-width:1;opacity:0;transform-origin:0 0;animation:bloom-circle .7s ease forwards;animation-delay:var(--delay)}
.bloom-glint{stroke:#f3ebc8;stroke-width:1.5;opacity:0;animation:bloom-glint .85s ease forwards;animation-delay:var(--delay)}
@keyframes twig-draw{to{stroke-dashoffset:0}}
@keyframes local-bloom{0%{opacity:0;transform:scale(.15)}70%{opacity:1;transform:scale(1.07)}100%{opacity:1;transform:scale(1)}}
@keyframes bloom-circle{0%{opacity:0;transform:scale(.6)}25%{opacity:.4}100%{opacity:0;transform:scale(1.45)}}
@keyframes bloom-glint{0%,100%{opacity:0}30%{opacity:.8}}
@media(max-width:850px){
 body[data-screen=success] #screen{display:block;padding:22px 24px}.success-layout{grid-template-columns:minmax(0,1fr);max-width:460px;gap:12px;text-align:center;margin:auto}
 .success-hero{width:240px}.bloom-caption{display:none}.success-art{min-height:0}
 #screen .success-copy h2{font-size:32px;max-width:none;margin:10px 0}.rating-stars.large{justify-content:center;margin-top:14px;gap:9px}.rating-stars.large .rating-star{width:38px;height:38px}
 .rating-caption{margin:7px 0 15px}.run-stats{padding:15px 0}.success-links{justify-content:center;gap:22px}.next-star-goal{margin-top:11px}
 .success-buttons{margin-top:18px}.title-rating{left:20px;bottom:42px;font-size:11px}
}
@media(max-width:600px){
 .move-meter{width:230px}.move-meter strong{font-size:48px}.move-meter>span{font-size:10px}.move-benchmark{font-size:12px}
 .coach{top:86px;bottom:auto;max-width:93vw;padding:5px 10px;font-size:10px;line-height:1.35}
 .level-intro{display:none}.hud-tools .round{width:38px;height:38px}
 .title-rating{left:50%;transform:translateX(-50%);bottom:42px;white-space:nowrap}.title-progress{margin-top:14px}
 body[data-screen=success] #screen{padding:16px}.success-hero{width:200px}.success-layout{gap:3px}
 .success-copy .eyebrow{font-size:10px;letter-spacing:1.5px}#screen .success-copy h2{font-size:29px;letter-spacing:-.8px}
 .run-stats strong{font-size:28px}.run-stats span{font-size:11px}.success-links .text-btn{font-size:11px}
 .success-buttons .primary,.success-buttons .secondary{font-size:13px;min-height:44px;padding:10px 16px}
 .chapter-open-note{margin:9px 0}.settings-row{font-size:13px}.blossom .rating-stars{gap:4px}
}
@media(max-height:700px) and (max-width:600px){
 .success-hero{width:150px}.rating-stars.large{margin-top:7px}.rating-stars.large .rating-star{width:32px;height:32px}
 #screen .success-copy h2{font-size:25px;margin:7px 0}.rating-caption{font-size:12px;margin-bottom:10px}.run-stats{padding:12px 0}.run-stats strong{font-size:24px}
 .next-star-goal{font-size:12px}.global-score-line{margin-top:12px;font-size:11px}.success-buttons{margin-top:14px}
}
@media(max-height:530px) and (min-width:601px){
 .move-meter strong{font-size:38px}.move-meter>span{font-size:9px}.move-benchmark{font-size:11px}.move-meter{gap:1px}
 body[data-screen=success] #screen{display:block;padding:20px}.success-layout{grid-template-columns:minmax(0,.75fr) minmax(0,1fr);max-width:960px;text-align:left;gap:24px}
 .success-hero{width:100%;max-width:285px}.success-art{align-self:center}.rating-stars.large{justify-content:flex-start;margin-top:10px}
 #screen .success-copy h2{font-size:28px}.run-stats{padding:12px 0}.success-buttons{margin-top:14px}.success-links{justify-content:space-between}
}
/* Reduced motion must reveal the final state, never leave animated elements hidden. */
body[data-motion=reduced] .rating-star,body[data-motion=reduced] .bloom-pop,body[data-motion=reduced] .bloom-leaf{animation:none!important;opacity:1;transform:none}
body[data-motion=reduced] .bloom-trunk,body[data-motion=reduced] .bloom-branch{animation:none!important;stroke-dashoffset:0}
body[data-motion=reduced] .bloom-glint,body[data-motion=reduced] .bloom-ring,body[data-motion=reduced] .rating-star::after{display:none!important}
@media(prefers-reduced-motion:reduce){.rating-star,.bloom-pop,.bloom-leaf{animation:none!important;opacity:1;transform:none}.bloom-trunk,.bloom-branch{animation:none!important;stroke-dashoffset:0}.bloom-glint,.bloom-ring,.rating-star::after{display:none!important}}

.tree-score-footer{display:flex;align-items:center;gap:6px;color:#a7b99c;font:400 13px/1.4 var(--sans);white-space:nowrap}
.tree-score-footer svg{color:var(--gold);fill:var(--gold);width:16px;height:16px}.tree-score-footer b{color:#e6efd0;font-weight:700;font-variant-numeric:tabular-nums}
