@rashidazarang/airtable-mcp 2.1.0 → 2.2.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 (155) hide show
  1. package/README.md +1 -1
  2. package/airtable_simple_production.js +387 -5
  3. package/examples/claude_simple_config.json +0 -9
  4. package/package.json +10 -1
  5. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -173
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  7. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  8. package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -209
  9. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  10. package/.github/ISSUE_TEMPLATE/security-report.yml +0 -216
  11. package/.github/pull_request_template.md +0 -245
  12. package/.github/workflows/ci-cd.yml +0 -408
  13. package/.github/workflows/security-audit.yml +0 -316
  14. package/API_DOCUMENTATION.md +0 -897
  15. package/CAPABILITY_REPORT.md +0 -118
  16. package/CLAUDE_INTEGRATION.md +0 -96
  17. package/CODE_OF_CONDUCT.md +0 -181
  18. package/CONTRIBUTING.md +0 -81
  19. package/DEVELOPMENT.md +0 -190
  20. package/Dockerfile +0 -39
  21. package/Dockerfile.node +0 -20
  22. package/Dockerfile.production +0 -127
  23. package/IMPROVEMENT_PROPOSAL.md +0 -371
  24. package/INSTALLATION.md +0 -183
  25. package/ISSUE_RESPONSES.md +0 -171
  26. package/MCP_REVIEW_SUMMARY.md +0 -142
  27. package/QUICK_START.md +0 -60
  28. package/RELEASE_NOTES_v1.2.0.md +0 -50
  29. package/RELEASE_NOTES_v1.2.1.md +0 -40
  30. package/RELEASE_NOTES_v1.2.2.md +0 -48
  31. package/RELEASE_NOTES_v1.2.3.md +0 -105
  32. package/RELEASE_NOTES_v1.2.4.md +0 -60
  33. package/RELEASE_NOTES_v1.4.0.md +0 -104
  34. package/RELEASE_NOTES_v1.5.0.md +0 -185
  35. package/RELEASE_NOTES_v1.6.0.md +0 -248
  36. package/SECURITY_NOTICE.md +0 -40
  37. package/airtable-clipper/CHANGELOG.md +0 -198
  38. package/airtable-clipper/CHROME_STORE_SUBMISSION.md +0 -343
  39. package/airtable-clipper/LAUNCH_STRATEGY.md +0 -495
  40. package/airtable-clipper/LICENSE +0 -21
  41. package/airtable-clipper/OAUTH_SETUP.md +0 -51
  42. package/airtable-clipper/PRIVACY_POLICY.md +0 -187
  43. package/airtable-clipper/README.md +0 -575
  44. package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +0 -273
  45. package/airtable-clipper/build.sh +0 -85
  46. package/airtable-clipper/docs/QUICK_START.md +0 -99
  47. package/airtable-clipper/docs/SETUP.md +0 -291
  48. package/airtable-clipper/extension/background.js +0 -337
  49. package/airtable-clipper/extension/base-setup.html +0 -324
  50. package/airtable-clipper/extension/base-setup.js +0 -471
  51. package/airtable-clipper/extension/content.js +0 -771
  52. package/airtable-clipper/extension/icons/README.md +0 -69
  53. package/airtable-clipper/extension/icons/icon-16.png +0 -3
  54. package/airtable-clipper/extension/manifest.json +0 -73
  55. package/airtable-clipper/extension/popup.html +0 -144
  56. package/airtable-clipper/extension/popup.js +0 -475
  57. package/airtable-clipper/extension/styles/content.css +0 -229
  58. package/airtable-clipper/extension/styles/popup.css +0 -477
  59. package/airtable-clipper/privacy-policy.md +0 -63
  60. package/airtable-clipper/releases/v1.0.0/background.js +0 -337
  61. package/airtable-clipper/releases/v1.0.0/base-setup.html +0 -324
  62. package/airtable-clipper/releases/v1.0.0/base-setup.js +0 -471
  63. package/airtable-clipper/releases/v1.0.0/content.js +0 -771
  64. package/airtable-clipper/releases/v1.0.0/icons/README.md +0 -69
  65. package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +0 -2
  66. package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +0 -3
  67. package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +0 -2
  68. package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +0 -2
  69. package/airtable-clipper/releases/v1.0.0/manifest.json +0 -73
  70. package/airtable-clipper/releases/v1.0.0/popup.html +0 -144
  71. package/airtable-clipper/releases/v1.0.0/popup.js +0 -475
  72. package/airtable-clipper/releases/v1.0.0/sidepanel.html +0 -25
  73. package/airtable-clipper/releases/v1.0.0/styles/content.css +0 -229
  74. package/airtable-clipper/releases/v1.0.0/styles/popup.css +0 -477
  75. package/airtable-clipper/releases/v1.0.1/background.js +0 -337
  76. package/airtable-clipper/releases/v1.0.1/base-setup.html +0 -324
  77. package/airtable-clipper/releases/v1.0.1/base-setup.js +0 -471
  78. package/airtable-clipper/releases/v1.0.1/content.js +0 -771
  79. package/airtable-clipper/releases/v1.0.1/icons/README.md +0 -69
  80. package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +0 -2
  81. package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +0 -3
  82. package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +0 -2
  83. package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +0 -2
  84. package/airtable-clipper/releases/v1.0.1/manifest.json +0 -70
  85. package/airtable-clipper/releases/v1.0.1/popup.html +0 -157
  86. package/airtable-clipper/releases/v1.0.1/popup.js +0 -562
  87. package/airtable-clipper/releases/v1.0.1/sidepanel.html +0 -25
  88. package/airtable-clipper/releases/v1.0.1/styles/content.css +0 -229
  89. package/airtable-clipper/releases/v1.0.1/styles/popup.css +0 -647
  90. package/airtable-clipper/releases/v1.0.2/background.js +0 -337
  91. package/airtable-clipper/releases/v1.0.2/base-setup.html +0 -324
  92. package/airtable-clipper/releases/v1.0.2/base-setup.js +0 -471
  93. package/airtable-clipper/releases/v1.0.2/content.js +0 -771
  94. package/airtable-clipper/releases/v1.0.2/icons/README.md +0 -69
  95. package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +0 -2
  96. package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +0 -3
  97. package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +0 -2
  98. package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +0 -2
  99. package/airtable-clipper/releases/v1.0.2/manifest.json +0 -62
  100. package/airtable-clipper/releases/v1.0.2/popup.html +0 -157
  101. package/airtable-clipper/releases/v1.0.2/popup.js +0 -567
  102. package/airtable-clipper/releases/v1.0.2/sidepanel.html +0 -25
  103. package/airtable-clipper/releases/v1.0.2/styles/content.css +0 -229
  104. package/airtable-clipper/releases/v1.0.2/styles/popup.css +0 -647
  105. package/airtable-clipper/terms-of-service.md +0 -124
  106. package/airtable-clipper/test-credentials.md +0 -61
  107. package/airtable-clipper/test-extension/background.js +0 -337
  108. package/airtable-clipper/test-extension/base-setup.html +0 -324
  109. package/airtable-clipper/test-extension/base-setup.js +0 -471
  110. package/airtable-clipper/test-extension/content.js +0 -873
  111. package/airtable-clipper/test-extension/icons/README.md +0 -69
  112. package/airtable-clipper/test-extension/icons/icon-128.png +0 -2
  113. package/airtable-clipper/test-extension/icons/icon-16.png +0 -3
  114. package/airtable-clipper/test-extension/icons/icon-32.png +0 -2
  115. package/airtable-clipper/test-extension/icons/icon-48.png +0 -2
  116. package/airtable-clipper/test-extension/manifest.json +0 -72
  117. package/airtable-clipper/test-extension/popup.html +0 -274
  118. package/airtable-clipper/test-extension/popup.js +0 -729
  119. package/airtable-clipper/test-extension/sidepanel.html +0 -25
  120. package/airtable-clipper/test-extension/styles/content.css +0 -229
  121. package/airtable-clipper/test-extension/styles/popup.css +0 -794
  122. package/airtable_mcp/__init__.py +0 -5
  123. package/airtable_mcp/src/server.py +0 -329
  124. package/airtable_mcp_v2.js +0 -1505
  125. package/airtable_mcp_v2_oauth.js +0 -1048
  126. package/airtable_mcp_v3_advanced.js +0 -1161
  127. package/cleanup.sh +0 -71
  128. package/docker-compose.production.yml +0 -366
  129. package/helm/airtable-mcp/Chart.yaml +0 -122
  130. package/helm/airtable-mcp/values.yaml +0 -538
  131. package/index.js +0 -179
  132. package/inspector.py +0 -148
  133. package/inspector_server.py +0 -337
  134. package/k8s/deployment.yaml +0 -402
  135. package/k8s/namespace.yaml +0 -108
  136. package/k8s/service.yaml +0 -194
  137. package/monitoring/alerts.yml +0 -289
  138. package/monitoring/prometheus.yml +0 -224
  139. package/publish-steps.txt +0 -27
  140. package/quick_test.sh +0 -30
  141. package/requirements.txt +0 -10
  142. package/setup.py +0 -29
  143. package/simple_airtable_server.py +0 -151
  144. package/smithery.yaml +0 -45
  145. package/test_all_features.sh +0 -146
  146. package/test_all_operations.sh +0 -120
  147. package/test_client.py +0 -70
  148. package/test_enhanced_features.js +0 -389
  149. package/test_mcp_comprehensive.js +0 -163
  150. package/test_mock_server.js +0 -180
  151. package/test_v1.4.0_final.sh +0 -131
  152. package/test_v1.5.0_comprehensive.sh +0 -96
  153. package/test_v1.5.0_final.sh +0 -224
  154. package/test_v1.6.0_comprehensive.sh +0 -187
  155. package/test_webhooks.sh +0 -105
@@ -1,794 +0,0 @@
1
- /* Airtable Clipper - World-Class Design System */
2
-
3
- /* ===== DESIGN TOKENS ===== */
4
- :root {
5
- /* Colors */
6
- --primary-50: #eff6ff;
7
- --primary-100: #dbeafe;
8
- --primary-500: #3b82f6;
9
- --primary-600: #2563eb;
10
- --primary-700: #1d4ed8;
11
- --primary-900: #1e3a8a;
12
-
13
- --gray-50: #f9fafb;
14
- --gray-100: #f3f4f6;
15
- --gray-200: #e5e7eb;
16
- --gray-300: #d1d5db;
17
- --gray-400: #9ca3af;
18
- --gray-500: #6b7280;
19
- --gray-600: #4b5563;
20
- --gray-700: #374151;
21
- --gray-800: #1f2937;
22
- --gray-900: #111827;
23
-
24
- --success-500: #10b981;
25
- --warning-500: #f59e0b;
26
- --error-500: #ef4444;
27
-
28
- /* Spacing */
29
- --space-1: 0.25rem;
30
- --space-2: 0.5rem;
31
- --space-3: 0.75rem;
32
- --space-4: 1rem;
33
- --space-5: 1.25rem;
34
- --space-6: 1.5rem;
35
- --space-8: 2rem;
36
- --space-12: 3rem;
37
-
38
- /* Border Radius */
39
- --radius-sm: 0.375rem;
40
- --radius-md: 0.5rem;
41
- --radius-lg: 0.75rem;
42
- --radius-xl: 1rem;
43
-
44
- /* Shadows */
45
- --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
46
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
47
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
48
- --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
49
-
50
- /* Typography */
51
- --font-sm: 0.875rem;
52
- --font-base: 1rem;
53
- --font-lg: 1.125rem;
54
- --font-xl: 1.25rem;
55
- --font-2xl: 1.5rem;
56
-
57
- /* Animation */
58
- --transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
59
- --transition-fast: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
60
- }
61
-
62
- /* ===== RESET & BASE ===== */
63
- * {
64
- box-sizing: border-box;
65
- margin: 0;
66
- padding: 0;
67
- }
68
-
69
- body {
70
- width: 380px;
71
- min-height: 500px;
72
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', sans-serif;
73
- font-size: var(--font-sm);
74
- line-height: 1.5;
75
- color: var(--gray-900);
76
- background: #ffffff;
77
- overflow: hidden;
78
- -webkit-font-smoothing: antialiased;
79
- -moz-osx-font-smoothing: grayscale;
80
- }
81
-
82
- .container {
83
- display: flex;
84
- flex-direction: column;
85
- min-height: 500px;
86
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
87
- position: relative;
88
- }
89
-
90
- /* ===== HEADER SECTION ===== */
91
- .header {
92
- padding: var(--space-6);
93
- background: rgba(255, 255, 255, 0.1);
94
- backdrop-filter: blur(20px);
95
- border-bottom: 1px solid rgba(255, 255, 255, 0.2);
96
- }
97
-
98
- .brand {
99
- display: flex;
100
- align-items: center;
101
- justify-content: space-between;
102
- margin-bottom: var(--space-3);
103
- }
104
-
105
- .logo {
106
- display: flex;
107
- align-items: center;
108
- gap: var(--space-3);
109
- }
110
-
111
- .logo svg {
112
- color: white;
113
- filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
114
- }
115
-
116
- .logo-text {
117
- font-size: var(--font-lg);
118
- font-weight: 700;
119
- color: white;
120
- letter-spacing: -0.025em;
121
- }
122
-
123
- .status-badge {
124
- display: flex;
125
- align-items: center;
126
- gap: var(--space-2);
127
- padding: var(--space-2) var(--space-3);
128
- background: rgba(255, 255, 255, 0.2);
129
- border-radius: var(--radius-lg);
130
- font-size: 12px;
131
- font-weight: 500;
132
- color: white;
133
- backdrop-filter: blur(10px);
134
- }
135
-
136
- .status-badge.connected {
137
- background: rgba(16, 185, 129, 0.2);
138
- color: var(--success-500);
139
- border: 1px solid rgba(16, 185, 129, 0.3);
140
- }
141
-
142
- .status-dot {
143
- width: 6px;
144
- height: 6px;
145
- border-radius: 50%;
146
- background: var(--error-500);
147
- animation: pulse 2s infinite;
148
- }
149
-
150
- .status-badge.connected .status-dot {
151
- background: var(--success-500);
152
- animation: none;
153
- }
154
-
155
- @keyframes pulse {
156
- 0%, 100% { opacity: 1; }
157
- 50% { opacity: 0.5; }
158
- }
159
-
160
- .subtitle {
161
- font-size: var(--font-sm);
162
- color: rgba(255, 255, 255, 0.8);
163
- margin: 0;
164
- }
165
-
166
- /* ===== PAGE INFO (CONNECTED STATE) ===== */
167
- .page-info {
168
- display: flex;
169
- align-items: center;
170
- gap: var(--space-3);
171
- }
172
-
173
- .page-icon {
174
- font-size: 32px;
175
- filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
176
- }
177
-
178
- .page-details {
179
- flex: 1;
180
- min-width: 0;
181
- }
182
-
183
- .page-title {
184
- font-size: var(--font-base);
185
- font-weight: 600;
186
- color: white;
187
- margin: 0;
188
- white-space: nowrap;
189
- overflow: hidden;
190
- text-overflow: ellipsis;
191
- }
192
-
193
- .page-url {
194
- font-size: 12px;
195
- color: rgba(255, 255, 255, 0.7);
196
- margin: 0;
197
- white-space: nowrap;
198
- overflow: hidden;
199
- text-overflow: ellipsis;
200
- }
201
-
202
- /* ===== AUTH CONTAINER ===== */
203
- .auth-container {
204
- flex: 1;
205
- padding: var(--space-6);
206
- background: white;
207
- display: flex;
208
- flex-direction: column;
209
- justify-content: center;
210
- gap: var(--space-6);
211
- }
212
-
213
- .auth-section {
214
- text-align: center;
215
- }
216
-
217
- .auth-description {
218
- margin-top: var(--space-3);
219
- font-size: var(--font-sm);
220
- color: var(--gray-500);
221
- }
222
-
223
- /* ===== BUTTONS ===== */
224
- .btn {
225
- display: inline-flex;
226
- align-items: center;
227
- justify-content: center;
228
- gap: var(--space-2);
229
- padding: var(--space-4) var(--space-6);
230
- border: none;
231
- border-radius: var(--radius-lg);
232
- font-size: var(--font-sm);
233
- font-weight: 600;
234
- text-decoration: none;
235
- cursor: pointer;
236
- transition: var(--transition);
237
- position: relative;
238
- min-height: 44px;
239
- width: 100%;
240
- pointer-events: auto;
241
- z-index: 100;
242
- }
243
-
244
- .btn:disabled {
245
- opacity: 0.6;
246
- cursor: not-allowed;
247
- transform: none !important;
248
- }
249
-
250
- .btn-primary {
251
- background: linear-gradient(135deg, var(--primary-600) 0%, var(--primary-700) 100%);
252
- color: white;
253
- box-shadow: var(--shadow-md);
254
- }
255
-
256
- .btn-primary:hover:not(:disabled) {
257
- transform: translateY(-1px);
258
- box-shadow: var(--shadow-lg);
259
- }
260
-
261
- .btn-secondary {
262
- background: var(--gray-100);
263
- color: var(--gray-700);
264
- border: 1px solid var(--gray-200);
265
- }
266
-
267
- .btn-secondary:hover:not(:disabled) {
268
- background: var(--gray-200);
269
- transform: translateY(-1px);
270
- }
271
-
272
- .btn-outline {
273
- background: transparent;
274
- color: var(--primary-600);
275
- border: 1px solid var(--primary-300);
276
- }
277
-
278
- .btn-outline:hover:not(:disabled) {
279
- background: var(--primary-50);
280
- border-color: var(--primary-400);
281
- }
282
-
283
- .btn-ghost {
284
- background: transparent;
285
- color: var(--gray-600);
286
- border: 1px solid transparent;
287
- }
288
-
289
- .btn-ghost:hover:not(:disabled) {
290
- background: var(--gray-100);
291
- color: var(--gray-700);
292
- }
293
-
294
- .btn-danger {
295
- background: var(--error-500);
296
- color: white;
297
- }
298
-
299
- .btn-danger:hover:not(:disabled) {
300
- background: #dc2626;
301
- transform: translateY(-1px);
302
- }
303
-
304
- .btn-icon {
305
- flex-shrink: 0;
306
- }
307
-
308
- .btn-spinner {
309
- width: 16px;
310
- height: 16px;
311
- border: 2px solid rgba(255, 255, 255, 0.3);
312
- border-top: 2px solid white;
313
- border-radius: 50%;
314
- animation: spin 1s linear infinite;
315
- display: none;
316
- }
317
-
318
- .btn:disabled .btn-spinner {
319
- display: block;
320
- }
321
-
322
- @keyframes spin {
323
- 0% { transform: rotate(0deg); }
324
- 100% { transform: rotate(360deg); }
325
- }
326
-
327
- /* ===== ACTION SECTION (CONNECTED STATE) ===== */
328
- .action-section {
329
- padding: var(--space-6);
330
- background: white;
331
- }
332
-
333
- .action-primary {
334
- padding: var(--space-5) var(--space-6);
335
- min-height: 64px;
336
- }
337
-
338
- .btn-content {
339
- text-align: left;
340
- }
341
-
342
- .btn-subtitle {
343
- display: block;
344
- font-size: 12px;
345
- font-weight: 400;
346
- opacity: 0.8;
347
- margin-top: 2px;
348
- }
349
-
350
- /* ===== ACTIONS GRID ===== */
351
- .actions-grid {
352
- display: grid;
353
- grid-template-columns: repeat(3, 1fr);
354
- gap: var(--space-3);
355
- padding: 0 var(--space-6) var(--space-6);
356
- background: white;
357
- }
358
-
359
- .action-card {
360
- display: flex;
361
- flex-direction: column;
362
- align-items: center;
363
- gap: var(--space-2);
364
- padding: var(--space-4);
365
- background: white;
366
- border: 1px solid var(--gray-200);
367
- border-radius: var(--radius-lg);
368
- cursor: pointer;
369
- transition: var(--transition);
370
- text-align: center;
371
- min-height: 80px;
372
- }
373
-
374
- .action-card:hover {
375
- background: var(--gray-50);
376
- border-color: var(--primary-300);
377
- transform: translateY(-1px);
378
- box-shadow: var(--shadow-md);
379
- }
380
-
381
- .action-icon {
382
- color: var(--gray-600);
383
- transition: var(--transition);
384
- }
385
-
386
- .action-card:hover .action-icon {
387
- color: var(--primary-600);
388
- }
389
-
390
- .action-content {
391
- display: flex;
392
- flex-direction: column;
393
- gap: 2px;
394
- }
395
-
396
- .action-title {
397
- font-size: 12px;
398
- font-weight: 600;
399
- color: var(--gray-900);
400
- }
401
-
402
- .action-subtitle {
403
- font-size: 11px;
404
- color: var(--gray-500);
405
- }
406
-
407
- /* ===== FORM ELEMENTS ===== */
408
- .form-field {
409
- margin-bottom: var(--space-5);
410
- }
411
-
412
- .field-label {
413
- display: block;
414
- font-size: var(--font-sm);
415
- font-weight: 500;
416
- color: var(--gray-700);
417
- margin-bottom: var(--space-2);
418
- }
419
-
420
- .field-input {
421
- width: 100%;
422
- padding: var(--space-3) var(--space-4);
423
- border: 1px solid var(--gray-300);
424
- border-radius: var(--radius-md);
425
- font-size: var(--font-sm);
426
- transition: var(--transition);
427
- background: white;
428
- }
429
-
430
- .field-input:focus {
431
- outline: none;
432
- border-color: var(--primary-500);
433
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
434
- }
435
-
436
- .field-input::placeholder {
437
- color: var(--gray-400);
438
- }
439
-
440
- .select-wrapper {
441
- position: relative;
442
- }
443
-
444
- .field-select {
445
- width: 100%;
446
- padding: var(--space-3) var(--space-4);
447
- padding-right: var(--space-8);
448
- border: 1px solid var(--gray-300);
449
- border-radius: var(--radius-md);
450
- font-size: var(--font-sm);
451
- background: white;
452
- cursor: pointer;
453
- appearance: none;
454
- }
455
-
456
- .field-select:focus {
457
- outline: none;
458
- border-color: var(--primary-500);
459
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
460
- }
461
-
462
- .select-arrow {
463
- position: absolute;
464
- right: var(--space-3);
465
- top: 50%;
466
- transform: translateY(-50%);
467
- color: var(--gray-400);
468
- pointer-events: none;
469
- }
470
-
471
- .input-wrapper {
472
- position: relative;
473
- }
474
-
475
- .input-help {
476
- position: absolute;
477
- right: var(--space-3);
478
- top: 50%;
479
- transform: translateY(-50%);
480
- display: flex;
481
- align-items: center;
482
- gap: var(--space-1);
483
- font-size: 12px;
484
- color: var(--primary-600);
485
- text-decoration: none;
486
- font-weight: 500;
487
- }
488
-
489
- .input-help:hover {
490
- color: var(--primary-700);
491
- }
492
-
493
- .input-hint {
494
- font-size: 12px;
495
- color: var(--gray-500);
496
- margin-top: var(--space-1);
497
- }
498
-
499
- /* ===== DIVIDER ===== */
500
- .divider {
501
- display: flex;
502
- align-items: center;
503
- gap: var(--space-4);
504
- color: var(--gray-400);
505
- font-size: 12px;
506
- font-weight: 500;
507
- }
508
-
509
- .divider::before,
510
- .divider::after {
511
- content: '';
512
- flex: 1;
513
- height: 1px;
514
- background: var(--gray-200);
515
- }
516
-
517
- .divider-text {
518
- color: var(--gray-500);
519
- }
520
-
521
- /* ===== MANUAL AUTH ===== */
522
- .manual-auth {
523
- border: 1px solid var(--gray-200);
524
- border-radius: var(--radius-lg);
525
- overflow: hidden;
526
- }
527
-
528
- .manual-summary {
529
- display: flex;
530
- align-items: center;
531
- gap: var(--space-3);
532
- padding: var(--space-4);
533
- cursor: pointer;
534
- font-size: var(--font-sm);
535
- font-weight: 500;
536
- color: var(--gray-700);
537
- background: var(--gray-50);
538
- border-bottom: 1px solid var(--gray-200);
539
- list-style: none;
540
- }
541
-
542
- .manual-summary::-webkit-details-marker {
543
- display: none;
544
- }
545
-
546
- .manual-summary:hover {
547
- background: var(--gray-100);
548
- }
549
-
550
- .manual-content {
551
- padding: var(--space-5);
552
- }
553
-
554
- /* ===== BASE SELECTOR ===== */
555
- .base-selector {
556
- padding: var(--space-5);
557
- background: var(--gray-50);
558
- border-radius: var(--radius-lg);
559
- border: 1px solid var(--gray-200);
560
- }
561
-
562
- /* ===== FOOTER ACTIONS ===== */
563
- .footer-actions {
564
- padding: var(--space-6);
565
- background: white;
566
- border-top: 1px solid var(--gray-200);
567
- }
568
-
569
- /* ===== SETTINGS PANEL ===== */
570
- .settings-panel {
571
- position: absolute;
572
- top: 0;
573
- left: 0;
574
- right: 0;
575
- bottom: 0;
576
- background: white;
577
- z-index: 100;
578
- display: flex;
579
- flex-direction: column;
580
- }
581
-
582
- .panel-header {
583
- display: flex;
584
- align-items: center;
585
- justify-content: space-between;
586
- padding: var(--space-5) var(--space-6);
587
- border-bottom: 1px solid var(--gray-200);
588
- background: var(--gray-50);
589
- }
590
-
591
- .panel-title {
592
- font-size: var(--font-lg);
593
- font-weight: 600;
594
- color: var(--gray-900);
595
- margin: 0;
596
- }
597
-
598
- .btn-close {
599
- width: 32px;
600
- height: 32px;
601
- display: flex;
602
- align-items: center;
603
- justify-content: center;
604
- border: none;
605
- background: none;
606
- color: var(--gray-500);
607
- cursor: pointer;
608
- border-radius: var(--radius-md);
609
- transition: var(--transition);
610
- }
611
-
612
- .btn-close:hover {
613
- background: var(--gray-200);
614
- color: var(--gray-700);
615
- }
616
-
617
- .panel-content {
618
- flex: 1;
619
- padding: var(--space-6);
620
- overflow-y: auto;
621
- }
622
-
623
- .setting-group {
624
- margin-bottom: var(--space-6);
625
- }
626
-
627
- .setting-label {
628
- display: block;
629
- font-size: var(--font-sm);
630
- font-weight: 500;
631
- color: var(--gray-700);
632
- margin-bottom: var(--space-3);
633
- }
634
-
635
- .toggle-setting {
636
- display: flex;
637
- align-items: center;
638
- justify-content: space-between;
639
- gap: var(--space-4);
640
- }
641
-
642
- .toggle-info {
643
- flex: 1;
644
- }
645
-
646
- .toggle-label {
647
- display: block;
648
- font-size: var(--font-sm);
649
- font-weight: 500;
650
- color: var(--gray-900);
651
- margin-bottom: var(--space-1);
652
- }
653
-
654
- .toggle-description {
655
- font-size: 12px;
656
- color: var(--gray-500);
657
- }
658
-
659
- .toggle {
660
- position: relative;
661
- display: inline-block;
662
- width: 44px;
663
- height: 24px;
664
- cursor: pointer;
665
- }
666
-
667
- .toggle input {
668
- opacity: 0;
669
- width: 0;
670
- height: 0;
671
- }
672
-
673
- .toggle-slider {
674
- position: absolute;
675
- top: 0;
676
- left: 0;
677
- right: 0;
678
- bottom: 0;
679
- background: var(--gray-300);
680
- border-radius: 12px;
681
- transition: var(--transition);
682
- }
683
-
684
- .toggle-slider::before {
685
- content: '';
686
- position: absolute;
687
- top: 2px;
688
- left: 2px;
689
- width: 20px;
690
- height: 20px;
691
- background: white;
692
- border-radius: 50%;
693
- transition: var(--transition);
694
- box-shadow: var(--shadow-sm);
695
- }
696
-
697
- .toggle input:checked + .toggle-slider {
698
- background: var(--primary-600);
699
- }
700
-
701
- .toggle input:checked + .toggle-slider::before {
702
- transform: translateX(20px);
703
- }
704
-
705
- /* ===== TOAST NOTIFICATIONS ===== */
706
- .toast {
707
- position: absolute;
708
- bottom: var(--space-6);
709
- left: var(--space-4);
710
- right: var(--space-4);
711
- display: flex;
712
- align-items: center;
713
- gap: var(--space-3);
714
- padding: var(--space-4);
715
- background: rgba(17, 24, 39, 0.95);
716
- color: white;
717
- border-radius: var(--radius-lg);
718
- font-size: var(--font-sm);
719
- font-weight: 500;
720
- box-shadow: var(--shadow-xl);
721
- backdrop-filter: blur(10px);
722
- transform: translateY(100px);
723
- opacity: 0;
724
- transition: var(--transition);
725
- z-index: 200;
726
- }
727
-
728
- .toast.show {
729
- transform: translateY(0);
730
- opacity: 1;
731
- }
732
-
733
- .toast-icon {
734
- flex-shrink: 0;
735
- font-size: var(--font-lg);
736
- }
737
-
738
- .toast-content {
739
- flex: 1;
740
- }
741
-
742
- .toast-message {
743
- margin: 0;
744
- }
745
-
746
- .toast-close {
747
- width: 24px;
748
- height: 24px;
749
- display: flex;
750
- align-items: center;
751
- justify-content: center;
752
- border: none;
753
- background: none;
754
- color: rgba(255, 255, 255, 0.7);
755
- cursor: pointer;
756
- border-radius: var(--radius-sm);
757
- transition: var(--transition);
758
- }
759
-
760
- .toast-close:hover {
761
- background: rgba(255, 255, 255, 0.1);
762
- color: white;
763
- }
764
-
765
- /* ===== ANIMATIONS ===== */
766
- @keyframes slideIn {
767
- from {
768
- opacity: 0;
769
- transform: translateY(10px);
770
- }
771
- to {
772
- opacity: 1;
773
- transform: translateY(0);
774
- }
775
- }
776
-
777
- .container {
778
- animation: slideIn 0.3s ease;
779
- }
780
-
781
- /* ===== RESPONSIVE ===== */
782
- @media (max-width: 380px) {
783
- body {
784
- width: 320px;
785
- }
786
-
787
- .actions-grid {
788
- grid-template-columns: 1fr 1fr;
789
- }
790
-
791
- .action-card:last-child {
792
- grid-column: 1 / -1;
793
- }
794
- }