Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
37d8b60
🎨 Improved dark mode sidebar styling
peterzimon Jun 25, 2026
5047ee0
🎨 Improved dark mode sidebar menu styling
peterzimon Jun 25, 2026
56491cc
🎨 Updated secondary icon and text colors in dark sidebar
peterzimon Jun 25, 2026
9965b10
🎨 Aligned dark mode tab and page menu colors with the sidebar
peterzimon Jun 25, 2026
62a44d0
🎨 Added named tab-hover and tab-active surface tokens
peterzimon Jun 25, 2026
b806795
🎨 Lifted dark mode base border to gray-900 at 50%
peterzimon Jun 25, 2026
b719d16
🎨 Changed the new post + icon to white on hover in dark mode
peterzimon Jun 25, 2026
fcd6e6e
🎨 Removed the gradient background from the Latest post performance card
peterzimon Jun 25, 2026
3363125
🎨 Improved dark mode dropdown and outline button surfaces
peterzimon Jun 25, 2026
c903852
🎨 Updated dark mode elevated and popover surfaces
peterzimon Jun 25, 2026
c91270d
🎨 Added interactive-hover token and reused it across menus and tables
peterzimon Jun 25, 2026
e4aa7a1
🎨 Updated dark mode tooltips to use the elevated surface
peterzimon Jun 25, 2026
8827799
🎨 Improved dark mode hover surfaces, borders, and elevated surface
peterzimon Jun 25, 2026
2de83b5
🎨 Improved dark mode toggle group and promoted elevated-2 surface
peterzimon Jun 25, 2026
c02f650
🎨 Improved dark mode elevated surface tint and feature placeholder
peterzimon Jun 25, 2026
899d283
🎨 Improved dark mode greys with a less-saturated scale
peterzimon Jun 25, 2026
7315c0e
🎨 Improved dark mode tab-active tint and control border contrast
peterzimon Jun 25, 2026
f3a0afc
🎨 Updated dark mode Ember post list hover and feature image colors
peterzimon Jun 25, 2026
c629830
🎨 Updated dark mode Switch to a green track with white thumb
peterzimon Jun 25, 2026
f1d809c
🎨 Added a transition kill-switch when swapping light / dark mode
peterzimon Jun 25, 2026
d1ca6be
🎨 Updated dark mode page background, card, and analytics header
peterzimon Jun 25, 2026
e287ee3
🎨 Updated Ember admin dark page background to match the React shell
peterzimon Jun 26, 2026
434d00b
🎨 Updated dark mode editor surfaces to match the page background
peterzimon Jun 26, 2026
de42f0a
🎨 Updated dark mode editor modal and publish form backgrounds
peterzimon Jun 26, 2026
960033a
🎨 Updated dark mode list hovers and post analytics header
peterzimon Jun 26, 2026
8e8728c
🎨 Improved dark mode destructive color contrast
peterzimon Jun 26, 2026
59a10ba
🎨 Improved automations editor surface hierarchy
peterzimon Jun 26, 2026
1511bb0
🎨 Fixed dark mode AlertDialog overlay so it lifts above the page
peterzimon Jun 26, 2026
42ed927
🎨 Changed outline / dropdown Button variants to a transparent background
peterzimon Jun 26, 2026
aecb9c9
🎨 Updated help card hover backgrounds to use the table row hover
peterzimon Jun 26, 2026
c94e132
🎨 Updated Ember inputs and selects to match Shade visual style
peterzimon Jun 26, 2026
f48ab9b
🎨 Fixed light mode regressions on toggle group and sidebar search
peterzimon Jun 26, 2026
c2ae965
🎨 Reduced dark mode gray and surface tint further
peterzimon Jun 26, 2026
fccb927
🎨 Improved dark mode primary button surface contrast
peterzimon Jun 26, 2026
63ea434
🎨 Improved dark mode dropdown surfaces and global shadows
peterzimon Jun 26, 2026
0ab2471
🎨 Improved avatar saturation and light mode dropdown surfaces
peterzimon Jun 26, 2026
96c2cc4
🎨 Improved dark mode label / tag chip contrast
peterzimon Jun 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/admin/src/layout/app-sidebar/app-sidebar-header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ function AppSidebarHeader({ ...props }: React.ComponentProps<typeof SidebarHeade
{showSearch && (
<Button
variant="outline"
className="flex h-(--control-height) items-center justify-between rounded-full border-transparent pr-2 text-base text-muted-foreground shadow-xs hover:bg-background hover:text-gray-700 hover:shadow-sm dark:bg-gray-950 [&_svg]:stroke-2"
className="flex h-(--control-height) items-center justify-between rounded-full border-transparent bg-white pr-2 text-base text-muted-foreground shadow-xs hover:bg-background hover:text-gray-700 hover:shadow-sm dark:border-gray-900/50 dark:bg-gray-900/30 dark:hover:border-gray-900/80 dark:hover:text-gray-400 [&_svg]:stroke-2"
onClick={openSearchModal}
>
<div className="flex items-center gap-2">
Expand Down
2 changes: 1 addition & 1 deletion apps/admin/src/layout/app-sidebar/nav-content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function PostsNavItemContent({isActive, to}: {isActive: boolean; to: string}) {
</NavMenuItem.Link>
<a href="#/editor/post"
aria-label="Create new post"
className="absolute top-0 right-0 flex size-8 items-center justify-center rounded-full p-0 text-gray-700 ring-sidebar-ring outline-hidden transition-all hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2"
className="absolute top-0 right-0 flex size-8 items-center justify-center rounded-full p-0 text-gray-700 ring-sidebar-ring outline-hidden transition-all hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 dark:text-gray-800 dark:hover:text-white"
>
<LucideIcon.Plus
size={20}
Expand Down
4 changes: 2 additions & 2 deletions apps/admin/src/layout/app-sidebar/user-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ function UserMenu(props: UserMenuProps) {
</div>
<div className="grid flex-1 text-left text-base leading-tight">
<span className="truncate font-semibold">{currentUser.data?.name}</span>
<span className="-mt-px truncate text-sm text-muted-foreground">
<span className="-mt-px truncate text-sm text-muted-foreground dark:text-gray-800">
{currentUser.data?.email}
</span>
</div>
Expand All @@ -121,7 +121,7 @@ function UserMenu(props: UserMenuProps) {
<DropdownMenuContent
align="start"
sideOffset={10}
className={`w-[var(--radix-dropdown-menu-trigger-width)] ${showUpgradeBanner ? 'shadow-[0_18px_80px_0_rgba(0,0,0,0.07),0_7.52px_33.422px_0_rgba(0,0,0,0.05),0_4.021px_17.869px_0_rgba(0,0,0,0.04),0_2.254px_10.017px_0_rgba(0,0,0,0.04),0_1.197px_5.32px_0_rgba(0,0,0,0.03),0_0.498px_2.214px_0_rgba(0,0,0,0.02)]' : ''}`}
className={`w-[var(--radix-dropdown-menu-trigger-width)] dark:bg-surface-elevated-2 ${showUpgradeBanner ? 'shadow-[0_18px_80px_0_rgba(0,0,0,0.07),0_7.52px_33.422px_0_rgba(0,0,0,0.05),0_4.021px_17.869px_0_rgba(0,0,0,0.04),0_2.254px_10.017px_0_rgba(0,0,0,0.04),0_1.197px_5.32px_0_rgba(0,0,0,0.03),0_0.498px_2.214px_0_rgba(0,0,0,0.02)]' : ''}`}
>
<UserMenuHeader
name={currentUser.data?.name}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const AutomationHeader: React.FC<AutomationHeaderProps> = ({
const status = automation?.status;

return (
<header className='relative z-10 flex h-14 shrink-0 items-center justify-between bg-background px-4 shadow-sm dark:border-b dark:border-gray-950'>
<header className='relative z-10 flex h-14 shrink-0 items-center justify-between bg-surface-elevated px-4 shadow-sm dark:border-b dark:border-gray-950'>
<div className='flex min-w-0 items-center gap-3'>
<Button variant='ghost' asChild>
<Link aria-label='Back to automations' to='/automations'>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ interface HelpCardLayoutProps {
children?: React.ReactNode;
}

const cardClass = 'block w-full rounded-xl border border-border bg-card p-6 text-left transition-all hover:shadow-xs hover:bg-accent/50 group/card';
const cardClass = 'block w-full rounded-xl border border-border bg-card p-6 text-left transition-all hover:shadow-xs hover:bg-table-row-hover group/card';

const HelpCardBody: React.FC<HelpCardLayoutProps> = ({title, description, children}) => (
<div className='flex items-center gap-6'>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ const AutomationsList: React.FC<AutomationsListProps> = ({automations = [], isLo
return (
<TableRow
key={automation.slug}
className="grid w-full cursor-pointer grid-cols-[1fr_auto] items-center gap-x-4 p-2 hover:bg-muted/50 lg:p-0"
className="grid w-full cursor-pointer grid-cols-[1fr_auto] items-center gap-x-4 p-2 hover:bg-table-row-hover lg:p-0"
data-testid="automation-list-row"
>
<TableCell className="static min-w-0 group-hover:bg-transparent lg:p-4">
<TableCell className="static min-w-0 lg:p-4">
<Link
className="before:absolute before:inset-0 before:z-10 before:rounded-sm focus-visible:outline-hidden focus-visible:before:ring-2 focus-visible:before:ring-focus-ring"
to={`/automations/${automation.id}`}
Expand All @@ -70,7 +70,7 @@ const AutomationsList: React.FC<AutomationsListProps> = ({automations = [], isLo
</span>
)}
</TableCell>
<TableCell className="text-right group-hover:bg-transparent lg:w-32 lg:p-4">
<TableCell className="text-right lg:w-32 lg:p-4">
<AutomationStatusBadge status={automation.status} />
</TableCell>
</TableRow>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -512,9 +512,9 @@ const AutomationCanvas: React.FC<AutomationCanvasProps> = ({
}

return (
<div className='relative flex-1 overflow-hidden bg-surface-page' data-testid='automation-canvas'>
<div className='relative flex-1 overflow-hidden bg-background' data-testid='automation-canvas'>
<ReactFlow
className='[--xy-background-color:var(--color-grey-50)] [--xy-background-pattern-color:var(--color-grey-500)] [--xy-edge-stroke:var(--color-grey-300)] dark:[--xy-background-color:var(--color-black)] dark:[--xy-background-pattern-color:var(--color-grey-900)] dark:[--xy-edge-stroke:var(--color-grey-800)]'
className='[--xy-background-color:var(--color-grey-50)] [--xy-background-pattern-color:var(--color-grey-500)] [--xy-edge-stroke:var(--color-grey-300)] dark:[--xy-background-color:var(--background)] dark:[--xy-background-pattern-color:var(--color-grey-900)] dark:[--xy-edge-stroke:var(--color-grey-800)]'
defaultViewport={initialViewport.current}
edges={graph.edges}
edgesFocusable={false}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ export const StepSidebar: React.FC<StepSidebarProps> = ({automation, stepId, onD
aria-hidden={!detail}
aria-label='Step details'
className={cn(
'absolute inset-y-0 right-0 z-[1] flex w-[calc(100%-6rem)] max-w-none translate-x-full flex-col gap-6 overflow-y-auto bg-background p-6 shadow-sm transition-transform duration-200 ease-out sm:w-[36rem] dark:border-l dark:border-gray-950',
'absolute inset-y-0 right-0 z-[1] flex w-[calc(100%-6rem)] max-w-none translate-x-full flex-col gap-6 overflow-y-auto bg-surface-elevated p-6 shadow-sm transition-transform duration-200 ease-out sm:w-[36rem] dark:border-l dark:border-gray-950',
detail ? 'translate-x-0' : 'pointer-events-none'
)}
data-state={detail ? 'open' : 'closed'}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ const Feedback: React.FC<FeedbackProps> = ({feedbackStats}) => {
<Avatar className='size-7'>
{item.member?.avatar_image && <img className='absolute aspect-square size-full' src={item.member?.avatar_image} />}
<AvatarFallback className='text-white' style={{
backgroundColor: `${stringToHslColor(formatMemberName(item.member), '75', '55')}`
backgroundColor: `${stringToHslColor(formatMemberName(item.member), '45', '55')}`
}}>{getMemberInitials(item.member)}</AvatarFallback>
</Avatar>
{formatMemberName(item.member)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ const PostAnalyticsHeader:React.FC<PostAnalyticsHeaderProps> = ({

return (
<>
<header className='z-50 -mx-8 bg-white/70 backdrop-blur-md dark:bg-black'>
<header className='z-50 -mx-8 bg-white/70 backdrop-blur-md dark:bg-background'>
<div
className='relative flex min-h-[102px] w-full items-start justify-between gap-5 px-8 pt-8 pb-0'
data-header='header'
Expand Down Expand Up @@ -206,7 +206,7 @@ const PostAnalyticsHeader:React.FC<PostAnalyticsHeaderProps> = ({
</div>
</div>
</header>
<Navbar className='sticky top-0 z-50 -mb-8 transform-gpu flex-col items-start gap-y-0 border-none bg-white/70 py-8 backdrop-blur-md lg:flex-row lg:items-center dark:bg-black'>
<Navbar className='sticky top-0 z-50 -mb-8 transform-gpu flex-col items-start gap-y-0 border-none bg-white/70 py-8 backdrop-blur-md lg:flex-row lg:items-center dark:bg-background'>
{!isPostLoading && (
<PageMenu className='min-h-[34px]' defaultValue={currentTab} responsive>
{availableTabs.includes('Overview') && (
Expand Down
2 changes: 1 addition & 1 deletion apps/posts/src/views/Tags/components/tags-list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ function TagsList({
<TableRow
key={key}
{...props}
className="group grid w-full grid-cols-[1fr_5rem] items-center gap-x-4 p-2 hover:bg-muted/50 md:grid-cols-[1fr_auto_5rem] lg:table-row lg:p-0 [&.group:hover_td]:bg-transparent"
className="group grid w-full grid-cols-[1fr_5rem] items-center gap-x-4 p-2 md:grid-cols-[1fr_auto_5rem] lg:table-row lg:p-0"
data-testid="tag-list-row"
>
<TableCell className="static col-start-1 col-end-1 row-start-1 row-end-1 flex min-w-0 flex-col p-0 md:relative lg:table-cell lg:w-1/2 lg:p-4 xl:w-3/5">
Expand Down
2 changes: 1 addition & 1 deletion apps/posts/src/views/comments/components/comments-list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ function CommentsList({
<div
key={key}
{...props}
className='grid w-full grid-cols-1 items-start justify-between gap-4 border-b p-3 hover:bg-muted/50 md:p-5 lg:grid-cols-[minmax(0,1fr)_144px]'
className='grid w-full grid-cols-1 items-start justify-between gap-4 border-b p-3 hover:bg-table-row-hover md:p-5 lg:grid-cols-[minmax(0,1fr)_144px]'
data-testid="comment-list-row"
onClick={() => {
// Close sidebar when clicking on a comment in the main list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ const MembersFilters: React.FC<MembersFiltersProps> = ({
const hasFilters = filters.length > 0;
const showIconOnlyTrigger = iconOnly && !hasFilters;
const addFilterButtonClassName = cn(
'border-input bg-white dark:bg-background',
'bg-white dark:bg-background',
showIconOnlyTrigger && 'min-w-[34px] gap-0 px-2 text-[0px] lg:min-w-0 lg:gap-1.5 lg:px-3 lg:text-sm !px-3'
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ interface MembersHelpCardProps {
const MembersHelpCard: React.FC<MembersHelpCardProps> = ({children, description, title, url}) => {
return (
<a
className="group/card block rounded-xl border bg-card p-6 transition-all hover:bg-accent/50 hover:shadow-xs"
className="group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs"
href={url}
rel="noopener noreferrer"
target="_blank"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,6 @@ function MembersListItem({
...props
}: MembersListItemProps &
Omit<React.HTMLAttributes<HTMLTableRowElement>, 'onClick'>) {
const memberCellStyle = {
'--members-sticky-hover-bg': 'color-mix(in oklab, var(--muted) 50%, var(--background))'
} as CSSProperties;
const handleRowClick = (event: React.MouseEvent<HTMLTableRowElement>) => {
if (isModifiedClick(event)) {
openMemberInNewTab(item.id, backPath);
Expand Down Expand Up @@ -258,7 +255,7 @@ function MembersListItem({
>
<TableCell className={cn(
'min-w-0 bg-background px-4 py-3 group-hover:bg-[var(--members-sticky-hover-bg)] max-sm:!w-full max-sm:!min-w-0 lg:sticky lg:left-0 lg:z-20'
)} style={memberCellStyle}>
)}>
<MembersListItemName backPath={backPath} item={item} onClick={onClick} />
{showPinnedEdge && (
<>
Expand Down
4 changes: 2 additions & 2 deletions apps/shade/src/components/patterns/filters.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ const filterAddButtonVariants = cva(
variants: {
variant: {
solid: 'border border-input hover:bg-secondary/60',
outline: 'border border-border hover:bg-accent'
outline: 'border border-control-border hover:bg-interactive-hover dark:hover:bg-interactive-hover'
},
size: {
lg: 'h-10 gap-1.5 px-4 text-sm [&_svg:not([class*=size-])]:size-4',
Expand Down Expand Up @@ -1395,7 +1395,7 @@ function SelectOptionsList<T = unknown>({
{(selectedOptions.length > 0 || unselectedOptions.length > 0) && <CommandSeparator />}
<div className="p-1.5">
<button
className="flex w-full items-center justify-center rounded-xs px-2.5 py-1.5 text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50"
className="flex w-full items-center justify-center rounded-xs px-2.5 py-1.5 text-muted-foreground hover:bg-interactive-hover hover:text-accent-foreground disabled:opacity-50"
disabled={isLoadingMore}
type="button"
onClick={onLoadMore}
Expand Down
2 changes: 1 addition & 1 deletion apps/shade/src/components/ui/alert-dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const AlertDialogOverlay = React.forwardRef<
>(({className, ...props}, ref) => (
<AlertDialogPrimitive.Overlay
className={cn(
'fixed inset-0 z-50 bg-black/30 backdrop-blur-none transform-gpu data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=open]:backdrop-blur-[3px]',
'fixed inset-0 z-50 bg-black/30 dark:bg-white/8 backdrop-blur-none transform-gpu data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=open]:backdrop-blur-[3px]',
className
)}
{...props}
Expand Down
2 changes: 1 addition & 1 deletion apps/shade/src/components/ui/avatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ const Avatar = React.forwardRef<
const identity = {name: name || undefined, email: email || undefined};
const hasIdentity = !!(name || email);
const initials = hasIdentity ? getMemberInitials(identity) : null;
const bgColor = hasIdentity ? stringToHslColor(formatMemberName(identity), '75', '55') : undefined;
const bgColor = hasIdentity ? stringToHslColor(formatMemberName(identity), '45', '55') : undefined;

return (
<AvatarPrimitive.Root
Expand Down
4 changes: 2 additions & 2 deletions apps/shade/src/components/ui/button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ const buttonVariants = cva(
variant: {
default: 'bg-primary font-semibold text-primary-foreground hover:bg-primary/90',
destructive: 'bg-destructive font-medium text-destructive-foreground hover:bg-destructive/90',
outline: 'border border-input bg-background font-medium hover:bg-accent hover:text-accent-foreground',
outline: 'border border-control-border bg-transparent font-medium hover:bg-button-hover hover:text-accent-foreground',
secondary: 'bg-secondary font-medium text-secondary-foreground hover:bg-secondary/80',
ghost: 'font-medium hover:bg-accent hover:text-accent-foreground',
link: 'font-medium text-primary underline-offset-4 hover:underline',
dropdown: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground'
dropdown: 'border border-control-border bg-transparent hover:bg-button-hover hover:text-accent-foreground'
},
size: {
default: 'h-(--control-height) px-2.5 py-2',
Expand Down
4 changes: 2 additions & 2 deletions apps/shade/src/components/ui/command.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function Command({className, ...props}: React.ComponentProps<typeof CommandPrimi
return (
<CommandPrimitive
className={cn(
'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',
'flex h-full w-full flex-col overflow-hidden rounded-md bg-transparent text-popover-foreground',
className
)}
{...props}
Expand Down Expand Up @@ -90,7 +90,7 @@ function CommandItem({className, ...props}: React.ComponentProps<typeof CommandP
return (
<CommandPrimitive.Item
className={cn(
'relative flex text-foreground cursor-default gap-2 select-none items-center rounded-xs px-2 py-1.5 outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
'relative flex text-foreground cursor-default gap-2 select-none items-center rounded-xs px-2 py-1.5 outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-interactive-hover data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
'[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:stroke-[1.5px]',
className
)}
Expand Down
Loading
Loading