web-agent-bridge 3.0.0 → 3.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 (202) hide show
  1. package/LICENSE +72 -21
  2. package/README.ar.md +1286 -1073
  3. package/README.md +1764 -1535
  4. package/bin/agent-runner.js +474 -474
  5. package/bin/cli.js +237 -138
  6. package/bin/wab.js +80 -80
  7. package/examples/bidi-agent.js +119 -119
  8. package/examples/cross-site-agent.js +91 -91
  9. package/examples/mcp-agent.js +94 -94
  10. package/examples/next-app-router/README.md +44 -44
  11. package/examples/puppeteer-agent.js +108 -108
  12. package/examples/saas-dashboard/README.md +55 -55
  13. package/examples/shopify-hydrogen/README.md +74 -74
  14. package/examples/vision-agent.js +171 -171
  15. package/examples/wordpress-elementor/README.md +77 -77
  16. package/package.json +17 -3
  17. package/public/.well-known/agent-tools.json +180 -180
  18. package/public/.well-known/ai-assets.json +59 -59
  19. package/public/.well-known/ai-plugin.json +28 -0
  20. package/public/.well-known/security.txt +8 -0
  21. package/public/agent-workspace.html +349 -347
  22. package/public/ai.html +198 -196
  23. package/public/api.html +413 -0
  24. package/public/browser.html +486 -484
  25. package/public/commander-dashboard.html +243 -243
  26. package/public/cookies.html +210 -208
  27. package/public/css/agent-workspace.css +1713 -1713
  28. package/public/css/premium.css +317 -317
  29. package/public/css/styles.css +1235 -1235
  30. package/public/dashboard.html +706 -704
  31. package/public/demo.html +1770 -1
  32. package/public/dns.html +507 -0
  33. package/public/docs.html +587 -585
  34. package/public/feed.xml +89 -89
  35. package/public/growth.html +463 -0
  36. package/public/index.html +341 -9
  37. package/public/integrations.html +556 -0
  38. package/public/js/agent-workspace.js +1740 -1740
  39. package/public/js/auth-nav.js +31 -31
  40. package/public/js/auth-redirect.js +12 -12
  41. package/public/js/cookie-consent.js +56 -56
  42. package/public/js/wab-demo-page.js +721 -721
  43. package/public/js/ws-client.js +74 -74
  44. package/public/llms-full.txt +360 -309
  45. package/public/llms.txt +125 -86
  46. package/public/login.html +85 -83
  47. package/public/mesh-dashboard.html +328 -328
  48. package/public/openapi.json +580 -580
  49. package/public/phone-shield.html +281 -0
  50. package/public/premium-dashboard.html +2489 -2487
  51. package/public/premium.html +793 -791
  52. package/public/privacy.html +297 -295
  53. package/public/register.html +105 -103
  54. package/public/robots.txt +87 -87
  55. package/public/script/wab-consent.d.ts +36 -36
  56. package/public/script/wab-consent.js +104 -104
  57. package/public/script/wab-schema.js +131 -131
  58. package/public/script/wab.d.ts +108 -108
  59. package/public/script/wab.min.js +580 -580
  60. package/public/security.txt +8 -0
  61. package/public/terms.html +256 -254
  62. package/script/ai-agent-bridge.js +1754 -1754
  63. package/sdk/README.md +99 -99
  64. package/sdk/agent-mesh.js +449 -449
  65. package/sdk/commander.js +262 -262
  66. package/sdk/index.d.ts +464 -464
  67. package/sdk/index.js +18 -1
  68. package/sdk/multi-agent.js +318 -318
  69. package/sdk/package.json +12 -1
  70. package/sdk/safety-shield.js +219 -0
  71. package/sdk/schema-discovery.js +83 -83
  72. package/server/adapters/index.js +520 -520
  73. package/server/config/plans.js +367 -367
  74. package/server/config/secrets.js +102 -102
  75. package/server/control-plane/index.js +301 -301
  76. package/server/data-plane/index.js +354 -354
  77. package/server/index.js +175 -19
  78. package/server/llm/index.js +404 -404
  79. package/server/middleware/adminAuth.js +35 -35
  80. package/server/middleware/auth.js +50 -50
  81. package/server/middleware/featureGate.js +88 -88
  82. package/server/middleware/rateLimits.js +100 -100
  83. package/server/middleware/sensitiveAction.js +157 -0
  84. package/server/migrations/001_add_analytics_indexes.sql +7 -7
  85. package/server/migrations/002_premium_features.sql +418 -418
  86. package/server/migrations/003_ads_integer_cents.sql +33 -33
  87. package/server/migrations/004_agent_os.sql +158 -158
  88. package/server/migrations/005_marketplace_metering.sql +126 -126
  89. package/server/models/adapters/index.js +33 -33
  90. package/server/models/adapters/mysql.js +183 -183
  91. package/server/models/adapters/postgresql.js +172 -172
  92. package/server/models/adapters/sqlite.js +7 -7
  93. package/server/models/db.js +681 -681
  94. package/server/observability/failure-analysis.js +337 -337
  95. package/server/observability/index.js +394 -394
  96. package/server/protocol/capabilities.js +223 -223
  97. package/server/protocol/index.js +243 -243
  98. package/server/protocol/schema.js +584 -584
  99. package/server/registry/certification.js +271 -271
  100. package/server/registry/index.js +326 -326
  101. package/server/routes/admin-premium.js +671 -671
  102. package/server/routes/admin.js +261 -261
  103. package/server/routes/ads.js +130 -130
  104. package/server/routes/agent-workspace.js +540 -378
  105. package/server/routes/api.js +150 -150
  106. package/server/routes/auth.js +71 -71
  107. package/server/routes/billing.js +45 -45
  108. package/server/routes/commander.js +316 -316
  109. package/server/routes/demo-showcase.js +332 -0
  110. package/server/routes/demo-store.js +154 -0
  111. package/server/routes/discovery.js +417 -406
  112. package/server/routes/gateway.js +173 -0
  113. package/server/routes/license.js +251 -240
  114. package/server/routes/mesh.js +469 -469
  115. package/server/routes/noscript.js +543 -543
  116. package/server/routes/premium-v2.js +686 -686
  117. package/server/routes/premium.js +724 -724
  118. package/server/routes/runtime.js +2148 -2147
  119. package/server/routes/sovereign.js +465 -385
  120. package/server/routes/universal.js +200 -177
  121. package/server/routes/wab-api.js +850 -491
  122. package/server/runtime/container-worker.js +111 -111
  123. package/server/runtime/container.js +448 -448
  124. package/server/runtime/distributed-worker.js +362 -362
  125. package/server/runtime/event-bus.js +210 -210
  126. package/server/runtime/index.js +253 -253
  127. package/server/runtime/queue.js +599 -599
  128. package/server/runtime/replay.js +666 -666
  129. package/server/runtime/sandbox.js +266 -266
  130. package/server/runtime/scheduler.js +534 -534
  131. package/server/runtime/session-engine.js +293 -293
  132. package/server/runtime/state-manager.js +188 -188
  133. package/server/security/cross-site-redactor.js +196 -0
  134. package/server/security/dry-run.js +180 -0
  135. package/server/security/human-gate-rate-limit.js +147 -0
  136. package/server/security/human-gate-transports.js +178 -0
  137. package/server/security/human-gate.js +281 -0
  138. package/server/security/index.js +368 -368
  139. package/server/security/intent-engine.js +245 -0
  140. package/server/security/reward-guard.js +171 -0
  141. package/server/security/rollback-store.js +239 -0
  142. package/server/security/token-scope.js +404 -0
  143. package/server/security/url-policy.js +139 -0
  144. package/server/services/agent-chat.js +506 -506
  145. package/server/services/agent-learning.js +601 -575
  146. package/server/services/agent-memory.js +625 -625
  147. package/server/services/agent-mesh.js +555 -539
  148. package/server/services/agent-symphony.js +717 -717
  149. package/server/services/agent-tasks.js +1807 -1807
  150. package/server/services/api-key-engine.js +292 -0
  151. package/server/services/cluster.js +894 -894
  152. package/server/services/commander.js +738 -738
  153. package/server/services/edge-compute.js +440 -440
  154. package/server/services/email.js +204 -204
  155. package/server/services/hosted-runtime.js +205 -205
  156. package/server/services/lfd.js +635 -616
  157. package/server/services/local-ai.js +389 -389
  158. package/server/services/marketplace.js +270 -270
  159. package/server/services/metering.js +182 -182
  160. package/server/services/modules/affiliate-intelligence.js +93 -0
  161. package/server/services/modules/agent-firewall.js +90 -0
  162. package/server/services/modules/bounty.js +89 -0
  163. package/server/services/modules/collective-bargaining.js +92 -0
  164. package/server/services/modules/dark-pattern.js +66 -0
  165. package/server/services/modules/gov-intelligence.js +45 -0
  166. package/server/services/modules/neural.js +55 -0
  167. package/server/services/modules/notary.js +49 -0
  168. package/server/services/modules/price-time-machine.js +86 -0
  169. package/server/services/modules/protocol.js +104 -0
  170. package/server/services/negotiation.js +439 -439
  171. package/server/services/plugins.js +771 -771
  172. package/server/services/premium.js +1 -1
  173. package/server/services/price-intelligence.js +566 -565
  174. package/server/services/price-shield.js +1137 -1137
  175. package/server/services/reputation.js +465 -465
  176. package/server/services/search-engine.js +357 -357
  177. package/server/services/security.js +513 -513
  178. package/server/services/self-healing.js +843 -843
  179. package/server/services/sovereign-shield.js +542 -0
  180. package/server/services/stripe.js +192 -192
  181. package/server/services/swarm.js +788 -788
  182. package/server/services/universal-scraper.js +662 -661
  183. package/server/services/verification.js +481 -481
  184. package/server/services/vision.js +1163 -1163
  185. package/server/utils/cache.js +125 -125
  186. package/server/utils/migrate.js +81 -81
  187. package/server/utils/safe-fetch.js +228 -0
  188. package/server/utils/secureFields.js +50 -50
  189. package/server/ws.js +161 -161
  190. package/templates/artisan-marketplace.yaml +104 -104
  191. package/templates/book-price-scout.yaml +98 -98
  192. package/templates/electronics-price-tracker.yaml +108 -108
  193. package/templates/flight-deal-hunter.yaml +113 -113
  194. package/templates/freelancer-direct.yaml +116 -116
  195. package/templates/grocery-price-compare.yaml +93 -93
  196. package/templates/hotel-direct-booking.yaml +113 -113
  197. package/templates/local-services.yaml +98 -98
  198. package/templates/olive-oil-tunisia.yaml +88 -88
  199. package/templates/organic-farm-fresh.yaml +101 -101
  200. package/templates/restaurant-direct.yaml +97 -97
  201. package/server/services/fairness-engine.js +0 -409
  202. package/server/services/fairness.js +0 -420
@@ -1,317 +1,317 @@
1
- /* ═══════════════════════════════════════════════════════════════════════
2
- Premium Services Page Styles
3
- ═══════════════════════════════════════════════════════════════════════ */
4
-
5
- .active-link {
6
- color: var(--accent-purple) !important;
7
- }
8
-
9
- /* ─── Premium Hero ────────────────────────────────────────────────── */
10
- .premium-hero {
11
- min-height: 70vh;
12
- display: flex;
13
- align-items: center;
14
- text-align: center;
15
- background: var(--gradient-hero);
16
- position: relative;
17
- overflow: hidden;
18
- padding-top: 120px;
19
- padding-bottom: 80px;
20
- }
21
-
22
- .premium-hero::before {
23
- content: '';
24
- position: absolute;
25
- top: -50%;
26
- left: -50%;
27
- width: 200%;
28
- height: 200%;
29
- background:
30
- radial-gradient(circle at 30% 30%, rgba(139,92,246,0.08) 0%, transparent 50%),
31
- radial-gradient(circle at 70% 70%, rgba(236,72,153,0.06) 0%, transparent 50%);
32
- animation: heroGlow 15s ease-in-out infinite alternate;
33
- }
34
-
35
- .premium-hero-content {
36
- position: relative;
37
- z-index: 1;
38
- max-width: 800px;
39
- margin: 0 auto;
40
- }
41
-
42
- .premium-hero h1 {
43
- margin-bottom: 24px;
44
- }
45
-
46
- .premium-hero p {
47
- font-size: 1.15rem;
48
- color: var(--text-secondary);
49
- max-width: 640px;
50
- margin: 0 auto 36px;
51
- line-height: 1.7;
52
- }
53
-
54
- /* ─── Tier Pills ──────────────────────────────────────────────────── */
55
- .tier-pills {
56
- display: flex;
57
- gap: 16px;
58
- justify-content: center;
59
- flex-wrap: wrap;
60
- }
61
-
62
- .tier-pill {
63
- display: flex;
64
- align-items: center;
65
- gap: 14px;
66
- background: var(--bg-card);
67
- border: 1px solid var(--border-color);
68
- border-radius: var(--radius-lg);
69
- padding: 16px 24px;
70
- min-width: 220px;
71
- transition: all var(--transition-normal);
72
- }
73
-
74
- .tier-pill.active {
75
- border-color: var(--accent-purple);
76
- box-shadow: 0 0 20px rgba(139,92,246,0.15);
77
- }
78
-
79
- .tier-pill:hover {
80
- border-color: var(--border-hover);
81
- transform: translateY(-2px);
82
- }
83
-
84
- .tier-pill-icon {
85
- width: 40px;
86
- height: 40px;
87
- border-radius: var(--radius-md);
88
- display: flex;
89
- align-items: center;
90
- justify-content: center;
91
- font-size: 1rem;
92
- flex-shrink: 0;
93
- }
94
-
95
- .tier-pill strong {
96
- display: block;
97
- font-size: 0.9rem;
98
- color: var(--text-primary);
99
- }
100
-
101
- .tier-pill span {
102
- font-size: 0.8rem;
103
- color: var(--text-muted);
104
- }
105
-
106
- /* ─── Service Row ─────────────────────────────────────────────────── */
107
- .service-row {
108
- display: flex;
109
- gap: 32px;
110
- padding: 48px 0;
111
- border-bottom: 1px solid var(--border-color);
112
- align-items: flex-start;
113
- }
114
-
115
- .service-row:last-child {
116
- border-bottom: none;
117
- }
118
-
119
- .service-number {
120
- font-size: 3rem;
121
- font-weight: 900;
122
- letter-spacing: -0.04em;
123
- background: linear-gradient(135deg, rgba(139,92,246,0.3), rgba(59,130,246,0.1));
124
- -webkit-background-clip: text;
125
- -webkit-text-fill-color: transparent;
126
- background-clip: text;
127
- min-width: 70px;
128
- text-align: center;
129
- line-height: 1;
130
- padding-top: 8px;
131
- }
132
-
133
- .service-body {
134
- flex: 1;
135
- min-width: 0;
136
- }
137
-
138
- .service-head {
139
- display: flex;
140
- align-items: center;
141
- gap: 16px;
142
- margin-bottom: 12px;
143
- }
144
-
145
- .service-icon {
146
- width: 52px;
147
- height: 52px;
148
- border-radius: var(--radius-md);
149
- display: flex;
150
- align-items: center;
151
- justify-content: center;
152
- font-size: 1.5rem;
153
- flex-shrink: 0;
154
- }
155
-
156
- .service-head h3 {
157
- margin-bottom: 4px;
158
- font-size: 1.35rem;
159
- }
160
-
161
- .service-tiers {
162
- display: flex;
163
- gap: 6px;
164
- flex-wrap: wrap;
165
- }
166
-
167
- .service-body > p {
168
- color: var(--text-secondary);
169
- font-size: 1rem;
170
- line-height: 1.7;
171
- margin-bottom: 24px;
172
- max-width: 700px;
173
- }
174
-
175
- /* ─── Service Feature Grid ────────────────────────────────────────── */
176
- .service-features {
177
- display: grid;
178
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
179
- gap: 16px;
180
- }
181
-
182
- .sf-item {
183
- display: flex;
184
- gap: 14px;
185
- padding: 16px;
186
- background: var(--bg-card);
187
- border: 1px solid var(--border-color);
188
- border-radius: var(--radius-md);
189
- transition: border-color var(--transition-fast);
190
- }
191
-
192
- .sf-item:hover {
193
- border-color: var(--border-hover);
194
- }
195
-
196
- .sf-icon {
197
- font-size: 1.25rem;
198
- flex-shrink: 0;
199
- width: 28px;
200
- text-align: center;
201
- padding-top: 2px;
202
- }
203
-
204
- .sf-item strong {
205
- display: block;
206
- font-size: 0.88rem;
207
- color: var(--text-primary);
208
- margin-bottom: 4px;
209
- }
210
-
211
- .sf-item span {
212
- font-size: 0.82rem;
213
- color: var(--text-muted);
214
- line-height: 1.5;
215
- }
216
-
217
- /* ─── Comparison Table ────────────────────────────────────────────── */
218
- .compare-table {
219
- width: 100%;
220
- border-collapse: collapse;
221
- }
222
-
223
- .compare-table th,
224
- .compare-table td {
225
- padding: 14px 20px;
226
- font-size: 0.88rem;
227
- }
228
-
229
- .compare-table th {
230
- background: var(--bg-surface);
231
- color: var(--text-muted);
232
- font-weight: 700;
233
- text-transform: uppercase;
234
- letter-spacing: 0.04em;
235
- font-size: 0.78rem;
236
- }
237
-
238
- .compare-table td {
239
- border-bottom: 1px solid var(--border-color);
240
- color: var(--text-secondary);
241
- }
242
-
243
- .compare-table tr:last-child td {
244
- border-bottom: none;
245
- }
246
-
247
- .compare-table tr:hover td {
248
- background: rgba(59,130,246,0.03);
249
- }
250
-
251
- .tc {
252
- text-align: center !important;
253
- }
254
-
255
- .highlight-col {
256
- background: rgba(139,92,246,0.04);
257
- }
258
-
259
- .compare-table .check {
260
- color: var(--accent-green);
261
- font-weight: 700;
262
- font-size: 1rem;
263
- }
264
-
265
- .compare-table .cross {
266
- color: var(--text-muted);
267
- font-size: 0.9rem;
268
- }
269
-
270
- /* ─── Premium CTA ─────────────────────────────────────────────────── */
271
- .premium-cta {
272
- max-width: 700px;
273
- margin: 0 auto;
274
- }
275
-
276
- .premium-cta h2 {
277
- margin-bottom: 16px;
278
- }
279
-
280
- .premium-cta p {
281
- color: var(--text-secondary);
282
- font-size: 1.1rem;
283
- line-height: 1.7;
284
- }
285
-
286
- /* ─── Responsive ──────────────────────────────────────────────────── */
287
- @media (max-width: 768px) {
288
- .service-row {
289
- flex-direction: column;
290
- gap: 16px;
291
- }
292
-
293
- .service-number {
294
- min-width: auto;
295
- font-size: 2.2rem;
296
- }
297
-
298
- .service-features {
299
- grid-template-columns: 1fr;
300
- }
301
-
302
- .tier-pills {
303
- flex-direction: column;
304
- align-items: center;
305
- }
306
-
307
- .tier-pill {
308
- width: 100%;
309
- max-width: 360px;
310
- }
311
-
312
- .compare-table th,
313
- .compare-table td {
314
- padding: 10px 12px;
315
- font-size: 0.8rem;
316
- }
317
- }
1
+ /* ═══════════════════════════════════════════════════════════════════════
2
+ Premium Services Page Styles
3
+ ═══════════════════════════════════════════════════════════════════════ */
4
+
5
+ .active-link {
6
+ color: var(--accent-purple) !important;
7
+ }
8
+
9
+ /* ─── Premium Hero ────────────────────────────────────────────────── */
10
+ .premium-hero {
11
+ min-height: 70vh;
12
+ display: flex;
13
+ align-items: center;
14
+ text-align: center;
15
+ background: var(--gradient-hero);
16
+ position: relative;
17
+ overflow: hidden;
18
+ padding-top: 120px;
19
+ padding-bottom: 80px;
20
+ }
21
+
22
+ .premium-hero::before {
23
+ content: '';
24
+ position: absolute;
25
+ top: -50%;
26
+ left: -50%;
27
+ width: 200%;
28
+ height: 200%;
29
+ background:
30
+ radial-gradient(circle at 30% 30%, rgba(139,92,246,0.08) 0%, transparent 50%),
31
+ radial-gradient(circle at 70% 70%, rgba(236,72,153,0.06) 0%, transparent 50%);
32
+ animation: heroGlow 15s ease-in-out infinite alternate;
33
+ }
34
+
35
+ .premium-hero-content {
36
+ position: relative;
37
+ z-index: 1;
38
+ max-width: 800px;
39
+ margin: 0 auto;
40
+ }
41
+
42
+ .premium-hero h1 {
43
+ margin-bottom: 24px;
44
+ }
45
+
46
+ .premium-hero p {
47
+ font-size: 1.15rem;
48
+ color: var(--text-secondary);
49
+ max-width: 640px;
50
+ margin: 0 auto 36px;
51
+ line-height: 1.7;
52
+ }
53
+
54
+ /* ─── Tier Pills ──────────────────────────────────────────────────── */
55
+ .tier-pills {
56
+ display: flex;
57
+ gap: 16px;
58
+ justify-content: center;
59
+ flex-wrap: wrap;
60
+ }
61
+
62
+ .tier-pill {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 14px;
66
+ background: var(--bg-card);
67
+ border: 1px solid var(--border-color);
68
+ border-radius: var(--radius-lg);
69
+ padding: 16px 24px;
70
+ min-width: 220px;
71
+ transition: all var(--transition-normal);
72
+ }
73
+
74
+ .tier-pill.active {
75
+ border-color: var(--accent-purple);
76
+ box-shadow: 0 0 20px rgba(139,92,246,0.15);
77
+ }
78
+
79
+ .tier-pill:hover {
80
+ border-color: var(--border-hover);
81
+ transform: translateY(-2px);
82
+ }
83
+
84
+ .tier-pill-icon {
85
+ width: 40px;
86
+ height: 40px;
87
+ border-radius: var(--radius-md);
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ font-size: 1rem;
92
+ flex-shrink: 0;
93
+ }
94
+
95
+ .tier-pill strong {
96
+ display: block;
97
+ font-size: 0.9rem;
98
+ color: var(--text-primary);
99
+ }
100
+
101
+ .tier-pill span {
102
+ font-size: 0.8rem;
103
+ color: var(--text-muted);
104
+ }
105
+
106
+ /* ─── Service Row ─────────────────────────────────────────────────── */
107
+ .service-row {
108
+ display: flex;
109
+ gap: 32px;
110
+ padding: 48px 0;
111
+ border-bottom: 1px solid var(--border-color);
112
+ align-items: flex-start;
113
+ }
114
+
115
+ .service-row:last-child {
116
+ border-bottom: none;
117
+ }
118
+
119
+ .service-number {
120
+ font-size: 3rem;
121
+ font-weight: 900;
122
+ letter-spacing: -0.04em;
123
+ background: linear-gradient(135deg, rgba(139,92,246,0.3), rgba(59,130,246,0.1));
124
+ -webkit-background-clip: text;
125
+ -webkit-text-fill-color: transparent;
126
+ background-clip: text;
127
+ min-width: 70px;
128
+ text-align: center;
129
+ line-height: 1;
130
+ padding-top: 8px;
131
+ }
132
+
133
+ .service-body {
134
+ flex: 1;
135
+ min-width: 0;
136
+ }
137
+
138
+ .service-head {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 16px;
142
+ margin-bottom: 12px;
143
+ }
144
+
145
+ .service-icon {
146
+ width: 52px;
147
+ height: 52px;
148
+ border-radius: var(--radius-md);
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ font-size: 1.5rem;
153
+ flex-shrink: 0;
154
+ }
155
+
156
+ .service-head h3 {
157
+ margin-bottom: 4px;
158
+ font-size: 1.35rem;
159
+ }
160
+
161
+ .service-tiers {
162
+ display: flex;
163
+ gap: 6px;
164
+ flex-wrap: wrap;
165
+ }
166
+
167
+ .service-body > p {
168
+ color: var(--text-secondary);
169
+ font-size: 1rem;
170
+ line-height: 1.7;
171
+ margin-bottom: 24px;
172
+ max-width: 700px;
173
+ }
174
+
175
+ /* ─── Service Feature Grid ────────────────────────────────────────── */
176
+ .service-features {
177
+ display: grid;
178
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
179
+ gap: 16px;
180
+ }
181
+
182
+ .sf-item {
183
+ display: flex;
184
+ gap: 14px;
185
+ padding: 16px;
186
+ background: var(--bg-card);
187
+ border: 1px solid var(--border-color);
188
+ border-radius: var(--radius-md);
189
+ transition: border-color var(--transition-fast);
190
+ }
191
+
192
+ .sf-item:hover {
193
+ border-color: var(--border-hover);
194
+ }
195
+
196
+ .sf-icon {
197
+ font-size: 1.25rem;
198
+ flex-shrink: 0;
199
+ width: 28px;
200
+ text-align: center;
201
+ padding-top: 2px;
202
+ }
203
+
204
+ .sf-item strong {
205
+ display: block;
206
+ font-size: 0.88rem;
207
+ color: var(--text-primary);
208
+ margin-bottom: 4px;
209
+ }
210
+
211
+ .sf-item span {
212
+ font-size: 0.82rem;
213
+ color: var(--text-muted);
214
+ line-height: 1.5;
215
+ }
216
+
217
+ /* ─── Comparison Table ────────────────────────────────────────────── */
218
+ .compare-table {
219
+ width: 100%;
220
+ border-collapse: collapse;
221
+ }
222
+
223
+ .compare-table th,
224
+ .compare-table td {
225
+ padding: 14px 20px;
226
+ font-size: 0.88rem;
227
+ }
228
+
229
+ .compare-table th {
230
+ background: var(--bg-surface);
231
+ color: var(--text-muted);
232
+ font-weight: 700;
233
+ text-transform: uppercase;
234
+ letter-spacing: 0.04em;
235
+ font-size: 0.78rem;
236
+ }
237
+
238
+ .compare-table td {
239
+ border-bottom: 1px solid var(--border-color);
240
+ color: var(--text-secondary);
241
+ }
242
+
243
+ .compare-table tr:last-child td {
244
+ border-bottom: none;
245
+ }
246
+
247
+ .compare-table tr:hover td {
248
+ background: rgba(59,130,246,0.03);
249
+ }
250
+
251
+ .tc {
252
+ text-align: center !important;
253
+ }
254
+
255
+ .highlight-col {
256
+ background: rgba(139,92,246,0.04);
257
+ }
258
+
259
+ .compare-table .check {
260
+ color: var(--accent-green);
261
+ font-weight: 700;
262
+ font-size: 1rem;
263
+ }
264
+
265
+ .compare-table .cross {
266
+ color: var(--text-muted);
267
+ font-size: 0.9rem;
268
+ }
269
+
270
+ /* ─── Premium CTA ─────────────────────────────────────────────────── */
271
+ .premium-cta {
272
+ max-width: 700px;
273
+ margin: 0 auto;
274
+ }
275
+
276
+ .premium-cta h2 {
277
+ margin-bottom: 16px;
278
+ }
279
+
280
+ .premium-cta p {
281
+ color: var(--text-secondary);
282
+ font-size: 1.1rem;
283
+ line-height: 1.7;
284
+ }
285
+
286
+ /* ─── Responsive ──────────────────────────────────────────────────── */
287
+ @media (max-width: 768px) {
288
+ .service-row {
289
+ flex-direction: column;
290
+ gap: 16px;
291
+ }
292
+
293
+ .service-number {
294
+ min-width: auto;
295
+ font-size: 2.2rem;
296
+ }
297
+
298
+ .service-features {
299
+ grid-template-columns: 1fr;
300
+ }
301
+
302
+ .tier-pills {
303
+ flex-direction: column;
304
+ align-items: center;
305
+ }
306
+
307
+ .tier-pill {
308
+ width: 100%;
309
+ max-width: 360px;
310
+ }
311
+
312
+ .compare-table th,
313
+ .compare-table td {
314
+ padding: 10px 12px;
315
+ font-size: 0.8rem;
316
+ }
317
+ }