Files
buzz/desktop/src/shared/styles/globals.css
2026-06-08 14:59:26 +00:00

434 lines
10 KiB
CSS

@import "tailwindcss";
@import "tw-animate-css";
@config "../../../tailwind.config.js";
.sprout-emoji-mart {
align-items: stretch;
display: flex;
justify-content: stretch;
overflow: hidden;
width: 100%;
}
.sprout-emoji-mart > div {
align-items: stretch;
display: flex;
height: 100%;
justify-content: stretch;
max-height: 100%;
min-height: 0;
overflow: hidden;
width: 100%;
}
.sprout-emoji-mart em-emoji-picker {
--border-radius: 12px;
--category-icon-size: 24px;
--color-border: transparent;
--color-border-over: rgb(255 255 255 / 0.1);
--font-family: inherit;
--font-size: 14px;
--rgb-accent: var(--sprout-emoji-picker-rgb-color, 245, 247, 255);
--rgb-background: var(--sprout-emoji-picker-rgb-background, 54, 58, 79);
--rgb-color: var(--sprout-emoji-picker-rgb-color, 245, 247, 255);
--rgb-input: var(--sprout-emoji-picker-rgb-input, 47, 51, 68);
--shadow: none;
height: 100%;
max-height: 100%;
min-height: 0;
overflow: hidden;
width: 100%;
}
@keyframes sprout-avatar-squish {
0% {
transform: translate(
var(--sprout-avatar-emoji-offset-x, 0px),
var(--sprout-avatar-emoji-offset-y, 0px)
)
scale(1);
}
42% {
transform: translate(
var(--sprout-avatar-emoji-offset-x, 0px),
var(--sprout-avatar-emoji-offset-y, 0px)
)
scaleX(0.96) scaleY(0.88);
}
100% {
transform: translate(
var(--sprout-avatar-emoji-offset-x, 0px),
var(--sprout-avatar-emoji-offset-y, 0px)
)
scale(1);
}
}
.sprout-avatar-emoji-glyph {
--sprout-avatar-emoji-offset-x: 1px;
--sprout-avatar-emoji-offset-y: 7px;
transform: translate(
var(--sprout-avatar-emoji-offset-x),
var(--sprout-avatar-emoji-offset-y)
);
}
.sprout-avatar-squish {
animation: sprout-avatar-squish 200ms ease-out;
transform-origin: center;
}
.sprout-avatar-hue-scrubber {
background: linear-gradient(
90deg,
#ff0000 0%,
#ffff00 16.67%,
#00ff00 33.33%,
#00ffff 50%,
#0000ff 66.67%,
#ff00ff 83.33%,
#ff0000 100%
);
outline: none;
touch-action: none;
user-select: none;
-webkit-user-select: none;
}
/* ── Tiptap rich-text composer ──────────────────────────────────────── */
.rich-text-composer .tiptap {
outline: none;
min-height: 1.5rem; /* single line height */
font-size: 0.875rem;
line-height: 1.5rem;
}
.rich-text-composer .tiptap p {
margin: 0;
}
.rich-text-composer .tiptap p.is-editor-empty:first-child::before {
content: attr(data-placeholder);
float: left;
color: hsl(var(--muted-foreground));
pointer-events: none;
height: 0;
}
.pulse-composer
.rich-text-composer
.tiptap
p.is-editor-empty:first-child::before {
color: hsl(var(--muted-foreground) / 0.65);
}
.pulse-composer:focus-within
.rich-text-composer
.tiptap
p.is-editor-empty:first-child::before {
color: hsl(var(--foreground));
}
.rich-text-composer .tiptap strong {
font-weight: 600;
}
.rich-text-composer .tiptap em {
font-style: italic;
}
.rich-text-composer .tiptap s {
text-decoration: line-through;
}
.rich-text-composer .tiptap code {
border-radius: 0.375rem;
background: hsl(var(--muted));
padding: 0.125rem 0.375rem;
font-family: ui-monospace, monospace;
font-size: 0.8125rem;
}
.rich-text-composer .tiptap pre {
border-radius: 0.75rem;
border: 1px solid hsl(var(--border) / 0.7);
background: hsl(var(--muted) / 0.6);
padding: 0.375rem 0.75rem;
overflow-x: auto;
margin: 0.25rem 0;
}
.rich-text-composer .tiptap pre code {
background: none;
padding: 0;
border-radius: 0;
font-size: 0.8125rem;
line-height: 1.5rem;
}
.rich-text-composer .tiptap blockquote {
border-left: 2px solid hsl(var(--border));
padding-left: 1rem;
font-style: italic;
color: hsl(var(--muted-foreground));
margin: 0.25rem 0;
}
.rich-text-composer .tiptap ul {
list-style-type: disc;
padding-left: 1.5rem;
margin: 0.25rem 0;
}
.rich-text-composer .tiptap ol {
list-style-type: decimal;
padding-left: 1.5rem;
margin: 0.25rem 0;
}
.rich-text-composer .tiptap li {
margin: 0.125rem 0;
}
.rich-text-composer .tiptap li p {
display: inline;
}
.rich-text-composer .tiptap a {
color: hsl(var(--primary));
text-decoration: underline;
text-underline-offset: 4px;
cursor: pointer;
}
.rich-text-composer .tiptap hr {
border-color: hsl(var(--border) / 0.8);
margin: 0.5rem 0;
}
.rich-text-composer .tiptap .mention-highlight {
display: inline-block;
border-radius: 4px;
background: hsl(var(--primary) / 0.15);
padding: 3px 4px 2px;
font-size: 15px;
line-height: 1;
color: hsl(var(--primary));
font-weight: 500;
}
.agent-activity-shimmer {
display: inline-block;
color: transparent;
background-image: linear-gradient(
90deg,
hsl(var(--muted-foreground) / 0.48) 0%,
hsl(var(--muted-foreground) / 0.58) 34%,
hsl(var(--foreground) / 0.96) 48%,
hsl(var(--foreground)) 50%,
hsl(var(--foreground) / 0.96) 52%,
hsl(var(--muted-foreground) / 0.58) 66%,
hsl(var(--muted-foreground) / 0.48) 100%
);
background-size: 260% 100%;
background-position: 100% 50%;
-webkit-background-clip: text;
background-clip: text;
animation: agent-activity-shimmer 4.8s cubic-bezier(0.65, 0, 0.35, 1) infinite
alternate;
}
@keyframes agent-activity-shimmer {
0%,
18% {
background-position: 100% 50%;
}
82%,
100% {
background-position: 0% 50%;
}
}
@keyframes route-target-highlight-fade {
0%,
60% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@media (prefers-reduced-motion: reduce) {
.agent-activity-shimmer {
color: hsl(var(--muted-foreground));
background-image: none;
animation: none;
}
}
/* ── Code block line numbers & diff ────────────────────────────────── */
.code-block-lines {
counter-reset: code-line;
}
.code-block-lines [data-line] {
display: block;
counter-increment: code-line;
}
.code-block-lines [data-line]::before {
content: counter(code-line);
display: inline-block;
width: 2.5ch;
margin-right: 1.5ch;
text-align: right;
color: hsl(var(--muted-foreground) / 0.4);
user-select: none;
pointer-events: none;
}
.code-line-diff-add {
background-color: hsl(120 40% 50% / 0.15);
}
.code-line-diff-remove {
background-color: hsl(0 60% 50% / 0.15);
}
.dark .code-line-diff-add {
background-color: hsl(120 40% 50% / 0.12);
}
.dark .code-line-diff-remove {
background-color: hsl(0 60% 50% / 0.12);
}
@layer base {
:root {
/* Catppuccin Latte (mauve accent) */
--radius: 0.625rem;
--background: 220 23.08% 94.9%;
--foreground: 234 16.02% 35.49%;
--card: 220 23.08% 94.9%;
--card-foreground: 234 16.02% 35.49%;
--popover: 220 23.08% 94.9%;
--popover-foreground: 234 16.02% 35.49%;
--primary: 266 85.05% 58.04%;
--primary-foreground: 220 23.08% 94.9%;
--secondary: 223 15.91% 82.75%;
--secondary-foreground: 234 16.02% 35.49%;
--muted: 223 15.91% 82.75%;
--muted-foreground: 233 12.8% 41.37%;
--accent: 223 15.91% 82.75%;
--accent-foreground: 234 16.02% 35.49%;
--destructive: 347 86.67% 44.12%;
--destructive-foreground: 220 23.08% 94.9%;
--border: 225 13.56% 76.86%;
--input: 225 13.56% 76.86%;
--ring: 234 16.02% 35.49%;
--chart-1: 345 57.65% 74.12%;
--chart-2: 185 37.25% 70.59%;
--chart-3: 219 81.96% 78.43%;
--chart-4: 35 61.18% 76.86%;
--chart-5: 113 32.94% 73.33%;
--sidebar: 218 25.1% 93.73%;
--sidebar-background: 218 25.1% 93.73%;
--sidebar-foreground: 234 16.02% 35.49%;
--sidebar-primary: 266 85.05% 58.04%;
--sidebar-primary-foreground: 220 23.08% 94.9%;
--sidebar-active: var(--sidebar-primary);
--sidebar-active-foreground: var(--sidebar-primary-foreground);
--sidebar-accent: 220 23.08% 94.9%;
--sidebar-accent-foreground: 234 16.02% 35.49%;
--sidebar-border: 225 13.56% 76.86%;
--sidebar-ring: 225 13.56% 76.86%;
}
.dark {
/* Catppuccin Macchiato (mauve accent) */
--radius: 0.625rem;
--background: 232 23.4% 18.43%;
--foreground: 227 68.25% 87.65%;
--card: 232 23.4% 18.43%;
--card-foreground: 227 68.25% 87.65%;
--popover: 232 23.4% 18.43%;
--popover-foreground: 227 68.25% 87.65%;
--primary: 267 82.69% 79.61%;
--primary-foreground: 232 23.4% 18.43%;
--secondary: 230 18.8% 26.08%;
--secondary-foreground: 227 68.25% 87.65%;
--muted: 230 18.8% 26.08%;
--muted-foreground: 228 39.22% 80%;
--accent: 230 18.8% 26.08%;
--accent-foreground: 227 68.25% 87.65%;
--destructive: 351 73.91% 72.94%;
--destructive-foreground: 232 23.4% 18.43%;
--border: 231 15.61% 33.92%;
--input: 231 15.61% 33.92%;
--ring: 227 68.25% 87.65%;
--chart-1: 333 20.78% 38.04%;
--chart-2: 193 19.61% 38.04%;
--chart-3: 224 26.67% 41.18%;
--chart-4: 30 8.24% 42.35%;
--chart-5: 139 10.98% 38.82%;
--sidebar: 234 22.75% 17.25%;
--sidebar-background: 234 22.75% 17.25%;
--sidebar-foreground: 227 68.25% 87.65%;
--sidebar-primary: 267 82.69% 79.61%;
--sidebar-primary-foreground: 232 23.4% 18.43%;
--sidebar-active: var(--sidebar-primary);
--sidebar-active-foreground: var(--sidebar-primary-foreground);
--sidebar-accent: 232 23.4% 18.43%;
--sidebar-accent-foreground: 227 68.25% 87.65%;
--sidebar-border: 231 15.61% 33.92%;
--sidebar-ring: 231 15.61% 33.92%;
}
* {
@apply border-border;
}
mark {
background-color: transparent;
color: inherit;
}
html.dark {
color-scheme: dark;
}
body {
@apply bg-background text-foreground antialiased;
font-family: "Geist", "Avenir Next", "Segoe UI", sans-serif;
}
/*
* Tailwind v4's preflight no longer sets `cursor: pointer` on buttons.
* Restore it for clearly actionable elements so hover affordance is
* consistent across the app. Disabled / aria-disabled elements keep
* the default cursor; explicit `cursor-*` utility classes still win
* because utilities are in a later layer than base.
*/
button:not(:disabled),
a[href],
summary,
[role="button"]:not([aria-disabled="true"]),
[role="menuitem"]:not([aria-disabled="true"]),
[role="menuitemcheckbox"]:not([aria-disabled="true"]),
[role="menuitemradio"]:not([aria-disabled="true"]),
[role="tab"]:not([aria-disabled="true"]),
[role="link"] {
cursor: pointer;
}
button:disabled,
[aria-disabled="true"] {
cursor: default;
}
}