.certificate-test{padding-top:12px}.certificate-test .family-finale{border-top:0;margin-top:12px}.certificate-test .family-finale h2{font-size:clamp(28px,4vw,40px);line-height:1.3}.certificate-names{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin:26px 0 16px}.certificate-names label{display:block;font:14px/1.5 var(--sans)}.certificate-names input{display:block;width:100%;min-width:0;box-sizing:border-box;min-height:48px;padding:10px 12px;border:1px solid var(--line);border-radius:7px;background:#fff9ef;color:var(--blue);font:18px/1.5 var(--sans)}.certificate-names input:focus-visible{outline:2px solid var(--blue);outline-offset:3px}.certificate-date{display:flex;justify-content:center;flex-wrap:wrap;gap:6px 12px;font:13px/1.6 var(--sans);margin:12px 0}.certificate-date strong{font-weight:500}.certificate-privacy{max-width:600px;margin:10px auto 22px!important;font:12px/1.7 var(--sans)}.certificate-preview{margin:24px 0;border:1px solid #b29765;border-radius:8px;overflow:hidden;box-shadow:0 8px 24px #2f4a6d14}.certificate-preview img,.certificate-preview canvas{display:block;width:100%;height:auto}.certificate-preview [hidden]{display:none}.certificate-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:12px}.certificate-actions button{font:15px/1.5 var(--sans);min-height:48px;margin:0!important}.certificate-actions button:disabled{opacity:.6;cursor:wait}.certificate-back{text-align:center;margin:0 auto 35px}#certificate-status{min-height:24px}@media(max-width:600px){.certificate-names{grid-template-columns:1fr;gap:14px}.certificate-test .family-finale{padding-top:16px}.certificate-actions{flex-direction:column}.certificate-actions button{width:100%;justify-content:center}.certificate-preview{margin:20px 0}.certificate-privacy{font-size:12px}}

.day7-celebration-actions{display:flex;flex-direction:column;align-items:center;gap:10px;margin:24px auto 28px}.day7-celebration-actions .button{gap:10px;min-height:48px;font:16px/1.5 var(--sans);padding:13px 24px}.day7-celebration-actions>.small{font:12px/1.6 var(--sans);color:var(--muted)}.day7-celebration-actions .quiet-link{font-size:16px;margin-top:4px}.day7-celebration-actions [role="status"]:empty{display:none}.magic-celebration>.family-finale{width:calc(100% - 40px);box-sizing:border-box;margin:26px auto 40px}.magic-celebration>.family-finale h2{font-size:clamp(28px,4vw,38px);line-height:1.4}@media(max-width:600px){.magic-celebration>.family-finale{width:calc(100% - 36px)}.day7-celebration-actions .button{max-width:100%}}

/* One short Day 7 finale, timed to the trumpet and firework fanfare. */
.day7-finale-effects{position:fixed;inset:0;z-index:90;overflow:hidden;pointer-events:none;contain:strict}
.day7-finale-effects *{pointer-events:none;box-sizing:border-box}
.finale-firework{position:absolute;width:clamp(150px,25vw,300px);height:auto;opacity:0;overflow:visible;color:#c99836;animation:finale-bloom 1.45s ease-out both}
.finale-firework path{fill:none;stroke:currentColor;stroke-width:2.5;stroke-linecap:round}
.finale-firework circle{fill:currentColor}
.finale-firework:nth-child(1){left:5%;top:14%;animation-delay:1.85s}
.finale-firework:nth-child(2){right:3%;top:27%;color:#c47775;animation-delay:2.5s}
.finale-firework:nth-child(3){left:40%;top:6%;width:clamp(130px,20vw,240px);color:#91a389;animation-delay:3.05s}
.finale-confetti i{position:absolute;top:-24px;width:8px;height:14px;border-radius:2px;background:#c99836;opacity:0;animation:finale-confetti-fall 4.6s cubic-bezier(.2,.45,.6,1) both}
.finale-confetti i:nth-child(12n+1){left:4%;animation-delay:.05s}
.finale-confetti i:nth-child(12n+2){left:13%;animation-delay:.7s}
.finale-confetti i:nth-child(12n+3){left:21%;animation-delay:.2s}
.finale-confetti i:nth-child(12n+4){left:30%;animation-delay:.9s}
.finale-confetti i:nth-child(12n+5){left:38%;animation-delay:.4s}
.finale-confetti i:nth-child(12n+6){left:47%;animation-delay:.1s}
.finale-confetti i:nth-child(12n+7){left:55%;animation-delay:.8s}
.finale-confetti i:nth-child(12n+8){left:64%;animation-delay:.3s}
.finale-confetti i:nth-child(12n+9){left:72%;animation-delay:.6s}
.finale-confetti i:nth-child(12n+10){left:81%;animation-delay:.15s}
.finale-confetti i:nth-child(12n+11){left:89%;animation-delay:1s}
.finale-confetti i:nth-child(12n){left:97%;animation-delay:.45s}
.finale-confetti i:nth-child(3n){background:#3d5a7c;width:7px;height:7px;border-radius:50%}
.finale-confetti i:nth-child(3n+1){background:#c58782}
.finale-confetti i:nth-child(4n){background:#90a088}
.finale-confetti i:nth-child(n+13):nth-child(-n+24){animation-name:finale-confetti-sway;animation-duration:4.1s;width:6px;height:12px}
.finale-confetti i:nth-child(n+25){animation-duration:5s;width:11px;height:11px;clip-path:polygon(50% 0,62% 35%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 35%);border-radius:0}
.finale-balloons i{position:absolute;top:100%;width:58px;height:72px;border-radius:49% 49% 46% 46%;background:radial-gradient(ellipse at 30% 22%,#ffffff65,transparent 48%),#d3a24e;box-shadow:inset -7px -5px 12px #0000000d;animation:finale-balloon-rise 5.2s ease-out both;transform-origin:50% 100%}
.finale-balloons i:before{content:'';position:absolute;bottom:-6px;left:calc(50% - 5px);border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:8px solid #b48a43}
.finale-balloons i span{position:absolute;top:calc(100% + 4px);left:50%;height:94px;width:13px;border-left:1px solid #a08b6899;border-radius:50%}
.finale-balloons i:nth-child(1){left:3%;animation-delay:.05s}
.finale-balloons i:nth-child(2){right:4%;background-color:#7c95ad;animation-delay:.3s;width:65px;height:80px}
.finale-balloons i:nth-child(3){left:12%;background-color:#c78f8a;animation-delay:.6s;width:48px;height:60px}
.finale-balloons i:nth-child(4){right:14%;background-color:#9fae91;animation-delay:.8s;width:49px;height:61px}
.finale-balloons i:nth-child(5){left:21%;background-color:#8fa5b9;animation-delay:.35s;width:40px;height:50px}
.finale-balloons i:nth-child(6){right:24%;animation-delay:.15s;width:42px;height:52px}
@keyframes finale-bloom{0%{opacity:0;transform:scale(.15) rotate(-12deg)}15%{opacity:.85}65%{opacity:.65}100%{opacity:0;transform:scale(1.1) rotate(8deg)}}
@keyframes finale-confetti-fall{0%{opacity:0;transform:translate3d(0,-3vh,0) rotate(0)}8%,75%{opacity:.85}100%{opacity:0;transform:translate3d(-55px,110vh,0) rotate(480deg)}}
@keyframes finale-confetti-sway{0%{opacity:0;transform:translate3d(-25px,-3vh,0) rotate(30deg)}8%,75%{opacity:.8}100%{opacity:0;transform:translate3d(65px,110vh,0) rotate(-540deg)}}
@keyframes finale-balloon-rise{0%{opacity:0;transform:translate3d(0,30px,0) rotate(-7deg)}10%,70%{opacity:.86}45%{transform:translate3d(12px,-55vh,0) rotate(7deg)}100%{opacity:0;transform:translate3d(-8px,-130vh,0) rotate(-5deg)}}
@media(max-width:600px){.finale-balloons i{width:40px;height:50px}.finale-balloons i:nth-child(2){width:46px;height:58px}.finale-balloons i:nth-child(3),.finale-balloons i:nth-child(4){width:34px;height:43px}.finale-balloons i:nth-child(n+5){display:none}.finale-balloons i span{height:65px}.finale-confetti i{width:6px;height:10px}}
@media(prefers-reduced-motion:reduce){.day7-finale-effects{display:none}.day7-finale-effects *{animation:none!important}}

/* Each stamp gets a little party; the last day has two longer waves. */
.celebration-daily .finale-firework{width:clamp(140px,23vw,260px)}
.celebration-daily .finale-confetti i{animation-duration:3.6s}
.celebration-daily .finale-balloons i{animation-duration:4.7s}
.celebration-grand .finale-firework{width:clamp(190px,30vw,380px);animation-duration:1.9s}
.celebration-grand .finale-firework path{stroke-width:3}
.celebration-grand .finale-balloons i{animation-duration:6.4s}
.finale-seven-stars{position:absolute;top:8%;left:50%;display:flex;align-items:center;gap:clamp(12px,3vw,38px);transform:translateX(-50%);color:#c99836;filter:drop-shadow(0 2px 9px #e7be6a66)}
.finale-seven-stars span{font-size:clamp(24px,5vw,52px);animation:finale-star-welcome 4s ease-out both;animation-delay:calc(.25s + var(--star)*.12s)}
@keyframes finale-star-welcome{0%{opacity:0;transform:translateY(20px) scale(.3) rotate(-30deg)}20%,65%{opacity:.95;transform:translateY(0) scale(1) rotate(0)}100%{opacity:0;transform:translateY(-25px) scale(1.15)}}
@media(max-width:600px){.celebration-grand .finale-balloons i:nth-child(n+5){display:block;width:32px;height:40px}.celebration-grand .finale-firework{width:clamp(130px,40vw,240px)}.finale-seven-stars{top:12%;gap:15px}}
