mirror of
https://github.com/block/buzz.git
synced 2026-11-12 20:31:12 +00:00
## Summary - add a visible Stop control for interrupting agent speech - make push-to-talk available by default while preserving manual mute controls - refine agent management, muted audio states, drawer layering, and return navigation - suppress duplicate notification sounds for Huddle messages ## Why Huddles could trap users behind long agent speech, hide useful agent controls, and leave temporary Huddle state visible after the call. The drawer also regressed when the terminal substrate began painting behind the rounded app surface. ## Validation - `just desktop-ci` - focused Huddle Playwright coverage for the drawer, speech interruption, agent picker, and leave navigation --------- Signed-off-by: kenny lopez <klopez4212@gmail.com> Signed-off-by: Wes <wesbillman@users.noreply.github.com> Co-authored-by: Wes <wesbillman@users.noreply.github.com> Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz>
777 lines
21 KiB
CSS
777 lines
21 KiB
CSS
@layer components {
|
|
.buzz-side-panel-enter {
|
|
animation: buzz-side-panel-enter 260ms cubic-bezier(0.32, 0.72, 0, 1) both;
|
|
transform-origin: right center;
|
|
will-change: transform, opacity;
|
|
}
|
|
|
|
.buzz-huddle-shell {
|
|
--buzz-huddle-drawer-height: 5rem;
|
|
--buzz-huddle-drawer-radius: 24px;
|
|
--buzz-huddle-drawer-ease: cubic-bezier(0.32, 0.72, 0, 1);
|
|
--buzz-huddle-drawer-surface: var(--huddle-drawer-surface, 0 0% 0%);
|
|
/* Keep the drawer surface behind the lifted app so the dark background
|
|
* remains visible through its rounded lower corners. */
|
|
background: hsl(var(--buzz-huddle-drawer-surface));
|
|
}
|
|
|
|
.buzz-huddle-app-surface {
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
bottom: 0;
|
|
box-shadow: none;
|
|
left: 0;
|
|
position: absolute;
|
|
right: 0;
|
|
top: 0;
|
|
transition:
|
|
bottom 260ms var(--buzz-huddle-drawer-ease),
|
|
border-bottom-left-radius 260ms var(--buzz-huddle-drawer-ease),
|
|
border-bottom-right-radius 260ms var(--buzz-huddle-drawer-ease),
|
|
box-shadow 260ms var(--buzz-huddle-drawer-ease);
|
|
will-change:
|
|
bottom, border-bottom-left-radius, border-bottom-right-radius, box-shadow;
|
|
}
|
|
|
|
.buzz-huddle-app-surface::after {
|
|
background: hsl(var(--buzz-huddle-drawer-surface));
|
|
bottom: -1px;
|
|
content: "";
|
|
height: 2px;
|
|
left: 0;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
right: 0;
|
|
transition: opacity 260ms var(--buzz-huddle-drawer-ease);
|
|
z-index: 60;
|
|
}
|
|
|
|
.buzz-huddle-app-surface-open {
|
|
border-bottom-left-radius: var(--buzz-huddle-drawer-radius);
|
|
border-bottom-right-radius: var(--buzz-huddle-drawer-radius);
|
|
bottom: var(--buzz-huddle-drawer-height);
|
|
box-shadow:
|
|
0 10px 24px -12px rgb(0 0 0 / 62%),
|
|
0 2px 7px -4px rgb(0 0 0 / 42%);
|
|
}
|
|
|
|
.buzz-huddle-app-surface-open::after {
|
|
opacity: 1;
|
|
}
|
|
|
|
.buzz-huddle-drawer-backdrop {
|
|
background: hsl(var(--buzz-huddle-drawer-surface));
|
|
bottom: 0;
|
|
height: calc(
|
|
var(--buzz-huddle-drawer-height) +
|
|
var(--buzz-huddle-drawer-radius)
|
|
);
|
|
left: 0;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
right: 0;
|
|
transition: opacity 260ms var(--buzz-huddle-drawer-ease);
|
|
z-index: 1;
|
|
}
|
|
|
|
.buzz-huddle-drawer-backdrop-open {
|
|
opacity: 1;
|
|
}
|
|
|
|
/* The dedicated companion keeps room for the controls without making the
|
|
* transcript look like a raised card. */
|
|
.buzz-huddle-app-surface-room-open {
|
|
bottom: var(--buzz-huddle-drawer-height);
|
|
}
|
|
|
|
.buzz-huddle-drawer {
|
|
--buzz-huddle-drawer-surface: var(--huddle-drawer-surface, 0 0% 0%);
|
|
--background: var(--buzz-huddle-drawer-surface);
|
|
--foreground: 0 0% 98%;
|
|
--primary: 0 0% 98%;
|
|
--primary-foreground: 0 0% 9%;
|
|
--secondary: var(--huddle-control-surface, 0 0% 14.9%);
|
|
--secondary-foreground: var(--huddle-control-foreground, 0 0% 98%);
|
|
--muted: var(--huddle-control-chevron-surface, 0 0% 14.9%);
|
|
--muted-foreground: 0 0% 63.9%;
|
|
--accent: var(
|
|
--huddle-control-hover-surface,
|
|
var(--huddle-control-surface, 0 0% 14.9%)
|
|
);
|
|
--accent-foreground: 0 0% 98%;
|
|
--popover: var(--buzz-huddle-drawer-surface);
|
|
--popover-foreground: 0 0% 98%;
|
|
--destructive: 0 84.2% 60.2%;
|
|
--destructive-foreground: 0 0% 98%;
|
|
--border: 0 0% 14.9%;
|
|
--input: 0 0% 14.9%;
|
|
--ring: 0 0% 83.1%;
|
|
|
|
color-scheme: dark;
|
|
background: hsl(var(--buzz-huddle-drawer-surface));
|
|
overflow-x: auto;
|
|
overflow-y: hidden;
|
|
}
|
|
|
|
.buzz-huddle-drawer::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
.buzz-huddle-popover {
|
|
--buzz-huddle-popover-surface: var(
|
|
--huddle-popover-surface,
|
|
var(--huddle-control-chevron-surface, 0 0% 16%)
|
|
);
|
|
--background: var(--buzz-huddle-popover-surface);
|
|
--foreground: var(--huddle-control-foreground, 0 0% 98%);
|
|
--popover: var(--buzz-huddle-popover-surface);
|
|
--popover-foreground: var(--foreground);
|
|
--border: var(
|
|
--huddle-popover-border,
|
|
var(--huddle-control-hover-surface, 0 0% 24%)
|
|
);
|
|
|
|
background: hsl(var(--buzz-huddle-popover-surface));
|
|
border-color: hsl(var(--border) / 0.6);
|
|
box-shadow:
|
|
0 6px 18px lch(0% 0 0 / 0.02),
|
|
0 3px 9px lch(0% 0 0 / 0.04),
|
|
0 1px 1px lch(0% 0 0 / 0.04);
|
|
color: hsl(var(--foreground));
|
|
}
|
|
|
|
.buzz-huddle-headphones-hint {
|
|
--background: var(
|
|
--huddle-tooltip-surface,
|
|
var(--huddle-control-surface, var(--secondary))
|
|
);
|
|
--foreground: var(
|
|
--huddle-tooltip-foreground,
|
|
var(--huddle-control-foreground, var(--secondary-foreground))
|
|
);
|
|
--popover: var(--background);
|
|
--popover-foreground: var(--foreground);
|
|
|
|
background: hsl(var(--background));
|
|
box-shadow:
|
|
0 6px 18px lch(0% 0 0 / 0.02),
|
|
0 3px 9px lch(0% 0 0 / 0.04),
|
|
0 1px 1px lch(0% 0 0 / 0.04);
|
|
color: hsl(var(--foreground));
|
|
}
|
|
|
|
.buzz-huddle-mic-meter-bar {
|
|
border-radius: 9999px;
|
|
height: var(--buzz-huddle-meter-height, 0.25rem);
|
|
transition: none;
|
|
width: 0.25rem;
|
|
}
|
|
|
|
.buzz-huddle-speaking-avatar {
|
|
isolation: isolate;
|
|
}
|
|
|
|
.buzz-huddle-speaking-avatar::after {
|
|
border: 2px solid hsl(142 71% 45%);
|
|
border-radius: inherit;
|
|
content: "";
|
|
inset: -2px;
|
|
opacity: var(--buzz-huddle-speaker-opacity, 0);
|
|
pointer-events: none;
|
|
position: absolute;
|
|
transform: scale(var(--buzz-huddle-speaker-scale, 1.02));
|
|
transition:
|
|
opacity 80ms linear,
|
|
transform 90ms cubic-bezier(0.2, 0, 0, 1);
|
|
will-change: opacity, transform;
|
|
z-index: 1;
|
|
}
|
|
|
|
@keyframes buzz-huddle-participant-tile-enter {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
.buzz-huddle-participant-tile {
|
|
animation: buzz-huddle-participant-tile-enter 180ms
|
|
cubic-bezier(0.23, 1, 0.32, 1) both;
|
|
transform-origin: center;
|
|
will-change: opacity, transform;
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.buzz-side-panel-enter {
|
|
animation: none;
|
|
will-change: auto;
|
|
}
|
|
|
|
.buzz-huddle-app-surface {
|
|
transition: none;
|
|
}
|
|
|
|
.buzz-huddle-drawer-backdrop {
|
|
transition: none;
|
|
}
|
|
|
|
.buzz-huddle-mic-meter-bar {
|
|
transition: none;
|
|
}
|
|
|
|
.buzz-huddle-speaking-avatar {
|
|
isolation: auto;
|
|
}
|
|
|
|
.buzz-huddle-speaking-avatar::after {
|
|
transform: scale(1.04);
|
|
transition: none;
|
|
will-change: auto;
|
|
}
|
|
|
|
.buzz-huddle-participant-tile {
|
|
animation: none;
|
|
will-change: auto;
|
|
}
|
|
}
|
|
|
|
.buzz-startup-shell {
|
|
min-height: 100dvh;
|
|
width: 100%;
|
|
}
|
|
|
|
.buzz-onboarding-step-frame {
|
|
min-height: min(1000px, max(0px, calc(100dvh - 106px - 7rem)));
|
|
max-height: 1000px;
|
|
}
|
|
|
|
.buzz-onboarding-step-frame > .buzz-onboarding-slide,
|
|
.buzz-onboarding-step-frame
|
|
> .buzz-onboarding-slide
|
|
> .buzz-onboarding-transition-line {
|
|
display: flex;
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
}
|
|
|
|
.buzz-onboarding-neutral-theme.buzz-startup-shell {
|
|
/* Dot grid over the chartreuse→light-blue gradient (dots layer first so
|
|
they sit on top). The welcome page overrides this with dots over a flat
|
|
chartreuse fill below. */
|
|
background-image:
|
|
radial-gradient(circle, rgb(0 0 0 / 0.08) 1px, transparent 1px),
|
|
linear-gradient(
|
|
to bottom,
|
|
var(--buzz-welcome-chartreuse),
|
|
var(--buzz-onboarding-shell-bottom)
|
|
);
|
|
background-size:
|
|
24px 24px,
|
|
auto;
|
|
}
|
|
|
|
.buzz-onboarding-neutral-theme.buzz-startup-shell.buzz-onboarding-welcome {
|
|
background-color: var(--buzz-welcome-chartreuse);
|
|
/* Landing is a flat chartreuse field, so the docked-footer scrim must match
|
|
it (not the gradient's light-blue bottom) to stay invisible. */
|
|
--buzz-onboarding-shell-bottom: var(--buzz-welcome-chartreuse);
|
|
/* Subtle dot grid: 2px dots spaced on a 24px lattice. */
|
|
background-image: radial-gradient(
|
|
circle,
|
|
rgb(0 0 0 / 0.08) 1px,
|
|
transparent 1px
|
|
);
|
|
background-size: 24px 24px;
|
|
}
|
|
|
|
.buzz-onboarding-neutral-theme {
|
|
/* Landing "chartreuse" — the welcome background; reused for the CTA label. */
|
|
--buzz-welcome-chartreuse: #d7d72e;
|
|
/* Bottom stop of the onboarding shell gradient; also the docked-footer
|
|
scrim color so content scrolling under the CTA fades into the page. */
|
|
--buzz-onboarding-shell-bottom: #d7e7f6;
|
|
/* Label color for the primary onboarding CTA (light blue on the dark pill). */
|
|
--buzz-onboarding-cta-label: #d7e6f0;
|
|
/* Olive ink for the backup step's private key and its "never share" caption,
|
|
reading against the fuzzy-white key frame. */
|
|
--buzz-onboarding-backup-ink: #717106;
|
|
--background: 0 0% 100%;
|
|
--foreground: 0 0% 9%;
|
|
--primary: 0 0% 9%;
|
|
--primary-foreground: 0 0% 98%;
|
|
--secondary: 0 0% 96.1%;
|
|
--secondary-foreground: 0 0% 9%;
|
|
--muted: 0 0% 96.1%;
|
|
--muted-foreground: 0 0% 45.1%;
|
|
--accent: 0 0% 96.1%;
|
|
--accent-foreground: 0 0% 9%;
|
|
--border: 0 0% 89.8%;
|
|
--input: 0 0% 89.8%;
|
|
--ring: 0 0% 9%;
|
|
--buzz-onboarding-emoji-picker-background: 245, 245, 245;
|
|
--buzz-onboarding-emoji-picker-color: 23, 23, 23;
|
|
--buzz-onboarding-emoji-picker-input: 255, 255, 255;
|
|
--buzz-onboarding-avatar-dialog-bg: 255 255 255;
|
|
--buzz-onboarding-avatar-accent-bg: 240 240 205;
|
|
--buzz-onboarding-avatar-accent-fg: 113 113 6;
|
|
--buzz-onboarding-avatar-action-bg: 23 23 23;
|
|
--buzz-onboarding-avatar-action-fg: 240 240 205;
|
|
--buzz-onboarding-avatar-control-fg: 113 113 6;
|
|
--buzz-onboarding-avatar-dialog-shadow: 0 0 0;
|
|
}
|
|
|
|
/*
|
|
* Backup options and password backup intentionally leave the bright
|
|
* onboarding world for a dark security-focused subview. Keep these semantic
|
|
* overrides on a reusable class as well as the shell so portaled
|
|
* popovers/dialogs can opt into the same treatment.
|
|
*/
|
|
.buzz-onboarding-security-theme {
|
|
color-scheme: dark;
|
|
--buzz-onboarding-shell-bottom: #082b49;
|
|
--buzz-onboarding-cta-label: #f5f5f5;
|
|
--background: 222 45% 4%;
|
|
--foreground: 0 0% 96%;
|
|
--card: 220 14% 11%;
|
|
--card-foreground: 0 0% 96%;
|
|
--popover: 220 14% 9%;
|
|
--popover-foreground: 0 0% 96%;
|
|
--primary: 0 0% 16%;
|
|
--primary-foreground: 0 0% 96%;
|
|
--secondary: 0 0% 12%;
|
|
--secondary-foreground: 0 0% 96%;
|
|
--muted: 0 0% 12%;
|
|
--muted-foreground: 0 0% 72%;
|
|
--accent: 0 0% 16%;
|
|
--accent-foreground: 0 0% 96%;
|
|
--destructive: 0 84% 70%;
|
|
--destructive-foreground: 0 0% 4%;
|
|
--border: 0 0% 22%;
|
|
--input: 0 0% 22%;
|
|
--ring: 0 0% 84%;
|
|
}
|
|
|
|
.buzz-onboarding-neutral-theme.buzz-startup-shell.buzz-onboarding-security-theme {
|
|
background-color: #010103;
|
|
background-image:
|
|
radial-gradient(circle, rgb(143 211 255 / 0.11) 1px, transparent 1px),
|
|
radial-gradient(
|
|
ellipse at 50% 58%,
|
|
rgb(28 112 196 / 0.24) 0%,
|
|
rgb(18 76 138 / 0.1) 38%,
|
|
transparent 66%
|
|
),
|
|
linear-gradient(to bottom, #010103 0%, #040914 46%, #082b49 100%);
|
|
background-size:
|
|
24px 24px,
|
|
auto,
|
|
auto;
|
|
}
|
|
|
|
.buzz-onboarding-key-text {
|
|
@apply w-full break-all [overflow-wrap:anywhere] font-mono text-nsec-key;
|
|
|
|
color: var(--buzz-onboarding-backup-ink);
|
|
}
|
|
|
|
.dark .buzz-onboarding-neutral-theme:not(.buzz-startup-shell) {
|
|
--background: 0 0% 3.9%;
|
|
--foreground: 0 0% 98%;
|
|
--primary: 0 0% 98%;
|
|
--primary-foreground: 0 0% 9%;
|
|
--secondary: 0 0% 14.9%;
|
|
--secondary-foreground: 0 0% 98%;
|
|
--muted: 0 0% 14.9%;
|
|
--muted-foreground: 0 0% 63.9%;
|
|
--accent: 0 0% 14.9%;
|
|
--accent-foreground: 0 0% 98%;
|
|
--border: 0 0% 14.9%;
|
|
--input: 0 0% 14.9%;
|
|
--ring: 0 0% 83.1%;
|
|
--buzz-onboarding-emoji-picker-background: 38, 38, 38;
|
|
--buzz-onboarding-emoji-picker-color: 250, 250, 250;
|
|
--buzz-onboarding-emoji-picker-input: 10, 10, 10;
|
|
--buzz-onboarding-avatar-dialog-bg: 24 24 20;
|
|
--buzz-onboarding-avatar-accent-bg: 211 211 163;
|
|
--buzz-onboarding-avatar-accent-fg: 24 24 20;
|
|
--buzz-onboarding-avatar-action-bg: 113 113 6;
|
|
--buzz-onboarding-avatar-action-fg: 240 240 205;
|
|
--buzz-onboarding-avatar-control-fg: 224 224 176;
|
|
--buzz-onboarding-avatar-dialog-shadow: 0 0 0;
|
|
}
|
|
|
|
.buzz-onboarding-neutral-theme[data-system-color-scheme="light"],
|
|
.dark
|
|
.buzz-onboarding-neutral-theme[data-system-color-scheme="light"]:not(
|
|
.buzz-startup-shell
|
|
) {
|
|
--background: 0 0% 100%;
|
|
--foreground: 0 0% 9%;
|
|
--primary: 0 0% 9%;
|
|
--primary-foreground: 0 0% 98%;
|
|
--secondary: 0 0% 96.1%;
|
|
--secondary-foreground: 0 0% 9%;
|
|
--muted: 0 0% 96.1%;
|
|
--muted-foreground: 0 0% 45.1%;
|
|
--accent: 0 0% 96.1%;
|
|
--accent-foreground: 0 0% 9%;
|
|
--border: 0 0% 89.8%;
|
|
--input: 0 0% 89.8%;
|
|
--ring: 0 0% 9%;
|
|
--buzz-onboarding-emoji-picker-background: 245, 245, 245;
|
|
--buzz-onboarding-emoji-picker-color: 23, 23, 23;
|
|
--buzz-onboarding-emoji-picker-input: 255, 255, 255;
|
|
--buzz-onboarding-avatar-dialog-bg: 255 255 255;
|
|
--buzz-onboarding-avatar-accent-bg: 240 240 205;
|
|
--buzz-onboarding-avatar-accent-fg: 113 113 6;
|
|
--buzz-onboarding-avatar-action-bg: 23 23 23;
|
|
--buzz-onboarding-avatar-action-fg: 240 240 205;
|
|
--buzz-onboarding-avatar-control-fg: 113 113 6;
|
|
--buzz-onboarding-avatar-dialog-shadow: 0 0 0;
|
|
}
|
|
|
|
.buzz-onboarding-neutral-theme[data-system-color-scheme="dark"]:not(
|
|
.buzz-startup-shell
|
|
) {
|
|
--background: 0 0% 3.9%;
|
|
--foreground: 0 0% 98%;
|
|
--primary: 0 0% 98%;
|
|
--primary-foreground: 0 0% 9%;
|
|
--secondary: 0 0% 14.9%;
|
|
--secondary-foreground: 0 0% 98%;
|
|
--muted: 0 0% 14.9%;
|
|
--muted-foreground: 0 0% 63.9%;
|
|
--accent: 0 0% 14.9%;
|
|
--accent-foreground: 0 0% 98%;
|
|
--border: 0 0% 14.9%;
|
|
--input: 0 0% 14.9%;
|
|
--ring: 0 0% 83.1%;
|
|
--buzz-onboarding-emoji-picker-background: 38, 38, 38;
|
|
--buzz-onboarding-emoji-picker-color: 250, 250, 250;
|
|
--buzz-onboarding-emoji-picker-input: 10, 10, 10;
|
|
--buzz-onboarding-avatar-dialog-bg: 24 24 20;
|
|
--buzz-onboarding-avatar-accent-bg: 211 211 163;
|
|
--buzz-onboarding-avatar-accent-fg: 24 24 20;
|
|
--buzz-onboarding-avatar-action-bg: 113 113 6;
|
|
--buzz-onboarding-avatar-action-fg: 240 240 205;
|
|
--buzz-onboarding-avatar-control-fg: 224 224 176;
|
|
--buzz-onboarding-avatar-dialog-shadow: 0 0 0;
|
|
}
|
|
|
|
/* The key-import card is viewport-centered on ordinary windows, independent
|
|
of the top heading and bottom-docked actions. Short windows return it to
|
|
document flow so the shell can grow and scroll instead of overlapping. */
|
|
.buzz-onboarding-key-import-position {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: calc(50dvh - 6.625rem);
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
@media (max-height: 44rem) {
|
|
.buzz-onboarding-key-import-position {
|
|
position: static;
|
|
margin-top: 3rem;
|
|
transform: none;
|
|
}
|
|
}
|
|
|
|
.buzz-onboarding-transition-content {
|
|
animation-delay: var(--buzz-onboarding-transition-delay, 0ms);
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="fade"]
|
|
> .buzz-onboarding-transition-content {
|
|
animation: buzz-onboarding-fade-in 300ms ease-out backwards;
|
|
animation-delay: var(--buzz-onboarding-transition-delay, 0ms);
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="line-slide"]
|
|
> .buzz-onboarding-transition-content {
|
|
animation-duration: 650ms;
|
|
animation-fill-mode: backwards;
|
|
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="line-slide"][data-onboarding-direction="forward"]
|
|
> .buzz-onboarding-transition-content {
|
|
animation-name: buzz-onboarding-line-slide-forward;
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="line-slide"][data-onboarding-direction="backward"]
|
|
> .buzz-onboarding-transition-content {
|
|
animation-name: buzz-onboarding-line-slide-backward;
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="mask-reveal-down"],
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="mask-reveal-up"] {
|
|
overflow: visible;
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="mask-reveal-down"]
|
|
> .buzz-onboarding-transition-content,
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="mask-reveal-up"]
|
|
> .buzz-onboarding-transition-content {
|
|
/* `backwards` (not `both`): the reveal ends on an identity transform, so
|
|
holding it forward is visually a no-op but leaves a lingering transform
|
|
that establishes a containing block and traps `position: fixed`
|
|
descendants (the bottom-docked onboarding footer). Reverting to no
|
|
transform at rest looks identical and frees fixed positioning. */
|
|
animation-duration: 760ms;
|
|
animation-fill-mode: backwards;
|
|
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
|
|
animation-delay: var(--buzz-onboarding-transition-delay, 0ms);
|
|
transform-origin: 50% 70%;
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="mask-reveal-down"]
|
|
> .buzz-onboarding-transition-content {
|
|
animation-name: buzz-onboarding-mask-reveal-down;
|
|
}
|
|
|
|
.buzz-onboarding-transition-line[data-onboarding-effect="mask-reveal-up"]
|
|
> .buzz-onboarding-transition-content {
|
|
animation-name: buzz-onboarding-mask-reveal-up;
|
|
}
|
|
|
|
.buzz-onboarding-name-placeholder-caret {
|
|
animation: buzz-onboarding-caret-blink 1.1s steps(1, end) infinite;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-pill {
|
|
animation: buzz-onboarding-runtime-pill-in 180ms
|
|
cubic-bezier(0.22, 1, 0.36, 1) both;
|
|
font-size: 0.625rem;
|
|
letter-spacing: 0;
|
|
line-height: 1;
|
|
text-transform: uppercase;
|
|
transform-origin: top center;
|
|
will-change: opacity, transform;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-setup {
|
|
isolation: isolate;
|
|
position: relative;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-setup[data-setup-flash="true"] {
|
|
animation: buzz-onboarding-runtime-setup-bump 560ms
|
|
cubic-bezier(0.22, 1, 0.36, 1) both;
|
|
transform-origin: center;
|
|
will-change: transform;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-setup[data-setup-flash="true"]::after {
|
|
animation: buzz-onboarding-runtime-setup-ring 560ms
|
|
cubic-bezier(0.22, 1, 0.36, 1) both;
|
|
border: 1px solid var(--buzz-welcome-chartreuse);
|
|
border-radius: inherit;
|
|
content: "";
|
|
inset: -0.25rem;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
transform: scale(0.9);
|
|
will-change: opacity, transform;
|
|
}
|
|
|
|
@keyframes buzz-onboarding-runtime-pill-in {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-0.25rem) scale(0.94);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0) scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-runtime-setup-bump {
|
|
0%,
|
|
100% {
|
|
transform: translateZ(0) scale(1);
|
|
}
|
|
|
|
35% {
|
|
transform: translateZ(0) scale(1.06);
|
|
}
|
|
|
|
70% {
|
|
transform: translateZ(0) scale(0.99);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-runtime-setup-ring {
|
|
0% {
|
|
opacity: 0;
|
|
transform: scale(0.9);
|
|
}
|
|
|
|
28% {
|
|
opacity: 0.55;
|
|
transform: scale(1);
|
|
}
|
|
|
|
100% {
|
|
opacity: 0;
|
|
transform: scale(1.28);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-caret-blink {
|
|
0%,
|
|
55% {
|
|
opacity: 1;
|
|
}
|
|
|
|
56%,
|
|
100% {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-fade-in {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-line-slide-forward {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(48px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-line-slide-backward {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-48px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-mask-reveal-up {
|
|
from {
|
|
filter: blur(8px);
|
|
opacity: 0;
|
|
transform: translate3d(0, 30px, 0) scale(0.985);
|
|
}
|
|
|
|
56% {
|
|
filter: blur(2px);
|
|
opacity: 0.86;
|
|
}
|
|
|
|
to {
|
|
filter: blur(0);
|
|
opacity: 1;
|
|
transform: translate3d(0, 0, 0) scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-mask-reveal-down {
|
|
from {
|
|
filter: blur(8px);
|
|
opacity: 0;
|
|
transform: translate3d(0, -30px, 0) scale(0.985);
|
|
}
|
|
|
|
56% {
|
|
filter: blur(2px);
|
|
opacity: 0.86;
|
|
}
|
|
|
|
to {
|
|
filter: blur(0);
|
|
opacity: 1;
|
|
transform: translate3d(0, 0, 0) scale(1);
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.buzz-onboarding-runtime-check,
|
|
.buzz-onboarding-runtime-checkmark {
|
|
transition: none;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-pill {
|
|
animation: none;
|
|
will-change: auto;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-setup[data-setup-flash="true"] {
|
|
animation: none;
|
|
outline: 2px solid var(--buzz-welcome-chartreuse);
|
|
outline-offset: 2px;
|
|
will-change: auto;
|
|
}
|
|
|
|
.buzz-onboarding-runtime-setup[data-setup-flash="true"]::after {
|
|
animation: none;
|
|
content: none;
|
|
will-change: auto;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
@keyframes buzz-onboarding-line-slide-forward {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(24px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes buzz-onboarding-line-slide-backward {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-24px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.buzz-onboarding-transition-content {
|
|
animation: none;
|
|
filter: none;
|
|
opacity: 1;
|
|
transform: none;
|
|
}
|
|
|
|
.buzz-onboarding-name-placeholder-caret {
|
|
animation: none;
|
|
}
|
|
}
|
|
}
|