feat: release 0.7.0 celebration flow

This commit is contained in:
2026-04-16 13:41:22 +02:00
parent ba4a112bbc
commit 67d362f1d9
6 changed files with 340 additions and 6 deletions

View File

@@ -1505,6 +1505,15 @@ p {
align-items: stretch;
}
.celebration-score {
width: 80vw;
font-size: clamp(5.5rem, 28vw, 8.5rem);
}
.celebration-glow {
width: min(78vw, 240px);
}
.form-actions .button,
.form-actions a.button {
width: 100%;
@@ -1606,14 +1615,23 @@ p {
width: 100vw;
max-width: 100vw;
min-height: 100vh;
min-height: 100dvh;
margin: 0;
padding: 12px;
border: 0;
background: transparent;
overflow: visible;
box-sizing: border-box;
}
.complete-dialog:not([open]) {
display: none;
}
.complete-dialog[open] {
display: flex;
align-items: center;
justify-content: center;
overflow: visible;
}
.complete-dialog::backdrop {
@@ -1641,6 +1659,70 @@ p {
touch-action: pan-y;
}
.celebration-layer {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 90;
overflow: hidden;
}
.celebration-score,
.celebration-glow,
.celebration-particle {
position: absolute;
left: 50%;
top: 50%;
}
.celebration-score {
width: min(80vw, 520px);
padding: 0;
background:
linear-gradient(
135deg,
rgba(255, 255, 255, 0.98) 0%,
rgba(214, 234, 255, 0.92) 18%,
rgba(94, 168, 255, 0.72) 42%,
rgba(52, 211, 153, 0.74) 70%,
rgba(255, 255, 255, 0.92) 100%
);
color: transparent;
-webkit-text-fill-color: transparent;
-webkit-background-clip: text;
background-clip: text;
-webkit-text-stroke: 1px rgba(255, 255, 255, 0.22);
font-size: clamp(6.5rem, 28vw, 12rem);
font-weight: 900;
line-height: 0.9;
letter-spacing: -0.08em;
text-align: center;
transform: translate(-50%, -50%);
filter:
drop-shadow(0 10px 24px rgba(94, 168, 255, 0.18))
drop-shadow(0 0 18px rgba(255, 255, 255, 0.18));
animation: celebration-score-in 1.15s cubic-bezier(0.18, 0.84, 0.24, 1) forwards;
}
.celebration-glow {
width: min(56vw, 280px);
aspect-ratio: 1;
border-radius: 50%;
background:
radial-gradient(circle, rgba(94, 168, 255, 0.26) 0%, rgba(52, 211, 153, 0.2) 42%, rgba(94, 168, 255, 0) 74%);
transform: translate(-50%, -50%);
filter: blur(10px);
animation: celebration-glow 0.95s ease-out forwards;
}
.celebration-particle {
width: var(--size, 10px);
height: var(--size, 10px);
border-radius: 999px;
transform: translate(-50%, -50%) rotate(var(--angle)) translateY(-4px);
animation: celebration-particle 0.82s ease-out var(--delay, 0s) forwards;
}
.choice-grid {
display: grid;
gap: 12px;
@@ -1681,6 +1763,61 @@ p {
height: 24px;
}
@keyframes celebration-score-in {
0% {
opacity: 0;
transform: translate(-50%, -42%) scale(0.74);
filter: blur(16px);
}
12% {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
filter: blur(0);
}
58% {
opacity: 1;
transform: translate(-50%, -53%) scale(1.03);
filter: blur(0);
}
100% {
opacity: 0;
transform: translate(-50%, -76%) scale(1.08);
filter: blur(20px);
}
}
@keyframes celebration-glow {
0% {
opacity: 0;
transform: translate(-50%, -50%) scale(0.32);
}
22% {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
100% {
opacity: 0;
transform: translate(-50%, -50%) scale(1.42);
}
}
@keyframes celebration-particle {
0% {
opacity: 0;
transform: translate(-50%, -50%) rotate(var(--angle)) translateY(0) scale(0.4);
filter: blur(4px);
}
18% {
opacity: 1;
filter: blur(0);
}
100% {
opacity: 0;
transform: translate(-50%, -50%) rotate(var(--angle)) translateY(calc(var(--distance) * -1)) scale(0.9);
filter: blur(6px);
}
}
@media (max-width: 759px) {
.calendar-toolbar-mobile__header {
align-items: flex-start;
@@ -1884,6 +2021,18 @@ p {
}
}
@media (prefers-reduced-motion: reduce) {
.celebration-score {
animation-duration: 0.46s;
}
.celebration-glow,
.celebration-particle {
animation: none;
opacity: 0;
}
}
@media (min-width: 1100px) {
.app-shell {
display: grid;