strapi-plugin-magic-mail 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -99,12 +99,12 @@ const ScrollableDialogBody = styled(Box)`
99
99
  }
100
100
 
101
101
  &::-webkit-scrollbar-thumb {
102
- background: ${theme.colors.neutral[200]};
102
+ background: ${props => props.theme.colors.neutral200};
103
103
  border-radius: 3px;
104
104
  }
105
-
105
+
106
106
  &::-webkit-scrollbar-thumb:hover {
107
- background: ${theme.colors.neutral[300]};
107
+ background: ${props => props.theme.colors.neutral300};
108
108
  }
109
109
  `;
110
110
 
@@ -125,7 +125,7 @@ const CodeHeader = styled(Flex)`
125
125
  const CodeLabel = styled(Typography)`
126
126
  font-size: 15px;
127
127
  font-weight: 600;
128
- color: ${theme.colors.neutral[800]};
128
+ color: ${props => props.theme.colors.neutral800};
129
129
  display: flex;
130
130
  align-items: center;
131
131
  gap: 8px;
@@ -337,7 +337,7 @@ const HeaderContent = styled(Flex)`
337
337
  `;
338
338
 
339
339
  const Title = styled(Typography)`
340
- color: ${theme.colors.neutral[0]};
340
+ color: white;
341
341
  font-size: 2rem;
342
342
  font-weight: 700;
343
343
  letter-spacing: -0.025em;
@@ -392,7 +392,7 @@ const StatsGrid = styled.div`
392
392
  `;
393
393
 
394
394
  const StatCard = styled(Box)`
395
- background: ${theme.colors.neutral[0]};
395
+ background: ${props => props.theme.colors.neutral0};
396
396
  border-radius: ${theme.borderRadius.lg};
397
397
  padding: 28px ${theme.spacing.lg};
398
398
  position: relative;
@@ -401,7 +401,7 @@ const StatCard = styled(Box)`
401
401
  ${css`animation: ${fadeIn} ${theme.transitions.slow} backwards;`}
402
402
  animation-delay: ${props => props.$delay || '0s'};
403
403
  box-shadow: ${theme.shadows.sm};
404
- border: 1px solid ${theme.colors.neutral[200]};
404
+ border: 1px solid ${props => props.theme.colors.neutral200};
405
405
  min-width: 200px;
406
406
  flex: 1;
407
407
  text-align: center;
@@ -468,7 +468,7 @@ const StatIcon = styled(Box)`
468
468
  const StatValue = styled(Typography)`
469
469
  font-size: 2.75rem;
470
470
  font-weight: 700;
471
- color: ${theme.colors.neutral[800]};
471
+ color: ${props => props.theme.colors.neutral800};
472
472
  line-height: 1;
473
473
  margin-bottom: 10px;
474
474
  transition: all ${theme.transitions.normal};
@@ -482,7 +482,7 @@ const StatValue = styled(Typography)`
482
482
 
483
483
  const StatLabel = styled(Typography)`
484
484
  font-size: 0.95rem;
485
- color: ${theme.colors.neutral[600]};
485
+ color: ${props => props.theme.colors.neutral600};
486
486
  font-weight: 500;
487
487
  letter-spacing: 0.025em;
488
488
  text-align: center;
@@ -501,12 +501,12 @@ const SectionHeader = styled(Box)`
501
501
  `;
502
502
 
503
503
  const FilterBar = styled(Flex)`
504
- background: ${theme.colors.neutral[0]};
504
+ background: ${props => props.theme.colors.neutral0};
505
505
  padding: ${theme.spacing.md} ${theme.spacing.lg};
506
506
  border-radius: ${theme.borderRadius.lg};
507
507
  margin-bottom: ${theme.spacing.lg};
508
508
  box-shadow: ${theme.shadows.sm};
509
- border: 1px solid ${theme.colors.neutral[200]};
509
+ border: 1px solid ${props => props.theme.colors.neutral200};
510
510
  gap: ${theme.spacing.md};
511
511
  align-items: center;
512
512
  `;
@@ -523,7 +523,7 @@ const SearchIcon = styled(MagnifyingGlassIcon)`
523
523
  left: 12px;
524
524
  width: 16px;
525
525
  height: 16px;
526
- color: ${theme.colors.neutral[600]};
526
+ color: ${props => props.theme.colors.neutral600};
527
527
  pointer-events: none;
528
528
  z-index: 1;
529
529
  `;
@@ -536,12 +536,12 @@ const StyledSearchInput = styled(TextInput)`
536
536
  const StyledTable = styled(Table)`
537
537
  width: 100%;
538
538
  thead {
539
- background: ${theme.colors.neutral[50]};
540
- border-bottom: 2px solid ${theme.colors.neutral[200]};
539
+ background: ${props => props.theme.colors.neutral100};
540
+ border-bottom: 2px solid ${props => props.theme.colors.neutral200};
541
541
 
542
542
  th {
543
543
  font-weight: 600;
544
- color: ${theme.colors.neutral[700]};
544
+ color: ${props => props.theme.colors.neutral800};
545
545
  font-size: 0.875rem;
546
546
  text-transform: uppercase;
547
547
  letter-spacing: 0.025em;
@@ -551,28 +551,28 @@ const StyledTable = styled(Table)`
551
551
 
552
552
  tbody tr {
553
553
  transition: all ${theme.transitions.fast};
554
- border-bottom: 1px solid ${theme.colors.neutral[100]};
554
+ border-bottom: 1px solid ${props => props.theme.colors.neutral150};
555
555
 
556
556
  &:last-child {
557
557
  border-bottom: none;
558
558
  }
559
559
 
560
560
  &:hover {
561
- background: ${theme.colors.neutral[50]};
561
+ background: ${props => props.theme.colors.primary100};
562
562
  }
563
563
 
564
564
  td {
565
565
  padding: ${theme.spacing.lg} ${theme.spacing.lg};
566
- color: ${theme.colors.neutral[700]};
566
+ color: ${props => props.theme.colors.neutral800};
567
567
  vertical-align: middle;
568
568
  }
569
569
  }
570
570
  `;
571
571
 
572
572
  const EmptyState = styled(Box)`
573
- background: ${theme.colors.neutral[0]};
573
+ background: ${props => props.theme.colors.neutral0};
574
574
  border-radius: ${theme.borderRadius.xl};
575
- border: 2px dashed ${theme.colors.neutral[200]};
575
+ border: 2px dashed ${props => props.theme.colors.neutral300};
576
576
  padding: 80px 32px;
577
577
  text-align: center;
578
578
  position: relative;
@@ -639,7 +639,7 @@ const EmptyFeatureItem = styled.div`
639
639
  text-align: center;
640
640
  gap: ${theme.spacing.sm};
641
641
  padding: ${theme.spacing.lg};
642
- background: ${theme.colors.neutral[0]};
642
+ background: ${props => props.theme.colors.neutral0};
643
643
  border-radius: ${theme.borderRadius.md};
644
644
  box-shadow: ${theme.shadows.sm};
645
645
  transition: ${theme.transitions.fast};
@@ -1121,12 +1121,12 @@ const TemplateList = () => {
1121
1121
  <Flex alignItems="center" gap={3}>
1122
1122
  <SparklesIcon style={{ width: 24, height: 24, color: theme.colors.warning[600] }} />
1123
1123
  <Box>
1124
- <Typography variant="omega" fontWeight="bold" style={{ color: theme.colors.neutral[800] }}>
1124
+ <Typography variant="omega" fontWeight="bold" textColor="neutral800">
1125
1125
  {limits.emailTemplates.current >= limits.emailTemplates.max
1126
1126
  ? `You've reached your ${getTierInfo().name} limit!`
1127
1127
  : `You're approaching your ${getTierInfo().name} limit!`}
1128
1128
  </Typography>
1129
- <Typography variant="pi" style={{ color: theme.colors.neutral[600], marginTop: '4px' }}>
1129
+ <Typography variant="pi" textColor="neutral600" style={{ marginTop: '4px' }}>
1130
1130
  Using {limits.emailTemplates.current} of {limits.emailTemplates.max} templates.
1131
1131
  {getTierInfo().next && ` Upgrade to ${getTierInfo().next} for ${getTierInfo().nextTemplates === -1 ? 'unlimited' : getTierInfo().nextTemplates} templates!`}
1132
1132
  </Typography>
@@ -1159,10 +1159,10 @@ const TemplateList = () => {
1159
1159
 
1160
1160
  <Typography
1161
1161
  variant="alpha"
1162
+ textColor="neutral800"
1162
1163
  style={{
1163
1164
  fontSize: '1.75rem',
1164
1165
  fontWeight: '700',
1165
- color: theme.colors.neutral[800],
1166
1166
  textAlign: 'center',
1167
1167
  display: 'block',
1168
1168
  }}
@@ -1244,7 +1244,7 @@ const TemplateList = () => {
1244
1244
  <TemplatesContainer>
1245
1245
  <SectionHeader>
1246
1246
  <Flex justifyContent="space-between" alignItems="center" marginBottom={4}>
1247
- <Typography variant="delta" style={{ fontSize: '1.5rem', fontWeight: 600, color: theme.colors.neutral[700] }}>
1247
+ <Typography variant="delta" textColor="neutral700" style={{ fontSize: '1.5rem', fontWeight: 600 }}>
1248
1248
  Email Templates
1249
1249
  </Typography>
1250
1250
  <Button
@@ -1420,16 +1420,16 @@ const TemplateList = () => {
1420
1420
  </Box>
1421
1421
  ) : (
1422
1422
  <Box
1423
+ background="neutral100"
1423
1424
  style={{
1424
1425
  padding: '80px 32px',
1425
1426
  textAlign: 'center',
1426
- background: theme.colors.neutral[50],
1427
1427
  borderRadius: theme.borderRadius.lg,
1428
- border: `1px dashed ${theme.colors.neutral[200]}`,
1428
+ border: '1px dashed #D1D5DB',
1429
1429
  }}
1430
1430
  >
1431
- <MagnifyingGlassIcon style={{ width: '64px', height: '64px', margin: '0 auto 16px', color: theme.colors.neutral[400] }} />
1432
- <Typography variant="beta" style={{ marginBottom: '8px', color: theme.colors.neutral[700] }}>
1431
+ <MagnifyingGlassIcon style={{ width: '64px', height: '64px', margin: '0 auto 16px', color: '#9CA3AF' }} />
1432
+ <Typography variant="beta" textColor="neutral700" style={{ marginBottom: '8px' }}>
1433
1433
  No templates found
1434
1434
  </Typography>
1435
1435
  <Typography variant="omega" textColor="neutral600">
@@ -1455,7 +1455,7 @@ const TemplateList = () => {
1455
1455
  <Tabs.Content value="coreEmails">
1456
1456
  <Box style={{ marginTop: '24px' }}>
1457
1457
  <Flex direction="column" gap={2} style={{ marginBottom: '24px' }}>
1458
- <Typography variant="delta" style={{ fontSize: '1.5rem', fontWeight: 600, color: theme.colors.neutral[700] }}>
1458
+ <Typography variant="delta" textColor="neutral700" style={{ fontSize: '1.5rem', fontWeight: 600 }}>
1459
1459
  Core Email Templates
1460
1460
  </Typography>
1461
1461
  <Typography variant="omega" textColor="neutral600">
@@ -1463,7 +1463,7 @@ const TemplateList = () => {
1463
1463
  </Typography>
1464
1464
  </Flex>
1465
1465
 
1466
- <Box background="neutral0" borderRadius={theme.borderRadius.lg} shadow="md" style={{ border: `1px solid ${theme.colors.neutral[200]}`, overflow: 'hidden' }}>
1466
+ <Box background="neutral0" borderRadius={theme.borderRadius.lg} shadow="md" style={{ border: '1px solid #E5E7EB', overflow: 'hidden' }}>
1467
1467
  <Table colCount={2} rowCount={2}>
1468
1468
  <Thead>
1469
1469
  <Tr>
@@ -1523,10 +1523,10 @@ const TemplateList = () => {
1523
1523
  display: 'flex',
1524
1524
  flexDirection: 'column'
1525
1525
  }}>
1526
- <Modal.Header style={{ borderBottom: `1px solid ${theme.colors.neutral[200]}`, paddingBottom: '16px' }}>
1526
+ <Modal.Header style={{ borderBottom: '1px solid #E5E7EB', paddingBottom: '16px' }}>
1527
1527
  <Flex alignItems="center" gap={2}>
1528
1528
  <BoltIcon style={{ width: 24, height: 24, color: theme.colors.primary[600] }} />
1529
- <Typography variant="beta" style={{ color: theme.colors.neutral[800] }}>
1529
+ <Typography variant="beta" textColor="neutral800">
1530
1530
  Send Template: {selectedTemplate.name}
1531
1531
  </Typography>
1532
1532
  </Flex>
@@ -1541,7 +1541,7 @@ const TemplateList = () => {
1541
1541
  </CodeLabel>
1542
1542
  <RecommendedBadge>Empfohlen</RecommendedBadge>
1543
1543
  </CodeHeader>
1544
- <Typography variant="pi" style={{ color: theme.colors.neutral[600], marginBottom: '16px' }}>
1544
+ <Typography variant="pi" textColor="neutral600" style={{ marginBottom: '16px' }}>
1545
1545
  Nutze die standard Strapi Email-Funktion. MagicMail fängt sie automatisch ab und wendet alle Features an.
1546
1546
  </Typography>
1547
1547
  <CodeBlockWrapper>
@@ -1596,7 +1596,7 @@ const TemplateList = () => {
1596
1596
  MagicMail Plugin Service
1597
1597
  </CodeLabel>
1598
1598
  </CodeHeader>
1599
- <Typography variant="pi" style={{ color: theme.colors.neutral[600], marginBottom: '16px' }}>
1599
+ <Typography variant="pi" textColor="neutral600" style={{ marginBottom: '16px' }}>
1600
1600
  Direkter Zugriff auf den MagicMail Service für erweiterte Optionen.
1601
1601
  </Typography>
1602
1602
  <CodeBlockWrapper>
@@ -1647,7 +1647,7 @@ const TemplateList = () => {
1647
1647
  REST API
1648
1648
  </CodeLabel>
1649
1649
  </CodeHeader>
1650
- <Typography variant="pi" style={{ color: theme.colors.neutral[600], marginBottom: '16px' }}>
1650
+ <Typography variant="pi" textColor="neutral600" style={{ marginBottom: '16px' }}>
1651
1651
  Für externe Anwendungen, Frontend-Calls oder Postman Tests.
1652
1652
  </Typography>
1653
1653
  <CodeBlockWrapper>
@@ -2,6 +2,7 @@ import { useState, useEffect } from 'react';
2
2
  import { useFetchClient, useNotification } from '@strapi/strapi/admin';
3
3
  import { useAuthRefresh } from '../hooks/useAuthRefresh';
4
4
  import styled, { keyframes, css } from 'styled-components';
5
+ import { theme } from '../utils/theme';
5
6
  import {
6
7
  Box,
7
8
  Button,
@@ -29,72 +30,6 @@ import {
29
30
  } from '@heroicons/react/24/outline';
30
31
  import AddAccountModal from '../components/AddAccountModal';
31
32
 
32
- // ================ THEME (Exact copy from magic-sessionmanager) ================
33
- const theme = {
34
- colors: {
35
- primary: {
36
- 50: '#F0F9FF',
37
- 100: '#E0F2FE',
38
- 500: '#0EA5E9',
39
- 600: '#0284C7',
40
- 700: '#0369A1',
41
- },
42
- secondary: {
43
- 500: '#A855F7',
44
- 600: '#9333EA',
45
- },
46
- success: {
47
- 100: '#DCFCE7',
48
- 500: '#22C55E',
49
- 600: '#16A34A',
50
- 700: '#15803D',
51
- },
52
- warning: {
53
- 100: '#FEF3C7',
54
- 500: '#F59E0B',
55
- 600: '#D97706',
56
- },
57
- danger: {
58
- 100: '#FEE2E2',
59
- 500: '#EF4444',
60
- 600: '#DC2626',
61
- },
62
- neutral: {
63
- 0: '#FFFFFF',
64
- 50: '#F9FAFB',
65
- 100: '#F3F4F6',
66
- 200: '#E5E7EB',
67
- 600: '#4B5563',
68
- 700: '#374151',
69
- 800: '#1F2937',
70
- }
71
- },
72
- shadows: {
73
- sm: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)',
74
- md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',
75
- lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)',
76
- xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',
77
- },
78
- transitions: {
79
- fast: '150ms cubic-bezier(0.4, 0, 0.2, 1)',
80
- normal: '300ms cubic-bezier(0.4, 0, 0.2, 1)',
81
- slow: '500ms cubic-bezier(0.4, 0, 0.2, 1)',
82
- },
83
- spacing: {
84
- xs: '4px',
85
- sm: '8px',
86
- md: '16px',
87
- lg: '24px',
88
- xl: '32px',
89
- '2xl': '48px',
90
- },
91
- borderRadius: {
92
- md: '8px',
93
- lg: '12px',
94
- xl: '16px',
95
- }
96
- };
97
-
98
33
  // ================ ANIMATIONS ================
99
34
  const fadeIn = keyframes`
100
35
  from { opacity: 0; transform: translateY(10px); }
@@ -196,7 +131,7 @@ const HeaderContent = styled(Flex)`
196
131
  `;
197
132
 
198
133
  const Title = styled(Typography)`
199
- color: ${theme.colors.neutral[0]};
134
+ color: white;
200
135
  font-size: 2rem;
201
136
  font-weight: 700;
202
137
  letter-spacing: -0.025em;
@@ -251,7 +186,7 @@ const StatsGrid = styled.div`
251
186
  `;
252
187
 
253
188
  const StatCard = styled(Box)`
254
- background: ${theme.colors.neutral[0]};
189
+ background: ${props => props.theme.colors.neutral0};
255
190
  border-radius: ${theme.borderRadius.lg};
256
191
  padding: 28px ${theme.spacing.lg};
257
192
  position: relative;
@@ -260,7 +195,7 @@ const StatCard = styled(Box)`
260
195
  ${css`animation: ${fadeIn} ${theme.transitions.slow} backwards;`}
261
196
  animation-delay: ${props => props.$delay || '0s'};
262
197
  box-shadow: ${theme.shadows.sm};
263
- border: 1px solid ${theme.colors.neutral[200]};
198
+ border: 1px solid ${props => props.theme.colors.neutral200};
264
199
  min-width: 200px;
265
200
  flex: 1;
266
201
  text-align: center;
@@ -327,7 +262,7 @@ const StatIcon = styled(Box)`
327
262
  const StatValue = styled(Typography)`
328
263
  font-size: 2.75rem;
329
264
  font-weight: 700;
330
- color: ${theme.colors.neutral[800]};
265
+ color: ${props => props.theme.colors.neutral800};
331
266
  line-height: 1;
332
267
  margin-bottom: 10px;
333
268
  transition: all ${theme.transitions.normal};
@@ -341,7 +276,7 @@ const StatValue = styled(Typography)`
341
276
 
342
277
  const StatLabel = styled(Typography)`
343
278
  font-size: 0.95rem;
344
- color: ${theme.colors.neutral[600]};
279
+ color: ${props => props.theme.colors.neutral600};
345
280
  font-weight: 500;
346
281
  letter-spacing: 0.025em;
347
282
  text-align: center;
@@ -356,9 +291,9 @@ const AccountsContainer = styled(Box)`
356
291
  `;
357
292
 
358
293
  const EmptyState = styled(Box)`
359
- background: ${theme.colors.neutral[0]};
294
+ background: ${props => props.theme.colors.neutral0};
360
295
  border-radius: ${theme.borderRadius.xl};
361
- border: 2px dashed ${theme.colors.neutral[200]};
296
+ border: 2px dashed ${props => props.theme.colors.neutral300};
362
297
  padding: 80px 32px;
363
298
  text-align: center;
364
299
  position: relative;
@@ -386,7 +321,7 @@ const OnlineBadge = styled.div`
386
321
  width: 12px;
387
322
  height: 12px;
388
323
  border-radius: 50%;
389
- background: ${props => props.$active ? theme.colors.success[500] : theme.colors.neutral[400]};
324
+ background: ${props => props.$active ? theme.colors.success[500] : props.theme.colors.neutral400};
390
325
  display: inline-block;
391
326
  margin-right: 8px;
392
327
  ${css`animation: ${props => props.$active ? pulse : 'none'} 2s ease-in-out infinite;`}
@@ -394,12 +329,12 @@ const OnlineBadge = styled.div`
394
329
 
395
330
  const StyledTable = styled(Table)`
396
331
  thead {
397
- background: ${theme.colors.neutral[50]};
398
- border-bottom: 2px solid ${theme.colors.neutral[200]};
332
+ background: ${props => props.theme.colors.neutral100};
333
+ border-bottom: 2px solid ${props => props.theme.colors.neutral200};
399
334
 
400
335
  th {
401
336
  font-weight: 600;
402
- color: ${theme.colors.neutral[700]};
337
+ color: ${props => props.theme.colors.neutral800};
403
338
  font-size: 0.875rem;
404
339
  text-transform: uppercase;
405
340
  letter-spacing: 0.025em;
@@ -409,31 +344,31 @@ const StyledTable = styled(Table)`
409
344
 
410
345
  tbody tr {
411
346
  transition: all ${theme.transitions.fast};
412
- border-bottom: 1px solid ${theme.colors.neutral[100]};
347
+ border-bottom: 1px solid ${props => props.theme.colors.neutral150};
413
348
 
414
349
  &:last-child {
415
350
  border-bottom: none;
416
351
  }
417
352
 
418
353
  &:hover {
419
- background: ${theme.colors.neutral[50]};
354
+ background: ${props => props.theme.colors.primary100};
420
355
  }
421
356
 
422
357
  td {
423
358
  padding: ${theme.spacing.lg} ${theme.spacing.lg};
424
- color: ${theme.colors.neutral[700]};
359
+ color: ${props => props.theme.colors.neutral800};
425
360
  vertical-align: middle;
426
361
  }
427
362
  }
428
363
  `;
429
364
 
430
365
  const FilterBar = styled(Flex)`
431
- background: ${theme.colors.neutral[0]};
366
+ background: ${props => props.theme.colors.neutral0};
432
367
  padding: ${theme.spacing.md} ${theme.spacing.lg};
433
368
  border-radius: ${theme.borderRadius.lg};
434
369
  margin-bottom: ${theme.spacing.lg};
435
370
  box-shadow: ${theme.shadows.sm};
436
- border: 1px solid ${theme.colors.neutral[200]};
371
+ border: 1px solid ${props => props.theme.colors.neutral200};
437
372
  gap: ${theme.spacing.md};
438
373
  align-items: center;
439
374
  `;
@@ -450,17 +385,19 @@ const SearchIcon = styled(MagnifyingGlassIcon)`
450
385
  left: 12px;
451
386
  width: 16px;
452
387
  height: 16px;
453
- color: ${theme.colors.neutral[600]};
388
+ color: ${props => props.theme.colors.neutral600};
454
389
  pointer-events: none;
455
390
  `;
456
391
 
457
392
  const StyledSearchInput = styled.input`
458
393
  width: 100%;
459
394
  padding: 10px 12px 10px 40px;
460
- border: 1px solid ${theme.colors.neutral[200]};
395
+ border: 1px solid ${props => props.theme.colors.neutral200};
461
396
  border-radius: ${theme.borderRadius.md};
462
397
  font-size: 0.875rem;
463
398
  transition: all ${theme.transitions.fast};
399
+ background: ${props => props.theme.colors.neutral0};
400
+ color: ${props => props.theme.colors.neutral800};
464
401
 
465
402
  &:focus {
466
403
  outline: none;
@@ -469,7 +406,7 @@ const StyledSearchInput = styled.input`
469
406
  }
470
407
 
471
408
  &::placeholder {
472
- color: ${theme.colors.neutral[600]};
409
+ color: ${props => props.theme.colors.neutral500};
473
410
  }
474
411
  `;
475
412
 
@@ -654,10 +591,10 @@ const HomePage = () => {
654
591
 
655
592
  <Typography
656
593
  variant="alpha"
594
+ textColor="neutral800"
657
595
  style={{
658
596
  fontSize: '1.75rem',
659
597
  fontWeight: '700',
660
- color: theme.colors.neutral[800],
661
598
  marginBottom: '8px',
662
599
  }}
663
600
  >
@@ -689,7 +626,7 @@ const HomePage = () => {
689
626
  <AccountsContainer>
690
627
  <Box style={{ marginBottom: theme.spacing.md }}>
691
628
  <Flex justifyContent="space-between" alignItems="center" marginBottom={4}>
692
- <Typography variant="delta" style={{ fontSize: '1.5rem', fontWeight: 600, color: theme.colors.neutral[700] }}>
629
+ <Typography variant="delta" textColor="neutral700" style={{ fontSize: '1.5rem', fontWeight: 600 }}>
693
630
  📧 Email Accounts
694
631
  </Typography>
695
632
  <Button startIcon={<PlusIcon style={{ width: 16, height: 16 }} />} onClick={() => setShowAddModal(true)}>
@@ -833,10 +770,10 @@ const HomePage = () => {
833
770
  {account.dailyLimit > 0 && (
834
771
  <Box style={{ width: '100%', minWidth: '80px' }}>
835
772
  <Box
773
+ background="neutral100"
836
774
  style={{
837
775
  width: '100%',
838
776
  height: '6px',
839
- background: theme.colors.neutral[100],
840
777
  borderRadius: '999px',
841
778
  overflow: 'hidden',
842
779
  }}
@@ -43,7 +43,7 @@ const Title = styled(Typography)`
43
43
 
44
44
  const Subtitle = styled(Typography)`
45
45
  font-size: 1.125rem;
46
- color: #6B7280;
46
+ color: ${props => props.theme.colors.neutral600};
47
47
  line-height: 1.6;
48
48
  display: block;
49
49
  `;
@@ -54,24 +54,29 @@ const TierGrid = styled(Flex)`
54
54
  max-width: 1080px;
55
55
  justify-content: center;
56
56
  flex-wrap: wrap;
57
+ align-items: stretch;
57
58
  `;
58
59
 
59
60
  const TierWrapper = styled(Box)`
60
61
  flex: 1;
61
62
  min-width: 280px;
62
63
  max-width: 340px;
64
+ display: flex;
63
65
  `;
64
66
 
65
67
  const TierCard = styled(Box)`
66
- background: white;
68
+ background: ${props => props.theme.colors.neutral0};
67
69
  border-radius: 16px;
68
70
  padding: 32px;
69
- border: 2px solid ${props => props.$featured ? '#0EA5E9' : '#E5E7EB'};
71
+ border: 2px solid ${props => props.$featured ? '#0EA5E9' : props.theme.colors.neutral200};
70
72
  position: relative;
71
73
  transition: all 0.3s ease;
72
74
  box-shadow: ${props => props.$featured
73
75
  ? '0 20px 25px -5px rgba(14, 165, 233, 0.25), 0 8px 10px -6px rgba(14, 165, 233, 0.2)'
74
76
  : '0 10px 15px -3px rgba(15, 23, 42, 0.08), 0 4px 6px -4px rgba(15, 23, 42, 0.05)'};
77
+ display: flex;
78
+ flex-direction: column;
79
+ width: 100%;
75
80
 
76
81
  &:hover {
77
82
  transform: translateY(-4px);
@@ -120,12 +125,13 @@ const TierPrice = styled(Typography)`
120
125
  `;
121
126
 
122
127
  const TierDescription = styled(Typography)`
123
- color: #6B7280;
128
+ color: ${props => props.theme.colors.neutral600};
124
129
  margin-bottom: 24px;
125
130
  `;
126
131
 
127
132
  const FeatureList = styled(Box)`
128
133
  margin-bottom: 24px;
134
+ flex: 1;
129
135
  `;
130
136
 
131
137
  const Feature = styled(Flex)`
@@ -174,8 +180,8 @@ const CurrentPlanBadge = styled(Badge)`
174
180
  display: flex;
175
181
  align-items: center;
176
182
  justify-content: center;
177
- background: #F3F4F6;
178
- color: #6B7280;
183
+ background: ${props => props.theme.colors.neutral100};
184
+ color: ${props => props.theme.colors.neutral600};
179
185
  font-weight: 600;
180
186
  font-size: 15px;
181
187
  `;