Add animated glass background, breadcrumbs, and brand mark polish
Cards now sit on an animated signature-gradient background and use a translucent, blurred bp-glass surface so it shines through; extended bp-glass to every stat surface on the Stats page and to its tab switcher. Adds a Breadcrumbs component below the header on all app pages. Also: drop the gradient text fill from the wordmark/heading, animate the BrandMark's heart and curve on the dashboard hero instead of a plain pulse ring, recenter the heart/curve artwork in icon.svg and BrandMark, close the mobile nav menu on link click, remove the redundant "back to recordings" button, and match the "Start session"/"Scan for devices" button sizes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+82
-5
@@ -127,13 +127,46 @@
|
||||
@apply border-border outline-ring/50;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
@apply text-foreground;
|
||||
}
|
||||
html {
|
||||
@apply font-sans;
|
||||
}
|
||||
}
|
||||
|
||||
/* Animated signature-sweep background - sits behind everything; cards use
|
||||
.bp-glass (translucent + blurred) so it shines through instead of being
|
||||
fully hidden behind an opaque card surface. */
|
||||
body {
|
||||
background-color: var(--background);
|
||||
background-image:
|
||||
radial-gradient(ellipse 80% 60% at 15% 10%, color-mix(in srgb, #ff6fb0 32%, transparent), transparent 60%),
|
||||
radial-gradient(ellipse 70% 60% at 85% 25%, color-mix(in srgb, #4f7fe0 28%, transparent), transparent 60%),
|
||||
radial-gradient(ellipse 75% 65% at 50% 100%, color-mix(in srgb, #b34bde 30%, transparent), transparent 60%);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 140% 140%;
|
||||
background-attachment: fixed;
|
||||
animation: bp-bg-drift 24s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes bp-bg-drift {
|
||||
0% {
|
||||
background-position: 0% 0%, 100% 0%, 50% 100%;
|
||||
}
|
||||
50% {
|
||||
background-position: 20% 20%, 80% 30%, 60% 80%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 0%, 100% 0%, 50% 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
body {
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Signature pink -> purple -> blue sweep (matches app/icon.svg), used for
|
||||
the wordmark and one hero moment - not smeared across every surface. */
|
||||
.bp-gradient-text {
|
||||
@@ -147,17 +180,20 @@
|
||||
background: linear-gradient(135deg, #ff6fb0, #b34bde 50%, #4f7fe0);
|
||||
}
|
||||
|
||||
/* Console-module surface: hairline border + a soft inset top highlight,
|
||||
standing in for backdrop-blur glassmorphism. */
|
||||
/* Console-module surface: translucent + blurred so the animated background
|
||||
sweep shines through, with a hairline border and soft inset top highlight. */
|
||||
.bp-glass {
|
||||
background: var(--card);
|
||||
background: color-mix(in srgb, var(--card) 55%, transparent);
|
||||
backdrop-filter: blur(20px) saturate(150%);
|
||||
border: 1px solid var(--border);
|
||||
box-shadow: inset 0 1px 0 color-mix(in srgb, var(--foreground) 8%, transparent);
|
||||
transition:
|
||||
border-color 0.2s ease,
|
||||
box-shadow 0.2s ease;
|
||||
box-shadow 0.2s ease,
|
||||
background-color 0.2s ease;
|
||||
}
|
||||
.bp-glass:hover {
|
||||
background: color-mix(in srgb, var(--card) 62%, transparent);
|
||||
border-color: color-mix(in srgb, var(--primary) 45%, var(--border));
|
||||
box-shadow:
|
||||
inset 0 1px 0 color-mix(in srgb, var(--foreground) 10%, transparent),
|
||||
@@ -201,6 +237,47 @@
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
|
||||
/* BrandMark's animated variant (dashboard hero): the heart glyph beats, the
|
||||
EKG-style curve glows in the primary accent instead of plain white. */
|
||||
@keyframes bp-mark-heartbeat {
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.22;
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
opacity: 0.75;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
.bp-mark-heart {
|
||||
transform-box: fill-box;
|
||||
transform-origin: center;
|
||||
animation: bp-mark-heartbeat 1.8s ease-in-out infinite;
|
||||
}
|
||||
@keyframes bp-mark-curve-glow {
|
||||
0%,
|
||||
100% {
|
||||
filter: drop-shadow(0 0 1px color-mix(in srgb, var(--primary) 50%, transparent));
|
||||
}
|
||||
50% {
|
||||
filter:
|
||||
drop-shadow(0 0 5px color-mix(in srgb, var(--primary) 100%, transparent))
|
||||
drop-shadow(0 0 10px color-mix(in srgb, var(--primary) 70%, transparent));
|
||||
}
|
||||
}
|
||||
.bp-mark-curve {
|
||||
stroke: #fff;
|
||||
animation: bp-mark-curve-glow 1.8s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.bp-mark-heart,
|
||||
.bp-mark-curve {
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bp-pulse-glow {
|
||||
0%,
|
||||
100% {
|
||||
|
||||
Reference in New Issue
Block a user