@mcp-elements/css 0.1.0 → 0.1.2

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.
package/base.css CHANGED
@@ -23,7 +23,16 @@
23
23
  --color-card-foreground: oklch(0.145 0 0);
24
24
  --color-popover: oklch(1 0 0);
25
25
  --color-popover-foreground: oklch(0.145 0 0);
26
- --color-overlay: oklch(0 0 0 / 0.8);
26
+ --color-overlay: oklch(0 0 0 / 0.55);
27
+
28
+ /* Semantic status hues — shared by every component so success/warning/
29
+ danger read identically across tool-call, server-status, alerts, etc.
30
+ Components tint these with color-mix() for backgrounds and borders. */
31
+ --color-success: oklch(0.62 0.16 150);
32
+ --color-warning: oklch(0.68 0.15 70);
33
+ --color-danger: oklch(0.585 0.22 25);
34
+ --color-brand: oklch(0.62 0.21 5);
35
+ --color-brand-2: oklch(0.68 0.18 35);
27
36
 
28
37
  /* Radius scale */
29
38
  --radius-sm: 0.25rem;
@@ -83,6 +92,13 @@
83
92
  --color-card-foreground: oklch(0.985 0 0);
84
93
  --color-popover: oklch(0.205 0.015 286);
85
94
  --color-popover-foreground: oklch(0.985 0 0);
86
- --color-overlay: oklch(0 0 0 / 0.8);
95
+ --color-overlay: oklch(0 0 0 / 0.6);
96
+
97
+ /* Brighter status hues for dark surfaces */
98
+ --color-success: oklch(0.74 0.17 150);
99
+ --color-warning: oklch(0.82 0.16 75);
100
+ --color-danger: oklch(0.70 0.19 22);
101
+ --color-brand: oklch(0.71 0.22 5);
102
+ --color-brand-2: oklch(0.76 0.18 35);
87
103
  }
88
104
  }
@@ -3,15 +3,24 @@
3
3
  @apply inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium
4
4
  [&_svg]:size-3 [&_svg]:shrink-0;
5
5
  }
6
+ /* Brand pink → coral, not the violet AI-template cliché. */
6
7
  .mcpe-ai-badge-default {
7
- background: linear-gradient(135deg, oklch(0.541 0.281 293.009 / 0.15), oklch(0.627 0.265 303.9 / 0.15));
8
- @apply text-[oklch(0.641_0.181_293.009)] border border-[oklch(0.541_0.281_293.009_/_0.2)];
8
+ background: linear-gradient(135deg,
9
+ color-mix(in oklab, var(--color-brand) 16%, transparent),
10
+ color-mix(in oklab, var(--color-brand-2) 16%, transparent));
11
+ color: var(--color-brand);
12
+ border: 1px solid color-mix(in oklab, var(--color-brand) 24%, transparent);
9
13
  }
10
14
  .mcpe-ai-badge-prominent {
11
- background: linear-gradient(135deg, oklch(0.541 0.281 293.009), oklch(0.627 0.265 303.9));
12
- @apply text-white shadow-sm;
15
+ background: linear-gradient(135deg, var(--color-brand), var(--color-brand-2));
16
+ color: oklch(1 0 0);
17
+ box-shadow:
18
+ inset 0 1px 0 0 oklch(1 0 0 / 0.22),
19
+ 0 1px 2px 0 oklch(0 0 0 / 0.15);
13
20
  }
14
21
  .mcpe-ai-badge-subtle {
15
- @apply border border-[oklch(0.541_0.281_293.009_/_0.3)] text-[oklch(0.641_0.181_293.009)] bg-transparent;
22
+ background: transparent;
23
+ color: var(--color-brand);
24
+ border: 1px solid color-mix(in oklab, var(--color-brand) 30%, transparent);
16
25
  }
17
26
  }
@@ -11,11 +11,15 @@
11
11
  @apply border-destructive/50 text-destructive [&>svg]:text-destructive;
12
12
  }
13
13
  .mcpe-alert-success {
14
- @apply border-green-500/50 text-green-600 [&>svg]:text-green-600;
14
+ border-color: color-mix(in oklab, var(--color-success) 45%, transparent);
15
+ color: var(--color-success);
15
16
  }
17
+ .mcpe-alert-success > svg { color: var(--color-success); }
16
18
  .mcpe-alert-warning {
17
- @apply border-yellow-500/50 text-yellow-600 [&>svg]:text-yellow-600;
19
+ border-color: color-mix(in oklab, var(--color-warning) 45%, transparent);
20
+ color: var(--color-warning);
18
21
  }
22
+ .mcpe-alert-warning > svg { color: var(--color-warning); }
19
23
  .mcpe-alert-title {
20
24
  @apply mb-1 font-medium leading-none tracking-tight;
21
25
  }
@@ -1,21 +1,35 @@
1
1
  @layer components {
2
2
  .mcpe-btn {
3
- @apply inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium
4
- whitespace-nowrap transition-all cursor-pointer active:scale-[0.98]
5
- focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring
3
+ @apply inline-flex items-center justify-center gap-2 rounded-lg text-sm font-medium
4
+ whitespace-nowrap cursor-pointer active:scale-[0.985]
5
+ focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background
6
6
  disabled:pointer-events-none disabled:opacity-50
7
7
  [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0;
8
+ transition: background-color 120ms ease, border-color 120ms ease,
9
+ box-shadow 120ms ease, transform 120ms ease, color 120ms ease;
8
10
  }
9
- /* Variants */
10
- .mcpe-btn-primary { @apply bg-primary text-primary-foreground shadow hover:bg-primary/90; }
11
- .mcpe-btn-secondary { @apply bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80; }
12
- .mcpe-btn-outline { @apply border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground; }
13
- .mcpe-btn-ghost { @apply hover:bg-accent hover:text-accent-foreground; }
14
- .mcpe-btn-destructive { @apply bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90; }
15
- .mcpe-btn-link { @apply text-primary underline-offset-4 hover:underline; }
11
+ /* Variants — filled buttons carry a top inset highlight so they read as lit
12
+ surfaces (Linear/Vercel), not flat blocks. */
13
+ .mcpe-btn-primary {
14
+ @apply bg-primary text-primary-foreground hover:bg-primary/90;
15
+ box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.15), 0 1px 2px 0 oklch(0 0 0 / 0.12);
16
+ }
17
+ .mcpe-btn-secondary {
18
+ @apply bg-secondary text-secondary-foreground hover:bg-secondary/80;
19
+ box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.06), 0 1px 2px 0 oklch(0 0 0 / 0.08);
20
+ }
21
+ .mcpe-btn-outline {
22
+ @apply border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground;
23
+ }
24
+ .mcpe-btn-ghost { @apply hover:bg-accent hover:text-accent-foreground; }
25
+ .mcpe-btn-destructive {
26
+ @apply bg-destructive text-destructive-foreground hover:bg-destructive/90;
27
+ box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.15), 0 1px 2px 0 oklch(0 0 0 / 0.12);
28
+ }
29
+ .mcpe-btn-link { @apply text-primary underline-offset-4 hover:underline; }
16
30
  /* Sizes */
17
31
  .mcpe-btn-sm { @apply h-8 rounded-md px-3 text-xs; }
18
32
  .mcpe-btn-md { @apply h-9 px-4 py-2; }
19
- .mcpe-btn-lg { @apply h-10 rounded-md px-8; }
33
+ .mcpe-btn-lg { @apply h-10 px-8; }
20
34
  .mcpe-btn-icon { @apply h-9 w-9; }
21
35
  }
@@ -1,6 +1,17 @@
1
1
  @layer components {
2
2
  .mcpe-card {
3
- @apply rounded-xl border bg-card text-card-foreground shadow;
3
+ @apply relative border bg-card text-card-foreground;
4
+ border-radius: 0.75rem; /* 12px */
5
+ box-shadow:
6
+ inset 0 1px 0 0 oklch(1 0 0 / 0.04),
7
+ 0 1px 2px 0 oklch(0 0 0 / 0.06),
8
+ 0 8px 24px -12px oklch(0 0 0 / 0.12);
9
+ }
10
+ [data-theme='dark'] .mcpe-card {
11
+ box-shadow:
12
+ inset 0 1px 0 0 oklch(1 0 0 / 0.04),
13
+ 0 1px 2px 0 oklch(0 0 0 / 0.24),
14
+ 0 12px 28px -12px oklch(0 0 0 / 0.40);
4
15
  }
5
16
  .mcpe-card-header {
6
17
  @apply flex flex-col space-y-1.5 p-6;
@@ -1,26 +1,61 @@
1
1
  @layer components {
2
+ /* Overlay centers the content via flexbox — no transform-based centering,
3
+ so the entrance animation can't fight the positioning. */
2
4
  .mcpe-dialog-overlay {
3
- @apply fixed inset-0 z-50 bg-[var(--color-overlay)];
5
+ @apply fixed inset-0 z-50 flex items-center justify-center p-4;
6
+ background-color: var(--color-overlay);
7
+ backdrop-filter: blur(2px);
8
+ -webkit-backdrop-filter: blur(2px);
9
+ animation: mcpe-dialog-overlay-in 160ms ease-out;
4
10
  }
11
+
5
12
  .mcpe-dialog-content {
6
- @apply fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2
7
- gap-4 border bg-background p-6 shadow-lg duration-200 sm:rounded-lg;
13
+ @apply relative z-50 grid w-full max-w-md gap-5 border bg-popover p-6 text-popover-foreground;
14
+ border-radius: 0.875rem; /* 14px modern modal, not bubbly */
15
+ box-shadow:
16
+ inset 0 1px 0 0 oklch(1 0 0 / 0.05),
17
+ 0 24px 48px -12px oklch(0 0 0 / 0.45),
18
+ 0 8px 16px -8px oklch(0 0 0 / 0.30);
19
+ animation: mcpe-dialog-content-in 180ms cubic-bezier(0.22, 1, 0.36, 1) both;
20
+ transform-origin: center;
8
21
  }
22
+
9
23
  .mcpe-dialog-header {
10
- @apply flex flex-col space-y-1.5 text-center sm:text-left;
24
+ @apply flex flex-col gap-1.5 pr-8 text-left;
11
25
  }
26
+
12
27
  .mcpe-dialog-footer {
13
- @apply flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2;
28
+ @apply flex flex-col-reverse gap-2 sm:flex-row sm:justify-end;
14
29
  }
30
+
15
31
  .mcpe-dialog-title {
16
- @apply text-lg font-semibold leading-none tracking-tight;
32
+ @apply text-base font-semibold leading-tight tracking-tight;
17
33
  }
34
+
18
35
  .mcpe-dialog-description {
19
- @apply text-sm text-muted-foreground;
36
+ @apply text-sm leading-relaxed text-muted-foreground;
20
37
  }
38
+
21
39
  .mcpe-dialog-close {
22
- @apply absolute right-4 top-4 rounded-sm opacity-70 transition-opacity
23
- hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2
40
+ @apply absolute right-3.5 top-3.5 inline-flex h-8 w-8 items-center justify-center
41
+ rounded-md text-muted-foreground transition-colors
42
+ hover:bg-accent hover:text-foreground
43
+ focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-popover
24
44
  disabled:pointer-events-none;
25
45
  }
26
46
  }
47
+
48
+ @keyframes mcpe-dialog-overlay-in {
49
+ from { opacity: 0; }
50
+ to { opacity: 1; }
51
+ }
52
+
53
+ @keyframes mcpe-dialog-content-in {
54
+ from { opacity: 0; transform: scale(0.96); }
55
+ to { opacity: 1; transform: scale(1); }
56
+ }
57
+
58
+ @media (prefers-reduced-motion: reduce) {
59
+ .mcpe-dialog-overlay,
60
+ .mcpe-dialog-content { animation: none; }
61
+ }
@@ -1,10 +1,16 @@
1
1
  @layer components {
2
2
  .mcpe-dropdown-menu-content {
3
- @apply z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1
4
- text-popover-foreground shadow-md;
3
+ @apply z-50 min-w-[8rem] overflow-hidden border bg-popover p-1
4
+ text-popover-foreground;
5
+ border-radius: 0.625rem; /* 10px */
6
+ box-shadow:
7
+ inset 0 1px 0 0 oklch(1 0 0 / 0.05),
8
+ 0 4px 12px -2px oklch(0 0 0 / 0.12),
9
+ 0 16px 32px -8px oklch(0 0 0 / 0.22);
10
+ animation: mcpe-pop-in 140ms cubic-bezier(0.22, 1, 0.36, 1);
5
11
  }
6
12
  .mcpe-dropdown-menu-item {
7
- @apply relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5
13
+ @apply relative flex cursor-default select-none items-center rounded-md px-2 py-1.5
8
14
  text-sm outline-none transition-colors;
9
15
  }
10
16
  .mcpe-dropdown-menu-item-active {
@@ -11,7 +11,8 @@
11
11
  @apply ring-1 ring-ring;
12
12
  }
13
13
  .mcpe-feedback-btn-up.mcpe-feedback-btn-selected {
14
- @apply text-emerald-500 bg-emerald-500/10 hover:bg-emerald-500/15;
14
+ color: var(--color-success);
15
+ background-color: color-mix(in oklab, var(--color-success) 12%, transparent);
15
16
  }
16
17
  .mcpe-feedback-btn-down.mcpe-feedback-btn-selected {
17
18
  @apply text-destructive bg-destructive/10 hover:bg-destructive/15;
@@ -1,51 +1,99 @@
1
1
  @layer components {
2
+ /* Root — consistent vertical rhythm between identity, scopes, actions */
3
+ .mcpe-mcp-consent-dialog {
4
+ @apply flex flex-col gap-4;
5
+ }
6
+
7
+ /* Server identity row */
2
8
  .mcpe-mcp-consent-dialog-server {
3
- @apply flex items-center gap-3 pb-4;
4
- border-bottom: 1px solid var(--color-border);
9
+ @apply flex items-center gap-3;
5
10
  }
6
11
 
7
12
  .mcpe-mcp-consent-dialog-icon {
8
- @apply h-10 w-10 rounded-lg overflow-hidden flex items-center justify-center text-lg font-bold shrink-0;
13
+ @apply flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden text-base font-semibold;
14
+ border-radius: 0.625rem; /* 10px */
9
15
  background-color: var(--color-accent);
10
16
  color: var(--color-accent-foreground);
17
+ border: 1px solid var(--color-border);
18
+ }
19
+ .mcpe-mcp-consent-dialog-icon img {
20
+ height: 100%;
21
+ width: 100%;
22
+ object-fit: cover;
11
23
  }
12
24
 
25
+ .mcpe-mcp-consent-dialog-server-text {
26
+ @apply min-w-0;
27
+ }
13
28
  .mcpe-mcp-consent-dialog-server-name {
14
- @apply font-semibold text-base;
29
+ @apply text-sm font-semibold leading-tight;
30
+ color: var(--color-foreground);
15
31
  }
16
-
17
32
  .mcpe-mcp-consent-dialog-server-meta {
18
- @apply text-xs;
33
+ @apply text-xs leading-tight;
34
+ margin-top: 0.125rem;
19
35
  color: var(--color-muted-foreground);
20
36
  }
21
37
 
38
+ /* Scope list */
22
39
  .mcpe-mcp-consent-dialog-scopes {
23
- @apply flex flex-col gap-2 py-3;
40
+ @apply flex flex-col gap-1.5;
24
41
  }
25
42
 
26
43
  .mcpe-mcp-consent-dialog-scope-item {
27
- @apply flex items-start gap-2 rounded-lg p-3;
44
+ @apply flex items-center justify-between gap-3;
45
+ padding: 0.625rem 0.75rem; /* 10px / 12px */
46
+ border-radius: 0.5rem; /* 8px */
28
47
  background-color: var(--color-muted);
29
- border: 1px solid var(--color-border);
48
+ border: 1px solid transparent;
49
+ transition: border-color 140ms var(--mcpe-ease, cubic-bezier(0.22, 1, 0.36, 1)),
50
+ background-color 140ms ease,
51
+ transform 140ms var(--mcpe-ease, cubic-bezier(0.22, 1, 0.36, 1)),
52
+ box-shadow 140ms ease;
53
+ }
54
+ .mcpe-mcp-consent-dialog-scope-item:hover {
55
+ border-color: var(--color-border);
56
+ background-color: color-mix(in oklab, var(--color-muted) 60%, var(--color-accent));
57
+ transform: translateY(-1px);
58
+ box-shadow: 0 2px 8px -4px oklch(0 0 0 / 0.30);
30
59
  }
31
60
 
32
61
  .mcpe-mcp-consent-dialog-scope-resource {
33
- @apply font-mono text-xs font-semibold;
34
- color: var(--color-primary);
62
+ @apply truncate font-mono text-[0.8125rem] font-medium;
63
+ color: var(--color-foreground);
35
64
  }
36
65
 
37
66
  .mcpe-mcp-consent-dialog-scope-perms {
38
- @apply flex flex-wrap gap-1 mt-0.5;
67
+ @apply flex shrink-0 flex-wrap items-center gap-1;
39
68
  }
40
69
 
70
+ /* Permission badge — neutral by default; elevated perms (write/admin/…)
71
+ get a warning tint so risky grants stand out at a glance. */
41
72
  .mcpe-mcp-consent-dialog-scope-perm {
42
- @apply rounded px-1.5 py-0.5 text-[10px] font-medium font-mono uppercase;
43
- background-color: var(--color-secondary);
44
- color: var(--color-secondary-foreground);
73
+ @apply inline-flex items-center font-mono text-[0.625rem] font-semibold uppercase;
74
+ letter-spacing: 0.06em;
75
+ padding: 0.125rem 0.375rem;
76
+ border-radius: 0.3125rem; /* 5px */
77
+ background-color: color-mix(in oklab, var(--color-foreground) 8%, transparent);
78
+ color: var(--color-muted-foreground);
79
+ border: 1px solid transparent;
80
+ }
81
+ .mcpe-mcp-consent-dialog-scope-perm[data-perm='write'],
82
+ .mcpe-mcp-consent-dialog-scope-perm[data-perm='admin'],
83
+ .mcpe-mcp-consent-dialog-scope-perm[data-perm='delete'],
84
+ .mcpe-mcp-consent-dialog-scope-perm[data-perm='manage'] {
85
+ background-color: color-mix(in oklab, var(--color-warning) 16%, transparent);
86
+ color: var(--color-warning);
87
+ border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
45
88
  }
46
89
 
90
+ /* Actions — separated from the content by a divider + generous spacing */
47
91
  .mcpe-mcp-consent-dialog-actions {
48
- @apply flex gap-2 pt-2;
92
+ @apply flex items-center gap-2.5 pt-4;
93
+ margin-top: 0.25rem;
49
94
  border-top: 1px solid var(--color-border);
50
95
  }
96
+ .mcpe-mcp-consent-dialog-actions > .mcpe-btn {
97
+ flex: 1 1 0%;
98
+ }
51
99
  }
@@ -4,13 +4,17 @@
4
4
  }
5
5
 
6
6
  .mcpe-mcp-resource-browser-item {
7
- @apply flex items-center gap-3 rounded-lg px-3 py-2.5 cursor-pointer transition-colors;
7
+ @apply flex items-center gap-3 rounded-lg px-3 py-2.5 cursor-pointer;
8
8
  border: 1px solid transparent;
9
+ transition: background-color 140ms ease, border-color 140ms ease,
10
+ transform 140ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow 140ms ease;
9
11
  }
10
12
 
11
13
  .mcpe-mcp-resource-browser-item:hover {
12
14
  background-color: var(--color-accent);
13
15
  border-color: var(--color-border);
16
+ transform: translateY(-1px);
17
+ box-shadow: 0 2px 8px -4px oklch(0 0 0 / 0.30);
14
18
  }
15
19
 
16
20
  .mcpe-mcp-resource-browser-item-selected {
@@ -11,6 +11,7 @@
11
11
  .mcpe-mcp-scope-inspector-trigger {
12
12
  @apply flex w-full items-center justify-between px-4 py-3 text-left;
13
13
  background-color: var(--color-card);
14
+ transition: background-color 140ms ease;
14
15
  }
15
16
 
16
17
  .mcpe-mcp-scope-inspector-trigger:hover {
@@ -26,9 +27,21 @@
26
27
  }
27
28
 
28
29
  .mcpe-mcp-scope-inspector-perm {
29
- @apply rounded px-1.5 py-0.5 text-[10px] font-mono font-medium uppercase;
30
- background-color: var(--color-secondary);
31
- color: var(--color-secondary-foreground);
30
+ @apply inline-flex items-center font-mono text-[0.625rem] font-semibold uppercase;
31
+ letter-spacing: 0.06em;
32
+ padding: 0.125rem 0.375rem;
33
+ border-radius: 0.3125rem; /* 5px */
34
+ background-color: color-mix(in oklab, var(--color-foreground) 8%, transparent);
35
+ color: var(--color-muted-foreground);
36
+ border: 1px solid transparent;
37
+ }
38
+ .mcpe-mcp-scope-inspector-perm[data-perm='write'],
39
+ .mcpe-mcp-scope-inspector-perm[data-perm='admin'],
40
+ .mcpe-mcp-scope-inspector-perm[data-perm='delete'],
41
+ .mcpe-mcp-scope-inspector-perm[data-perm='manage'] {
42
+ background-color: color-mix(in oklab, var(--color-warning) 16%, transparent);
43
+ color: var(--color-warning);
44
+ border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
32
45
  }
33
46
 
34
47
  .mcpe-mcp-scope-inspector-chevron {
@@ -10,43 +10,44 @@
10
10
 
11
11
  /* Connected */
12
12
  .mcpe-mcp-server-status-connected {
13
- background-color: oklch(0.72 0.17 145 / 0.12);
14
- border-color: oklch(0.72 0.17 145 / 0.3);
15
- color: oklch(0.72 0.17 145);
13
+ background-color: color-mix(in oklab, var(--color-success) 12%, transparent);
14
+ border-color: color-mix(in oklab, var(--color-success) 30%, transparent);
15
+ color: var(--color-success);
16
16
  }
17
17
  .mcpe-mcp-server-status-connected .mcpe-mcp-server-status-dot {
18
- background-color: oklch(0.72 0.17 145);
18
+ background-color: var(--color-success);
19
+ box-shadow: 0 0 6px color-mix(in oklab, var(--color-success) 70%, transparent);
19
20
  }
20
21
 
21
22
  /* Connecting */
22
23
  .mcpe-mcp-server-status-connecting {
23
- background-color: oklch(0.82 0.18 85 / 0.12);
24
- border-color: oklch(0.82 0.18 85 / 0.3);
25
- color: oklch(0.82 0.18 85);
24
+ background-color: color-mix(in oklab, var(--color-warning) 12%, transparent);
25
+ border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
26
+ color: var(--color-warning);
26
27
  }
27
28
  .mcpe-mcp-server-status-connecting .mcpe-mcp-server-status-dot {
28
- background-color: oklch(0.82 0.18 85);
29
+ background-color: var(--color-warning);
29
30
  animation: mcpe-pulse 1.5s ease-in-out infinite;
30
31
  }
31
32
 
32
33
  /* Disconnected */
33
34
  .mcpe-mcp-server-status-disconnected {
34
- background-color: oklch(0.5 0 0 / 0.08);
35
- border-color: oklch(0.5 0 0 / 0.2);
36
- color: oklch(0.55 0.012 286);
35
+ background-color: color-mix(in oklab, var(--color-muted-foreground) 10%, transparent);
36
+ border-color: color-mix(in oklab, var(--color-muted-foreground) 22%, transparent);
37
+ color: var(--color-muted-foreground);
37
38
  }
38
39
  .mcpe-mcp-server-status-disconnected .mcpe-mcp-server-status-dot {
39
- background-color: oklch(0.55 0.012 286);
40
+ background-color: var(--color-muted-foreground);
40
41
  }
41
42
 
42
43
  /* Error */
43
44
  .mcpe-mcp-server-status-error {
44
- background-color: oklch(0.62 0.22 25 / 0.12);
45
- border-color: oklch(0.62 0.22 25 / 0.3);
46
- color: oklch(0.62 0.22 25);
45
+ background-color: color-mix(in oklab, var(--color-danger) 12%, transparent);
46
+ border-color: color-mix(in oklab, var(--color-danger) 30%, transparent);
47
+ color: var(--color-danger);
47
48
  }
48
49
  .mcpe-mcp-server-status-error .mcpe-mcp-server-status-dot {
49
- background-color: oklch(0.62 0.22 25);
50
+ background-color: var(--color-danger);
50
51
  }
51
52
 
52
53
  @keyframes mcpe-pulse {
@@ -48,15 +48,15 @@
48
48
  }
49
49
 
50
50
  .mcpe-mcp-tool-call-result-done {
51
- background-color: oklch(0.72 0.17 145 / 0.08);
52
- border: 1px solid oklch(0.72 0.17 145 / 0.25);
53
- color: oklch(0.72 0.17 145);
51
+ background-color: color-mix(in oklab, var(--color-success) 9%, transparent);
52
+ border: 1px solid color-mix(in oklab, var(--color-success) 25%, transparent);
53
+ color: var(--color-success);
54
54
  }
55
55
 
56
56
  .mcpe-mcp-tool-call-result-error {
57
- background-color: oklch(0.62 0.22 25 / 0.08);
58
- border: 1px solid oklch(0.62 0.22 25 / 0.25);
59
- color: oklch(0.62 0.22 25);
57
+ background-color: color-mix(in oklab, var(--color-danger) 9%, transparent);
58
+ border: 1px solid color-mix(in oklab, var(--color-danger) 25%, transparent);
59
+ color: var(--color-danger);
60
60
  }
61
61
 
62
62
  .mcpe-mcp-tool-call-footer {
@@ -75,18 +75,18 @@
75
75
 
76
76
  .mcpe-mcp-tool-call-badge-pending,
77
77
  .mcpe-mcp-tool-call-badge-running {
78
- background-color: oklch(0.82 0.18 85 / 0.15);
79
- color: oklch(0.82 0.18 85);
78
+ background-color: color-mix(in oklab, var(--color-warning) 15%, transparent);
79
+ color: var(--color-warning);
80
80
  }
81
81
 
82
82
  .mcpe-mcp-tool-call-badge-done {
83
- background-color: oklch(0.72 0.17 145 / 0.15);
84
- color: oklch(0.72 0.17 145);
83
+ background-color: color-mix(in oklab, var(--color-success) 15%, transparent);
84
+ color: var(--color-success);
85
85
  }
86
86
 
87
87
  .mcpe-mcp-tool-call-badge-error {
88
- background-color: oklch(0.62 0.22 25 / 0.15);
89
- color: oklch(0.62 0.22 25);
88
+ background-color: color-mix(in oklab, var(--color-danger) 15%, transparent);
89
+ color: var(--color-danger);
90
90
  }
91
91
 
92
92
  .mcpe-mcp-tool-call-badge-cancelled {
@@ -1,5 +1,16 @@
1
+ @keyframes mcpe-pop-in {
2
+ from { opacity: 0; transform: scale(0.97) translateY(-2px); }
3
+ to { opacity: 1; transform: scale(1) translateY(0); }
4
+ }
5
+
1
6
  @layer components {
2
7
  .mcpe-popover-content {
3
- @apply z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none;
8
+ @apply z-50 w-72 border bg-popover p-4 text-popover-foreground outline-none;
9
+ border-radius: 0.75rem; /* 12px */
10
+ box-shadow:
11
+ inset 0 1px 0 0 oklch(1 0 0 / 0.05),
12
+ 0 4px 12px -2px oklch(0 0 0 / 0.12),
13
+ 0 16px 32px -8px oklch(0 0 0 / 0.22);
14
+ animation: mcpe-pop-in 140ms cubic-bezier(0.22, 1, 0.36, 1);
4
15
  }
5
16
  }
@@ -30,8 +30,14 @@
30
30
  color: var(--color-foreground);
31
31
  }
32
32
  .mcpe-select-content {
33
- @apply relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border
34
- bg-popover text-popover-foreground shadow-md;
33
+ @apply relative z-50 max-h-96 min-w-[8rem] overflow-hidden border
34
+ bg-popover text-popover-foreground;
35
+ border-radius: 0.625rem; /* 10px */
36
+ box-shadow:
37
+ inset 0 1px 0 0 oklch(1 0 0 / 0.05),
38
+ 0 4px 12px -2px oklch(0 0 0 / 0.12),
39
+ 0 16px 32px -8px oklch(0 0 0 / 0.22);
40
+ animation: mcpe-pop-in 140ms cubic-bezier(0.22, 1, 0.36, 1);
35
41
  }
36
42
  .mcpe-select-viewport {
37
43
  @apply p-1;
@@ -1,46 +1,75 @@
1
+ @keyframes mcpe-toast-in {
2
+ from { opacity: 0; transform: translateY(8px) scale(0.98); }
3
+ to { opacity: 1; transform: translateY(0) scale(1); }
4
+ }
5
+
1
6
  @layer components {
2
7
  .mcpe-toaster {
3
- @apply fixed z-[100] flex flex-col gap-2 p-4;
4
- }
5
- .mcpe-toaster-top-right {
6
- @apply top-0 right-0;
7
- }
8
- .mcpe-toaster-bottom-right {
9
- @apply bottom-0 right-0;
10
- }
11
- .mcpe-toaster-top-left {
12
- @apply top-0 left-0;
13
- }
14
- .mcpe-toaster-bottom-left {
15
- @apply bottom-0 left-0;
8
+ @apply fixed z-[100] flex flex-col gap-2.5 p-4;
16
9
  }
10
+ .mcpe-toaster-top-right { @apply top-0 right-0; }
11
+ .mcpe-toaster-bottom-right { @apply bottom-0 right-0; }
12
+ .mcpe-toaster-top-left { @apply top-0 left-0; }
13
+ .mcpe-toaster-bottom-left { @apply bottom-0 left-0; }
14
+
15
+ /* Elevated neutral surface + a colored status icon — not a saturated fill.
16
+ Layered shadow reads like a real floating surface (Sonner/Linear). */
17
17
  .mcpe-toast {
18
- @apply pointer-events-auto relative flex w-full items-center justify-between space-x-2
19
- overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all
20
- bg-background text-foreground;
18
+ @apply pointer-events-auto relative flex w-full items-start gap-2.5
19
+ py-3 pl-3.5 pr-9;
20
+ min-width: 20rem;
21
+ border-radius: 0.75rem; /* 12px */
22
+ background-color: var(--color-popover);
23
+ color: var(--color-popover-foreground);
24
+ border: 1px solid var(--color-border);
25
+ box-shadow:
26
+ inset 0 1px 0 0 oklch(1 0 0 / 0.04),
27
+ 0 1px 2px 0 oklch(0 0 0 / 0.20),
28
+ 0 12px 28px -8px oklch(0 0 0 / 0.40);
29
+ animation: mcpe-toast-in 220ms cubic-bezier(0.22, 1, 0.36, 1);
30
+ }
31
+
32
+ .mcpe-toast-icon {
33
+ @apply mt-px flex h-[1.125rem] w-[1.125rem] shrink-0 items-center justify-center;
34
+ color: var(--color-muted-foreground);
21
35
  }
36
+ .mcpe-toast-icon svg { height: 100%; width: 100%; }
37
+
22
38
  .mcpe-toast-destructive {
23
- @apply border-destructive bg-destructive text-destructive-foreground;
39
+ border-color: color-mix(in oklab, var(--color-danger) 26%, var(--color-border));
40
+ background-color: color-mix(in oklab, var(--color-danger) 6%, var(--color-popover));
24
41
  }
42
+ .mcpe-toast-destructive .mcpe-toast-icon { color: var(--color-danger); }
43
+
25
44
  .mcpe-toast-success {
26
- @apply border-green-500/50 bg-green-500/10 text-green-600;
45
+ border-color: color-mix(in oklab, var(--color-success) 26%, var(--color-border));
46
+ background-color: color-mix(in oklab, var(--color-success) 6%, var(--color-popover));
27
47
  }
48
+ .mcpe-toast-success .mcpe-toast-icon { color: var(--color-success); }
49
+
50
+ .mcpe-toast-body { @apply flex min-w-0 flex-col gap-0.5; }
51
+
28
52
  .mcpe-toast-title {
29
- @apply text-sm font-semibold;
53
+ @apply text-sm font-semibold leading-tight;
54
+ color: var(--color-foreground);
30
55
  }
31
56
  .mcpe-toast-description {
32
- @apply text-sm opacity-90;
57
+ @apply text-[0.8125rem] leading-snug;
58
+ color: var(--color-muted-foreground);
33
59
  }
34
60
  .mcpe-toast-close {
35
- @apply absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity
36
- hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none;
61
+ @apply absolute right-2 top-2.5 inline-flex h-6 w-6 items-center justify-center rounded-md
62
+ text-muted-foreground opacity-0 transition-all
63
+ hover:bg-accent hover:text-foreground
64
+ focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring;
37
65
  }
38
- .mcpe-toast:hover .mcpe-toast-close {
66
+ .mcpe-toast:hover .mcpe-toast-close,
67
+ .mcpe-toast:focus-within .mcpe-toast-close {
39
68
  @apply opacity-100;
40
69
  }
41
70
  .mcpe-toast-action {
42
- @apply inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent
43
- px-3 text-sm font-medium transition-colors hover:bg-secondary
44
- focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50;
71
+ @apply ml-auto inline-flex h-7 shrink-0 items-center justify-center self-center rounded-md border bg-transparent
72
+ px-2.5 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground
73
+ focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50;
45
74
  }
46
75
  }
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@mcp-elements/css",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "exports": {
5
+ ".": "./base.css",
5
6
  "./base.css": "./base.css",
6
7
  "./base": "./base.css",
7
8
  "./components/*.css": "./components/*.css",