diff --git a/apps/web/src/components/ActivityItem.tsx b/apps/web/src/components/ActivityItem.tsx index b66892d..dbd5aca 100644 --- a/apps/web/src/components/ActivityItem.tsx +++ b/apps/web/src/components/ActivityItem.tsx @@ -353,7 +353,7 @@ export const ActivityItem = memo(function ActivityItem({activity, isUpcoming = f
{/* Icon */}
diff --git a/apps/web/src/components/ContactPicker.tsx b/apps/web/src/components/ContactPicker.tsx index 8407ce9..8dfeaf0 100644 --- a/apps/web/src/components/ContactPicker.tsx +++ b/apps/web/src/components/ContactPicker.tsx @@ -62,7 +62,7 @@ export function ContactPicker({ type="button" role="combobox" aria-expanded={open} - className="flex h-10 w-full items-center justify-between rounded-md border border-neutral-200 bg-white px-3 py-2 text-sm text-neutral-500 hover:border-neutral-300 focus:outline-none focus:ring-2 focus:ring-neutral-900 focus:ring-offset-0 transition-colors" + className="flex h-10 w-full items-center justify-between rounded-md border border-neutral-200 bg-white px-3 py-2 text-sm text-neutral-500 hover:border-neutral-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 transition-colors" > {placeholder} diff --git a/apps/web/src/components/DashboardLayout.tsx b/apps/web/src/components/DashboardLayout.tsx index e5cdb72..e127437 100644 --- a/apps/web/src/components/DashboardLayout.tsx +++ b/apps/web/src/components/DashboardLayout.tsx @@ -169,7 +169,7 @@ export function DashboardLayout({children}: DashboardLayoutProps) {
{showColorPicker && (
{/* Custom color input */} @@ -483,7 +483,7 @@ export function Toolbar({editor, onInsertVariable, onInsertImage, canUploadImage > {selectedColor === color && (
-
+
)} @@ -511,7 +511,7 @@ export function Toolbar({editor, onInsertVariable, onInsertImage, canUploadImage {showLinkInput && ( -
+

Need help?

- - - - - + - + + {copied ? ( @@ -274,11 +274,9 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {

{step.description}

- - - +
); })} diff --git a/apps/web/src/components/SecurityWarningBanner.tsx b/apps/web/src/components/SecurityWarningBanner.tsx index 00167c2..2b0852c 100644 --- a/apps/web/src/components/SecurityWarningBanner.tsx +++ b/apps/web/src/components/SecurityWarningBanner.tsx @@ -33,11 +33,9 @@ export function SecurityWarningBanner({status}: SecurityWarningBannerProps) { : 'Your bounce or complaint rates are approaching limits. Review your contact lists and remove invalid addresses to maintain good standing.'}

- - - + ); diff --git a/apps/web/src/components/onboarding/OnboardingBanner.tsx b/apps/web/src/components/onboarding/OnboardingBanner.tsx index 460253e..940e84b 100644 --- a/apps/web/src/components/onboarding/OnboardingBanner.tsx +++ b/apps/web/src/components/onboarding/OnboardingBanner.tsx @@ -196,7 +196,7 @@ export function OnboardingBanner() { const Icon = step.icon; const isCurrent = step.id === currentStepId; const base = - 'group relative inline-flex items-center gap-2 rounded-lg border px-3 py-2 text-xs font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-900 focus-visible:ring-offset-2'; + 'group relative inline-flex items-center gap-2 rounded-lg border px-3 py-2 text-xs font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2'; const variant = step.done ? 'border-green-200 bg-green-50 text-green-900 hover:border-green-300' : isCurrent diff --git a/apps/web/src/pages/auth/reset-password.tsx b/apps/web/src/pages/auth/reset-password.tsx index 818529e..3f0e515 100644 --- a/apps/web/src/pages/auth/reset-password.tsx +++ b/apps/web/src/pages/auth/reset-password.tsx @@ -105,9 +105,9 @@ export default function ResetPassword() { This link is invalid or has expired. Request a new one from the login page.

- - - +
diff --git a/apps/web/src/pages/auth/verify-email.tsx b/apps/web/src/pages/auth/verify-email.tsx index 03f22c8..23a8f58 100644 --- a/apps/web/src/pages/auth/verify-email.tsx +++ b/apps/web/src/pages/auth/verify-email.tsx @@ -190,11 +190,9 @@ export default function VerifyEmail() {

)} - - - +
)} @@ -273,11 +271,9 @@ export default function VerifyEmail() {

)} - - - +
)} diff --git a/apps/web/src/pages/campaigns/[id].tsx b/apps/web/src/pages/campaigns/[id].tsx index 699a98f..1aa696a 100644 --- a/apps/web/src/pages/campaigns/[id].tsx +++ b/apps/web/src/pages/campaigns/[id].tsx @@ -342,11 +342,9 @@ export default function CampaignDetailsPage() { {/* Header */}
- - - +

{c.name}

@@ -848,11 +846,9 @@ export default function CampaignDetailsPage() { {/* Header */}
- - - +

{c.name}

diff --git a/apps/web/src/pages/campaigns/create.tsx b/apps/web/src/pages/campaigns/create.tsx index 6e31bb1..9219d61 100644 --- a/apps/web/src/pages/campaigns/create.tsx +++ b/apps/web/src/pages/campaigns/create.tsx @@ -177,11 +177,9 @@ export default function CreateCampaignPage() {
{/* Header */}
- - - +

Create Campaign

@@ -396,9 +394,9 @@ export default function CreateCampaignPage() { {/* Actions */}

- - - + diff --git a/apps/web/src/pages/campaigns/index.tsx b/apps/web/src/pages/campaigns/index.tsx index 5579fcb..d2edb17 100644 --- a/apps/web/src/pages/campaigns/index.tsx +++ b/apps/web/src/pages/campaigns/index.tsx @@ -328,12 +328,12 @@ export default function CampaignsPage() { ) : ( - - - + + ) } /> @@ -347,10 +347,11 @@ export default function CampaignsPage() { const deliveryPct = campaign.totalRecipients > 0 ? (campaign.sentCount / campaign.totalRecipients) * 100 : 0; return ( - +
@@ -432,17 +433,15 @@ export default function CampaignsPage() {
Updated {formatRelativeTime(campaign.updatedAt)} -
+
{dayjs(campaign.updatedAt).format('DD MMMM YYYY, hh:mm')}
- - - + diff --git a/apps/web/src/pages/contacts/[id].tsx b/apps/web/src/pages/contacts/[id].tsx index b850fc4..799d5e8 100644 --- a/apps/web/src/pages/contacts/[id].tsx +++ b/apps/web/src/pages/contacts/[id].tsx @@ -105,12 +105,12 @@ export default function ContactDetailPage() {

The contact you're looking for doesn't exist or has been deleted.

- - - + +
); @@ -124,11 +124,9 @@ export default function ContactDetailPage() { {/* Header */}
- - - +

{contact.email}

@@ -261,7 +259,7 @@ export default function ContactDetailPage() {

Created

{dayjs(contact.createdAt).fromNow()}

-
+
{dayjs(contact.createdAt).format('DD MMMM YYYY, hh:mm')}
@@ -271,7 +269,7 @@ export default function ContactDetailPage() {

Last Updated

{dayjs(contact.updatedAt).fromNow()}

-
+
{dayjs(contact.updatedAt).format('DD MMMM YYYY, hh:mm')}
diff --git a/apps/web/src/pages/contacts/index.tsx b/apps/web/src/pages/contacts/index.tsx index c61cada..2b16292 100644 --- a/apps/web/src/pages/contacts/index.tsx +++ b/apps/web/src/pages/contacts/index.tsx @@ -338,18 +338,16 @@ export default function ContactsPage() {
{formatRelativeTime(contact.createdAt)} -
+
{dayjs(contact.createdAt).format('DD MMMM YYYY, hh:mm')}
- - - + @@ -388,16 +386,14 @@ export default function ContactsPage() {
{formatRelativeTime(contact.createdAt)} -
+
{dayjs(contact.createdAt).format('Do MMMM YYYY, h:mm A')}
- - - + diff --git a/apps/web/src/pages/index.tsx b/apps/web/src/pages/index.tsx index 79755ad..8b5f8bc 100644 --- a/apps/web/src/pages/index.tsx +++ b/apps/web/src/pages/index.tsx @@ -113,11 +113,9 @@ export default function Index() { Please contact support to resolve this issue and get your project re-enabled.

- - - + )} @@ -167,11 +165,9 @@ export default function Index() { Your emails currently include Plunk branding. Upgrade to a subscription to remove it. - - - + )} diff --git a/apps/web/src/pages/manage/[id].tsx b/apps/web/src/pages/manage/[id].tsx index b0f7d72..6e233eb 100644 --- a/apps/web/src/pages/manage/[id].tsx +++ b/apps/web/src/pages/manage/[id].tsx @@ -165,7 +165,7 @@ export default function Manage() { - + +
); @@ -213,11 +214,9 @@ export default function SegmentDetailPage() { {/* Header */}
- - - +

{segment.name}

@@ -276,7 +275,7 @@ export default function SegmentDetailPage() { type="checkbox" checked={trackMembership} onChange={e => setTrackMembership(e.target.checked)} - className="mt-1 h-4 w-4 text-neutral-900 focus:ring-neutral-900 border-neutral-300 rounded" + className="mt-1 h-4 w-4 text-neutral-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border-neutral-300 rounded" />
) : contactsData?.data.length === 0 ? ( -
- -

- {isStatic ? 'No members in this segment yet' : 'No contacts match this segment'} -

-
+ ) : ( <>
@@ -385,11 +383,9 @@ export default function SegmentDetailPage() { {contact.email}
- - - + {isStatic && ( - + +
{/* Search */} @@ -145,12 +145,12 @@ export default function SegmentsPage() { description={searchInput ? 'Try a different search term.' : 'Group contacts by attributes to target specific audiences.'} action={ !searchInput ? ( - - - + + ) : undefined } /> @@ -162,10 +162,11 @@ export default function SegmentsPage() { const isDynamic = (segment as unknown as {type: string}).type !== 'STATIC'; const filterCount = isDynamic ? countFiltersInCondition(segment.condition) : 0; return ( - +
@@ -195,17 +196,15 @@ export default function SegmentsPage() {
Updated {formatRelativeTime(segment.updatedAt)} -
+
{dayjs(segment.updatedAt).format('DD MMMM YYYY, hh:mm')}
- - - + - +

Create Segment

@@ -159,7 +157,7 @@ export default function NewSegmentPage() { type="checkbox" checked={trackMembership} onChange={e => setTrackMembership(e.target.checked)} - className="mt-1 h-4 w-4 text-neutral-900 focus:ring-neutral-900 border-neutral-300 rounded" + className="mt-1 h-4 w-4 text-neutral-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border-neutral-300 rounded" />