@geenius/adapters 0.1.0 → 0.3.0

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.
Files changed (185) hide show
  1. package/README.md +79 -42
  2. package/package.json +23 -4
  3. package/packages/convex/README.md +1 -1
  4. package/packages/convex/dist/index.cjs +300 -0
  5. package/packages/convex/dist/index.cjs.map +1 -0
  6. package/packages/convex/dist/index.d.cts +231 -0
  7. package/packages/convex/dist/index.d.ts +231 -0
  8. package/packages/convex/dist/index.js +263 -0
  9. package/packages/convex/dist/index.js.map +1 -0
  10. package/packages/react/README.md +1 -1
  11. package/packages/react/dist/index.d.mts +106 -0
  12. package/packages/react/dist/index.d.ts +106 -0
  13. package/packages/react/dist/index.js +611 -0
  14. package/packages/react/dist/index.js.map +1 -0
  15. package/packages/react/dist/index.mjs +570 -0
  16. package/packages/react/dist/index.mjs.map +1 -0
  17. package/packages/react-css/README.md +1 -1
  18. package/packages/react-css/dist/index.cjs +515 -0
  19. package/packages/react-css/dist/index.cjs.map +1 -0
  20. package/packages/react-css/dist/index.d.cts +105 -0
  21. package/packages/react-css/dist/index.d.ts +105 -0
  22. package/packages/react-css/dist/index.js +467 -0
  23. package/packages/react-css/dist/index.js.map +1 -0
  24. package/packages/shared/README.md +1 -1
  25. package/packages/shared/dist/index.d.mts +625 -0
  26. package/packages/shared/dist/index.d.ts +625 -0
  27. package/packages/shared/dist/index.js +1567 -0
  28. package/packages/shared/dist/index.js.map +1 -0
  29. package/packages/shared/dist/index.mjs +1489 -0
  30. package/packages/shared/dist/index.mjs.map +1 -0
  31. package/packages/solidjs/README.md +1 -1
  32. package/packages/solidjs/dist/index.d.mts +97 -0
  33. package/packages/solidjs/dist/index.d.ts +97 -0
  34. package/packages/solidjs/dist/index.js +250 -0
  35. package/packages/solidjs/dist/index.js.map +1 -0
  36. package/packages/solidjs/dist/index.mjs +202 -0
  37. package/packages/solidjs/dist/index.mjs.map +1 -0
  38. package/packages/solidjs-css/README.md +1 -1
  39. package/packages/solidjs-css/dist/index.cjs +343 -0
  40. package/packages/solidjs-css/dist/index.cjs.map +1 -0
  41. package/packages/solidjs-css/dist/index.d.cts +67 -0
  42. package/packages/solidjs-css/dist/index.d.ts +67 -0
  43. package/packages/solidjs-css/dist/index.js +326 -0
  44. package/packages/solidjs-css/dist/index.js.map +1 -0
  45. package/.changeset/config.json +0 -11
  46. package/.github/CODEOWNERS +0 -1
  47. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  48. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  49. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  50. package/.github/dependabot.yml +0 -11
  51. package/.github/workflows/ci.yml +0 -23
  52. package/.github/workflows/release.yml +0 -29
  53. package/.nvmrc +0 -1
  54. package/.project/ACCOUNT.yaml +0 -4
  55. package/.project/IDEAS.yaml +0 -7
  56. package/.project/PROJECT.yaml +0 -11
  57. package/.project/ROADMAP.yaml +0 -15
  58. package/CODE_OF_CONDUCT.md +0 -16
  59. package/CONTRIBUTING.md +0 -26
  60. package/SECURITY.md +0 -15
  61. package/SUPPORT.md +0 -8
  62. package/packages/convex/package.json +0 -42
  63. package/packages/convex/src/adapter.ts +0 -39
  64. package/packages/convex/src/index.ts +0 -19
  65. package/packages/convex/src/mutations.ts +0 -142
  66. package/packages/convex/src/queries.ts +0 -106
  67. package/packages/convex/src/schema.ts +0 -54
  68. package/packages/convex/src/types.ts +0 -20
  69. package/packages/convex/tsconfig.json +0 -11
  70. package/packages/convex/tsup.config.ts +0 -10
  71. package/packages/react/package.json +0 -45
  72. package/packages/react/src/components/AdapterCard.tsx +0 -49
  73. package/packages/react/src/components/AdapterConfigForm.tsx +0 -118
  74. package/packages/react/src/components/AdapterList.tsx +0 -84
  75. package/packages/react/src/components/AdapterStatusBadge.tsx +0 -30
  76. package/packages/react/src/components/index.ts +0 -4
  77. package/packages/react/src/hooks/index.ts +0 -75
  78. package/packages/react/src/index.tsx +0 -44
  79. package/packages/react/src/pages/AdapterDetailPage.tsx +0 -133
  80. package/packages/react/src/pages/AdaptersPage.tsx +0 -111
  81. package/packages/react/src/pages/index.ts +0 -2
  82. package/packages/react/src/provider/AdapterProvider.tsx +0 -115
  83. package/packages/react/src/provider/index.ts +0 -2
  84. package/packages/react/tsconfig.json +0 -18
  85. package/packages/react/tsup.config.ts +0 -10
  86. package/packages/react-css/package.json +0 -44
  87. package/packages/react-css/src/adapters.css +0 -1576
  88. package/packages/react-css/src/components/AdapterCard.tsx +0 -34
  89. package/packages/react-css/src/components/AdapterConfigForm.tsx +0 -63
  90. package/packages/react-css/src/components/AdapterList.tsx +0 -40
  91. package/packages/react-css/src/components/AdapterStatusBadge.tsx +0 -21
  92. package/packages/react-css/src/components/index.ts +0 -4
  93. package/packages/react-css/src/hooks/index.ts +0 -75
  94. package/packages/react-css/src/index.tsx +0 -25
  95. package/packages/react-css/src/pages/AdapterDetailPage.tsx +0 -133
  96. package/packages/react-css/src/pages/AdaptersPage.tsx +0 -111
  97. package/packages/react-css/src/pages/index.ts +0 -2
  98. package/packages/react-css/src/provider/AdapterProvider.tsx +0 -115
  99. package/packages/react-css/src/provider/index.ts +0 -2
  100. package/packages/react-css/src/styles.css +0 -494
  101. package/packages/react-css/tsconfig.json +0 -19
  102. package/packages/react-css/tsup.config.ts +0 -2
  103. package/packages/shared/package.json +0 -39
  104. package/packages/shared/src/__tests__/adapters.test.ts +0 -545
  105. package/packages/shared/src/admin/index.ts +0 -2
  106. package/packages/shared/src/admin/interface.ts +0 -34
  107. package/packages/shared/src/admin/localStorage.ts +0 -109
  108. package/packages/shared/src/ai/anthropic.ts +0 -123
  109. package/packages/shared/src/ai/cloudflare-gateway.ts +0 -130
  110. package/packages/shared/src/ai/gemini.ts +0 -181
  111. package/packages/shared/src/ai/index.ts +0 -14
  112. package/packages/shared/src/ai/interface.ts +0 -11
  113. package/packages/shared/src/ai/localStorage.ts +0 -78
  114. package/packages/shared/src/ai/ollama.ts +0 -143
  115. package/packages/shared/src/ai/openai.ts +0 -120
  116. package/packages/shared/src/ai/vercel-ai.ts +0 -101
  117. package/packages/shared/src/auth/better-auth.ts +0 -118
  118. package/packages/shared/src/auth/clerk.ts +0 -151
  119. package/packages/shared/src/auth/convex-auth.ts +0 -125
  120. package/packages/shared/src/auth/index.ts +0 -10
  121. package/packages/shared/src/auth/interface.ts +0 -17
  122. package/packages/shared/src/auth/localStorage.ts +0 -125
  123. package/packages/shared/src/auth/supabase-auth.ts +0 -136
  124. package/packages/shared/src/config.ts +0 -57
  125. package/packages/shared/src/constants.ts +0 -122
  126. package/packages/shared/src/db/convex.ts +0 -146
  127. package/packages/shared/src/db/index.ts +0 -10
  128. package/packages/shared/src/db/interface.ts +0 -13
  129. package/packages/shared/src/db/localStorage.ts +0 -91
  130. package/packages/shared/src/db/mongodb.ts +0 -125
  131. package/packages/shared/src/db/neon.ts +0 -171
  132. package/packages/shared/src/db/supabase.ts +0 -158
  133. package/packages/shared/src/index.ts +0 -117
  134. package/packages/shared/src/payments/index.ts +0 -4
  135. package/packages/shared/src/payments/interface.ts +0 -11
  136. package/packages/shared/src/payments/localStorage.ts +0 -81
  137. package/packages/shared/src/payments/stripe.ts +0 -177
  138. package/packages/shared/src/storage/convex.ts +0 -113
  139. package/packages/shared/src/storage/index.ts +0 -14
  140. package/packages/shared/src/storage/interface.ts +0 -11
  141. package/packages/shared/src/storage/localStorage.ts +0 -95
  142. package/packages/shared/src/storage/minio.ts +0 -47
  143. package/packages/shared/src/storage/r2.ts +0 -123
  144. package/packages/shared/src/storage/s3.ts +0 -128
  145. package/packages/shared/src/storage/supabase-storage.ts +0 -116
  146. package/packages/shared/src/storage/uploadthing.ts +0 -126
  147. package/packages/shared/src/styles/adapters.css +0 -494
  148. package/packages/shared/src/tier-gate.ts +0 -119
  149. package/packages/shared/src/types.ts +0 -162
  150. package/packages/shared/tsconfig.json +0 -18
  151. package/packages/shared/tsup.config.ts +0 -9
  152. package/packages/shared/vitest.config.ts +0 -14
  153. package/packages/solidjs/package.json +0 -44
  154. package/packages/solidjs/src/components/AdapterCard.tsx +0 -24
  155. package/packages/solidjs/src/components/AdapterConfigForm.tsx +0 -54
  156. package/packages/solidjs/src/components/AdapterList.tsx +0 -28
  157. package/packages/solidjs/src/components/AdapterStatusBadge.tsx +0 -20
  158. package/packages/solidjs/src/components/index.ts +0 -4
  159. package/packages/solidjs/src/index.tsx +0 -17
  160. package/packages/solidjs/src/pages/AdapterDetailPage.tsx +0 -38
  161. package/packages/solidjs/src/pages/AdaptersPage.tsx +0 -39
  162. package/packages/solidjs/src/pages/index.ts +0 -2
  163. package/packages/solidjs/src/primitives/index.ts +0 -78
  164. package/packages/solidjs/src/provider/AdapterProvider.tsx +0 -62
  165. package/packages/solidjs/src/provider/index.ts +0 -2
  166. package/packages/solidjs/tsconfig.json +0 -20
  167. package/packages/solidjs/tsup.config.ts +0 -10
  168. package/packages/solidjs-css/package.json +0 -43
  169. package/packages/solidjs-css/src/adapters.css +0 -1576
  170. package/packages/solidjs-css/src/components/AdapterCard.tsx +0 -43
  171. package/packages/solidjs-css/src/components/AdapterConfigForm.tsx +0 -119
  172. package/packages/solidjs-css/src/components/AdapterList.tsx +0 -68
  173. package/packages/solidjs-css/src/components/AdapterStatusBadge.tsx +0 -24
  174. package/packages/solidjs-css/src/components/index.ts +0 -8
  175. package/packages/solidjs-css/src/index.tsx +0 -30
  176. package/packages/solidjs-css/src/pages/AdapterDetailPage.tsx +0 -107
  177. package/packages/solidjs-css/src/pages/AdaptersPage.tsx +0 -94
  178. package/packages/solidjs-css/src/pages/index.ts +0 -4
  179. package/packages/solidjs-css/src/primitives/index.ts +0 -1
  180. package/packages/solidjs-css/src/provider/AdapterProvider.tsx +0 -61
  181. package/packages/solidjs-css/src/provider/index.ts +0 -2
  182. package/packages/solidjs-css/tsconfig.json +0 -20
  183. package/packages/solidjs-css/tsup.config.ts +0 -2
  184. package/pnpm-workspace.yaml +0 -2
  185. package/tsconfig.json +0 -17
@@ -1,1576 +0,0 @@
1
- /* ============================================================================
2
- GEENIUS ADAPTERS - COMPREHENSIVE CSS
3
- Component: Adapter Cards, Connectors, API Management
4
- Colors: OKLCH, Dark Mode Support, Animations
5
- ============================================================================ */
6
-
7
- :root {
8
- /* Base Colors - OKLCH */
9
- --adapters-bg: oklch(0.10 0.01 250);
10
- --adapters-surface: oklch(0.13 0.01 250);
11
- --adapters-surface-2: oklch(0.16 0.01 250);
12
- --adapters-surface-3: oklch(0.19 0.01 250);
13
- --adapters-border: oklch(0.22 0.01 250);
14
- --adapters-border-light: oklch(0.26 0.01 250);
15
- --adapters-border-focus: oklch(0.65 0.22 265);
16
- --adapters-text: oklch(0.95 0.01 250);
17
- --adapters-text-secondary: oklch(0.75 0.01 250);
18
- --adapters-text-muted: oklch(0.65 0.01 250);
19
- --adapters-text-disabled: oklch(0.45 0.01 250);
20
-
21
- /* Semantic Colors - OKLCH */
22
- --adapters-accent: oklch(0.65 0.22 265);
23
- --adapters-accent-light: oklch(0.75 0.18 265);
24
- --adapters-accent-dark: oklch(0.55 0.24 265);
25
- --adapters-success: oklch(0.72 0.20 145);
26
- --adapters-success-light: oklch(0.82 0.15 145);
27
- --adapters-success-dark: oklch(0.62 0.22 145);
28
- --adapters-warning: oklch(0.78 0.18 75);
29
- --adapters-warning-light: oklch(0.88 0.13 75);
30
- --adapters-warning-dark: oklch(0.68 0.20 75);
31
- --adapters-error: oklch(0.60 0.25 25);
32
- --adapters-error-light: oklch(0.70 0.20 25);
33
- --adapters-error-dark: oklch(0.50 0.28 25);
34
- --adapters-info: oklch(0.65 0.20 265);
35
- --adapters-active: oklch(0.72 0.20 145);
36
- --adapters-inactive: oklch(0.45 0.01 250);
37
-
38
- /* Spacing & Layout */
39
- --adapters-radius: 0.75rem;
40
- --adapters-radius-sm: 0.375rem;
41
- --adapters-radius-lg: 1.25rem;
42
- --adapters-spacing-xs: 0.375rem;
43
- --adapters-spacing-sm: 0.5rem;
44
- --adapters-spacing-md: 0.75rem;
45
- --adapters-spacing-lg: 1rem;
46
- --adapters-spacing-xl: 1.5rem;
47
- --adapters-spacing-2xl: 2rem;
48
-
49
- /* Effects */
50
- --adapters-shadow: 0 4px 24px oklch(0 0 0 / 0.4);
51
- --adapters-shadow-sm: 0 2px 8px oklch(0 0 0 / 0.2);
52
- --adapters-shadow-lg: 0 12px 48px oklch(0 0 0 / 0.5);
53
- --adapters-shadow-focus: 0 0 0 3px oklch(0.65 0.22 265 / 0.15);
54
- --adapters-transition: 200ms ease;
55
- --adapters-transition-slow: 300ms ease;
56
- --adapters-transition-fast: 100ms ease;
57
- --adapters-backdrop: oklch(0 0 0 / 0.7);
58
- }
59
-
60
- @media (prefers-color-scheme: dark) {
61
- :root {
62
- --adapters-bg: oklch(0.10 0.01 250);
63
- --adapters-surface: oklch(0.13 0.01 250);
64
- --adapters-surface-2: oklch(0.16 0.01 250);
65
- --adapters-text: oklch(0.95 0.01 250);
66
- }
67
- }
68
-
69
- @media (prefers-color-scheme: light) {
70
- :root {
71
- --adapters-bg: oklch(0.98 0.01 250);
72
- --adapters-surface: oklch(0.96 0.01 250);
73
- --adapters-surface-2: oklch(0.92 0.01 250);
74
- --adapters-surface-3: oklch(0.88 0.01 250);
75
- --adapters-border: oklch(0.80 0.02 250);
76
- --adapters-text: oklch(0.15 0.01 250);
77
- --adapters-text-secondary: oklch(0.35 0.01 250);
78
- --adapters-text-muted: oklch(0.50 0.01 250);
79
- --adapters-text-disabled: oklch(0.70 0.01 250);
80
- }
81
- }
82
-
83
- /* ============================================================================
84
- MAIN CONTAINER & LAYOUT
85
- ============================================================================ */
86
-
87
- .adapters__container {
88
- display: flex;
89
- flex-direction: column;
90
- gap: var(--adapters-spacing-xl);
91
- padding: var(--adapters-spacing-xl);
92
- background: var(--adapters-bg);
93
- min-height: 100vh;
94
- }
95
-
96
- .adapters__wrapper {
97
- display: flex;
98
- flex-direction: column;
99
- max-width: 100%;
100
- }
101
-
102
- .adapters__page {
103
- padding: var(--adapters-spacing-xl);
104
- background: var(--adapters-bg);
105
- min-height: 100vh;
106
- }
107
-
108
- .adapters__section {
109
- margin-bottom: var(--adapters-spacing-2xl);
110
- }
111
-
112
- .adapters__section-title {
113
- font-size: 1rem;
114
- font-weight: 600;
115
- color: var(--adapters-text);
116
- margin: 0 0 var(--adapters-spacing-lg);
117
- }
118
-
119
- .adapters__section-subtitle {
120
- font-size: 0.875rem;
121
- color: var(--adapters-text-muted);
122
- margin: 0 0 var(--adapters-spacing-md);
123
- }
124
-
125
- /* ============================================================================
126
- HEADER & TITLE
127
- ============================================================================ */
128
-
129
- .adapters__header {
130
- display: flex;
131
- align-items: center;
132
- justify-content: space-between;
133
- margin-bottom: var(--adapters-spacing-lg);
134
- flex-wrap: wrap;
135
- gap: var(--adapters-spacing-md);
136
- }
137
-
138
- .adapters__title {
139
- font-size: 1.5rem;
140
- font-weight: 700;
141
- color: var(--adapters-text);
142
- margin: 0;
143
- line-height: 1.2;
144
- }
145
-
146
- .adapters__subtitle {
147
- font-size: 0.875rem;
148
- color: var(--adapters-text-muted);
149
- margin: 0.25rem 0 0;
150
- font-weight: 400;
151
- }
152
-
153
- .adapters__page-header {
154
- display: flex;
155
- align-items: center;
156
- justify-content: space-between;
157
- margin-bottom: var(--adapters-spacing-xl);
158
- padding-bottom: var(--adapters-spacing-lg);
159
- border-bottom: 1px solid var(--adapters-border);
160
- flex-wrap: wrap;
161
- gap: var(--adapters-spacing-md);
162
- }
163
-
164
- /* ============================================================================
165
- BREADCRUMBS & NAVIGATION
166
- ============================================================================ */
167
-
168
- .adapters__breadcrumb {
169
- display: flex;
170
- align-items: center;
171
- gap: var(--adapters-spacing-sm);
172
- font-size: 0.875rem;
173
- color: var(--adapters-text-muted);
174
- margin-bottom: var(--adapters-spacing-md);
175
- }
176
-
177
- .adapters__breadcrumb-link {
178
- color: var(--adapters-accent);
179
- text-decoration: none;
180
- transition: color var(--adapters-transition);
181
- }
182
-
183
- .adapters__breadcrumb-link:hover {
184
- color: var(--adapters-accent-light);
185
- text-decoration: underline;
186
- }
187
-
188
- .adapters__breadcrumb-sep {
189
- opacity: 0.4;
190
- }
191
-
192
- .adapters__tabs {
193
- display: flex;
194
- gap: 0;
195
- border-bottom: 1px solid var(--adapters-border);
196
- margin-bottom: var(--adapters-spacing-xl);
197
- overflow-x: auto;
198
- -webkit-overflow-scrolling: touch;
199
- }
200
-
201
- .adapters__tab {
202
- padding: var(--adapters-spacing-sm) var(--adapters-spacing-lg);
203
- font-size: 0.875rem;
204
- font-weight: 500;
205
- color: var(--adapters-text-muted);
206
- cursor: pointer;
207
- border: none;
208
- background: none;
209
- border-bottom: 2px solid transparent;
210
- margin-bottom: -1px;
211
- transition: color var(--adapters-transition);
212
- white-space: nowrap;
213
- }
214
-
215
- .adapters__tab:hover {
216
- color: var(--adapters-text);
217
- }
218
-
219
- .adapters__tab--active {
220
- color: var(--adapters-accent);
221
- border-bottom-color: var(--adapters-accent);
222
- }
223
-
224
- /* ============================================================================
225
- GRID & LAYOUT COMPONENTS
226
- ============================================================================ */
227
-
228
- .adapters__grid {
229
- display: grid;
230
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
231
- gap: var(--adapters-spacing-xl);
232
- }
233
-
234
- .adapters__grid--2col {
235
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
236
- }
237
-
238
- .adapters__grid--3col {
239
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
240
- }
241
-
242
- .adapters__row {
243
- display: flex;
244
- gap: var(--adapters-spacing-lg);
245
- align-items: flex-start;
246
- flex-wrap: wrap;
247
- }
248
-
249
- .adapters__col {
250
- flex: 1;
251
- min-width: 0;
252
- }
253
-
254
- .adapters__col--half {
255
- flex: 0 1 calc(50% - var(--adapters-spacing-sm));
256
- }
257
-
258
- .adapters__col--third {
259
- flex: 0 1 calc(33.333% - var(--adapters-spacing-sm));
260
- }
261
-
262
- .adapters__spacer {
263
- height: var(--adapters-spacing-xl);
264
- }
265
-
266
- .adapters__divider {
267
- height: 1px;
268
- background: var(--adapters-border);
269
- margin: var(--adapters-spacing-lg) 0;
270
- }
271
-
272
- /* ============================================================================
273
- CARDS & SURFACES
274
- ============================================================================ */
275
-
276
- .adapters__card {
277
- background: var(--adapters-surface);
278
- border: 1px solid var(--adapters-border);
279
- border-radius: var(--adapters-radius);
280
- padding: var(--adapters-spacing-xl);
281
- transition: all var(--adapters-transition);
282
- cursor: pointer;
283
- display: flex;
284
- flex-direction: column;
285
- height: 100%;
286
- }
287
-
288
- .adapters__card:hover {
289
- border-color: var(--adapters-accent);
290
- box-shadow: var(--adapters-shadow);
291
- transform: translateY(-2px);
292
- }
293
-
294
- .adapters__card:focus-within {
295
- border-color: var(--adapters-border-focus);
296
- box-shadow: var(--adapters-shadow-focus);
297
- }
298
-
299
- .adapters__card--active {
300
- border-color: var(--adapters-active);
301
- background: oklch(0.15 0.02 145);
302
- }
303
-
304
- .adapters__card--inactive {
305
- opacity: 0.65;
306
- }
307
-
308
- .adapters__card--error {
309
- border-color: var(--adapters-error);
310
- background: oklch(0.15 0.03 25);
311
- }
312
-
313
- .adapters__card--warning {
314
- border-color: var(--adapters-warning);
315
- background: oklch(0.16 0.03 75);
316
- }
317
-
318
- .adapters__card--success {
319
- border-color: var(--adapters-success);
320
- background: oklch(0.15 0.03 145);
321
- }
322
-
323
- .adapters__card--disabled {
324
- opacity: 0.5;
325
- pointer-events: none;
326
- }
327
-
328
- .adapters__card--loading {
329
- opacity: 0.75;
330
- }
331
-
332
- .adapters__card-header {
333
- display: flex;
334
- align-items: center;
335
- gap: var(--adapters-spacing-md);
336
- margin-bottom: var(--adapters-spacing-md);
337
- flex-wrap: wrap;
338
- }
339
-
340
- .adapters__card-icon {
341
- width: 2.5rem;
342
- height: 2.5rem;
343
- border-radius: var(--adapters-radius-sm);
344
- display: flex;
345
- align-items: center;
346
- justify-content: center;
347
- font-size: 1.25rem;
348
- background: var(--adapters-surface-2);
349
- flex-shrink: 0;
350
- transition: background var(--adapters-transition);
351
- }
352
-
353
- .adapters__card:hover .adapters__card-icon {
354
- background: var(--adapters-surface-3);
355
- }
356
-
357
- .adapters__card-title {
358
- display: flex;
359
- flex-direction: column;
360
- gap: 0.25rem;
361
- flex: 1;
362
- }
363
-
364
- .adapters__card-name {
365
- font-size: 1rem;
366
- font-weight: 600;
367
- color: var(--adapters-text);
368
- margin: 0;
369
- }
370
-
371
- .adapters__card-type {
372
- font-size: 0.75rem;
373
- color: var(--adapters-text-muted);
374
- text-transform: uppercase;
375
- letter-spacing: 0.05em;
376
- font-weight: 500;
377
- }
378
-
379
- .adapters__card-desc {
380
- font-size: 0.875rem;
381
- color: var(--adapters-text-muted);
382
- line-height: 1.5;
383
- margin: var(--adapters-spacing-md) 0;
384
- flex-grow: 1;
385
- }
386
-
387
- .adapters__card-meta {
388
- display: flex;
389
- gap: var(--adapters-spacing-md);
390
- flex-wrap: wrap;
391
- margin: var(--adapters-spacing-md) 0;
392
- font-size: 0.8125rem;
393
- }
394
-
395
- .adapters__card-meta-item {
396
- display: flex;
397
- align-items: center;
398
- gap: 0.25rem;
399
- color: var(--adapters-text-muted);
400
- }
401
-
402
- .adapters__card-meta-label {
403
- font-weight: 500;
404
- }
405
-
406
- .adapters__card-footer {
407
- display: flex;
408
- align-items: center;
409
- justify-content: space-between;
410
- margin-top: var(--adapters-spacing-md);
411
- padding-top: var(--adapters-spacing-md);
412
- border-top: 1px solid var(--adapters-border);
413
- flex-wrap: wrap;
414
- gap: var(--adapters-spacing-sm);
415
- }
416
-
417
- .adapters__card-actions {
418
- display: flex;
419
- gap: var(--adapters-spacing-sm);
420
- }
421
-
422
- /* ============================================================================
423
- STATUS BADGES & INDICATORS
424
- ============================================================================ */
425
-
426
- .adapters__status-badge {
427
- display: inline-flex;
428
- align-items: center;
429
- gap: var(--adapters-spacing-xs);
430
- padding: var(--adapters-spacing-xs) var(--adapters-spacing-md);
431
- border-radius: 9999px;
432
- font-size: 0.75rem;
433
- font-weight: 500;
434
- transition: all var(--adapters-transition);
435
- }
436
-
437
- .adapters__status-badge::before {
438
- content: '';
439
- width: 0.5rem;
440
- height: 0.5rem;
441
- border-radius: 50%;
442
- background: currentColor;
443
- animation: adapters-pulse 2s ease-in-out infinite;
444
- }
445
-
446
- .adapters__status-badge--active {
447
- color: var(--adapters-active);
448
- background: oklch(0.72 0.20 145 / 0.15);
449
- }
450
-
451
- .adapters__status-badge--inactive {
452
- color: var(--adapters-inactive);
453
- background: oklch(0.45 0.01 250 / 0.15);
454
- }
455
-
456
- .adapters__status-badge--error {
457
- color: var(--adapters-error);
458
- background: oklch(0.60 0.25 25 / 0.15);
459
- }
460
-
461
- .adapters__status-badge--warning {
462
- color: var(--adapters-warning);
463
- background: oklch(0.78 0.18 75 / 0.15);
464
- }
465
-
466
- .adapters__status-badge--success {
467
- color: var(--adapters-success);
468
- background: oklch(0.72 0.20 145 / 0.15);
469
- }
470
-
471
- .adapters__status-badge--pending {
472
- color: var(--adapters-info);
473
- background: oklch(0.65 0.20 265 / 0.15);
474
- }
475
-
476
- .adapters__status-indicator {
477
- display: inline-block;
478
- width: 0.5rem;
479
- height: 0.5rem;
480
- border-radius: 50%;
481
- background: var(--adapters-active);
482
- animation: adapters-pulse 2s ease-in-out infinite;
483
- }
484
-
485
- .adapters__status-indicator--error {
486
- background: var(--adapters-error);
487
- animation: adapters-pulse-error 1s ease-in-out infinite;
488
- }
489
-
490
- .adapters__type-badge {
491
- display: inline-flex;
492
- padding: 0.125rem var(--adapters-spacing-sm);
493
- border-radius: var(--adapters-radius-sm);
494
- font-size: 0.75rem;
495
- font-weight: 500;
496
- background: var(--adapters-surface-2);
497
- color: var(--adapters-text-muted);
498
- border: 1px solid var(--adapters-border);
499
- text-transform: uppercase;
500
- letter-spacing: 0.04em;
501
- white-space: nowrap;
502
- }
503
-
504
- .adapters__type-badge--email {
505
- color: oklch(0.65 0.20 265);
506
- background: oklch(0.65 0.20 265 / 0.1);
507
- border-color: oklch(0.65 0.20 265 / 0.2);
508
- }
509
-
510
- .adapters__type-badge--sms {
511
- color: oklch(0.72 0.18 75);
512
- background: oklch(0.72 0.18 75 / 0.1);
513
- border-color: oklch(0.72 0.18 75 / 0.2);
514
- }
515
-
516
- .adapters__type-badge--push {
517
- color: oklch(0.72 0.20 145);
518
- background: oklch(0.72 0.20 145 / 0.1);
519
- border-color: oklch(0.72 0.20 145 / 0.2);
520
- }
521
-
522
- .adapters__type-badge--webhook {
523
- color: oklch(0.78 0.18 60);
524
- background: oklch(0.78 0.18 60 / 0.1);
525
- border-color: oklch(0.78 0.18 60 / 0.2);
526
- }
527
-
528
- .adapters__type-badge--api {
529
- color: oklch(0.65 0.20 240);
530
- background: oklch(0.65 0.20 240 / 0.1);
531
- border-color: oklch(0.65 0.20 240 / 0.2);
532
- }
533
-
534
- /* ============================================================================
535
- FORMS & INPUTS
536
- ============================================================================ */
537
-
538
- .adapters__config-form {
539
- background: var(--adapters-surface);
540
- border: 1px solid var(--adapters-border);
541
- border-radius: var(--adapters-radius);
542
- padding: var(--adapters-spacing-xl);
543
- }
544
-
545
- .adapters__config-title {
546
- font-size: 1.125rem;
547
- font-weight: 600;
548
- color: var(--adapters-text);
549
- margin: 0 0 var(--adapters-spacing-xl);
550
- }
551
-
552
- .adapters__form-group {
553
- display: flex;
554
- flex-direction: column;
555
- gap: var(--adapters-spacing-xs);
556
- margin-bottom: var(--adapters-spacing-lg);
557
- }
558
-
559
- .adapters__form-label {
560
- font-size: 0.875rem;
561
- font-weight: 500;
562
- color: var(--adapters-text);
563
- }
564
-
565
- .adapters__form-label--required::after {
566
- content: ' *';
567
- color: var(--adapters-error);
568
- }
569
-
570
- .adapters__form-input,
571
- .adapters__form-select,
572
- .adapters__form-textarea {
573
- background: var(--adapters-surface-2);
574
- border: 1px solid var(--adapters-border);
575
- border-radius: var(--adapters-radius-sm);
576
- padding: var(--adapters-spacing-sm) var(--adapters-spacing-md);
577
- color: var(--adapters-text);
578
- font-size: 0.875rem;
579
- transition: all var(--adapters-transition);
580
- outline: none;
581
- width: 100%;
582
- box-sizing: border-box;
583
- font-family: inherit;
584
- }
585
-
586
- .adapters__form-input:focus,
587
- .adapters__form-select:focus,
588
- .adapters__form-textarea:focus {
589
- border-color: var(--adapters-border-focus);
590
- box-shadow: var(--adapters-shadow-focus);
591
- }
592
-
593
- .adapters__form-input::placeholder {
594
- color: var(--adapters-text-disabled);
595
- }
596
-
597
- .adapters__form-input--error {
598
- border-color: var(--adapters-error);
599
- }
600
-
601
- .adapters__form-input--error:focus {
602
- box-shadow: 0 0 0 3px oklch(0.60 0.25 25 / 0.15);
603
- }
604
-
605
- .adapters__form-input:disabled {
606
- background: var(--adapters-surface-3);
607
- color: var(--adapters-text-disabled);
608
- cursor: not-allowed;
609
- opacity: 0.5;
610
- }
611
-
612
- .adapters__form-textarea {
613
- resize: vertical;
614
- min-height: 100px;
615
- }
616
-
617
- .adapters__form-hint {
618
- font-size: 0.75rem;
619
- color: var(--adapters-text-muted);
620
- margin-top: var(--adapters-spacing-xs);
621
- }
622
-
623
- .adapters__form-error {
624
- font-size: 0.75rem;
625
- color: var(--adapters-error);
626
- margin-top: var(--adapters-spacing-xs);
627
- }
628
-
629
- .adapters__form-group--inline {
630
- flex-direction: row;
631
- align-items: center;
632
- gap: var(--adapters-spacing-md);
633
- }
634
-
635
- .adapters__form-group--inline .adapters__form-label {
636
- margin: 0;
637
- flex-shrink: 0;
638
- }
639
-
640
- .adapters__checkbox,
641
- .adapters__radio {
642
- display: flex;
643
- align-items: center;
644
- gap: var(--adapters-spacing-sm);
645
- cursor: pointer;
646
- font-size: 0.875rem;
647
- color: var(--adapters-text);
648
- }
649
-
650
- .adapters__checkbox input[type="checkbox"],
651
- .adapters__radio input[type="radio"] {
652
- cursor: pointer;
653
- accent-color: var(--adapters-accent);
654
- }
655
-
656
- /* ============================================================================
657
- BUTTONS & ACTIONS
658
- ============================================================================ */
659
-
660
- .adapters__btn {
661
- display: inline-flex;
662
- align-items: center;
663
- justify-content: center;
664
- gap: var(--adapters-spacing-sm);
665
- padding: var(--adapters-spacing-sm) var(--adapters-spacing-lg);
666
- border-radius: var(--adapters-radius-sm);
667
- font-size: 0.875rem;
668
- font-weight: 500;
669
- cursor: pointer;
670
- border: none;
671
- transition: all var(--adapters-transition);
672
- text-decoration: none;
673
- white-space: nowrap;
674
- user-select: none;
675
- }
676
-
677
- .adapters__btn:active {
678
- transform: scale(0.98);
679
- }
680
-
681
- .adapters__btn:disabled {
682
- opacity: 0.5;
683
- cursor: not-allowed;
684
- transform: none;
685
- }
686
-
687
- .adapters__btn--primary {
688
- background: var(--adapters-accent);
689
- color: oklch(1 0 0);
690
- box-shadow: var(--adapters-shadow-sm);
691
- }
692
-
693
- .adapters__btn--primary:hover:not(:disabled) {
694
- background: var(--adapters-accent-light);
695
- box-shadow: var(--adapters-shadow);
696
- transform: translateY(-1px);
697
- }
698
-
699
- .adapters__btn--secondary {
700
- background: var(--adapters-surface-2);
701
- color: var(--adapters-text);
702
- border: 1px solid var(--adapters-border);
703
- }
704
-
705
- .adapters__btn--secondary:hover:not(:disabled) {
706
- border-color: var(--adapters-accent);
707
- color: var(--adapters-accent);
708
- background: var(--adapters-surface-3);
709
- }
710
-
711
- .adapters__btn--tertiary {
712
- background: transparent;
713
- color: var(--adapters-accent);
714
- border: 1px solid var(--adapters-border);
715
- }
716
-
717
- .adapters__btn--tertiary:hover:not(:disabled) {
718
- background: var(--adapters-surface-2);
719
- border-color: var(--adapters-accent);
720
- }
721
-
722
- .adapters__btn--danger {
723
- background: var(--adapters-error);
724
- color: oklch(1 0 0);
725
- }
726
-
727
- .adapters__btn--danger:hover:not(:disabled) {
728
- background: var(--adapters-error-light);
729
- }
730
-
731
- .adapters__btn--success {
732
- background: var(--adapters-success);
733
- color: oklch(1 0 0);
734
- }
735
-
736
- .adapters__btn--success:hover:not(:disabled) {
737
- background: var(--adapters-success-light);
738
- }
739
-
740
- .adapters__btn--warning {
741
- background: var(--adapters-warning);
742
- color: oklch(1 0 0);
743
- }
744
-
745
- .adapters__btn--warning:hover:not(:disabled) {
746
- background: var(--adapters-warning-light);
747
- }
748
-
749
- .adapters__btn--sm {
750
- padding: var(--adapters-spacing-xs) var(--adapters-spacing-sm);
751
- font-size: 0.8125rem;
752
- }
753
-
754
- .adapters__btn--lg {
755
- padding: var(--adapters-spacing-md) var(--adapters-spacing-xl);
756
- font-size: 1rem;
757
- }
758
-
759
- .adapters__btn--block {
760
- width: 100%;
761
- }
762
-
763
- .adapters__btn--loading {
764
- pointer-events: none;
765
- opacity: 0.75;
766
- }
767
-
768
- .adapters__btn--loading::after {
769
- content: '';
770
- display: inline-block;
771
- width: 0.875rem;
772
- height: 0.875rem;
773
- border: 2px solid currentColor;
774
- border-top-color: transparent;
775
- border-radius: 50%;
776
- animation: adapters-spin 600ms linear infinite;
777
- }
778
-
779
- .adapters__actions {
780
- display: flex;
781
- gap: var(--adapters-spacing-md);
782
- flex-wrap: wrap;
783
- }
784
-
785
- .adapters__action-group {
786
- display: flex;
787
- gap: 0;
788
- border-radius: var(--adapters-radius-sm);
789
- overflow: hidden;
790
- }
791
-
792
- .adapters__action-group .adapters__btn {
793
- border-radius: 0;
794
- border-right: 1px solid var(--adapters-border);
795
- }
796
-
797
- .adapters__action-group .adapters__btn:last-child {
798
- border-right: none;
799
- }
800
-
801
- /* ============================================================================
802
- TABLES & DATA DISPLAY
803
- ============================================================================ */
804
-
805
- .adapters__table {
806
- width: 100%;
807
- border-collapse: collapse;
808
- }
809
-
810
- .adapters__table-header {
811
- background: var(--adapters-surface-2);
812
- }
813
-
814
- .adapters__table-th {
815
- padding: var(--adapters-spacing-md) var(--adapters-spacing-lg);
816
- text-align: left;
817
- font-size: 0.8125rem;
818
- font-weight: 600;
819
- color: var(--adapters-text-muted);
820
- text-transform: uppercase;
821
- letter-spacing: 0.05em;
822
- border-bottom: 1px solid var(--adapters-border);
823
- }
824
-
825
- .adapters__table-row {
826
- border-bottom: 1px solid var(--adapters-border);
827
- transition: background-color var(--adapters-transition);
828
- }
829
-
830
- .adapters__table-row:hover {
831
- background: var(--adapters-surface-2);
832
- }
833
-
834
- .adapters__table-row--active {
835
- background: oklch(0.15 0.02 145 / 0.3);
836
- }
837
-
838
- .adapters__table-td {
839
- padding: var(--adapters-spacing-lg);
840
- font-size: 0.875rem;
841
- color: var(--adapters-text);
842
- }
843
-
844
- .adapters__table-td--numeric {
845
- text-align: right;
846
- font-family: 'JetBrains Mono', monospace;
847
- }
848
-
849
- .adapters__table-td--status {
850
- text-align: center;
851
- }
852
-
853
- /* ============================================================================
854
- STATS & METRICS
855
- ============================================================================ */
856
-
857
- .adapters__stats {
858
- display: grid;
859
- grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
860
- gap: var(--adapters-spacing-lg);
861
- margin-bottom: var(--adapters-spacing-xl);
862
- }
863
-
864
- .adapters__stat {
865
- background: var(--adapters-surface);
866
- border: 1px solid var(--adapters-border);
867
- border-radius: var(--adapters-radius);
868
- padding: var(--adapters-spacing-lg);
869
- text-align: center;
870
- transition: all var(--adapters-transition);
871
- }
872
-
873
- .adapters__stat:hover {
874
- border-color: var(--adapters-accent);
875
- box-shadow: var(--adapters-shadow-sm);
876
- transform: translateY(-1px);
877
- }
878
-
879
- .adapters__stat-value {
880
- font-size: 1.75rem;
881
- font-weight: 700;
882
- color: var(--adapters-accent);
883
- line-height: 1;
884
- }
885
-
886
- .adapters__stat-label {
887
- font-size: 0.8125rem;
888
- color: var(--adapters-text-muted);
889
- margin-top: var(--adapters-spacing-xs);
890
- text-transform: uppercase;
891
- letter-spacing: 0.05em;
892
- font-weight: 500;
893
- }
894
-
895
- .adapters__stat-change {
896
- font-size: 0.75rem;
897
- margin-top: var(--adapters-spacing-xs);
898
- font-weight: 500;
899
- }
900
-
901
- .adapters__stat-change--positive {
902
- color: var(--adapters-success);
903
- }
904
-
905
- .adapters__stat-change--negative {
906
- color: var(--adapters-error);
907
- }
908
-
909
- /* ============================================================================
910
- FILTERS & CONTROLS
911
- ============================================================================ */
912
-
913
- .adapters__filter-bar {
914
- display: flex;
915
- gap: var(--adapters-spacing-md);
916
- flex-wrap: wrap;
917
- margin-bottom: var(--adapters-spacing-lg);
918
- align-items: center;
919
- }
920
-
921
- .adapters__filter-select {
922
- background: var(--adapters-surface);
923
- border: 1px solid var(--adapters-border);
924
- border-radius: var(--adapters-radius-sm);
925
- padding: var(--adapters-spacing-sm) var(--adapters-spacing-md);
926
- color: var(--adapters-text);
927
- font-size: 0.875rem;
928
- cursor: pointer;
929
- transition: all var(--adapters-transition);
930
- }
931
-
932
- .adapters__filter-select:focus {
933
- border-color: var(--adapters-border-focus);
934
- outline: none;
935
- }
936
-
937
- .adapters__filter-chip {
938
- display: inline-flex;
939
- align-items: center;
940
- gap: var(--adapters-spacing-xs);
941
- padding: var(--adapters-spacing-xs) var(--adapters-spacing-md);
942
- background: var(--adapters-surface-2);
943
- border: 1px solid var(--adapters-border);
944
- border-radius: 9999px;
945
- font-size: 0.8125rem;
946
- color: var(--adapters-text);
947
- }
948
-
949
- .adapters__filter-chip--removable {
950
- cursor: pointer;
951
- padding-right: var(--adapters-spacing-sm);
952
- }
953
-
954
- .adapters__pagination {
955
- display: flex;
956
- gap: var(--adapters-spacing-sm);
957
- align-items: center;
958
- justify-content: center;
959
- margin-top: var(--adapters-spacing-xl);
960
- }
961
-
962
- .adapters__pagination-item {
963
- display: flex;
964
- align-items: center;
965
- justify-content: center;
966
- width: 2rem;
967
- height: 2rem;
968
- border: 1px solid var(--adapters-border);
969
- border-radius: var(--adapters-radius-sm);
970
- background: var(--adapters-surface);
971
- color: var(--adapters-text);
972
- cursor: pointer;
973
- transition: all var(--adapters-transition);
974
- font-size: 0.875rem;
975
- font-weight: 500;
976
- }
977
-
978
- .adapters__pagination-item:hover:not(:disabled) {
979
- border-color: var(--adapters-accent);
980
- color: var(--adapters-accent);
981
- }
982
-
983
- .adapters__pagination-item--active {
984
- background: var(--adapters-accent);
985
- border-color: var(--adapters-accent);
986
- color: oklch(1 0 0);
987
- }
988
-
989
- /* ============================================================================
990
- LOGS & CODE DISPLAY
991
- ============================================================================ */
992
-
993
- .adapters__log {
994
- background: oklch(0.08 0.01 250);
995
- border: 1px solid var(--adapters-border);
996
- border-radius: var(--adapters-radius);
997
- padding: var(--adapters-spacing-lg);
998
- font-family: 'JetBrains Mono', monospace;
999
- font-size: 0.8125rem;
1000
- max-height: 400px;
1001
- overflow-y: auto;
1002
- }
1003
-
1004
- .adapters__log-entry {
1005
- display: flex;
1006
- gap: var(--adapters-spacing-md);
1007
- padding: var(--adapters-spacing-xs) 0;
1008
- border-bottom: 1px solid oklch(0.15 0 0);
1009
- }
1010
-
1011
- .adapters__log-entry:last-child {
1012
- border-bottom: none;
1013
- }
1014
-
1015
- .adapters__log-time {
1016
- color: var(--adapters-text-muted);
1017
- flex-shrink: 0;
1018
- min-width: 10rem;
1019
- }
1020
-
1021
- .adapters__log-level {
1022
- font-weight: 600;
1023
- flex-shrink: 0;
1024
- width: 4rem;
1025
- text-align: center;
1026
- }
1027
-
1028
- .adapters__log-level--info {
1029
- color: var(--adapters-accent);
1030
- }
1031
-
1032
- .adapters__log-level--error {
1033
- color: var(--adapters-error);
1034
- animation: adapters-pulse-error 1s ease-in-out infinite;
1035
- }
1036
-
1037
- .adapters__log-level--warn {
1038
- color: var(--adapters-warning);
1039
- }
1040
-
1041
- .adapters__log-level--success {
1042
- color: var(--adapters-success);
1043
- }
1044
-
1045
- .adapters__log-msg {
1046
- color: var(--adapters-text);
1047
- word-break: break-word;
1048
- flex-grow: 1;
1049
- }
1050
-
1051
- /* ============================================================================
1052
- MODALS & OVERLAYS
1053
- ============================================================================ */
1054
-
1055
- .adapters__modal-overlay {
1056
- position: fixed;
1057
- inset: 0;
1058
- background: var(--adapters-backdrop);
1059
- display: flex;
1060
- align-items: center;
1061
- justify-content: center;
1062
- z-index: 50;
1063
- backdrop-filter: blur(4px);
1064
- animation: adapters-fade-in var(--adapters-transition);
1065
- }
1066
-
1067
- .adapters__modal {
1068
- background: var(--adapters-surface);
1069
- border: 1px solid var(--adapters-border);
1070
- border-radius: calc(var(--adapters-radius) * 1.5);
1071
- padding: var(--adapters-spacing-xl);
1072
- min-width: 24rem;
1073
- max-width: 90vw;
1074
- max-height: 90vh;
1075
- overflow-y: auto;
1076
- box-shadow: var(--adapters-shadow-lg);
1077
- animation: adapters-slide-up var(--adapters-transition);
1078
- }
1079
-
1080
- .adapters__modal-header {
1081
- display: flex;
1082
- align-items: center;
1083
- justify-content: space-between;
1084
- margin-bottom: var(--adapters-spacing-xl);
1085
- }
1086
-
1087
- .adapters__modal-title {
1088
- font-size: 1.125rem;
1089
- font-weight: 600;
1090
- color: var(--adapters-text);
1091
- margin: 0;
1092
- }
1093
-
1094
- .adapters__modal-close {
1095
- background: none;
1096
- border: none;
1097
- color: var(--adapters-text-muted);
1098
- cursor: pointer;
1099
- padding: var(--adapters-spacing-xs);
1100
- border-radius: var(--adapters-radius-sm);
1101
- font-size: 1.25rem;
1102
- line-height: 1;
1103
- transition: all var(--adapters-transition);
1104
- flex-shrink: 0;
1105
- }
1106
-
1107
- .adapters__modal-close:hover {
1108
- color: var(--adapters-text);
1109
- background: var(--adapters-surface-2);
1110
- }
1111
-
1112
- .adapters__modal-content {
1113
- margin-bottom: var(--adapters-spacing-xl);
1114
- }
1115
-
1116
- .adapters__modal-footer {
1117
- display: flex;
1118
- gap: var(--adapters-spacing-md);
1119
- justify-content: flex-end;
1120
- margin-top: var(--adapters-spacing-xl);
1121
- padding-top: var(--adapters-spacing-lg);
1122
- border-top: 1px solid var(--adapters-border);
1123
- flex-wrap: wrap;
1124
- }
1125
-
1126
- /* ============================================================================
1127
- ALERTS & NOTIFICATIONS
1128
- ============================================================================ */
1129
-
1130
- .adapters__alert {
1131
- padding: var(--adapters-spacing-md) var(--adapters-spacing-lg);
1132
- border-radius: var(--adapters-radius-sm);
1133
- font-size: 0.875rem;
1134
- display: flex;
1135
- gap: var(--adapters-spacing-md);
1136
- align-items: flex-start;
1137
- margin-bottom: var(--adapters-spacing-lg);
1138
- animation: adapters-slide-down var(--adapters-transition);
1139
- }
1140
-
1141
- .adapters__alert-icon {
1142
- flex-shrink: 0;
1143
- font-size: 1rem;
1144
- line-height: 1.4;
1145
- }
1146
-
1147
- .adapters__alert-content {
1148
- flex-grow: 1;
1149
- }
1150
-
1151
- .adapters__alert-title {
1152
- font-weight: 600;
1153
- margin-bottom: var(--adapters-spacing-xs);
1154
- }
1155
-
1156
- .adapters__alert--info {
1157
- background: oklch(0.65 0.20 265 / 0.1);
1158
- border: 1px solid oklch(0.65 0.20 265 / 0.3);
1159
- color: oklch(0.80 0.15 265);
1160
- }
1161
-
1162
- .adapters__alert--success {
1163
- background: oklch(0.72 0.20 145 / 0.1);
1164
- border: 1px solid oklch(0.72 0.20 145 / 0.3);
1165
- color: oklch(0.80 0.15 145);
1166
- }
1167
-
1168
- .adapters__alert--error {
1169
- background: oklch(0.60 0.25 25 / 0.1);
1170
- border: 1px solid oklch(0.60 0.25 25 / 0.3);
1171
- color: oklch(0.75 0.20 25);
1172
- }
1173
-
1174
- .adapters__alert--warning {
1175
- background: oklch(0.78 0.18 75 / 0.1);
1176
- border: 1px solid oklch(0.78 0.18 75 / 0.3);
1177
- color: oklch(0.85 0.14 75);
1178
- }
1179
-
1180
- .adapters__toast {
1181
- position: fixed;
1182
- bottom: var(--adapters-spacing-lg);
1183
- right: var(--adapters-spacing-lg);
1184
- max-width: 24rem;
1185
- animation: adapters-slide-in-right var(--adapters-transition);
1186
- z-index: 100;
1187
- }
1188
-
1189
- /* ============================================================================
1190
- EMPTY STATE
1191
- ============================================================================ */
1192
-
1193
- .adapters__empty {
1194
- display: flex;
1195
- flex-direction: column;
1196
- align-items: center;
1197
- justify-content: center;
1198
- padding: 3rem var(--adapters-spacing-lg);
1199
- text-align: center;
1200
- color: var(--adapters-text-muted);
1201
- }
1202
-
1203
- .adapters__empty-icon {
1204
- font-size: 3rem;
1205
- margin-bottom: var(--adapters-spacing-lg);
1206
- opacity: 0.5;
1207
- }
1208
-
1209
- .adapters__empty-title {
1210
- font-size: 1.125rem;
1211
- font-weight: 600;
1212
- color: var(--adapters-text);
1213
- margin: 0 0 var(--adapters-spacing-sm);
1214
- }
1215
-
1216
- .adapters__empty-desc {
1217
- font-size: 0.875rem;
1218
- max-width: 24rem;
1219
- line-height: 1.6;
1220
- }
1221
-
1222
- .adapters__empty-action {
1223
- margin-top: var(--adapters-spacing-lg);
1224
- }
1225
-
1226
- /* ============================================================================
1227
- SKELETON & LOADING
1228
- ============================================================================ */
1229
-
1230
- .adapters__skeleton {
1231
- background: linear-gradient(
1232
- 90deg,
1233
- var(--adapters-surface) 25%,
1234
- var(--adapters-surface-2) 50%,
1235
- var(--adapters-surface) 75%
1236
- );
1237
- background-size: 200% 100%;
1238
- animation: adapters-shimmer 1.5s infinite;
1239
- border-radius: var(--adapters-radius-sm);
1240
- }
1241
-
1242
- .adapters__skeleton--text {
1243
- height: 1rem;
1244
- margin-bottom: var(--adapters-spacing-sm);
1245
- }
1246
-
1247
- .adapters__skeleton--title {
1248
- height: 1.5rem;
1249
- width: 40%;
1250
- margin-bottom: var(--adapters-spacing-lg);
1251
- }
1252
-
1253
- .adapters__skeleton--card {
1254
- height: 8rem;
1255
- }
1256
-
1257
- .adapters__skeleton--avatar {
1258
- width: 2.5rem;
1259
- height: 2.5rem;
1260
- border-radius: 50%;
1261
- }
1262
-
1263
- .adapters__spinner {
1264
- display: inline-block;
1265
- width: 1rem;
1266
- height: 1rem;
1267
- border: 2px solid var(--adapters-surface-2);
1268
- border-top-color: var(--adapters-accent);
1269
- border-radius: 50%;
1270
- animation: adapters-spin 600ms linear infinite;
1271
- }
1272
-
1273
- /* ============================================================================
1274
- TOOLTIPS
1275
- ============================================================================ */
1276
-
1277
- .adapters__tooltip {
1278
- position: relative;
1279
- display: inline-block;
1280
- }
1281
-
1282
- .adapters__tooltip-trigger {
1283
- cursor: help;
1284
- text-decoration: underline dotted;
1285
- text-decoration-color: var(--adapters-text-muted);
1286
- }
1287
-
1288
- .adapters__tooltip-content {
1289
- position: absolute;
1290
- bottom: 100%;
1291
- left: 50%;
1292
- transform: translateX(-50%);
1293
- background: oklch(0.15 0.01 250);
1294
- color: var(--adapters-text);
1295
- padding: var(--adapters-spacing-sm) var(--adapters-spacing-md);
1296
- border-radius: var(--adapters-radius-sm);
1297
- font-size: 0.8125rem;
1298
- white-space: nowrap;
1299
- margin-bottom: var(--adapters-spacing-sm);
1300
- opacity: 0;
1301
- pointer-events: none;
1302
- transition: opacity var(--adapters-transition);
1303
- z-index: 10;
1304
- box-shadow: var(--adapters-shadow-sm);
1305
- }
1306
-
1307
- .adapters__tooltip:hover .adapters__tooltip-content {
1308
- opacity: 1;
1309
- }
1310
-
1311
- /* ============================================================================
1312
- HELPERS & UTILITIES
1313
- ============================================================================ */
1314
-
1315
- .adapters__text--muted {
1316
- color: var(--adapters-text-muted);
1317
- }
1318
-
1319
- .adapters__text--success {
1320
- color: var(--adapters-success);
1321
- }
1322
-
1323
- .adapters__text--error {
1324
- color: var(--adapters-error);
1325
- }
1326
-
1327
- .adapters__text--warning {
1328
- color: var(--adapters-warning);
1329
- }
1330
-
1331
- .adapters__text--accent {
1332
- color: var(--adapters-accent);
1333
- }
1334
-
1335
- .adapters__text--bold {
1336
- font-weight: 600;
1337
- }
1338
-
1339
- .adapters__text--sm {
1340
- font-size: 0.8125rem;
1341
- }
1342
-
1343
- .adapters__text--lg {
1344
- font-size: 1.125rem;
1345
- }
1346
-
1347
- .adapters__badge {
1348
- display: inline-flex;
1349
- align-items: center;
1350
- gap: var(--adapters-spacing-xs);
1351
- padding: var(--adapters-spacing-xs) var(--adapters-spacing-md);
1352
- background: var(--adapters-surface-2);
1353
- border: 1px solid var(--adapters-border);
1354
- border-radius: 9999px;
1355
- font-size: 0.75rem;
1356
- font-weight: 500;
1357
- color: var(--adapters-text-muted);
1358
- }
1359
-
1360
- /* ============================================================================
1361
- ANIMATIONS
1362
- ============================================================================ */
1363
-
1364
- @keyframes adapters-shimmer {
1365
- 0% {
1366
- background-position: 200% 0;
1367
- }
1368
- 100% {
1369
- background-position: -200% 0;
1370
- }
1371
- }
1372
-
1373
- @keyframes adapters-pulse {
1374
- 0%, 100% {
1375
- opacity: 1;
1376
- }
1377
- 50% {
1378
- opacity: 0.5;
1379
- }
1380
- }
1381
-
1382
- @keyframes adapters-pulse-error {
1383
- 0%, 100% {
1384
- opacity: 1;
1385
- box-shadow: 0 0 0 0 currentColor;
1386
- }
1387
- 50% {
1388
- opacity: 0.8;
1389
- }
1390
- }
1391
-
1392
- @keyframes adapters-spin {
1393
- to {
1394
- transform: rotate(360deg);
1395
- }
1396
- }
1397
-
1398
- @keyframes adapters-fade-in {
1399
- from {
1400
- opacity: 0;
1401
- }
1402
- to {
1403
- opacity: 1;
1404
- }
1405
- }
1406
-
1407
- @keyframes adapters-slide-up {
1408
- from {
1409
- opacity: 0;
1410
- transform: translateY(1rem);
1411
- }
1412
- to {
1413
- opacity: 1;
1414
- transform: translateY(0);
1415
- }
1416
- }
1417
-
1418
- @keyframes adapters-slide-down {
1419
- from {
1420
- opacity: 0;
1421
- transform: translateY(-1rem);
1422
- }
1423
- to {
1424
- opacity: 1;
1425
- transform: translateY(0);
1426
- }
1427
- }
1428
-
1429
- @keyframes adapters-slide-in-right {
1430
- from {
1431
- opacity: 0;
1432
- transform: translateX(1rem);
1433
- }
1434
- to {
1435
- opacity: 1;
1436
- transform: translateX(0);
1437
- }
1438
- }
1439
-
1440
- /* ============================================================================
1441
- RESPONSIVE DESIGN
1442
- ============================================================================ */
1443
-
1444
- @media (max-width: 1024px) {
1445
- .adapters__grid {
1446
- grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
1447
- }
1448
-
1449
- .adapters__grid--2col {
1450
- grid-template-columns: 1fr;
1451
- }
1452
-
1453
- .adapters__modal {
1454
- min-width: 90vw;
1455
- }
1456
- }
1457
-
1458
- @media (max-width: 768px) {
1459
- .adapters__container {
1460
- gap: var(--adapters-spacing-lg);
1461
- padding: var(--adapters-spacing-lg);
1462
- }
1463
-
1464
- .adapters__grid {
1465
- grid-template-columns: 1fr;
1466
- }
1467
-
1468
- .adapters__stats {
1469
- grid-template-columns: repeat(2, 1fr);
1470
- }
1471
-
1472
- .adapters__filter-bar {
1473
- flex-direction: column;
1474
- align-items: stretch;
1475
- }
1476
-
1477
- .adapters__page {
1478
- padding: var(--adapters-spacing-lg);
1479
- }
1480
-
1481
- .adapters__modal {
1482
- min-width: unset;
1483
- width: calc(100vw - 2rem);
1484
- max-height: calc(100vh - 2rem);
1485
- }
1486
-
1487
- .adapters__modal-footer {
1488
- flex-direction: column-reverse;
1489
- }
1490
-
1491
- .adapters__modal-footer .adapters__btn {
1492
- width: 100%;
1493
- }
1494
-
1495
- .adapters__toast {
1496
- right: var(--adapters-spacing-sm);
1497
- left: var(--adapters-spacing-sm);
1498
- bottom: var(--adapters-spacing-sm);
1499
- max-width: none;
1500
- }
1501
-
1502
- .adapters__col--half,
1503
- .adapters__col--third {
1504
- flex: 0 1 100%;
1505
- }
1506
- }
1507
-
1508
- @media (max-width: 480px) {
1509
- .adapters__stats {
1510
- grid-template-columns: 1fr;
1511
- }
1512
-
1513
- .adapters__actions {
1514
- flex-direction: column;
1515
- }
1516
-
1517
- .adapters__actions .adapters__btn {
1518
- width: 100%;
1519
- }
1520
-
1521
- .adapters__title {
1522
- font-size: 1.25rem;
1523
- }
1524
-
1525
- .adapters__header {
1526
- flex-direction: column;
1527
- align-items: flex-start;
1528
- }
1529
-
1530
- .adapters__tabs {
1531
- margin-bottom: var(--adapters-spacing-lg);
1532
- }
1533
-
1534
- .adapters__table {
1535
- font-size: 0.75rem;
1536
- }
1537
-
1538
- .adapters__table-th,
1539
- .adapters__table-td {
1540
- padding: var(--adapters-spacing-sm);
1541
- }
1542
-
1543
- .adapters__modal {
1544
- border-radius: var(--adapters-radius);
1545
- }
1546
- }
1547
-
1548
- /* ============================================================================
1549
- DARK MODE (explicit override)
1550
- ============================================================================ */
1551
-
1552
- @media (prefers-color-scheme: dark) {
1553
- :root {
1554
- --adapters-bg: oklch(0.10 0.01 250);
1555
- --adapters-surface: oklch(0.13 0.01 250);
1556
- --adapters-surface-2: oklch(0.16 0.01 250);
1557
- --adapters-text: oklch(0.95 0.01 250);
1558
- --adapters-text-muted: oklch(0.65 0.01 250);
1559
- }
1560
- }
1561
-
1562
- /* ============================================================================
1563
- LIGHT MODE (explicit override)
1564
- ============================================================================ */
1565
-
1566
- @media (prefers-color-scheme: light) {
1567
- :root {
1568
- --adapters-bg: oklch(0.98 0.01 250);
1569
- --adapters-surface: oklch(0.96 0.01 250);
1570
- --adapters-surface-2: oklch(0.92 0.01 250);
1571
- --adapters-text: oklch(0.15 0.01 250);
1572
- --adapters-text-muted: oklch(0.50 0.01 250);
1573
- }
1574
- }
1575
-
1576
- /* End of adapters.css */