@rashidazarang/airtable-mcp 2.1.0 → 2.1.1

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 (152) hide show
  1. package/package.json +10 -1
  2. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -173
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  4. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  5. package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -209
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  7. package/.github/ISSUE_TEMPLATE/security-report.yml +0 -216
  8. package/.github/pull_request_template.md +0 -245
  9. package/.github/workflows/ci-cd.yml +0 -408
  10. package/.github/workflows/security-audit.yml +0 -316
  11. package/API_DOCUMENTATION.md +0 -897
  12. package/CAPABILITY_REPORT.md +0 -118
  13. package/CLAUDE_INTEGRATION.md +0 -96
  14. package/CODE_OF_CONDUCT.md +0 -181
  15. package/CONTRIBUTING.md +0 -81
  16. package/DEVELOPMENT.md +0 -190
  17. package/Dockerfile +0 -39
  18. package/Dockerfile.node +0 -20
  19. package/Dockerfile.production +0 -127
  20. package/IMPROVEMENT_PROPOSAL.md +0 -371
  21. package/INSTALLATION.md +0 -183
  22. package/ISSUE_RESPONSES.md +0 -171
  23. package/MCP_REVIEW_SUMMARY.md +0 -142
  24. package/QUICK_START.md +0 -60
  25. package/RELEASE_NOTES_v1.2.0.md +0 -50
  26. package/RELEASE_NOTES_v1.2.1.md +0 -40
  27. package/RELEASE_NOTES_v1.2.2.md +0 -48
  28. package/RELEASE_NOTES_v1.2.3.md +0 -105
  29. package/RELEASE_NOTES_v1.2.4.md +0 -60
  30. package/RELEASE_NOTES_v1.4.0.md +0 -104
  31. package/RELEASE_NOTES_v1.5.0.md +0 -185
  32. package/RELEASE_NOTES_v1.6.0.md +0 -248
  33. package/SECURITY_NOTICE.md +0 -40
  34. package/airtable-clipper/CHANGELOG.md +0 -198
  35. package/airtable-clipper/CHROME_STORE_SUBMISSION.md +0 -343
  36. package/airtable-clipper/LAUNCH_STRATEGY.md +0 -495
  37. package/airtable-clipper/LICENSE +0 -21
  38. package/airtable-clipper/OAUTH_SETUP.md +0 -51
  39. package/airtable-clipper/PRIVACY_POLICY.md +0 -187
  40. package/airtable-clipper/README.md +0 -575
  41. package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +0 -273
  42. package/airtable-clipper/build.sh +0 -85
  43. package/airtable-clipper/docs/QUICK_START.md +0 -99
  44. package/airtable-clipper/docs/SETUP.md +0 -291
  45. package/airtable-clipper/extension/background.js +0 -337
  46. package/airtable-clipper/extension/base-setup.html +0 -324
  47. package/airtable-clipper/extension/base-setup.js +0 -471
  48. package/airtable-clipper/extension/content.js +0 -771
  49. package/airtable-clipper/extension/icons/README.md +0 -69
  50. package/airtable-clipper/extension/icons/icon-16.png +0 -3
  51. package/airtable-clipper/extension/manifest.json +0 -73
  52. package/airtable-clipper/extension/popup.html +0 -144
  53. package/airtable-clipper/extension/popup.js +0 -475
  54. package/airtable-clipper/extension/styles/content.css +0 -229
  55. package/airtable-clipper/extension/styles/popup.css +0 -477
  56. package/airtable-clipper/privacy-policy.md +0 -63
  57. package/airtable-clipper/releases/v1.0.0/background.js +0 -337
  58. package/airtable-clipper/releases/v1.0.0/base-setup.html +0 -324
  59. package/airtable-clipper/releases/v1.0.0/base-setup.js +0 -471
  60. package/airtable-clipper/releases/v1.0.0/content.js +0 -771
  61. package/airtable-clipper/releases/v1.0.0/icons/README.md +0 -69
  62. package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +0 -2
  63. package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +0 -3
  64. package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +0 -2
  65. package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +0 -2
  66. package/airtable-clipper/releases/v1.0.0/manifest.json +0 -73
  67. package/airtable-clipper/releases/v1.0.0/popup.html +0 -144
  68. package/airtable-clipper/releases/v1.0.0/popup.js +0 -475
  69. package/airtable-clipper/releases/v1.0.0/sidepanel.html +0 -25
  70. package/airtable-clipper/releases/v1.0.0/styles/content.css +0 -229
  71. package/airtable-clipper/releases/v1.0.0/styles/popup.css +0 -477
  72. package/airtable-clipper/releases/v1.0.1/background.js +0 -337
  73. package/airtable-clipper/releases/v1.0.1/base-setup.html +0 -324
  74. package/airtable-clipper/releases/v1.0.1/base-setup.js +0 -471
  75. package/airtable-clipper/releases/v1.0.1/content.js +0 -771
  76. package/airtable-clipper/releases/v1.0.1/icons/README.md +0 -69
  77. package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +0 -2
  78. package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +0 -3
  79. package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +0 -2
  80. package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +0 -2
  81. package/airtable-clipper/releases/v1.0.1/manifest.json +0 -70
  82. package/airtable-clipper/releases/v1.0.1/popup.html +0 -157
  83. package/airtable-clipper/releases/v1.0.1/popup.js +0 -562
  84. package/airtable-clipper/releases/v1.0.1/sidepanel.html +0 -25
  85. package/airtable-clipper/releases/v1.0.1/styles/content.css +0 -229
  86. package/airtable-clipper/releases/v1.0.1/styles/popup.css +0 -647
  87. package/airtable-clipper/releases/v1.0.2/background.js +0 -337
  88. package/airtable-clipper/releases/v1.0.2/base-setup.html +0 -324
  89. package/airtable-clipper/releases/v1.0.2/base-setup.js +0 -471
  90. package/airtable-clipper/releases/v1.0.2/content.js +0 -771
  91. package/airtable-clipper/releases/v1.0.2/icons/README.md +0 -69
  92. package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +0 -2
  93. package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +0 -3
  94. package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +0 -2
  95. package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +0 -2
  96. package/airtable-clipper/releases/v1.0.2/manifest.json +0 -62
  97. package/airtable-clipper/releases/v1.0.2/popup.html +0 -157
  98. package/airtable-clipper/releases/v1.0.2/popup.js +0 -567
  99. package/airtable-clipper/releases/v1.0.2/sidepanel.html +0 -25
  100. package/airtable-clipper/releases/v1.0.2/styles/content.css +0 -229
  101. package/airtable-clipper/releases/v1.0.2/styles/popup.css +0 -647
  102. package/airtable-clipper/terms-of-service.md +0 -124
  103. package/airtable-clipper/test-credentials.md +0 -61
  104. package/airtable-clipper/test-extension/background.js +0 -337
  105. package/airtable-clipper/test-extension/base-setup.html +0 -324
  106. package/airtable-clipper/test-extension/base-setup.js +0 -471
  107. package/airtable-clipper/test-extension/content.js +0 -873
  108. package/airtable-clipper/test-extension/icons/README.md +0 -69
  109. package/airtable-clipper/test-extension/icons/icon-128.png +0 -2
  110. package/airtable-clipper/test-extension/icons/icon-16.png +0 -3
  111. package/airtable-clipper/test-extension/icons/icon-32.png +0 -2
  112. package/airtable-clipper/test-extension/icons/icon-48.png +0 -2
  113. package/airtable-clipper/test-extension/manifest.json +0 -72
  114. package/airtable-clipper/test-extension/popup.html +0 -274
  115. package/airtable-clipper/test-extension/popup.js +0 -729
  116. package/airtable-clipper/test-extension/sidepanel.html +0 -25
  117. package/airtable-clipper/test-extension/styles/content.css +0 -229
  118. package/airtable-clipper/test-extension/styles/popup.css +0 -794
  119. package/airtable_mcp/__init__.py +0 -5
  120. package/airtable_mcp/src/server.py +0 -329
  121. package/airtable_mcp_v2.js +0 -1505
  122. package/airtable_mcp_v2_oauth.js +0 -1048
  123. package/airtable_mcp_v3_advanced.js +0 -1161
  124. package/cleanup.sh +0 -71
  125. package/docker-compose.production.yml +0 -366
  126. package/helm/airtable-mcp/Chart.yaml +0 -122
  127. package/helm/airtable-mcp/values.yaml +0 -538
  128. package/index.js +0 -179
  129. package/inspector.py +0 -148
  130. package/inspector_server.py +0 -337
  131. package/k8s/deployment.yaml +0 -402
  132. package/k8s/namespace.yaml +0 -108
  133. package/k8s/service.yaml +0 -194
  134. package/monitoring/alerts.yml +0 -289
  135. package/monitoring/prometheus.yml +0 -224
  136. package/publish-steps.txt +0 -27
  137. package/quick_test.sh +0 -30
  138. package/requirements.txt +0 -10
  139. package/setup.py +0 -29
  140. package/simple_airtable_server.py +0 -151
  141. package/smithery.yaml +0 -45
  142. package/test_all_features.sh +0 -146
  143. package/test_all_operations.sh +0 -120
  144. package/test_client.py +0 -70
  145. package/test_enhanced_features.js +0 -389
  146. package/test_mcp_comprehensive.js +0 -163
  147. package/test_mock_server.js +0 -180
  148. package/test_v1.4.0_final.sh +0 -131
  149. package/test_v1.5.0_comprehensive.sh +0 -96
  150. package/test_v1.5.0_final.sh +0 -224
  151. package/test_v1.6.0_comprehensive.sh +0 -187
  152. package/test_webhooks.sh +0 -105
@@ -1,229 +0,0 @@
1
- /* Airtable Clipper Content Script Styles */
2
-
3
- /* Floating Action Button */
4
- #airtable-clipper-fab {
5
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
6
- }
7
-
8
- #airtable-clipper-fab .fab-main {
9
- transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
10
- }
11
-
12
- #airtable-clipper-fab .fab-main:hover {
13
- transform: scale(1.1) rotate(5deg);
14
- }
15
-
16
- #airtable-clipper-fab .fab-main:active {
17
- transform: scale(0.95);
18
- }
19
-
20
- /* Selection Toolbar */
21
- #airtable-clipper-selection-toolbar {
22
- animation: fadeInUp 0.2s ease;
23
- }
24
-
25
- #airtable-clipper-selection-toolbar .selection-btn:hover {
26
- background: rgba(255, 255, 255, 0.1);
27
- }
28
-
29
- /* Bulk Mode Overlay */
30
- #airtable-clipper-bulk-overlay {
31
- animation: slideDown 0.3s ease;
32
- }
33
-
34
- #airtable-clipper-bulk-overlay .bulk-btn:hover {
35
- background: rgba(255, 255, 255, 0.3);
36
- transform: translateY(-1px);
37
- }
38
-
39
- /* Bulk Selection Highlights */
40
- .airtable-clipper-selected {
41
- background: rgba(102, 126, 234, 0.1) !important;
42
- border: 2px solid #667eea !important;
43
- border-radius: 4px;
44
- transition: all 0.2s ease;
45
- }
46
-
47
- .airtable-clipper-selectable:hover {
48
- background: rgba(102, 126, 234, 0.05) !important;
49
- cursor: pointer;
50
- }
51
-
52
- /* Notifications */
53
- #airtable-clipper-notification {
54
- animation: slideInRight 0.3s ease;
55
- backdrop-filter: blur(10px);
56
- }
57
-
58
- /* Animations */
59
- @keyframes fadeInUp {
60
- from {
61
- opacity: 0;
62
- transform: translateY(10px);
63
- }
64
- to {
65
- opacity: 1;
66
- transform: translateY(0);
67
- }
68
- }
69
-
70
- @keyframes slideDown {
71
- from {
72
- transform: translateY(-100%);
73
- }
74
- to {
75
- transform: translateY(0);
76
- }
77
- }
78
-
79
- @keyframes slideInRight {
80
- from {
81
- transform: translateX(100%);
82
- opacity: 0;
83
- }
84
- to {
85
- transform: translateX(0);
86
- opacity: 1;
87
- }
88
- }
89
-
90
- @keyframes pulse {
91
- 0%, 100% {
92
- opacity: 1;
93
- }
94
- 50% {
95
- opacity: 0.7;
96
- }
97
- }
98
-
99
- /* Loading States */
100
- .airtable-clipper-loading {
101
- position: relative;
102
- opacity: 0.7;
103
- }
104
-
105
- .airtable-clipper-loading::after {
106
- content: '';
107
- position: absolute;
108
- top: 50%;
109
- left: 50%;
110
- width: 20px;
111
- height: 20px;
112
- margin: -10px 0 0 -10px;
113
- border: 2px solid #667eea;
114
- border-top: 2px solid transparent;
115
- border-radius: 50%;
116
- animation: spin 1s linear infinite;
117
- }
118
-
119
- @keyframes spin {
120
- 0% { transform: rotate(0deg); }
121
- 100% { transform: rotate(360deg); }
122
- }
123
-
124
- /* Site-specific enhancements */
125
-
126
- /* LinkedIn */
127
- body[class*="linkedin"] .airtable-clipper-selected,
128
- [data-test-id*="search-result"] .airtable-clipper-selected {
129
- box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
130
- }
131
-
132
- /* GitHub */
133
- .repository-content .airtable-clipper-selected,
134
- .Box .airtable-clipper-selected {
135
- border-radius: 6px;
136
- }
137
-
138
- /* Stack Overflow */
139
- .question-summary .airtable-clipper-selected,
140
- .answer .airtable-clipper-selected {
141
- border-left: 4px solid #667eea;
142
- padding-left: 8px;
143
- }
144
-
145
- /* Medium */
146
- article .airtable-clipper-selected {
147
- border-radius: 8px;
148
- padding: 8px;
149
- margin: 4px 0;
150
- }
151
-
152
- /* Responsive Design */
153
- @media (max-width: 768px) {
154
- #airtable-clipper-fab {
155
- bottom: 80px; /* Above mobile browser UI */
156
- right: 16px;
157
- z-index: 10000;
158
- }
159
-
160
- #airtable-clipper-fab .fab-main {
161
- width: 48px;
162
- height: 48px;
163
- font-size: 18px;
164
- }
165
-
166
- #airtable-clipper-bulk-overlay {
167
- font-size: 12px;
168
- padding: 8px 12px;
169
- }
170
-
171
- #airtable-clipper-bulk-overlay .bulk-header {
172
- flex-direction: column;
173
- gap: 8px;
174
- align-items: flex-start;
175
- }
176
-
177
- #airtable-clipper-bulk-overlay .bulk-actions {
178
- display: flex;
179
- gap: 8px;
180
- }
181
-
182
- #airtable-clipper-notification {
183
- top: 10px;
184
- right: 10px;
185
- left: 10px;
186
- max-width: none;
187
- font-size: 13px;
188
- }
189
- }
190
-
191
- /* Dark Mode Support */
192
- @media (prefers-color-scheme: dark) {
193
- .airtable-clipper-selected {
194
- background: rgba(102, 126, 234, 0.2) !important;
195
- border-color: #818cf8 !important;
196
- }
197
-
198
- .airtable-clipper-selectable:hover {
199
- background: rgba(102, 126, 234, 0.1) !important;
200
- }
201
- }
202
-
203
- /* High Contrast Mode */
204
- @media (prefers-contrast: high) {
205
- #airtable-clipper-fab .fab-main {
206
- border: 2px solid #000;
207
- }
208
-
209
- .airtable-clipper-selected {
210
- border-width: 3px !important;
211
- background: rgba(102, 126, 234, 0.3) !important;
212
- }
213
- }
214
-
215
- /* Reduced Motion */
216
- @media (prefers-reduced-motion: reduce) {
217
- #airtable-clipper-fab .fab-main,
218
- #airtable-clipper-notification,
219
- #airtable-clipper-selection-toolbar,
220
- #airtable-clipper-bulk-overlay,
221
- .airtable-clipper-selected {
222
- animation: none !important;
223
- transition: none !important;
224
- }
225
-
226
- #airtable-clipper-fab .fab-main:hover {
227
- transform: none !important;
228
- }
229
- }
@@ -1,477 +0,0 @@
1
- /* Airtable Clipper Popup Styles */
2
-
3
- * {
4
- box-sizing: border-box;
5
- margin: 0;
6
- padding: 0;
7
- }
8
-
9
- body {
10
- width: 320px;
11
- min-height: 400px;
12
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
13
- font-size: 14px;
14
- line-height: 1.5;
15
- color: #1f2937;
16
- background-color: #ffffff;
17
- }
18
-
19
- /* Header */
20
- .header {
21
- display: flex;
22
- justify-content: space-between;
23
- align-items: center;
24
- padding: 16px;
25
- border-bottom: 1px solid #e5e7eb;
26
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
27
- color: white;
28
- }
29
-
30
- .logo {
31
- display: flex;
32
- align-items: center;
33
- gap: 8px;
34
- }
35
-
36
- .logo-icon {
37
- width: 24px;
38
- height: 24px;
39
- }
40
-
41
- .logo h1 {
42
- font-size: 16px;
43
- font-weight: 600;
44
- }
45
-
46
- .connection-status {
47
- display: flex;
48
- align-items: center;
49
- gap: 6px;
50
- font-size: 12px;
51
- }
52
-
53
- .status-dot {
54
- width: 8px;
55
- height: 8px;
56
- border-radius: 50%;
57
- background-color: #ef4444;
58
- }
59
-
60
- .status-dot.connected {
61
- background-color: #10b981;
62
- }
63
-
64
- .status-dot.connecting {
65
- background-color: #f59e0b;
66
- animation: pulse 2s infinite;
67
- }
68
-
69
- @keyframes pulse {
70
- 0%, 100% { opacity: 1; }
71
- 50% { opacity: 0.5; }
72
- }
73
-
74
- /* Quick Actions */
75
- .quick-actions {
76
- padding: 16px;
77
- }
78
-
79
- .action-btn {
80
- display: flex;
81
- align-items: center;
82
- width: 100%;
83
- padding: 12px;
84
- border: none;
85
- border-radius: 8px;
86
- cursor: pointer;
87
- transition: all 0.2s ease;
88
- font-size: 14px;
89
- font-weight: 500;
90
- margin-bottom: 8px;
91
- }
92
-
93
- .action-btn.primary {
94
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
95
- color: white;
96
- box-shadow: 0 2px 4px rgba(102, 126, 234, 0.3);
97
- }
98
-
99
- .action-btn.primary:hover {
100
- transform: translateY(-1px);
101
- box-shadow: 0 4px 8px rgba(102, 126, 234, 0.4);
102
- }
103
-
104
- .action-btn.secondary {
105
- background-color: #f3f4f6;
106
- color: #374151;
107
- border: 1px solid #d1d5db;
108
- }
109
-
110
- .action-btn.secondary:hover {
111
- background-color: #e5e7eb;
112
- }
113
-
114
- .action-btn:disabled {
115
- opacity: 0.5;
116
- cursor: not-allowed;
117
- transform: none !important;
118
- }
119
-
120
- .btn-icon {
121
- font-size: 18px;
122
- margin-right: 10px;
123
- }
124
-
125
- .btn-content {
126
- display: flex;
127
- flex-direction: column;
128
- align-items: flex-start;
129
- flex: 1;
130
- }
131
-
132
- .btn-text {
133
- font-weight: 500;
134
- }
135
-
136
- .btn-subtext {
137
- font-size: 12px;
138
- opacity: 0.8;
139
- margin-top: 2px;
140
- }
141
-
142
- .action-row {
143
- display: grid;
144
- grid-template-columns: 1fr 1fr;
145
- gap: 8px;
146
- }
147
-
148
- .action-row .action-btn {
149
- margin-bottom: 0;
150
- padding: 10px 8px;
151
- font-size: 13px;
152
- }
153
-
154
- .action-row .btn-text {
155
- font-size: 12px;
156
- }
157
-
158
- /* Configuration */
159
- .configuration {
160
- padding: 16px;
161
- }
162
-
163
- .config-section h3 {
164
- font-size: 16px;
165
- font-weight: 600;
166
- margin-bottom: 8px;
167
- color: #111827;
168
- }
169
-
170
- .help-text {
171
- font-size: 13px;
172
- color: #6b7280;
173
- margin-bottom: 16px;
174
- }
175
-
176
- .form-group {
177
- margin-bottom: 16px;
178
- }
179
-
180
- .form-group label {
181
- display: block;
182
- font-size: 13px;
183
- font-weight: 500;
184
- margin-bottom: 4px;
185
- color: #374151;
186
- }
187
-
188
- .form-group input,
189
- .form-group select {
190
- width: 100%;
191
- padding: 8px 12px;
192
- border: 1px solid #d1d5db;
193
- border-radius: 6px;
194
- font-size: 14px;
195
- transition: border-color 0.2s ease;
196
- }
197
-
198
- .form-group input:focus,
199
- .form-group select:focus {
200
- outline: none;
201
- border-color: #667eea;
202
- box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
203
- }
204
-
205
- .help-link {
206
- display: inline-block;
207
- font-size: 12px;
208
- color: #667eea;
209
- text-decoration: none;
210
- margin-top: 4px;
211
- }
212
-
213
- .help-link:hover {
214
- text-decoration: underline;
215
- }
216
-
217
- .btn {
218
- padding: 10px 16px;
219
- border: none;
220
- border-radius: 6px;
221
- font-size: 14px;
222
- font-weight: 500;
223
- cursor: pointer;
224
- transition: all 0.2s ease;
225
- }
226
-
227
- .btn.primary {
228
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
229
- color: white;
230
- }
231
-
232
- .btn.primary:hover {
233
- transform: translateY(-1px);
234
- box-shadow: 0 2px 4px rgba(102, 126, 234, 0.3);
235
- }
236
-
237
- .btn.full-width {
238
- width: 100%;
239
- }
240
-
241
- .btn-loading {
242
- margin-right: 8px;
243
- }
244
-
245
- /* Settings */
246
- .settings {
247
- padding: 16px;
248
- border-top: 1px solid #e5e7eb;
249
- }
250
-
251
- .setting-item {
252
- margin-bottom: 16px;
253
- }
254
-
255
- .setting-item label {
256
- display: block;
257
- font-size: 13px;
258
- font-weight: 500;
259
- margin-bottom: 4px;
260
- color: #374151;
261
- }
262
-
263
- .setting-item select {
264
- width: 100%;
265
- padding: 6px 10px;
266
- border: 1px solid #d1d5db;
267
- border-radius: 4px;
268
- font-size: 13px;
269
- }
270
-
271
- /* Checkbox styling */
272
- .checkbox-label {
273
- display: flex !important;
274
- align-items: center;
275
- cursor: pointer;
276
- font-size: 13px !important;
277
- margin-bottom: 0 !important;
278
- }
279
-
280
- .checkbox-label input[type="checkbox"] {
281
- display: none;
282
- }
283
-
284
- .checkmark {
285
- width: 16px;
286
- height: 16px;
287
- border: 2px solid #d1d5db;
288
- border-radius: 3px;
289
- margin-right: 8px;
290
- position: relative;
291
- transition: all 0.2s ease;
292
- }
293
-
294
- .checkbox-label input[type="checkbox"]:checked + .checkmark {
295
- background-color: #667eea;
296
- border-color: #667eea;
297
- }
298
-
299
- .checkbox-label input[type="checkbox"]:checked + .checkmark::after {
300
- content: '✓';
301
- position: absolute;
302
- top: -2px;
303
- left: 2px;
304
- color: white;
305
- font-size: 12px;
306
- font-weight: bold;
307
- }
308
-
309
- /* Status Messages */
310
- .status-message {
311
- position: absolute;
312
- top: 60px;
313
- left: 16px;
314
- right: 16px;
315
- background-color: #f0fdf4;
316
- border: 1px solid #bbf7d0;
317
- border-radius: 6px;
318
- padding: 12px;
319
- z-index: 1000;
320
- animation: slideIn 0.3s ease;
321
- }
322
-
323
- .status-message.error {
324
- background-color: #fef2f2;
325
- border-color: #fecaca;
326
- }
327
-
328
- .status-content {
329
- display: flex;
330
- align-items: center;
331
- gap: 8px;
332
- }
333
-
334
- .status-icon {
335
- font-size: 16px;
336
- }
337
-
338
- .status-text {
339
- flex: 1;
340
- font-size: 13px;
341
- font-weight: 500;
342
- }
343
-
344
- .status-close {
345
- background: none;
346
- border: none;
347
- font-size: 16px;
348
- cursor: pointer;
349
- color: #6b7280;
350
- }
351
-
352
- @keyframes slideIn {
353
- from {
354
- transform: translateY(-10px);
355
- opacity: 0;
356
- }
357
- to {
358
- transform: translateY(0);
359
- opacity: 1;
360
- }
361
- }
362
-
363
- /* Footer */
364
- .footer {
365
- border-top: 1px solid #e5e7eb;
366
- padding: 12px 16px;
367
- background-color: #f9fafb;
368
- }
369
-
370
- .footer-links {
371
- display: flex;
372
- justify-content: space-between;
373
- margin-bottom: 8px;
374
- }
375
-
376
- .footer-link {
377
- background: none;
378
- border: none;
379
- color: #667eea;
380
- font-size: 12px;
381
- cursor: pointer;
382
- text-decoration: none;
383
- }
384
-
385
- .footer-link:hover {
386
- text-decoration: underline;
387
- }
388
-
389
- .usage-info {
390
- text-align: center;
391
- }
392
-
393
- .usage-text {
394
- font-size: 11px;
395
- color: #6b7280;
396
- }
397
-
398
- /* Loading Overlay */
399
- .loading-overlay {
400
- position: absolute;
401
- top: 0;
402
- left: 0;
403
- right: 0;
404
- bottom: 0;
405
- background-color: rgba(255, 255, 255, 0.9);
406
- display: flex;
407
- flex-direction: column;
408
- align-items: center;
409
- justify-content: center;
410
- z-index: 2000;
411
- }
412
-
413
- .loading-spinner {
414
- width: 32px;
415
- height: 32px;
416
- border: 3px solid #e5e7eb;
417
- border-top: 3px solid #667eea;
418
- border-radius: 50%;
419
- animation: spin 1s linear infinite;
420
- margin-bottom: 12px;
421
- }
422
-
423
- .loading-text {
424
- font-size: 14px;
425
- color: #6b7280;
426
- }
427
-
428
- @keyframes spin {
429
- 0% { transform: rotate(0deg); }
430
- 100% { transform: rotate(360deg); }
431
- }
432
-
433
- /* Responsive adjustments */
434
- @media (max-width: 350px) {
435
- body {
436
- width: 300px;
437
- }
438
-
439
- .action-row {
440
- grid-template-columns: 1fr;
441
- }
442
- }
443
-
444
- /* Dark mode support */
445
- @media (prefers-color-scheme: dark) {
446
- body {
447
- background-color: #1f2937;
448
- color: #f3f4f6;
449
- }
450
-
451
- .header {
452
- border-bottom-color: #374151;
453
- }
454
-
455
- .action-btn.secondary {
456
- background-color: #374151;
457
- color: #f3f4f6;
458
- border-color: #4b5563;
459
- }
460
-
461
- .action-btn.secondary:hover {
462
- background-color: #4b5563;
463
- }
464
-
465
- .form-group input,
466
- .form-group select,
467
- .setting-item select {
468
- background-color: #374151;
469
- border-color: #4b5563;
470
- color: #f3f4f6;
471
- }
472
-
473
- .footer {
474
- background-color: #374151;
475
- border-top-color: #4b5563;
476
- }
477
- }