@rashidazarang/airtable-mcp 1.6.0 → 2.1.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 (116) hide show
  1. package/.github/ISSUE_TEMPLATE/bug-report.yml +173 -0
  2. package/.github/ISSUE_TEMPLATE/feature-request.yml +209 -0
  3. package/.github/ISSUE_TEMPLATE/security-report.yml +216 -0
  4. package/.github/pull_request_template.md +245 -0
  5. package/.github/workflows/ci-cd.yml +408 -0
  6. package/.github/workflows/security-audit.yml +316 -0
  7. package/API_DOCUMENTATION.md +897 -0
  8. package/CODE_OF_CONDUCT.md +181 -0
  9. package/Dockerfile.production +127 -0
  10. package/README.md +1 -0
  11. package/airtable-clipper/CHANGELOG.md +198 -0
  12. package/airtable-clipper/CHROME_STORE_SUBMISSION.md +343 -0
  13. package/airtable-clipper/LAUNCH_STRATEGY.md +495 -0
  14. package/airtable-clipper/LICENSE +21 -0
  15. package/airtable-clipper/OAUTH_SETUP.md +51 -0
  16. package/airtable-clipper/PRIVACY_POLICY.md +187 -0
  17. package/airtable-clipper/README.md +575 -0
  18. package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +273 -0
  19. package/airtable-clipper/build.sh +85 -0
  20. package/airtable-clipper/docs/QUICK_START.md +99 -0
  21. package/airtable-clipper/docs/SETUP.md +291 -0
  22. package/airtable-clipper/extension/background.js +337 -0
  23. package/airtable-clipper/extension/base-setup.html +324 -0
  24. package/airtable-clipper/extension/base-setup.js +471 -0
  25. package/airtable-clipper/extension/content.js +771 -0
  26. package/airtable-clipper/extension/icons/README.md +69 -0
  27. package/airtable-clipper/extension/icons/icon-16.png +3 -0
  28. package/airtable-clipper/extension/manifest.json +73 -0
  29. package/airtable-clipper/extension/popup.html +144 -0
  30. package/airtable-clipper/extension/popup.js +475 -0
  31. package/airtable-clipper/extension/styles/content.css +229 -0
  32. package/airtable-clipper/extension/styles/popup.css +477 -0
  33. package/airtable-clipper/privacy-policy.md +63 -0
  34. package/airtable-clipper/releases/v1.0.0/background.js +337 -0
  35. package/airtable-clipper/releases/v1.0.0/base-setup.html +324 -0
  36. package/airtable-clipper/releases/v1.0.0/base-setup.js +471 -0
  37. package/airtable-clipper/releases/v1.0.0/content.js +771 -0
  38. package/airtable-clipper/releases/v1.0.0/icons/README.md +69 -0
  39. package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +2 -0
  40. package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +3 -0
  41. package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +2 -0
  42. package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +2 -0
  43. package/airtable-clipper/releases/v1.0.0/manifest.json +73 -0
  44. package/airtable-clipper/releases/v1.0.0/popup.html +144 -0
  45. package/airtable-clipper/releases/v1.0.0/popup.js +475 -0
  46. package/airtable-clipper/releases/v1.0.0/sidepanel.html +25 -0
  47. package/airtable-clipper/releases/v1.0.0/styles/content.css +229 -0
  48. package/airtable-clipper/releases/v1.0.0/styles/popup.css +477 -0
  49. package/airtable-clipper/releases/v1.0.1/background.js +337 -0
  50. package/airtable-clipper/releases/v1.0.1/base-setup.html +324 -0
  51. package/airtable-clipper/releases/v1.0.1/base-setup.js +471 -0
  52. package/airtable-clipper/releases/v1.0.1/content.js +771 -0
  53. package/airtable-clipper/releases/v1.0.1/icons/README.md +69 -0
  54. package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +2 -0
  55. package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +3 -0
  56. package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +2 -0
  57. package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +2 -0
  58. package/airtable-clipper/releases/v1.0.1/manifest.json +70 -0
  59. package/airtable-clipper/releases/v1.0.1/popup.html +157 -0
  60. package/airtable-clipper/releases/v1.0.1/popup.js +562 -0
  61. package/airtable-clipper/releases/v1.0.1/sidepanel.html +25 -0
  62. package/airtable-clipper/releases/v1.0.1/styles/content.css +229 -0
  63. package/airtable-clipper/releases/v1.0.1/styles/popup.css +647 -0
  64. package/airtable-clipper/releases/v1.0.2/background.js +337 -0
  65. package/airtable-clipper/releases/v1.0.2/base-setup.html +324 -0
  66. package/airtable-clipper/releases/v1.0.2/base-setup.js +471 -0
  67. package/airtable-clipper/releases/v1.0.2/content.js +771 -0
  68. package/airtable-clipper/releases/v1.0.2/icons/README.md +69 -0
  69. package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +2 -0
  70. package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +3 -0
  71. package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +2 -0
  72. package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +2 -0
  73. package/airtable-clipper/releases/v1.0.2/manifest.json +62 -0
  74. package/airtable-clipper/releases/v1.0.2/popup.html +157 -0
  75. package/airtable-clipper/releases/v1.0.2/popup.js +567 -0
  76. package/airtable-clipper/releases/v1.0.2/sidepanel.html +25 -0
  77. package/airtable-clipper/releases/v1.0.2/styles/content.css +229 -0
  78. package/airtable-clipper/releases/v1.0.2/styles/popup.css +647 -0
  79. package/airtable-clipper/terms-of-service.md +124 -0
  80. package/airtable-clipper/test-credentials.md +61 -0
  81. package/airtable-clipper/test-extension/background.js +337 -0
  82. package/airtable-clipper/test-extension/base-setup.html +324 -0
  83. package/airtable-clipper/test-extension/base-setup.js +471 -0
  84. package/airtable-clipper/test-extension/content.js +873 -0
  85. package/airtable-clipper/test-extension/icons/README.md +69 -0
  86. package/airtable-clipper/test-extension/icons/icon-128.png +2 -0
  87. package/airtable-clipper/test-extension/icons/icon-16.png +3 -0
  88. package/airtable-clipper/test-extension/icons/icon-32.png +2 -0
  89. package/airtable-clipper/test-extension/icons/icon-48.png +2 -0
  90. package/airtable-clipper/test-extension/manifest.json +72 -0
  91. package/airtable-clipper/test-extension/popup.html +274 -0
  92. package/airtable-clipper/test-extension/popup.js +729 -0
  93. package/airtable-clipper/test-extension/sidepanel.html +25 -0
  94. package/airtable-clipper/test-extension/styles/content.css +229 -0
  95. package/airtable-clipper/test-extension/styles/popup.css +794 -0
  96. package/airtable_mcp_v2.js +1505 -0
  97. package/airtable_mcp_v2_oauth.js +1048 -0
  98. package/airtable_mcp_v3_advanced.js +1161 -0
  99. package/airtable_simple_production.js +532 -0
  100. package/docker-compose.production.yml +366 -0
  101. package/helm/airtable-mcp/Chart.yaml +122 -0
  102. package/helm/airtable-mcp/values.yaml +538 -0
  103. package/k8s/deployment.yaml +402 -0
  104. package/k8s/namespace.yaml +108 -0
  105. package/k8s/service.yaml +194 -0
  106. package/monitoring/alerts.yml +289 -0
  107. package/monitoring/prometheus.yml +224 -0
  108. package/package.json +6 -6
  109. package/.claude/settings.local.json +0 -12
  110. package/airtable-mcp-1.1.0.tgz +0 -0
  111. package/airtable_enhanced.js +0 -499
  112. package/airtable_simple_v1.2.4_backup.js +0 -277
  113. package/airtable_v1.4.0.js +0 -654
  114. package/rashidazarang-airtable-mcp-1.1.0.tgz +0 -0
  115. package/rashidazarang-airtable-mcp-1.2.0.tgz +0 -0
  116. package/rashidazarang-airtable-mcp-1.2.1.tgz +0 -0
@@ -0,0 +1,794 @@
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
+ }