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,1713 +1,1713 @@
1
- /* ═══════════════════════════════════════════════════════════════════════
2
- WAB Agent Workspace — 4-Panel Premium Layout
3
- Responsive for all screens including mobile
4
- ═══════════════════════════════════════════════════════════════════════ */
5
-
6
- /* ─── Reset & Base ────────────────────────────────────────────────────── */
7
- .aws-body {
8
- margin: 0;
9
- padding: 0;
10
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
11
- background: #06080f;
12
- color: #f0f4ff;
13
- height: 100vh;
14
- overflow: hidden;
15
- direction: ltr;
16
- -webkit-overflow-scrolling: touch;
17
- }
18
-
19
- .aws-body[dir="rtl"] { direction: rtl; }
20
-
21
- /* ─── Top Bar ──────────────────────────────────────────────────────────── */
22
- .aws-topbar {
23
- height: 52px;
24
- background: linear-gradient(90deg, #0a0e1a, #111827);
25
- border-bottom: 1px solid #1e293b;
26
- display: flex;
27
- align-items: center;
28
- justify-content: space-between;
29
- padding: 0 16px;
30
- z-index: 100;
31
- flex-shrink: 0;
32
- }
33
-
34
- .aws-topbar-left {
35
- display: flex;
36
- align-items: center;
37
- gap: 12px;
38
- }
39
-
40
- .aws-logo {
41
- width: 32px;
42
- height: 32px;
43
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
44
- border-radius: 8px;
45
- display: flex;
46
- align-items: center;
47
- justify-content: center;
48
- font-size: 0.9rem;
49
- font-weight: 800;
50
- color: #fff;
51
- }
52
-
53
- .aws-topbar-title {
54
- font-size: 0.95rem;
55
- font-weight: 700;
56
- letter-spacing: -0.02em;
57
- }
58
-
59
- .aws-topbar-title span {
60
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
61
- -webkit-background-clip: text;
62
- -webkit-text-fill-color: transparent;
63
- background-clip: text;
64
- }
65
-
66
- .aws-topbar-center {
67
- display: flex;
68
- align-items: center;
69
- gap: 8px;
70
- }
71
-
72
- .aws-layout-btn {
73
- background: rgba(255,255,255,0.05);
74
- border: 1px solid #1e293b;
75
- color: #94a3b8;
76
- padding: 6px 12px;
77
- border-radius: 6px;
78
- font-size: 0.8rem;
79
- cursor: pointer;
80
- transition: all 0.2s;
81
- }
82
-
83
- .aws-layout-btn:hover, .aws-layout-btn.active {
84
- background: rgba(59,130,246,0.15);
85
- border-color: #3b82f6;
86
- color: #60a5fa;
87
- }
88
-
89
- .aws-topbar-right {
90
- display: flex;
91
- align-items: center;
92
- gap: 10px;
93
- }
94
-
95
- .aws-user-badge {
96
- display: flex;
97
- align-items: center;
98
- gap: 8px;
99
- background: rgba(255,255,255,0.05);
100
- padding: 4px 12px 4px 4px;
101
- border-radius: 20px;
102
- border: 1px solid #1e293b;
103
- font-size: 0.82rem;
104
- color: #94a3b8;
105
- }
106
-
107
- .aws-user-avatar {
108
- width: 28px;
109
- height: 28px;
110
- border-radius: 50%;
111
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
112
- display: flex;
113
- align-items: center;
114
- justify-content: center;
115
- font-size: 0.7rem;
116
- font-weight: 700;
117
- color: #fff;
118
- }
119
-
120
- .aws-tier-badge {
121
- padding: 2px 8px;
122
- border-radius: 12px;
123
- font-size: 0.7rem;
124
- font-weight: 700;
125
- text-transform: uppercase;
126
- letter-spacing: 0.05em;
127
- }
128
-
129
- .aws-tier-badge.premium { background: linear-gradient(135deg, #f59e0b, #ef4444); color: #fff; }
130
- .aws-tier-badge.pro { background: linear-gradient(135deg, #8b5cf6, #ec4899); color: #fff; }
131
- .aws-tier-badge.starter { background: linear-gradient(135deg, #06b6d4, #3b82f6); color: #fff; }
132
-
133
- .aws-btn-icon {
134
- background: none;
135
- border: 1px solid #1e293b;
136
- color: #94a3b8;
137
- width: 34px;
138
- height: 34px;
139
- border-radius: 8px;
140
- cursor: pointer;
141
- display: flex;
142
- align-items: center;
143
- justify-content: center;
144
- font-size: 1rem;
145
- transition: all 0.2s;
146
- }
147
-
148
- .aws-btn-icon:hover { background: rgba(255,255,255,0.05); color: #f0f4ff; }
149
-
150
- .aws-logout-btn {
151
- background: none;
152
- border: 1px solid rgba(239,68,68,0.3);
153
- color: #ef4444;
154
- padding: 6px 14px;
155
- border-radius: 6px;
156
- font-size: 0.8rem;
157
- cursor: pointer;
158
- font-weight: 600;
159
- transition: all 0.2s;
160
- }
161
-
162
- .aws-logout-btn:hover { background: rgba(239,68,68,0.1); }
163
-
164
- /* ─── Mobile Menu ──────────────────────────────────────────────────────── */
165
- .aws-mobile-menu-btn {
166
- display: none;
167
- background: none;
168
- border: 1px solid #1e293b;
169
- color: #94a3b8;
170
- width: 34px;
171
- height: 34px;
172
- border-radius: 8px;
173
- cursor: pointer;
174
- font-size: 1.2rem;
175
- align-items: center;
176
- justify-content: center;
177
- }
178
-
179
- /* ─── Workspace Grid (4-Panel) ─────────────────────────────────────────── */
180
- .aws-workspace {
181
- display: grid;
182
- grid-template-columns: 1fr 1fr;
183
- grid-template-rows: 1fr 1fr;
184
- height: calc(100vh - 52px);
185
- gap: 2px;
186
- background: #0a0e1a;
187
- }
188
-
189
- /* Panel base */
190
- .aws-panel {
191
- background: #0f1629;
192
- display: flex;
193
- flex-direction: column;
194
- overflow: hidden;
195
- position: relative;
196
- min-height: 0;
197
- min-width: 0;
198
- }
199
-
200
- .aws-panel-header {
201
- display: flex;
202
- align-items: center;
203
- justify-content: space-between;
204
- padding: 8px 12px;
205
- background: rgba(17, 24, 39, 0.9);
206
- border-bottom: 1px solid #1e293b;
207
- flex-shrink: 0;
208
- min-height: 40px;
209
- }
210
-
211
- .aws-panel-header-left {
212
- display: flex;
213
- align-items: center;
214
- gap: 8px;
215
- }
216
-
217
- .aws-panel-icon {
218
- width: 24px;
219
- height: 24px;
220
- border-radius: 6px;
221
- display: flex;
222
- align-items: center;
223
- justify-content: center;
224
- font-size: 0.75rem;
225
- flex-shrink: 0;
226
- }
227
-
228
- .aws-panel-icon.browser { background: rgba(59,130,246,0.15); color: #60a5fa; }
229
- .aws-panel-icon.chat { background: rgba(139,92,246,0.15); color: #a78bfa; }
230
- .aws-panel-icon.monitor { background: rgba(245,158,11,0.15); color: #fbbf24; }
231
- .aws-panel-icon.results { background: rgba(16,185,129,0.15); color: #34d399; }
232
-
233
- .aws-panel-title {
234
- font-size: 0.8rem;
235
- font-weight: 700;
236
- letter-spacing: -0.01em;
237
- }
238
-
239
- .aws-panel-status {
240
- font-size: 0.65rem;
241
- padding: 2px 8px;
242
- border-radius: 10px;
243
- font-weight: 600;
244
- }
245
-
246
- .aws-panel-status.active { background: rgba(16,185,129,0.15); color: #34d399; }
247
- .aws-panel-status.idle { background: rgba(148,163,184,0.1); color: #64748b; }
248
- .aws-panel-status.working { background: rgba(245,158,11,0.15); color: #fbbf24; }
249
-
250
- .aws-panel-actions {
251
- display: flex;
252
- gap: 4px;
253
- }
254
-
255
- .aws-panel-action-btn {
256
- background: none;
257
- border: none;
258
- color: #475569;
259
- cursor: pointer;
260
- padding: 4px;
261
- border-radius: 4px;
262
- font-size: 0.8rem;
263
- transition: all 0.15s;
264
- }
265
-
266
- .aws-panel-action-btn:hover { color: #94a3b8; background: rgba(255,255,255,0.05); }
267
-
268
- .aws-panel-body {
269
- flex: 1;
270
- overflow: hidden;
271
- position: relative;
272
- display: flex;
273
- flex-direction: column;
274
- min-height: 0;
275
- }
276
-
277
- /* ─── Panel 1: Browser ──────────────────────────────────────────────── */
278
- .aws-browser-bar {
279
- display: flex;
280
- align-items: center;
281
- gap: 8px;
282
- padding: 6px 10px;
283
- background: #111827;
284
- border-bottom: 1px solid #1e293b;
285
- flex-shrink: 0;
286
- }
287
-
288
- .aws-browser-nav {
289
- display: flex;
290
- gap: 4px;
291
- }
292
-
293
- .aws-browser-nav button {
294
- background: none;
295
- border: 1px solid #1e293b;
296
- color: #64748b;
297
- width: 28px;
298
- height: 28px;
299
- border-radius: 6px;
300
- cursor: pointer;
301
- font-size: 0.85rem;
302
- display: flex;
303
- align-items: center;
304
- justify-content: center;
305
- transition: all 0.15s;
306
- }
307
-
308
- .aws-browser-nav button:hover { color: #94a3b8; background: rgba(255,255,255,0.05); }
309
-
310
- .aws-url-bar {
311
- flex: 1;
312
- display: flex;
313
- align-items: center;
314
- gap: 8px;
315
- background: #0a0e1a;
316
- border: 1px solid #1e293b;
317
- border-radius: 8px;
318
- padding: 0 10px;
319
- height: 32px;
320
- }
321
-
322
- .aws-url-lock { color: #10b981; font-size: 0.75rem; flex-shrink: 0; }
323
-
324
- .aws-url-input {
325
- flex: 1;
326
- background: none;
327
- border: none;
328
- color: #94a3b8;
329
- font-size: 0.8rem;
330
- font-family: inherit;
331
- outline: none;
332
- }
333
-
334
- .aws-url-input::placeholder { color: #475569; }
335
-
336
- .aws-browser-frame {
337
- flex: 1;
338
- border: none;
339
- background: #fff;
340
- width: 100%;
341
- }
342
-
343
- .aws-browser-empty {
344
- flex: 1;
345
- display: flex;
346
- flex-direction: column;
347
- align-items: center;
348
- justify-content: center;
349
- color: #475569;
350
- gap: 16px;
351
- padding: 20px;
352
- text-align: center;
353
- }
354
-
355
- .aws-browser-empty-icon {
356
- font-size: 3rem;
357
- opacity: 0.4;
358
- }
359
-
360
- .aws-browser-empty p {
361
- font-size: 0.85rem;
362
- max-width: 280px;
363
- line-height: 1.5;
364
- }
365
-
366
- /* ─── Panel 2: Chat ──────────────────────────────────────────────────── */
367
- .aws-chat-messages {
368
- flex: 1;
369
- overflow-y: auto;
370
- padding: 12px;
371
- display: flex;
372
- flex-direction: column;
373
- gap: 10px;
374
- scroll-behavior: smooth;
375
- min-height: 0;
376
- -webkit-overflow-scrolling: touch;
377
- }
378
-
379
- .aws-chat-messages::-webkit-scrollbar { width: 4px; }
380
- .aws-chat-messages::-webkit-scrollbar-track { background: transparent; }
381
- .aws-chat-messages::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
382
-
383
- .aws-msg {
384
- max-width: 88%;
385
- padding: 10px 14px;
386
- border-radius: 14px;
387
- font-size: 0.85rem;
388
- line-height: 1.55;
389
- word-break: break-word;
390
- animation: msgSlide 0.25s ease-out;
391
- }
392
-
393
- @keyframes msgSlide {
394
- from { opacity: 0; transform: translateY(8px); }
395
- to { opacity: 1; transform: translateY(0); }
396
- }
397
-
398
- .aws-msg.user {
399
- align-self: flex-end;
400
- background: linear-gradient(135deg, #3b82f6, #2563eb);
401
- color: #fff;
402
- border-bottom-right-radius: 4px;
403
- }
404
-
405
- .aws-msg.agent {
406
- align-self: flex-start;
407
- background: #1a2236;
408
- color: #e2e8f0;
409
- border: 1px solid #1e293b;
410
- border-bottom-left-radius: 4px;
411
- }
412
-
413
- .aws-msg.system {
414
- align-self: center;
415
- background: rgba(245,158,11,0.1);
416
- color: #fbbf24;
417
- border: 1px solid rgba(245,158,11,0.2);
418
- font-size: 0.78rem;
419
- text-align: center;
420
- max-width: 95%;
421
- }
422
-
423
- .aws-msg-time {
424
- font-size: 0.65rem;
425
- color: rgba(255,255,255,0.4);
426
- margin-top: 4px;
427
- display: block;
428
- }
429
-
430
- .aws-msg.agent .aws-msg-time { color: #475569; }
431
-
432
- .aws-typing-indicator {
433
- display: none;
434
- align-self: flex-start;
435
- padding: 10px 16px;
436
- background: #1a2236;
437
- border: 1px solid #1e293b;
438
- border-radius: 14px;
439
- border-bottom-left-radius: 4px;
440
- }
441
-
442
- .aws-typing-indicator.visible { display: flex; gap: 4px; }
443
-
444
- .aws-typing-dot {
445
- width: 6px;
446
- height: 6px;
447
- background: #475569;
448
- border-radius: 50%;
449
- animation: typingBounce 1.4s infinite;
450
- }
451
-
452
- .aws-typing-dot:nth-child(2) { animation-delay: 0.2s; }
453
- .aws-typing-dot:nth-child(3) { animation-delay: 0.4s; }
454
-
455
- @keyframes typingBounce {
456
- 0%, 60%, 100% { transform: translateY(0); }
457
- 30% { transform: translateY(-6px); }
458
- }
459
-
460
- .aws-chat-input-area {
461
- padding: 10px 12px;
462
- border-top: 1px solid #1e293b;
463
- background: #111827;
464
- flex-shrink: 0;
465
- }
466
-
467
- .aws-chat-input-row {
468
- display: flex;
469
- align-items: flex-end;
470
- gap: 8px;
471
- }
472
-
473
- .aws-chat-textarea {
474
- flex: 1;
475
- background: #0a0e1a;
476
- border: 1px solid #1e293b;
477
- border-radius: 12px;
478
- padding: 10px 14px;
479
- color: #f0f4ff;
480
- font-family: inherit;
481
- font-size: 0.85rem;
482
- line-height: 1.4;
483
- resize: none;
484
- outline: none;
485
- max-height: 120px;
486
- min-height: 42px;
487
- transition: border-color 0.2s;
488
- }
489
-
490
- .aws-chat-textarea:focus { border-color: #3b82f6; }
491
- .aws-chat-textarea::placeholder { color: #475569; }
492
-
493
- .aws-chat-send {
494
- width: 42px;
495
- height: 42px;
496
- border-radius: 50%;
497
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
498
- border: none;
499
- color: #fff;
500
- cursor: pointer;
501
- display: flex;
502
- align-items: center;
503
- justify-content: center;
504
- font-size: 1.1rem;
505
- flex-shrink: 0;
506
- transition: all 0.2s;
507
- }
508
-
509
- .aws-chat-send:hover { transform: scale(1.05); box-shadow: 0 4px 16px rgba(59,130,246,0.3); }
510
- .aws-chat-send:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
511
-
512
- .aws-chat-suggestions {
513
- display: flex;
514
- gap: 6px;
515
- flex-wrap: wrap;
516
- margin-top: 8px;
517
- }
518
-
519
- .aws-suggestion-chip {
520
- padding: 5px 12px;
521
- background: rgba(59,130,246,0.08);
522
- border: 1px solid rgba(59,130,246,0.2);
523
- border-radius: 16px;
524
- color: #60a5fa;
525
- font-size: 0.75rem;
526
- cursor: pointer;
527
- transition: all 0.15s;
528
- white-space: nowrap;
529
- }
530
-
531
- .aws-suggestion-chip:hover {
532
- background: rgba(59,130,246,0.15);
533
- border-color: #3b82f6;
534
- }
535
-
536
- /* ─── Panel 3: Negotiation Monitor ────────────────────────────────────── */
537
- .aws-monitor-content {
538
- flex: 1;
539
- overflow-y: auto;
540
- padding: 12px;
541
- min-height: 0;
542
- -webkit-overflow-scrolling: touch;
543
- }
544
-
545
- .aws-monitor-content::-webkit-scrollbar { width: 4px; }
546
- .aws-monitor-content::-webkit-scrollbar-track { background: transparent; }
547
- .aws-monitor-content::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
548
-
549
- .aws-monitor-empty {
550
- display: flex;
551
- flex-direction: column;
552
- align-items: center;
553
- justify-content: center;
554
- height: 100%;
555
- color: #475569;
556
- gap: 12px;
557
- text-align: center;
558
- padding: 20px;
559
- }
560
-
561
- .aws-monitor-empty-icon { font-size: 2.5rem; opacity: 0.4; }
562
- .aws-monitor-empty p { font-size: 0.82rem; max-width: 240px; line-height: 1.5; }
563
-
564
- /* Progress steps */
565
- .aws-progress-steps {
566
- display: flex;
567
- flex-direction: column;
568
- gap: 4px;
569
- margin-bottom: 16px;
570
- }
571
-
572
- .aws-progress-step {
573
- display: flex;
574
- align-items: center;
575
- gap: 10px;
576
- padding: 8px 10px;
577
- border-radius: 8px;
578
- font-size: 0.8rem;
579
- transition: all 0.3s;
580
- }
581
-
582
- .aws-progress-step.active {
583
- background: rgba(245,158,11,0.08);
584
- border: 1px solid rgba(245,158,11,0.2);
585
- }
586
-
587
- .aws-progress-step.completed {
588
- background: rgba(16,185,129,0.06);
589
- }
590
-
591
- .aws-progress-step.pending { color: #475569; }
592
-
593
- .aws-step-icon {
594
- width: 22px;
595
- height: 22px;
596
- border-radius: 50%;
597
- display: flex;
598
- align-items: center;
599
- justify-content: center;
600
- font-size: 0.65rem;
601
- flex-shrink: 0;
602
- }
603
-
604
- .aws-step-icon.active { background: rgba(245,158,11,0.2); color: #fbbf24; }
605
- .aws-step-icon.completed { background: rgba(16,185,129,0.2); color: #34d399; }
606
- .aws-step-icon.pending { background: rgba(148,163,184,0.1); color: #475569; }
607
-
608
- /* Agent cards in monitor */
609
- .aws-agent-card {
610
- background: rgba(26,34,54,0.6);
611
- border: 1px solid #1e293b;
612
- border-radius: 10px;
613
- padding: 10px 12px;
614
- margin-bottom: 8px;
615
- animation: msgSlide 0.3s ease-out;
616
- }
617
-
618
- .aws-agent-card-header {
619
- display: flex;
620
- align-items: center;
621
- justify-content: space-between;
622
- margin-bottom: 8px;
623
- }
624
-
625
- .aws-agent-name {
626
- display: flex;
627
- align-items: center;
628
- gap: 6px;
629
- font-size: 0.78rem;
630
- font-weight: 600;
631
- }
632
-
633
- .aws-agent-name .dot {
634
- width: 6px;
635
- height: 6px;
636
- border-radius: 50%;
637
- }
638
-
639
- .aws-agent-name .dot.searching { background: #fbbf24; animation: pulse 1.5s infinite; }
640
- .aws-agent-name .dot.negotiating { background: #f59e0b; animation: pulse 1s infinite; }
641
- .aws-agent-name .dot.done { background: #10b981; }
642
- .aws-agent-name .dot.failed { background: #ef4444; }
643
-
644
- @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
645
-
646
- .aws-agent-progress {
647
- width: 100%;
648
- height: 3px;
649
- background: #1e293b;
650
- border-radius: 3px;
651
- overflow: hidden;
652
- margin: 6px 0;
653
- }
654
-
655
- .aws-agent-progress-bar {
656
- height: 100%;
657
- border-radius: 3px;
658
- transition: width 0.5s ease-out;
659
- background: linear-gradient(90deg, #3b82f6, #8b5cf6);
660
- }
661
-
662
- .aws-agent-finding {
663
- font-size: 0.75rem;
664
- color: #94a3b8;
665
- padding: 4px 0;
666
- border-bottom: 1px solid rgba(30,41,59,0.5);
667
- }
668
-
669
- .aws-agent-finding:last-child { border-bottom: none; }
670
-
671
- .aws-agent-finding .price {
672
- color: #10b981;
673
- font-weight: 700;
674
- }
675
-
676
- .aws-agent-finding .savings {
677
- color: #fbbf24;
678
- font-weight: 600;
679
- font-size: 0.7rem;
680
- }
681
-
682
- /* Negotiation rounds */
683
- .aws-neg-round {
684
- background: rgba(139,92,246,0.05);
685
- border: 1px solid rgba(139,92,246,0.15);
686
- border-radius: 8px;
687
- padding: 8px 10px;
688
- margin-bottom: 6px;
689
- font-size: 0.78rem;
690
- animation: msgSlide 0.25s ease-out;
691
- }
692
-
693
- .aws-neg-round-header {
694
- display: flex;
695
- align-items: center;
696
- justify-content: space-between;
697
- font-weight: 600;
698
- color: #a78bfa;
699
- margin-bottom: 4px;
700
- font-size: 0.72rem;
701
- }
702
-
703
- .aws-neg-round-body { color: #94a3b8; line-height: 1.5; }
704
-
705
- /* ─── Panel 4: Results ────────────────────────────────────────────────── */
706
- .aws-results-content {
707
- flex: 1;
708
- overflow-y: auto;
709
- padding: 12px;
710
- min-height: 0;
711
- -webkit-overflow-scrolling: touch;
712
- }
713
-
714
- .aws-results-content::-webkit-scrollbar { width: 4px; }
715
- .aws-results-content::-webkit-scrollbar-track { background: transparent; }
716
- .aws-results-content::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
717
-
718
- .aws-results-empty {
719
- display: flex;
720
- flex-direction: column;
721
- align-items: center;
722
- justify-content: center;
723
- height: 100%;
724
- color: #475569;
725
- gap: 12px;
726
- text-align: center;
727
- padding: 20px;
728
- }
729
-
730
- .aws-results-empty-icon { font-size: 2.5rem; opacity: 0.4; }
731
- .aws-results-empty p { font-size: 0.82rem; max-width: 260px; line-height: 1.5; }
732
-
733
- /* Result cards */
734
- .aws-result-card {
735
- background: #1a2236;
736
- border: 1px solid #1e293b;
737
- border-radius: 12px;
738
- padding: 14px;
739
- margin-bottom: 10px;
740
- transition: all 0.2s;
741
- animation: msgSlide 0.3s ease-out;
742
- }
743
-
744
- .aws-result-card:hover {
745
- border-color: #334155;
746
- background: #1f2a42;
747
- }
748
-
749
- .aws-result-card.recommended {
750
- border-color: rgba(16,185,129,0.4);
751
- box-shadow: 0 0 20px rgba(16,185,129,0.05);
752
- }
753
-
754
- .aws-result-badge {
755
- display: inline-block;
756
- padding: 2px 8px;
757
- border-radius: 10px;
758
- font-size: 0.65rem;
759
- font-weight: 700;
760
- text-transform: uppercase;
761
- margin-bottom: 8px;
762
- }
763
-
764
- .aws-result-badge.best { background: rgba(16,185,129,0.15); color: #34d399; }
765
- .aws-result-badge.savings { background: rgba(245,158,11,0.15); color: #fbbf24; }
766
-
767
- .aws-result-title {
768
- font-size: 0.9rem;
769
- font-weight: 700;
770
- margin-bottom: 6px;
771
- display: flex;
772
- align-items: center;
773
- gap: 6px;
774
- }
775
-
776
- .aws-result-source {
777
- font-size: 0.7rem;
778
- color: #64748b;
779
- font-weight: 400;
780
- }
781
-
782
- .aws-result-prices {
783
- display: flex;
784
- align-items: baseline;
785
- gap: 10px;
786
- margin: 8px 0;
787
- }
788
-
789
- .aws-result-original {
790
- color: #64748b;
791
- text-decoration: line-through;
792
- font-size: 0.82rem;
793
- }
794
-
795
- .aws-result-final {
796
- color: #10b981;
797
- font-size: 1.2rem;
798
- font-weight: 800;
799
- }
800
-
801
- .aws-result-savings-tag {
802
- padding: 2px 8px;
803
- background: rgba(16,185,129,0.12);
804
- border-radius: 6px;
805
- color: #34d399;
806
- font-size: 0.72rem;
807
- font-weight: 700;
808
- }
809
-
810
- .aws-result-rating {
811
- font-size: 0.78rem;
812
- color: #fbbf24;
813
- margin: 4px 0;
814
- }
815
-
816
- .aws-result-total {
817
- font-size: 0.75rem;
818
- color: #94a3b8;
819
- font-weight: 500;
820
- }
821
-
822
- .aws-result-details {
823
- display: flex;
824
- flex-wrap: wrap;
825
- gap: 6px;
826
- margin: 8px 0;
827
- }
828
-
829
- .aws-result-detail {
830
- font-size: 0.72rem;
831
- color: #94a3b8;
832
- padding: 3px 8px;
833
- background: rgba(148,163,184,0.06);
834
- border-radius: 6px;
835
- }
836
-
837
- .aws-result-actions {
838
- display: flex;
839
- gap: 8px;
840
- margin-top: 10px;
841
- }
842
-
843
- .aws-result-btn {
844
- flex: 1;
845
- padding: 8px 14px;
846
- border-radius: 8px;
847
- font-size: 0.8rem;
848
- font-weight: 600;
849
- font-family: inherit;
850
- cursor: pointer;
851
- border: none;
852
- transition: all 0.2s;
853
- text-align: center;
854
- text-decoration: none;
855
- display: flex;
856
- align-items: center;
857
- justify-content: center;
858
- gap: 6px;
859
- }
860
-
861
- .aws-result-btn.primary {
862
- background: linear-gradient(135deg, #3b82f6, #2563eb);
863
- color: #fff;
864
- }
865
-
866
- .aws-result-btn.primary:hover { box-shadow: 0 4px 16px rgba(59,130,246,0.3); }
867
-
868
- .aws-result-btn.secondary {
869
- background: rgba(148,163,184,0.08);
870
- color: #94a3b8;
871
- border: 1px solid #1e293b;
872
- }
873
-
874
- .aws-result-btn.secondary:hover { background: rgba(148,163,184,0.12); color: #f0f4ff; }
875
-
876
- .aws-result-btn.agent-do {
877
- background: linear-gradient(135deg, #8b5cf6, #7c3aed);
878
- color: #fff;
879
- }
880
-
881
- .aws-result-btn.agent-do:hover { box-shadow: 0 4px 16px rgba(139,92,246,0.3); }
882
-
883
- /* Login request card */
884
- .aws-login-request {
885
- background: rgba(245,158,11,0.06);
886
- border: 1px solid rgba(245,158,11,0.2);
887
- border-radius: 10px;
888
- padding: 14px;
889
- margin-bottom: 10px;
890
- }
891
-
892
- .aws-login-request h4 {
893
- font-size: 0.85rem;
894
- color: #fbbf24;
895
- margin-bottom: 8px;
896
- display: flex;
897
- align-items: center;
898
- gap: 6px;
899
- }
900
-
901
- .aws-login-request p {
902
- font-size: 0.78rem;
903
- color: #94a3b8;
904
- margin-bottom: 10px;
905
- line-height: 1.5;
906
- }
907
-
908
- .aws-login-options {
909
- display: flex;
910
- flex-direction: column;
911
- gap: 6px;
912
- }
913
-
914
- .aws-login-option-btn {
915
- padding: 8px 12px;
916
- border-radius: 8px;
917
- font-size: 0.8rem;
918
- font-weight: 600;
919
- font-family: inherit;
920
- cursor: pointer;
921
- border: 1px solid #1e293b;
922
- background: #1a2236;
923
- color: #f0f4ff;
924
- text-align: left;
925
- transition: all 0.2s;
926
- }
927
-
928
- .aws-login-option-btn:hover { background: #1f2a42; border-color: #334155; }
929
-
930
- .aws-login-option-btn.agent-login {
931
- border-color: rgba(139,92,246,0.3);
932
- }
933
-
934
- .aws-login-option-btn.manual-login {
935
- border-color: rgba(59,130,246,0.3);
936
- }
937
-
938
- /* Tips section */
939
- .aws-tips-section {
940
- background: rgba(6,182,212,0.06);
941
- border: 1px solid rgba(6,182,212,0.15);
942
- border-radius: 10px;
943
- padding: 12px;
944
- margin-top: 12px;
945
- }
946
-
947
- .aws-tips-section h4 {
948
- font-size: 0.82rem;
949
- color: #22d3ee;
950
- margin-bottom: 8px;
951
- display: flex;
952
- align-items: center;
953
- gap: 6px;
954
- }
955
-
956
- .aws-tip-item {
957
- font-size: 0.75rem;
958
- color: #94a3b8;
959
- padding: 4px 0;
960
- line-height: 1.5;
961
- display: flex;
962
- gap: 6px;
963
- }
964
-
965
- .aws-tip-item::before {
966
- content: "💡";
967
- flex-shrink: 0;
968
- font-size: 0.7rem;
969
- }
970
-
971
- /* Summary bar */
972
- .aws-results-summary {
973
- padding: 10px 12px;
974
- background: #111827;
975
- border-top: 1px solid #1e293b;
976
- flex-shrink: 0;
977
- display: flex;
978
- align-items: center;
979
- justify-content: space-between;
980
- font-size: 0.78rem;
981
- }
982
-
983
- .aws-summary-stat {
984
- display: flex;
985
- align-items: center;
986
- gap: 6px;
987
- color: #94a3b8;
988
- }
989
-
990
- .aws-summary-stat .value {
991
- font-weight: 700;
992
- color: #10b981;
993
- }
994
-
995
- /* ─── Auth/Subscription Overlay ──────────────────────────────────────── */
996
- .aws-auth-overlay {
997
- position: fixed;
998
- top: 0;
999
- left: 0;
1000
- right: 0;
1001
- bottom: 0;
1002
- background: rgba(6,8,15,0.95);
1003
- z-index: 200;
1004
- display: flex;
1005
- align-items: center;
1006
- justify-content: center;
1007
- padding: 20px;
1008
- }
1009
-
1010
- .aws-auth-overlay.hidden { display: none; }
1011
-
1012
- .aws-auth-card {
1013
- background: #111827;
1014
- border: 1px solid #1e293b;
1015
- border-radius: 20px;
1016
- padding: 40px;
1017
- width: 100%;
1018
- max-width: 440px;
1019
- text-align: center;
1020
- animation: authSlide 0.3s ease-out;
1021
- }
1022
-
1023
- @keyframes authSlide {
1024
- from { opacity: 0; transform: translateY(20px) scale(0.97); }
1025
- to { opacity: 1; transform: translateY(0) scale(1); }
1026
- }
1027
-
1028
- .aws-auth-logo {
1029
- width: 56px;
1030
- height: 56px;
1031
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
1032
- border-radius: 16px;
1033
- display: flex;
1034
- align-items: center;
1035
- justify-content: center;
1036
- font-size: 1.5rem;
1037
- margin: 0 auto 20px;
1038
- color: #fff;
1039
- font-weight: 800;
1040
- }
1041
-
1042
- .aws-auth-title {
1043
- font-size: 1.5rem;
1044
- font-weight: 800;
1045
- margin-bottom: 8px;
1046
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
1047
- -webkit-background-clip: text;
1048
- -webkit-text-fill-color: transparent;
1049
- background-clip: text;
1050
- }
1051
-
1052
- .aws-auth-subtitle {
1053
- font-size: 0.85rem;
1054
- color: #94a3b8;
1055
- margin-bottom: 28px;
1056
- line-height: 1.5;
1057
- }
1058
-
1059
- .aws-auth-form {
1060
- display: flex;
1061
- flex-direction: column;
1062
- gap: 12px;
1063
- text-align: left;
1064
- }
1065
-
1066
- .aws-auth-form label {
1067
- font-size: 0.8rem;
1068
- color: #94a3b8;
1069
- font-weight: 600;
1070
- margin-bottom: -6px;
1071
- }
1072
-
1073
- .aws-auth-input {
1074
- width: 100%;
1075
- padding: 12px 14px;
1076
- background: #0a0e1a;
1077
- border: 1px solid #1e293b;
1078
- border-radius: 10px;
1079
- color: #f0f4ff;
1080
- font-family: inherit;
1081
- font-size: 0.9rem;
1082
- outline: none;
1083
- transition: border-color 0.2s;
1084
- }
1085
-
1086
- .aws-auth-input:focus { border-color: #3b82f6; }
1087
-
1088
- .aws-auth-submit {
1089
- width: 100%;
1090
- padding: 14px;
1091
- background: linear-gradient(135deg, #3b82f6, #8b5cf6);
1092
- border: none;
1093
- border-radius: 10px;
1094
- color: #fff;
1095
- font-family: inherit;
1096
- font-size: 0.95rem;
1097
- font-weight: 700;
1098
- cursor: pointer;
1099
- margin-top: 8px;
1100
- transition: all 0.2s;
1101
- }
1102
-
1103
- .aws-auth-submit:hover {
1104
- box-shadow: 0 6px 24px rgba(59,130,246,0.3);
1105
- transform: translateY(-1px);
1106
- }
1107
-
1108
- .aws-auth-submit:disabled {
1109
- opacity: 0.5;
1110
- cursor: not-allowed;
1111
- transform: none;
1112
- }
1113
-
1114
- .aws-auth-switch {
1115
- margin-top: 16px;
1116
- font-size: 0.82rem;
1117
- color: #64748b;
1118
- }
1119
-
1120
- .aws-auth-switch a {
1121
- color: #60a5fa;
1122
- cursor: pointer;
1123
- font-weight: 600;
1124
- }
1125
-
1126
- .aws-auth-switch a:hover { text-decoration: underline; }
1127
-
1128
- .aws-auth-error {
1129
- color: #ef4444;
1130
- font-size: 0.8rem;
1131
- text-align: center;
1132
- padding: 8px;
1133
- background: rgba(239,68,68,0.08);
1134
- border-radius: 8px;
1135
- display: none;
1136
- }
1137
-
1138
- .aws-auth-error.visible { display: block; }
1139
-
1140
- /* ─── Subscription Plans ─────────────────────────────────────────────── */
1141
- .aws-plans-grid {
1142
- display: grid;
1143
- grid-template-columns: repeat(3, 1fr);
1144
- gap: 12px;
1145
- margin-top: 20px;
1146
- }
1147
-
1148
- .aws-plan-card {
1149
- background: #0f1629;
1150
- border: 1px solid #1e293b;
1151
- border-radius: 14px;
1152
- padding: 20px 16px;
1153
- text-align: center;
1154
- transition: all 0.2s;
1155
- cursor: pointer;
1156
- }
1157
-
1158
- .aws-plan-card:hover { border-color: #334155; }
1159
-
1160
- .aws-plan-card.recommended {
1161
- border-color: #3b82f6;
1162
- box-shadow: 0 0 20px rgba(59,130,246,0.1);
1163
- }
1164
-
1165
- .aws-plan-name {
1166
- font-size: 0.85rem;
1167
- font-weight: 700;
1168
- margin-bottom: 6px;
1169
- }
1170
-
1171
- .aws-plan-price {
1172
- font-size: 1.6rem;
1173
- font-weight: 800;
1174
- color: #f0f4ff;
1175
- margin-bottom: 4px;
1176
- }
1177
-
1178
- .aws-plan-price span { font-size: 0.75rem; color: #64748b; font-weight: 400; }
1179
-
1180
- .aws-plan-features {
1181
- list-style: none;
1182
- padding: 0;
1183
- margin: 12px 0 0;
1184
- font-size: 0.72rem;
1185
- color: #94a3b8;
1186
- text-align: left;
1187
- }
1188
-
1189
- .aws-plan-features li {
1190
- padding: 3px 0;
1191
- display: flex;
1192
- align-items: center;
1193
- gap: 6px;
1194
- }
1195
-
1196
- .aws-plan-features li::before { content: "✓"; color: #10b981; font-weight: 700; }
1197
-
1198
- /* ─── Responsive — Tablet ──────────────────────────────────────────── */
1199
- @media (max-width: 1024px) {
1200
- .aws-topbar-center { display: none; }
1201
-
1202
- .aws-body {
1203
- overflow-y: auto;
1204
- height: auto;
1205
- min-height: 100vh;
1206
- }
1207
-
1208
- .aws-workspace {
1209
- grid-template-columns: 1fr;
1210
- grid-template-rows: auto;
1211
- height: auto;
1212
- min-height: calc(100vh - 52px);
1213
- }
1214
-
1215
- .aws-panel {
1216
- min-height: 50vh;
1217
- overflow: visible;
1218
- }
1219
-
1220
- .aws-panel-body {
1221
- min-height: 300px;
1222
- }
1223
-
1224
- .aws-plans-grid { grid-template-columns: 1fr; }
1225
- }
1226
-
1227
- /* ─── Responsive — Mobile ─────────────────────────────────────────── */
1228
- @media (max-width: 768px) {
1229
- .aws-body {
1230
- overflow-y: auto;
1231
- overflow-x: hidden;
1232
- height: auto;
1233
- min-height: 100vh;
1234
- -webkit-overflow-scrolling: touch;
1235
- }
1236
-
1237
- .aws-topbar {
1238
- padding: 0 10px;
1239
- height: 48px;
1240
- position: sticky;
1241
- top: 0;
1242
- z-index: 101;
1243
- }
1244
-
1245
- .aws-topbar-title { font-size: 0.85rem; }
1246
- .aws-topbar-center { display: none; }
1247
- .aws-user-badge { display: none; }
1248
- .aws-tier-badge { display: none; }
1249
- .aws-logout-btn { display: none; }
1250
- .aws-mobile-menu-btn { display: flex; }
1251
-
1252
- .aws-workspace {
1253
- grid-template-columns: 1fr;
1254
- grid-template-rows: none;
1255
- height: auto;
1256
- min-height: calc(100vh - 48px - 56px);
1257
- }
1258
-
1259
- .aws-panel {
1260
- display: none;
1261
- min-height: calc(100vh - 48px - 56px);
1262
- max-height: none;
1263
- overflow-y: auto;
1264
- -webkit-overflow-scrolling: touch;
1265
- padding-bottom: 0;
1266
- }
1267
-
1268
- .aws-panel.active-mobile {
1269
- display: flex;
1270
- flex-direction: column;
1271
- }
1272
-
1273
- /* Chat panel: scrollable messages, sticky input at bottom */
1274
- .aws-panel.active-mobile .aws-panel-body {
1275
- flex: 1;
1276
- display: flex;
1277
- flex-direction: column;
1278
- overflow: hidden;
1279
- min-height: calc(100vh - 48px - 56px - 40px);
1280
- }
1281
-
1282
- .aws-panel.active-mobile .aws-chat-messages {
1283
- flex: 1;
1284
- overflow-y: auto;
1285
- -webkit-overflow-scrolling: touch;
1286
- min-height: 0;
1287
- }
1288
-
1289
- .aws-panel.active-mobile .aws-chat-input-area {
1290
- position: sticky;
1291
- bottom: 0;
1292
- padding: 8px;
1293
- padding-bottom: 64px;
1294
- background: #0f172a;
1295
- border-top: 1px solid #1e293b;
1296
- z-index: 10;
1297
- flex-shrink: 0;
1298
- }
1299
-
1300
- /* Browser iframe full height on mobile */
1301
- .aws-panel.active-mobile #browserFrame {
1302
- flex: 1;
1303
- min-height: 0;
1304
- }
1305
-
1306
- /* Results panel: ensure content is scrollable */
1307
- .aws-panel.active-mobile .aws-results-content {
1308
- overflow-y: auto;
1309
- -webkit-overflow-scrolling: touch;
1310
- flex: 1;
1311
- padding-bottom: 60px;
1312
- }
1313
-
1314
- /* Monitor panel scrollable */
1315
- .aws-panel.active-mobile .aws-monitor-content {
1316
- overflow-y: auto;
1317
- -webkit-overflow-scrolling: touch;
1318
- flex: 1;
1319
- padding-bottom: 60px;
1320
- }
1321
-
1322
- .aws-mobile-nav {
1323
- display: flex !important;
1324
- position: fixed;
1325
- bottom: 0;
1326
- left: 0;
1327
- right: 0;
1328
- z-index: 100;
1329
- background: #111827;
1330
- border-top: 1px solid #1e293b;
1331
- padding: 6px 0;
1332
- justify-content: space-around;
1333
- height: 56px;
1334
- }
1335
-
1336
- .aws-mobile-nav-item {
1337
- display: flex;
1338
- flex-direction: column;
1339
- align-items: center;
1340
- gap: 2px;
1341
- padding: 4px 12px;
1342
- background: none;
1343
- border: none;
1344
- color: #475569;
1345
- font-size: 0.62rem;
1346
- font-family: inherit;
1347
- cursor: pointer;
1348
- transition: all 0.15s;
1349
- }
1350
-
1351
- .aws-mobile-nav-item .icon { font-size: 1.1rem; }
1352
- .aws-mobile-nav-item.active { color: #3b82f6; }
1353
- .aws-mobile-nav-item:hover { color: #94a3b8; }
1354
-
1355
- .aws-auth-overlay {
1356
- overflow-y: auto;
1357
- -webkit-overflow-scrolling: touch;
1358
- }
1359
-
1360
- .aws-auth-card { padding: 28px 20px; }
1361
- .aws-auth-title { font-size: 1.3rem; }
1362
- .aws-plans-grid { grid-template-columns: 1fr; }
1363
-
1364
- .aws-browser-nav { display: none; }
1365
- .aws-chat-suggestions { overflow-x: auto; flex-wrap: nowrap; padding-bottom: 4px; margin-bottom: 0; }
1366
-
1367
- .aws-result-actions { flex-direction: column; }
1368
- .aws-result-card { margin: 0 4px; }
1369
-
1370
- /* Agent messages: prevent overflow */
1371
- .aws-msg { max-width: 95%; word-break: break-word; }
1372
-
1373
- /* Chat input textarea on mobile */
1374
- .aws-chat-textarea { font-size: 16px; } /* Prevents zoom on iOS */
1375
- }
1376
-
1377
- /* ─── Mobile Nav (hidden on desktop) ───────────────────────────────── */
1378
- .aws-mobile-nav { display: none; }
1379
-
1380
- /* ─── Layout Variants ──────────────────────────────────────────────── */
1381
- .aws-workspace.layout-horizontal {
1382
- grid-template-columns: repeat(4, 1fr);
1383
- grid-template-rows: 1fr;
1384
- }
1385
-
1386
- .aws-workspace.layout-focus-browser {
1387
- grid-template-columns: 2fr 1fr;
1388
- grid-template-rows: 1fr 1fr;
1389
- }
1390
-
1391
- .aws-workspace.layout-focus-browser .aws-panel:first-child {
1392
- grid-row: 1 / -1;
1393
- }
1394
-
1395
- /* ─── Loading spinner ──────────────────────────────────────────────── */
1396
- .aws-spinner {
1397
- width: 20px;
1398
- height: 20px;
1399
- border: 2px solid #1e293b;
1400
- border-top-color: #3b82f6;
1401
- border-radius: 50%;
1402
- animation: spin 0.7s linear infinite;
1403
- display: inline-block;
1404
- }
1405
-
1406
- @keyframes spin { to { transform: rotate(360deg); } }
1407
-
1408
- /* ─── Notification toast ──────────────────────────────────────────── */
1409
- .aws-toast {
1410
- position: fixed;
1411
- top: 64px;
1412
- right: 16px;
1413
- z-index: 300;
1414
- padding: 12px 20px;
1415
- background: #1a2236;
1416
- border: 1px solid #1e293b;
1417
- border-radius: 10px;
1418
- font-size: 0.82rem;
1419
- color: #f0f4ff;
1420
- box-shadow: 0 8px 32px rgba(0,0,0,0.4);
1421
- transform: translateX(120%);
1422
- transition: transform 0.3s ease-out;
1423
- }
1424
-
1425
- .aws-toast.visible { transform: translateX(0); }
1426
- .aws-toast.success { border-color: rgba(16,185,129,0.4); }
1427
- .aws-toast.error { border-color: rgba(239,68,68,0.4); }
1428
- .aws-toast.info { border-color: rgba(59,130,246,0.4); }
1429
-
1430
- /* ─── Dark scrollbar global ──────────────────────────────────────── */
1431
- .aws-body ::-webkit-scrollbar { width: 4px; height: 4px; }
1432
- .aws-body ::-webkit-scrollbar-track { background: transparent; }
1433
- .aws-body ::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
1434
-
1435
- /* ═══ Dynamic Pricing Shield ═══════════════════════════════════════ */
1436
-
1437
- #priceShieldSection {
1438
- margin: 12px 0;
1439
- background: linear-gradient(135deg, rgba(139,92,246,0.08), rgba(59,130,246,0.06));
1440
- border: 1px solid rgba(139,92,246,0.2);
1441
- border-radius: 12px;
1442
- padding: 16px;
1443
- animation: shieldFadeIn 0.4s ease-out;
1444
- }
1445
-
1446
- @keyframes shieldFadeIn {
1447
- from { opacity: 0; transform: translateY(8px); }
1448
- to { opacity: 1; transform: translateY(0); }
1449
- }
1450
-
1451
- .aws-shield-header {
1452
- display: flex;
1453
- justify-content: space-between;
1454
- align-items: center;
1455
- margin-bottom: 12px;
1456
- }
1457
-
1458
- .aws-shield-title {
1459
- font-size: 0.95rem;
1460
- font-weight: 700;
1461
- color: #c4b5fd;
1462
- }
1463
-
1464
- .aws-shield-badge {
1465
- padding: 3px 10px;
1466
- border-radius: 20px;
1467
- font-size: 0.75rem;
1468
- font-weight: 700;
1469
- }
1470
-
1471
- .aws-shield-badge.shield-clean { background: rgba(16,185,129,0.2); color: #34d399; }
1472
- .aws-shield-badge.shield-minor { background: rgba(250,204,21,0.15); color: #fcd34d; }
1473
- .aws-shield-badge.shield-moderate { background: rgba(251,146,60,0.2); color: #fb923c; }
1474
- .aws-shield-badge.shield-significant { background: rgba(239,68,68,0.2); color: #f87171; }
1475
- .aws-shield-badge.shield-severe { background: rgba(220,38,38,0.3); color: #fca5a5; }
1476
-
1477
- .aws-shield-scanning {
1478
- font-size: 0.85rem;
1479
- color: #94a3b8;
1480
- animation: pulse 1.5s infinite;
1481
- }
1482
-
1483
- @keyframes pulse {
1484
- 0%, 100% { opacity: 1; }
1485
- 50% { opacity: 0.5; }
1486
- }
1487
-
1488
- .aws-shield-probe-item {
1489
- font-size: 0.8rem;
1490
- color: #64748b;
1491
- padding: 3px 0;
1492
- animation: probeSlideIn 0.3s ease-out;
1493
- }
1494
-
1495
- @keyframes probeSlideIn {
1496
- from { opacity: 0; transform: translateX(-8px); }
1497
- to { opacity: 1; transform: translateX(0); }
1498
- }
1499
-
1500
- .aws-shield-clean {
1501
- text-align: center;
1502
- padding: 12px;
1503
- font-size: 0.9rem;
1504
- color: #34d399;
1505
- }
1506
-
1507
- .aws-shield-alert {
1508
- display: flex;
1509
- flex-direction: column;
1510
- gap: 8px;
1511
- }
1512
-
1513
- .aws-shield-alert-title {
1514
- font-size: 0.95rem;
1515
- font-weight: 700;
1516
- color: #f87171;
1517
- }
1518
-
1519
- .aws-shield-score {
1520
- font-size: 0.85rem;
1521
- color: #e2e8f0;
1522
- }
1523
-
1524
- .aws-shield-spread {
1525
- font-size: 0.85rem;
1526
- color: #94a3b8;
1527
- }
1528
-
1529
- .aws-shield-best {
1530
- font-size: 0.9rem;
1531
- font-weight: 600;
1532
- color: #34d399;
1533
- }
1534
-
1535
- .aws-shield-savings {
1536
- font-size: 0.9rem;
1537
- font-weight: 700;
1538
- color: #fbbf24;
1539
- }
1540
-
1541
- .aws-shield-tips {
1542
- margin-top: 8px;
1543
- padding: 10px;
1544
- background: rgba(59,130,246,0.06);
1545
- border-radius: 8px;
1546
- border: 1px solid rgba(59,130,246,0.12);
1547
- }
1548
-
1549
- .aws-shield-tip {
1550
- font-size: 0.8rem;
1551
- color: #93c5fd;
1552
- padding: 3px 0;
1553
- }
1554
-
1555
- .aws-shield-types {
1556
- display: flex;
1557
- flex-wrap: wrap;
1558
- gap: 6px;
1559
- margin-top: 6px;
1560
- }
1561
-
1562
- .aws-shield-type-item {
1563
- display: inline-flex;
1564
- align-items: center;
1565
- gap: 5px;
1566
- padding: 3px 10px;
1567
- border-radius: 20px;
1568
- font-size: 0.75rem;
1569
- background: rgba(30,41,59,0.6);
1570
- border: 1px solid rgba(71,85,105,0.3);
1571
- }
1572
-
1573
- .aws-shield-type-item.severity-low { border-color: rgba(250,204,21,0.3); }
1574
- .aws-shield-type-item.severity-medium { border-color: rgba(251,146,60,0.3); }
1575
- .aws-shield-type-item.severity-high { border-color: rgba(239,68,68,0.3); }
1576
- .aws-shield-type-item.severity-critical { border-color: rgba(220,38,38,0.5); background: rgba(220,38,38,0.1); }
1577
-
1578
- .aws-shield-type-label {
1579
- color: #cbd5e1;
1580
- text-transform: capitalize;
1581
- }
1582
-
1583
- .aws-shield-type-severity {
1584
- color: #64748b;
1585
- font-size: 0.7rem;
1586
- text-transform: uppercase;
1587
- }
1588
-
1589
- .aws-shield-probes-table {
1590
- margin-top: 10px;
1591
- overflow-x: auto;
1592
- }
1593
-
1594
- .aws-shield-probes-table table {
1595
- width: 100%;
1596
- border-collapse: collapse;
1597
- font-size: 0.8rem;
1598
- }
1599
-
1600
- .aws-shield-probes-table th {
1601
- text-align: start;
1602
- color: #94a3b8;
1603
- font-weight: 600;
1604
- padding: 6px 8px;
1605
- border-bottom: 1px solid rgba(71,85,105,0.3);
1606
- }
1607
-
1608
- .aws-shield-probes-table td {
1609
- padding: 5px 8px;
1610
- color: #e2e8f0;
1611
- border-bottom: 1px solid rgba(30,41,59,0.5);
1612
- }
1613
-
1614
- .aws-shield-probes-table tr.probe-best td {
1615
- color: #34d399;
1616
- font-weight: 600;
1617
- }
1618
-
1619
- .aws-shield-probes-table tr.probe-worst td {
1620
- color: #f87171;
1621
- }
1622
-
1623
- /* ══════════════════════════════════════════════════════
1624
- Universal Agent Workspace Styles
1625
- ══════════════════════════════════════════════════════ */
1626
-
1627
- .aws-universal-header {
1628
- display: flex; align-items: center; justify-content: space-between;
1629
- padding: 10px 14px; background: linear-gradient(135deg, rgba(59,130,246,.12), rgba(139,92,246,.12));
1630
- border-radius: 10px 10px 0 0; font-weight: 700; font-size: 0.95rem;
1631
- border-bottom: 1px solid rgba(59,130,246,.2); margin-bottom: 10px;
1632
- }
1633
-
1634
- .aws-uni-badge {
1635
- display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px;
1636
- border-radius: 14px; font-size: 0.75rem; font-weight: 600; margin: 3px 4px 3px 0;
1637
- }
1638
- .aws-uni-badge.bridge { background: rgba(59,130,246,.15); color: #60a5fa; }
1639
- .aws-uni-badge.negotiate { background: rgba(34,197,94,.15); color: #4ade80; }
1640
- .aws-uni-badge.listed { background: rgba(168,85,247,.15); color: #c084fc; }
1641
- .aws-uni-badge.neutral { background: rgba(148,163,184,.1); color: #94a3b8; }
1642
- .aws-uni-badge.small { font-size: 0.65rem; padding: 2px 6px; }
1643
-
1644
- .aws-uni-fairness h4,
1645
- .aws-uni-products h4,
1646
- .aws-uni-dark h4,
1647
- .aws-uni-alerts h4,
1648
- .aws-uni-compare h4 {
1649
- font-size: 0.82rem; font-weight: 700; margin: 10px 0 6px;
1650
- color: #e2e8f0;
1651
- }
1652
-
1653
- .aws-uni-score-bar {
1654
- height: 8px; background: rgba(255,255,255,.06); border-radius: 4px; overflow: hidden; margin-bottom: 6px;
1655
- }
1656
- .aws-uni-score-fill { height: 100%; border-radius: 4px; transition: width .4s ease; }
1657
- .aws-uni-score-row { display: flex; justify-content: space-between; align-items: center; font-size: 0.9rem; }
1658
- .aws-uni-score-val { font-weight: 700; }
1659
- .aws-uni-score-cat { font-size: 0.8rem; }
1660
- .aws-uni-meta { font-size: 0.72rem; color: #94a3b8; margin-top: 3px; }
1661
- .aws-uni-meta.bridge-bonus { color: #60a5fa; }
1662
- .aws-uni-breakdown { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; font-size: 0.7rem; color: #94a3b8; }
1663
-
1664
- .aws-uni-product {
1665
- display: flex; justify-content: space-between; align-items: center;
1666
- padding: 6px 0; border-bottom: 1px solid rgba(255,255,255,.04);
1667
- font-size: 0.82rem;
1668
- }
1669
- .aws-uni-product:last-child { border-bottom: none; }
1670
- .aws-uni-product-name { flex: 1; margin-inline-end: 10px; line-height: 1.3; }
1671
- .aws-uni-product-details strong { color: #34d399; margin-inline-end: 6px; }
1672
- .aws-uni-product-details s { color: #64748b; margin-inline-end: 6px; font-size: 0.75rem; }
1673
-
1674
- .aws-uni-dark-item {
1675
- padding: 4px 0; font-size: 0.78rem; line-height: 1.4;
1676
- }
1677
- .aws-uni-dark-item.high { color: #f87171; }
1678
- .aws-uni-dark-item.medium { color: #fbbf24; }
1679
- .aws-uni-dark-item.low { color: #94a3b8; }
1680
-
1681
- .aws-uni-alert-item {
1682
- padding: 6px 8px; border-radius: 6px; margin-bottom: 4px; font-size: 0.78rem; line-height: 1.4;
1683
- }
1684
- .aws-uni-alert-item.high { background: rgba(239,68,68,.08); color: #f87171; }
1685
- .aws-uni-alert-item.medium { background: rgba(234,179,8,.08); color: #fbbf24; }
1686
-
1687
- .aws-uni-insight { font-size: 0.78rem; color: #94a3b8; padding: 3px 0; line-height: 1.4; }
1688
-
1689
- .aws-uni-deal {
1690
- padding: 8px 10px; border: 1px solid rgba(255,255,255,.06);
1691
- border-radius: 8px; margin-bottom: 6px;
1692
- }
1693
- .aws-uni-deal.best { border-color: rgba(34,197,94,.3); background: rgba(34,197,94,.04); }
1694
- .aws-uni-deal.wab-bridge { border-inline-start: 3px solid #3b82f6; }
1695
- .aws-uni-deal-header { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
1696
- .aws-uni-deal-source { font-weight: 600; font-size: 0.82rem; flex: 1; }
1697
- .aws-uni-deal-score { font-size: 0.78rem; font-weight: 700; color: #8b5cf6; }
1698
- .aws-uni-deal-name { font-size: 0.75rem; color: #94a3b8; margin-bottom: 4px; }
1699
- .aws-uni-deal-row { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; }
1700
- .aws-uni-fairness-chip {
1701
- font-size: 0.68rem; padding: 2px 6px; border-radius: 8px; font-weight: 600;
1702
- }
1703
- .aws-uni-fairness-chip.recommended { background: rgba(34,197,94,.15); color: #4ade80; }
1704
- .aws-uni-fairness-chip.caution { background: rgba(239,68,68,.15); color: #f87171; }
1705
- .aws-uni-deal-link {
1706
- display: inline-block; margin-top: 4px; font-size: 0.75rem;
1707
- color: #60a5fa; text-decoration: none;
1708
- }
1709
- .aws-uni-deal-link:hover { text-decoration: underline; }
1710
- .aws-uni-compare-summary {
1711
- text-align: center; font-size: 0.72rem; color: #64748b;
1712
- padding-top: 6px; border-top: 1px solid rgba(255,255,255,.06); margin-top: 4px;
1713
- }
1
+ /* ═══════════════════════════════════════════════════════════════════════
2
+ WAB Agent Workspace — 4-Panel Premium Layout
3
+ Responsive for all screens including mobile
4
+ ═══════════════════════════════════════════════════════════════════════ */
5
+
6
+ /* ─── Reset & Base ────────────────────────────────────────────────────── */
7
+ .aws-body {
8
+ margin: 0;
9
+ padding: 0;
10
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
11
+ background: #06080f;
12
+ color: #f0f4ff;
13
+ height: 100vh;
14
+ overflow: hidden;
15
+ direction: ltr;
16
+ -webkit-overflow-scrolling: touch;
17
+ }
18
+
19
+ .aws-body[dir="rtl"] { direction: rtl; }
20
+
21
+ /* ─── Top Bar ──────────────────────────────────────────────────────────── */
22
+ .aws-topbar {
23
+ height: 52px;
24
+ background: linear-gradient(90deg, #0a0e1a, #111827);
25
+ border-bottom: 1px solid #1e293b;
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ padding: 0 16px;
30
+ z-index: 100;
31
+ flex-shrink: 0;
32
+ }
33
+
34
+ .aws-topbar-left {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 12px;
38
+ }
39
+
40
+ .aws-logo {
41
+ width: 32px;
42
+ height: 32px;
43
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
44
+ border-radius: 8px;
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ font-size: 0.9rem;
49
+ font-weight: 800;
50
+ color: #fff;
51
+ }
52
+
53
+ .aws-topbar-title {
54
+ font-size: 0.95rem;
55
+ font-weight: 700;
56
+ letter-spacing: -0.02em;
57
+ }
58
+
59
+ .aws-topbar-title span {
60
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
61
+ -webkit-background-clip: text;
62
+ -webkit-text-fill-color: transparent;
63
+ background-clip: text;
64
+ }
65
+
66
+ .aws-topbar-center {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 8px;
70
+ }
71
+
72
+ .aws-layout-btn {
73
+ background: rgba(255,255,255,0.05);
74
+ border: 1px solid #1e293b;
75
+ color: #94a3b8;
76
+ padding: 6px 12px;
77
+ border-radius: 6px;
78
+ font-size: 0.8rem;
79
+ cursor: pointer;
80
+ transition: all 0.2s;
81
+ }
82
+
83
+ .aws-layout-btn:hover, .aws-layout-btn.active {
84
+ background: rgba(59,130,246,0.15);
85
+ border-color: #3b82f6;
86
+ color: #60a5fa;
87
+ }
88
+
89
+ .aws-topbar-right {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 10px;
93
+ }
94
+
95
+ .aws-user-badge {
96
+ display: flex;
97
+ align-items: center;
98
+ gap: 8px;
99
+ background: rgba(255,255,255,0.05);
100
+ padding: 4px 12px 4px 4px;
101
+ border-radius: 20px;
102
+ border: 1px solid #1e293b;
103
+ font-size: 0.82rem;
104
+ color: #94a3b8;
105
+ }
106
+
107
+ .aws-user-avatar {
108
+ width: 28px;
109
+ height: 28px;
110
+ border-radius: 50%;
111
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ font-size: 0.7rem;
116
+ font-weight: 700;
117
+ color: #fff;
118
+ }
119
+
120
+ .aws-tier-badge {
121
+ padding: 2px 8px;
122
+ border-radius: 12px;
123
+ font-size: 0.7rem;
124
+ font-weight: 700;
125
+ text-transform: uppercase;
126
+ letter-spacing: 0.05em;
127
+ }
128
+
129
+ .aws-tier-badge.premium { background: linear-gradient(135deg, #f59e0b, #ef4444); color: #fff; }
130
+ .aws-tier-badge.pro { background: linear-gradient(135deg, #8b5cf6, #ec4899); color: #fff; }
131
+ .aws-tier-badge.starter { background: linear-gradient(135deg, #06b6d4, #3b82f6); color: #fff; }
132
+
133
+ .aws-btn-icon {
134
+ background: none;
135
+ border: 1px solid #1e293b;
136
+ color: #94a3b8;
137
+ width: 34px;
138
+ height: 34px;
139
+ border-radius: 8px;
140
+ cursor: pointer;
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: center;
144
+ font-size: 1rem;
145
+ transition: all 0.2s;
146
+ }
147
+
148
+ .aws-btn-icon:hover { background: rgba(255,255,255,0.05); color: #f0f4ff; }
149
+
150
+ .aws-logout-btn {
151
+ background: none;
152
+ border: 1px solid rgba(239,68,68,0.3);
153
+ color: #ef4444;
154
+ padding: 6px 14px;
155
+ border-radius: 6px;
156
+ font-size: 0.8rem;
157
+ cursor: pointer;
158
+ font-weight: 600;
159
+ transition: all 0.2s;
160
+ }
161
+
162
+ .aws-logout-btn:hover { background: rgba(239,68,68,0.1); }
163
+
164
+ /* ─── Mobile Menu ──────────────────────────────────────────────────────── */
165
+ .aws-mobile-menu-btn {
166
+ display: none;
167
+ background: none;
168
+ border: 1px solid #1e293b;
169
+ color: #94a3b8;
170
+ width: 34px;
171
+ height: 34px;
172
+ border-radius: 8px;
173
+ cursor: pointer;
174
+ font-size: 1.2rem;
175
+ align-items: center;
176
+ justify-content: center;
177
+ }
178
+
179
+ /* ─── Workspace Grid (4-Panel) ─────────────────────────────────────────── */
180
+ .aws-workspace {
181
+ display: grid;
182
+ grid-template-columns: 1fr 1fr;
183
+ grid-template-rows: 1fr 1fr;
184
+ height: calc(100vh - 52px);
185
+ gap: 2px;
186
+ background: #0a0e1a;
187
+ }
188
+
189
+ /* Panel base */
190
+ .aws-panel {
191
+ background: #0f1629;
192
+ display: flex;
193
+ flex-direction: column;
194
+ overflow: hidden;
195
+ position: relative;
196
+ min-height: 0;
197
+ min-width: 0;
198
+ }
199
+
200
+ .aws-panel-header {
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: space-between;
204
+ padding: 8px 12px;
205
+ background: rgba(17, 24, 39, 0.9);
206
+ border-bottom: 1px solid #1e293b;
207
+ flex-shrink: 0;
208
+ min-height: 40px;
209
+ }
210
+
211
+ .aws-panel-header-left {
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 8px;
215
+ }
216
+
217
+ .aws-panel-icon {
218
+ width: 24px;
219
+ height: 24px;
220
+ border-radius: 6px;
221
+ display: flex;
222
+ align-items: center;
223
+ justify-content: center;
224
+ font-size: 0.75rem;
225
+ flex-shrink: 0;
226
+ }
227
+
228
+ .aws-panel-icon.browser { background: rgba(59,130,246,0.15); color: #60a5fa; }
229
+ .aws-panel-icon.chat { background: rgba(139,92,246,0.15); color: #a78bfa; }
230
+ .aws-panel-icon.monitor { background: rgba(245,158,11,0.15); color: #fbbf24; }
231
+ .aws-panel-icon.results { background: rgba(16,185,129,0.15); color: #34d399; }
232
+
233
+ .aws-panel-title {
234
+ font-size: 0.8rem;
235
+ font-weight: 700;
236
+ letter-spacing: -0.01em;
237
+ }
238
+
239
+ .aws-panel-status {
240
+ font-size: 0.65rem;
241
+ padding: 2px 8px;
242
+ border-radius: 10px;
243
+ font-weight: 600;
244
+ }
245
+
246
+ .aws-panel-status.active { background: rgba(16,185,129,0.15); color: #34d399; }
247
+ .aws-panel-status.idle { background: rgba(148,163,184,0.1); color: #64748b; }
248
+ .aws-panel-status.working { background: rgba(245,158,11,0.15); color: #fbbf24; }
249
+
250
+ .aws-panel-actions {
251
+ display: flex;
252
+ gap: 4px;
253
+ }
254
+
255
+ .aws-panel-action-btn {
256
+ background: none;
257
+ border: none;
258
+ color: #475569;
259
+ cursor: pointer;
260
+ padding: 4px;
261
+ border-radius: 4px;
262
+ font-size: 0.8rem;
263
+ transition: all 0.15s;
264
+ }
265
+
266
+ .aws-panel-action-btn:hover { color: #94a3b8; background: rgba(255,255,255,0.05); }
267
+
268
+ .aws-panel-body {
269
+ flex: 1;
270
+ overflow: hidden;
271
+ position: relative;
272
+ display: flex;
273
+ flex-direction: column;
274
+ min-height: 0;
275
+ }
276
+
277
+ /* ─── Panel 1: Browser ──────────────────────────────────────────────── */
278
+ .aws-browser-bar {
279
+ display: flex;
280
+ align-items: center;
281
+ gap: 8px;
282
+ padding: 6px 10px;
283
+ background: #111827;
284
+ border-bottom: 1px solid #1e293b;
285
+ flex-shrink: 0;
286
+ }
287
+
288
+ .aws-browser-nav {
289
+ display: flex;
290
+ gap: 4px;
291
+ }
292
+
293
+ .aws-browser-nav button {
294
+ background: none;
295
+ border: 1px solid #1e293b;
296
+ color: #64748b;
297
+ width: 28px;
298
+ height: 28px;
299
+ border-radius: 6px;
300
+ cursor: pointer;
301
+ font-size: 0.85rem;
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ transition: all 0.15s;
306
+ }
307
+
308
+ .aws-browser-nav button:hover { color: #94a3b8; background: rgba(255,255,255,0.05); }
309
+
310
+ .aws-url-bar {
311
+ flex: 1;
312
+ display: flex;
313
+ align-items: center;
314
+ gap: 8px;
315
+ background: #0a0e1a;
316
+ border: 1px solid #1e293b;
317
+ border-radius: 8px;
318
+ padding: 0 10px;
319
+ height: 32px;
320
+ }
321
+
322
+ .aws-url-lock { color: #10b981; font-size: 0.75rem; flex-shrink: 0; }
323
+
324
+ .aws-url-input {
325
+ flex: 1;
326
+ background: none;
327
+ border: none;
328
+ color: #94a3b8;
329
+ font-size: 0.8rem;
330
+ font-family: inherit;
331
+ outline: none;
332
+ }
333
+
334
+ .aws-url-input::placeholder { color: #475569; }
335
+
336
+ .aws-browser-frame {
337
+ flex: 1;
338
+ border: none;
339
+ background: #fff;
340
+ width: 100%;
341
+ }
342
+
343
+ .aws-browser-empty {
344
+ flex: 1;
345
+ display: flex;
346
+ flex-direction: column;
347
+ align-items: center;
348
+ justify-content: center;
349
+ color: #475569;
350
+ gap: 16px;
351
+ padding: 20px;
352
+ text-align: center;
353
+ }
354
+
355
+ .aws-browser-empty-icon {
356
+ font-size: 3rem;
357
+ opacity: 0.4;
358
+ }
359
+
360
+ .aws-browser-empty p {
361
+ font-size: 0.85rem;
362
+ max-width: 280px;
363
+ line-height: 1.5;
364
+ }
365
+
366
+ /* ─── Panel 2: Chat ──────────────────────────────────────────────────── */
367
+ .aws-chat-messages {
368
+ flex: 1;
369
+ overflow-y: auto;
370
+ padding: 12px;
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: 10px;
374
+ scroll-behavior: smooth;
375
+ min-height: 0;
376
+ -webkit-overflow-scrolling: touch;
377
+ }
378
+
379
+ .aws-chat-messages::-webkit-scrollbar { width: 4px; }
380
+ .aws-chat-messages::-webkit-scrollbar-track { background: transparent; }
381
+ .aws-chat-messages::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
382
+
383
+ .aws-msg {
384
+ max-width: 88%;
385
+ padding: 10px 14px;
386
+ border-radius: 14px;
387
+ font-size: 0.85rem;
388
+ line-height: 1.55;
389
+ word-break: break-word;
390
+ animation: msgSlide 0.25s ease-out;
391
+ }
392
+
393
+ @keyframes msgSlide {
394
+ from { opacity: 0; transform: translateY(8px); }
395
+ to { opacity: 1; transform: translateY(0); }
396
+ }
397
+
398
+ .aws-msg.user {
399
+ align-self: flex-end;
400
+ background: linear-gradient(135deg, #3b82f6, #2563eb);
401
+ color: #fff;
402
+ border-bottom-right-radius: 4px;
403
+ }
404
+
405
+ .aws-msg.agent {
406
+ align-self: flex-start;
407
+ background: #1a2236;
408
+ color: #e2e8f0;
409
+ border: 1px solid #1e293b;
410
+ border-bottom-left-radius: 4px;
411
+ }
412
+
413
+ .aws-msg.system {
414
+ align-self: center;
415
+ background: rgba(245,158,11,0.1);
416
+ color: #fbbf24;
417
+ border: 1px solid rgba(245,158,11,0.2);
418
+ font-size: 0.78rem;
419
+ text-align: center;
420
+ max-width: 95%;
421
+ }
422
+
423
+ .aws-msg-time {
424
+ font-size: 0.65rem;
425
+ color: rgba(255,255,255,0.4);
426
+ margin-top: 4px;
427
+ display: block;
428
+ }
429
+
430
+ .aws-msg.agent .aws-msg-time { color: #475569; }
431
+
432
+ .aws-typing-indicator {
433
+ display: none;
434
+ align-self: flex-start;
435
+ padding: 10px 16px;
436
+ background: #1a2236;
437
+ border: 1px solid #1e293b;
438
+ border-radius: 14px;
439
+ border-bottom-left-radius: 4px;
440
+ }
441
+
442
+ .aws-typing-indicator.visible { display: flex; gap: 4px; }
443
+
444
+ .aws-typing-dot {
445
+ width: 6px;
446
+ height: 6px;
447
+ background: #475569;
448
+ border-radius: 50%;
449
+ animation: typingBounce 1.4s infinite;
450
+ }
451
+
452
+ .aws-typing-dot:nth-child(2) { animation-delay: 0.2s; }
453
+ .aws-typing-dot:nth-child(3) { animation-delay: 0.4s; }
454
+
455
+ @keyframes typingBounce {
456
+ 0%, 60%, 100% { transform: translateY(0); }
457
+ 30% { transform: translateY(-6px); }
458
+ }
459
+
460
+ .aws-chat-input-area {
461
+ padding: 10px 12px;
462
+ border-top: 1px solid #1e293b;
463
+ background: #111827;
464
+ flex-shrink: 0;
465
+ }
466
+
467
+ .aws-chat-input-row {
468
+ display: flex;
469
+ align-items: flex-end;
470
+ gap: 8px;
471
+ }
472
+
473
+ .aws-chat-textarea {
474
+ flex: 1;
475
+ background: #0a0e1a;
476
+ border: 1px solid #1e293b;
477
+ border-radius: 12px;
478
+ padding: 10px 14px;
479
+ color: #f0f4ff;
480
+ font-family: inherit;
481
+ font-size: 0.85rem;
482
+ line-height: 1.4;
483
+ resize: none;
484
+ outline: none;
485
+ max-height: 120px;
486
+ min-height: 42px;
487
+ transition: border-color 0.2s;
488
+ }
489
+
490
+ .aws-chat-textarea:focus { border-color: #3b82f6; }
491
+ .aws-chat-textarea::placeholder { color: #475569; }
492
+
493
+ .aws-chat-send {
494
+ width: 42px;
495
+ height: 42px;
496
+ border-radius: 50%;
497
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
498
+ border: none;
499
+ color: #fff;
500
+ cursor: pointer;
501
+ display: flex;
502
+ align-items: center;
503
+ justify-content: center;
504
+ font-size: 1.1rem;
505
+ flex-shrink: 0;
506
+ transition: all 0.2s;
507
+ }
508
+
509
+ .aws-chat-send:hover { transform: scale(1.05); box-shadow: 0 4px 16px rgba(59,130,246,0.3); }
510
+ .aws-chat-send:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
511
+
512
+ .aws-chat-suggestions {
513
+ display: flex;
514
+ gap: 6px;
515
+ flex-wrap: wrap;
516
+ margin-top: 8px;
517
+ }
518
+
519
+ .aws-suggestion-chip {
520
+ padding: 5px 12px;
521
+ background: rgba(59,130,246,0.08);
522
+ border: 1px solid rgba(59,130,246,0.2);
523
+ border-radius: 16px;
524
+ color: #60a5fa;
525
+ font-size: 0.75rem;
526
+ cursor: pointer;
527
+ transition: all 0.15s;
528
+ white-space: nowrap;
529
+ }
530
+
531
+ .aws-suggestion-chip:hover {
532
+ background: rgba(59,130,246,0.15);
533
+ border-color: #3b82f6;
534
+ }
535
+
536
+ /* ─── Panel 3: Negotiation Monitor ────────────────────────────────────── */
537
+ .aws-monitor-content {
538
+ flex: 1;
539
+ overflow-y: auto;
540
+ padding: 12px;
541
+ min-height: 0;
542
+ -webkit-overflow-scrolling: touch;
543
+ }
544
+
545
+ .aws-monitor-content::-webkit-scrollbar { width: 4px; }
546
+ .aws-monitor-content::-webkit-scrollbar-track { background: transparent; }
547
+ .aws-monitor-content::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
548
+
549
+ .aws-monitor-empty {
550
+ display: flex;
551
+ flex-direction: column;
552
+ align-items: center;
553
+ justify-content: center;
554
+ height: 100%;
555
+ color: #475569;
556
+ gap: 12px;
557
+ text-align: center;
558
+ padding: 20px;
559
+ }
560
+
561
+ .aws-monitor-empty-icon { font-size: 2.5rem; opacity: 0.4; }
562
+ .aws-monitor-empty p { font-size: 0.82rem; max-width: 240px; line-height: 1.5; }
563
+
564
+ /* Progress steps */
565
+ .aws-progress-steps {
566
+ display: flex;
567
+ flex-direction: column;
568
+ gap: 4px;
569
+ margin-bottom: 16px;
570
+ }
571
+
572
+ .aws-progress-step {
573
+ display: flex;
574
+ align-items: center;
575
+ gap: 10px;
576
+ padding: 8px 10px;
577
+ border-radius: 8px;
578
+ font-size: 0.8rem;
579
+ transition: all 0.3s;
580
+ }
581
+
582
+ .aws-progress-step.active {
583
+ background: rgba(245,158,11,0.08);
584
+ border: 1px solid rgba(245,158,11,0.2);
585
+ }
586
+
587
+ .aws-progress-step.completed {
588
+ background: rgba(16,185,129,0.06);
589
+ }
590
+
591
+ .aws-progress-step.pending { color: #475569; }
592
+
593
+ .aws-step-icon {
594
+ width: 22px;
595
+ height: 22px;
596
+ border-radius: 50%;
597
+ display: flex;
598
+ align-items: center;
599
+ justify-content: center;
600
+ font-size: 0.65rem;
601
+ flex-shrink: 0;
602
+ }
603
+
604
+ .aws-step-icon.active { background: rgba(245,158,11,0.2); color: #fbbf24; }
605
+ .aws-step-icon.completed { background: rgba(16,185,129,0.2); color: #34d399; }
606
+ .aws-step-icon.pending { background: rgba(148,163,184,0.1); color: #475569; }
607
+
608
+ /* Agent cards in monitor */
609
+ .aws-agent-card {
610
+ background: rgba(26,34,54,0.6);
611
+ border: 1px solid #1e293b;
612
+ border-radius: 10px;
613
+ padding: 10px 12px;
614
+ margin-bottom: 8px;
615
+ animation: msgSlide 0.3s ease-out;
616
+ }
617
+
618
+ .aws-agent-card-header {
619
+ display: flex;
620
+ align-items: center;
621
+ justify-content: space-between;
622
+ margin-bottom: 8px;
623
+ }
624
+
625
+ .aws-agent-name {
626
+ display: flex;
627
+ align-items: center;
628
+ gap: 6px;
629
+ font-size: 0.78rem;
630
+ font-weight: 600;
631
+ }
632
+
633
+ .aws-agent-name .dot {
634
+ width: 6px;
635
+ height: 6px;
636
+ border-radius: 50%;
637
+ }
638
+
639
+ .aws-agent-name .dot.searching { background: #fbbf24; animation: pulse 1.5s infinite; }
640
+ .aws-agent-name .dot.negotiating { background: #f59e0b; animation: pulse 1s infinite; }
641
+ .aws-agent-name .dot.done { background: #10b981; }
642
+ .aws-agent-name .dot.failed { background: #ef4444; }
643
+
644
+ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
645
+
646
+ .aws-agent-progress {
647
+ width: 100%;
648
+ height: 3px;
649
+ background: #1e293b;
650
+ border-radius: 3px;
651
+ overflow: hidden;
652
+ margin: 6px 0;
653
+ }
654
+
655
+ .aws-agent-progress-bar {
656
+ height: 100%;
657
+ border-radius: 3px;
658
+ transition: width 0.5s ease-out;
659
+ background: linear-gradient(90deg, #3b82f6, #8b5cf6);
660
+ }
661
+
662
+ .aws-agent-finding {
663
+ font-size: 0.75rem;
664
+ color: #94a3b8;
665
+ padding: 4px 0;
666
+ border-bottom: 1px solid rgba(30,41,59,0.5);
667
+ }
668
+
669
+ .aws-agent-finding:last-child { border-bottom: none; }
670
+
671
+ .aws-agent-finding .price {
672
+ color: #10b981;
673
+ font-weight: 700;
674
+ }
675
+
676
+ .aws-agent-finding .savings {
677
+ color: #fbbf24;
678
+ font-weight: 600;
679
+ font-size: 0.7rem;
680
+ }
681
+
682
+ /* Negotiation rounds */
683
+ .aws-neg-round {
684
+ background: rgba(139,92,246,0.05);
685
+ border: 1px solid rgba(139,92,246,0.15);
686
+ border-radius: 8px;
687
+ padding: 8px 10px;
688
+ margin-bottom: 6px;
689
+ font-size: 0.78rem;
690
+ animation: msgSlide 0.25s ease-out;
691
+ }
692
+
693
+ .aws-neg-round-header {
694
+ display: flex;
695
+ align-items: center;
696
+ justify-content: space-between;
697
+ font-weight: 600;
698
+ color: #a78bfa;
699
+ margin-bottom: 4px;
700
+ font-size: 0.72rem;
701
+ }
702
+
703
+ .aws-neg-round-body { color: #94a3b8; line-height: 1.5; }
704
+
705
+ /* ─── Panel 4: Results ────────────────────────────────────────────────── */
706
+ .aws-results-content {
707
+ flex: 1;
708
+ overflow-y: auto;
709
+ padding: 12px;
710
+ min-height: 0;
711
+ -webkit-overflow-scrolling: touch;
712
+ }
713
+
714
+ .aws-results-content::-webkit-scrollbar { width: 4px; }
715
+ .aws-results-content::-webkit-scrollbar-track { background: transparent; }
716
+ .aws-results-content::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
717
+
718
+ .aws-results-empty {
719
+ display: flex;
720
+ flex-direction: column;
721
+ align-items: center;
722
+ justify-content: center;
723
+ height: 100%;
724
+ color: #475569;
725
+ gap: 12px;
726
+ text-align: center;
727
+ padding: 20px;
728
+ }
729
+
730
+ .aws-results-empty-icon { font-size: 2.5rem; opacity: 0.4; }
731
+ .aws-results-empty p { font-size: 0.82rem; max-width: 260px; line-height: 1.5; }
732
+
733
+ /* Result cards */
734
+ .aws-result-card {
735
+ background: #1a2236;
736
+ border: 1px solid #1e293b;
737
+ border-radius: 12px;
738
+ padding: 14px;
739
+ margin-bottom: 10px;
740
+ transition: all 0.2s;
741
+ animation: msgSlide 0.3s ease-out;
742
+ }
743
+
744
+ .aws-result-card:hover {
745
+ border-color: #334155;
746
+ background: #1f2a42;
747
+ }
748
+
749
+ .aws-result-card.recommended {
750
+ border-color: rgba(16,185,129,0.4);
751
+ box-shadow: 0 0 20px rgba(16,185,129,0.05);
752
+ }
753
+
754
+ .aws-result-badge {
755
+ display: inline-block;
756
+ padding: 2px 8px;
757
+ border-radius: 10px;
758
+ font-size: 0.65rem;
759
+ font-weight: 700;
760
+ text-transform: uppercase;
761
+ margin-bottom: 8px;
762
+ }
763
+
764
+ .aws-result-badge.best { background: rgba(16,185,129,0.15); color: #34d399; }
765
+ .aws-result-badge.savings { background: rgba(245,158,11,0.15); color: #fbbf24; }
766
+
767
+ .aws-result-title {
768
+ font-size: 0.9rem;
769
+ font-weight: 700;
770
+ margin-bottom: 6px;
771
+ display: flex;
772
+ align-items: center;
773
+ gap: 6px;
774
+ }
775
+
776
+ .aws-result-source {
777
+ font-size: 0.7rem;
778
+ color: #64748b;
779
+ font-weight: 400;
780
+ }
781
+
782
+ .aws-result-prices {
783
+ display: flex;
784
+ align-items: baseline;
785
+ gap: 10px;
786
+ margin: 8px 0;
787
+ }
788
+
789
+ .aws-result-original {
790
+ color: #64748b;
791
+ text-decoration: line-through;
792
+ font-size: 0.82rem;
793
+ }
794
+
795
+ .aws-result-final {
796
+ color: #10b981;
797
+ font-size: 1.2rem;
798
+ font-weight: 800;
799
+ }
800
+
801
+ .aws-result-savings-tag {
802
+ padding: 2px 8px;
803
+ background: rgba(16,185,129,0.12);
804
+ border-radius: 6px;
805
+ color: #34d399;
806
+ font-size: 0.72rem;
807
+ font-weight: 700;
808
+ }
809
+
810
+ .aws-result-rating {
811
+ font-size: 0.78rem;
812
+ color: #fbbf24;
813
+ margin: 4px 0;
814
+ }
815
+
816
+ .aws-result-total {
817
+ font-size: 0.75rem;
818
+ color: #94a3b8;
819
+ font-weight: 500;
820
+ }
821
+
822
+ .aws-result-details {
823
+ display: flex;
824
+ flex-wrap: wrap;
825
+ gap: 6px;
826
+ margin: 8px 0;
827
+ }
828
+
829
+ .aws-result-detail {
830
+ font-size: 0.72rem;
831
+ color: #94a3b8;
832
+ padding: 3px 8px;
833
+ background: rgba(148,163,184,0.06);
834
+ border-radius: 6px;
835
+ }
836
+
837
+ .aws-result-actions {
838
+ display: flex;
839
+ gap: 8px;
840
+ margin-top: 10px;
841
+ }
842
+
843
+ .aws-result-btn {
844
+ flex: 1;
845
+ padding: 8px 14px;
846
+ border-radius: 8px;
847
+ font-size: 0.8rem;
848
+ font-weight: 600;
849
+ font-family: inherit;
850
+ cursor: pointer;
851
+ border: none;
852
+ transition: all 0.2s;
853
+ text-align: center;
854
+ text-decoration: none;
855
+ display: flex;
856
+ align-items: center;
857
+ justify-content: center;
858
+ gap: 6px;
859
+ }
860
+
861
+ .aws-result-btn.primary {
862
+ background: linear-gradient(135deg, #3b82f6, #2563eb);
863
+ color: #fff;
864
+ }
865
+
866
+ .aws-result-btn.primary:hover { box-shadow: 0 4px 16px rgba(59,130,246,0.3); }
867
+
868
+ .aws-result-btn.secondary {
869
+ background: rgba(148,163,184,0.08);
870
+ color: #94a3b8;
871
+ border: 1px solid #1e293b;
872
+ }
873
+
874
+ .aws-result-btn.secondary:hover { background: rgba(148,163,184,0.12); color: #f0f4ff; }
875
+
876
+ .aws-result-btn.agent-do {
877
+ background: linear-gradient(135deg, #8b5cf6, #7c3aed);
878
+ color: #fff;
879
+ }
880
+
881
+ .aws-result-btn.agent-do:hover { box-shadow: 0 4px 16px rgba(139,92,246,0.3); }
882
+
883
+ /* Login request card */
884
+ .aws-login-request {
885
+ background: rgba(245,158,11,0.06);
886
+ border: 1px solid rgba(245,158,11,0.2);
887
+ border-radius: 10px;
888
+ padding: 14px;
889
+ margin-bottom: 10px;
890
+ }
891
+
892
+ .aws-login-request h4 {
893
+ font-size: 0.85rem;
894
+ color: #fbbf24;
895
+ margin-bottom: 8px;
896
+ display: flex;
897
+ align-items: center;
898
+ gap: 6px;
899
+ }
900
+
901
+ .aws-login-request p {
902
+ font-size: 0.78rem;
903
+ color: #94a3b8;
904
+ margin-bottom: 10px;
905
+ line-height: 1.5;
906
+ }
907
+
908
+ .aws-login-options {
909
+ display: flex;
910
+ flex-direction: column;
911
+ gap: 6px;
912
+ }
913
+
914
+ .aws-login-option-btn {
915
+ padding: 8px 12px;
916
+ border-radius: 8px;
917
+ font-size: 0.8rem;
918
+ font-weight: 600;
919
+ font-family: inherit;
920
+ cursor: pointer;
921
+ border: 1px solid #1e293b;
922
+ background: #1a2236;
923
+ color: #f0f4ff;
924
+ text-align: left;
925
+ transition: all 0.2s;
926
+ }
927
+
928
+ .aws-login-option-btn:hover { background: #1f2a42; border-color: #334155; }
929
+
930
+ .aws-login-option-btn.agent-login {
931
+ border-color: rgba(139,92,246,0.3);
932
+ }
933
+
934
+ .aws-login-option-btn.manual-login {
935
+ border-color: rgba(59,130,246,0.3);
936
+ }
937
+
938
+ /* Tips section */
939
+ .aws-tips-section {
940
+ background: rgba(6,182,212,0.06);
941
+ border: 1px solid rgba(6,182,212,0.15);
942
+ border-radius: 10px;
943
+ padding: 12px;
944
+ margin-top: 12px;
945
+ }
946
+
947
+ .aws-tips-section h4 {
948
+ font-size: 0.82rem;
949
+ color: #22d3ee;
950
+ margin-bottom: 8px;
951
+ display: flex;
952
+ align-items: center;
953
+ gap: 6px;
954
+ }
955
+
956
+ .aws-tip-item {
957
+ font-size: 0.75rem;
958
+ color: #94a3b8;
959
+ padding: 4px 0;
960
+ line-height: 1.5;
961
+ display: flex;
962
+ gap: 6px;
963
+ }
964
+
965
+ .aws-tip-item::before {
966
+ content: "💡";
967
+ flex-shrink: 0;
968
+ font-size: 0.7rem;
969
+ }
970
+
971
+ /* Summary bar */
972
+ .aws-results-summary {
973
+ padding: 10px 12px;
974
+ background: #111827;
975
+ border-top: 1px solid #1e293b;
976
+ flex-shrink: 0;
977
+ display: flex;
978
+ align-items: center;
979
+ justify-content: space-between;
980
+ font-size: 0.78rem;
981
+ }
982
+
983
+ .aws-summary-stat {
984
+ display: flex;
985
+ align-items: center;
986
+ gap: 6px;
987
+ color: #94a3b8;
988
+ }
989
+
990
+ .aws-summary-stat .value {
991
+ font-weight: 700;
992
+ color: #10b981;
993
+ }
994
+
995
+ /* ─── Auth/Subscription Overlay ──────────────────────────────────────── */
996
+ .aws-auth-overlay {
997
+ position: fixed;
998
+ top: 0;
999
+ left: 0;
1000
+ right: 0;
1001
+ bottom: 0;
1002
+ background: rgba(6,8,15,0.95);
1003
+ z-index: 200;
1004
+ display: flex;
1005
+ align-items: center;
1006
+ justify-content: center;
1007
+ padding: 20px;
1008
+ }
1009
+
1010
+ .aws-auth-overlay.hidden { display: none; }
1011
+
1012
+ .aws-auth-card {
1013
+ background: #111827;
1014
+ border: 1px solid #1e293b;
1015
+ border-radius: 20px;
1016
+ padding: 40px;
1017
+ width: 100%;
1018
+ max-width: 440px;
1019
+ text-align: center;
1020
+ animation: authSlide 0.3s ease-out;
1021
+ }
1022
+
1023
+ @keyframes authSlide {
1024
+ from { opacity: 0; transform: translateY(20px) scale(0.97); }
1025
+ to { opacity: 1; transform: translateY(0) scale(1); }
1026
+ }
1027
+
1028
+ .aws-auth-logo {
1029
+ width: 56px;
1030
+ height: 56px;
1031
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
1032
+ border-radius: 16px;
1033
+ display: flex;
1034
+ align-items: center;
1035
+ justify-content: center;
1036
+ font-size: 1.5rem;
1037
+ margin: 0 auto 20px;
1038
+ color: #fff;
1039
+ font-weight: 800;
1040
+ }
1041
+
1042
+ .aws-auth-title {
1043
+ font-size: 1.5rem;
1044
+ font-weight: 800;
1045
+ margin-bottom: 8px;
1046
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
1047
+ -webkit-background-clip: text;
1048
+ -webkit-text-fill-color: transparent;
1049
+ background-clip: text;
1050
+ }
1051
+
1052
+ .aws-auth-subtitle {
1053
+ font-size: 0.85rem;
1054
+ color: #94a3b8;
1055
+ margin-bottom: 28px;
1056
+ line-height: 1.5;
1057
+ }
1058
+
1059
+ .aws-auth-form {
1060
+ display: flex;
1061
+ flex-direction: column;
1062
+ gap: 12px;
1063
+ text-align: left;
1064
+ }
1065
+
1066
+ .aws-auth-form label {
1067
+ font-size: 0.8rem;
1068
+ color: #94a3b8;
1069
+ font-weight: 600;
1070
+ margin-bottom: -6px;
1071
+ }
1072
+
1073
+ .aws-auth-input {
1074
+ width: 100%;
1075
+ padding: 12px 14px;
1076
+ background: #0a0e1a;
1077
+ border: 1px solid #1e293b;
1078
+ border-radius: 10px;
1079
+ color: #f0f4ff;
1080
+ font-family: inherit;
1081
+ font-size: 0.9rem;
1082
+ outline: none;
1083
+ transition: border-color 0.2s;
1084
+ }
1085
+
1086
+ .aws-auth-input:focus { border-color: #3b82f6; }
1087
+
1088
+ .aws-auth-submit {
1089
+ width: 100%;
1090
+ padding: 14px;
1091
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
1092
+ border: none;
1093
+ border-radius: 10px;
1094
+ color: #fff;
1095
+ font-family: inherit;
1096
+ font-size: 0.95rem;
1097
+ font-weight: 700;
1098
+ cursor: pointer;
1099
+ margin-top: 8px;
1100
+ transition: all 0.2s;
1101
+ }
1102
+
1103
+ .aws-auth-submit:hover {
1104
+ box-shadow: 0 6px 24px rgba(59,130,246,0.3);
1105
+ transform: translateY(-1px);
1106
+ }
1107
+
1108
+ .aws-auth-submit:disabled {
1109
+ opacity: 0.5;
1110
+ cursor: not-allowed;
1111
+ transform: none;
1112
+ }
1113
+
1114
+ .aws-auth-switch {
1115
+ margin-top: 16px;
1116
+ font-size: 0.82rem;
1117
+ color: #64748b;
1118
+ }
1119
+
1120
+ .aws-auth-switch a {
1121
+ color: #60a5fa;
1122
+ cursor: pointer;
1123
+ font-weight: 600;
1124
+ }
1125
+
1126
+ .aws-auth-switch a:hover { text-decoration: underline; }
1127
+
1128
+ .aws-auth-error {
1129
+ color: #ef4444;
1130
+ font-size: 0.8rem;
1131
+ text-align: center;
1132
+ padding: 8px;
1133
+ background: rgba(239,68,68,0.08);
1134
+ border-radius: 8px;
1135
+ display: none;
1136
+ }
1137
+
1138
+ .aws-auth-error.visible { display: block; }
1139
+
1140
+ /* ─── Subscription Plans ─────────────────────────────────────────────── */
1141
+ .aws-plans-grid {
1142
+ display: grid;
1143
+ grid-template-columns: repeat(3, 1fr);
1144
+ gap: 12px;
1145
+ margin-top: 20px;
1146
+ }
1147
+
1148
+ .aws-plan-card {
1149
+ background: #0f1629;
1150
+ border: 1px solid #1e293b;
1151
+ border-radius: 14px;
1152
+ padding: 20px 16px;
1153
+ text-align: center;
1154
+ transition: all 0.2s;
1155
+ cursor: pointer;
1156
+ }
1157
+
1158
+ .aws-plan-card:hover { border-color: #334155; }
1159
+
1160
+ .aws-plan-card.recommended {
1161
+ border-color: #3b82f6;
1162
+ box-shadow: 0 0 20px rgba(59,130,246,0.1);
1163
+ }
1164
+
1165
+ .aws-plan-name {
1166
+ font-size: 0.85rem;
1167
+ font-weight: 700;
1168
+ margin-bottom: 6px;
1169
+ }
1170
+
1171
+ .aws-plan-price {
1172
+ font-size: 1.6rem;
1173
+ font-weight: 800;
1174
+ color: #f0f4ff;
1175
+ margin-bottom: 4px;
1176
+ }
1177
+
1178
+ .aws-plan-price span { font-size: 0.75rem; color: #64748b; font-weight: 400; }
1179
+
1180
+ .aws-plan-features {
1181
+ list-style: none;
1182
+ padding: 0;
1183
+ margin: 12px 0 0;
1184
+ font-size: 0.72rem;
1185
+ color: #94a3b8;
1186
+ text-align: left;
1187
+ }
1188
+
1189
+ .aws-plan-features li {
1190
+ padding: 3px 0;
1191
+ display: flex;
1192
+ align-items: center;
1193
+ gap: 6px;
1194
+ }
1195
+
1196
+ .aws-plan-features li::before { content: "✓"; color: #10b981; font-weight: 700; }
1197
+
1198
+ /* ─── Responsive — Tablet ──────────────────────────────────────────── */
1199
+ @media (max-width: 1024px) {
1200
+ .aws-topbar-center { display: none; }
1201
+
1202
+ .aws-body {
1203
+ overflow-y: auto;
1204
+ height: auto;
1205
+ min-height: 100vh;
1206
+ }
1207
+
1208
+ .aws-workspace {
1209
+ grid-template-columns: 1fr;
1210
+ grid-template-rows: auto;
1211
+ height: auto;
1212
+ min-height: calc(100vh - 52px);
1213
+ }
1214
+
1215
+ .aws-panel {
1216
+ min-height: 50vh;
1217
+ overflow: visible;
1218
+ }
1219
+
1220
+ .aws-panel-body {
1221
+ min-height: 300px;
1222
+ }
1223
+
1224
+ .aws-plans-grid { grid-template-columns: 1fr; }
1225
+ }
1226
+
1227
+ /* ─── Responsive — Mobile ─────────────────────────────────────────── */
1228
+ @media (max-width: 768px) {
1229
+ .aws-body {
1230
+ overflow-y: auto;
1231
+ overflow-x: hidden;
1232
+ height: auto;
1233
+ min-height: 100vh;
1234
+ -webkit-overflow-scrolling: touch;
1235
+ }
1236
+
1237
+ .aws-topbar {
1238
+ padding: 0 10px;
1239
+ height: 48px;
1240
+ position: sticky;
1241
+ top: 0;
1242
+ z-index: 101;
1243
+ }
1244
+
1245
+ .aws-topbar-title { font-size: 0.85rem; }
1246
+ .aws-topbar-center { display: none; }
1247
+ .aws-user-badge { display: none; }
1248
+ .aws-tier-badge { display: none; }
1249
+ .aws-logout-btn { display: none; }
1250
+ .aws-mobile-menu-btn { display: flex; }
1251
+
1252
+ .aws-workspace {
1253
+ grid-template-columns: 1fr;
1254
+ grid-template-rows: none;
1255
+ height: auto;
1256
+ min-height: calc(100vh - 48px - 56px);
1257
+ }
1258
+
1259
+ .aws-panel {
1260
+ display: none;
1261
+ min-height: calc(100vh - 48px - 56px);
1262
+ max-height: none;
1263
+ overflow-y: auto;
1264
+ -webkit-overflow-scrolling: touch;
1265
+ padding-bottom: 0;
1266
+ }
1267
+
1268
+ .aws-panel.active-mobile {
1269
+ display: flex;
1270
+ flex-direction: column;
1271
+ }
1272
+
1273
+ /* Chat panel: scrollable messages, sticky input at bottom */
1274
+ .aws-panel.active-mobile .aws-panel-body {
1275
+ flex: 1;
1276
+ display: flex;
1277
+ flex-direction: column;
1278
+ overflow: hidden;
1279
+ min-height: calc(100vh - 48px - 56px - 40px);
1280
+ }
1281
+
1282
+ .aws-panel.active-mobile .aws-chat-messages {
1283
+ flex: 1;
1284
+ overflow-y: auto;
1285
+ -webkit-overflow-scrolling: touch;
1286
+ min-height: 0;
1287
+ }
1288
+
1289
+ .aws-panel.active-mobile .aws-chat-input-area {
1290
+ position: sticky;
1291
+ bottom: 0;
1292
+ padding: 8px;
1293
+ padding-bottom: 64px;
1294
+ background: #0f172a;
1295
+ border-top: 1px solid #1e293b;
1296
+ z-index: 10;
1297
+ flex-shrink: 0;
1298
+ }
1299
+
1300
+ /* Browser iframe full height on mobile */
1301
+ .aws-panel.active-mobile #browserFrame {
1302
+ flex: 1;
1303
+ min-height: 0;
1304
+ }
1305
+
1306
+ /* Results panel: ensure content is scrollable */
1307
+ .aws-panel.active-mobile .aws-results-content {
1308
+ overflow-y: auto;
1309
+ -webkit-overflow-scrolling: touch;
1310
+ flex: 1;
1311
+ padding-bottom: 60px;
1312
+ }
1313
+
1314
+ /* Monitor panel scrollable */
1315
+ .aws-panel.active-mobile .aws-monitor-content {
1316
+ overflow-y: auto;
1317
+ -webkit-overflow-scrolling: touch;
1318
+ flex: 1;
1319
+ padding-bottom: 60px;
1320
+ }
1321
+
1322
+ .aws-mobile-nav {
1323
+ display: flex !important;
1324
+ position: fixed;
1325
+ bottom: 0;
1326
+ left: 0;
1327
+ right: 0;
1328
+ z-index: 100;
1329
+ background: #111827;
1330
+ border-top: 1px solid #1e293b;
1331
+ padding: 6px 0;
1332
+ justify-content: space-around;
1333
+ height: 56px;
1334
+ }
1335
+
1336
+ .aws-mobile-nav-item {
1337
+ display: flex;
1338
+ flex-direction: column;
1339
+ align-items: center;
1340
+ gap: 2px;
1341
+ padding: 4px 12px;
1342
+ background: none;
1343
+ border: none;
1344
+ color: #475569;
1345
+ font-size: 0.62rem;
1346
+ font-family: inherit;
1347
+ cursor: pointer;
1348
+ transition: all 0.15s;
1349
+ }
1350
+
1351
+ .aws-mobile-nav-item .icon { font-size: 1.1rem; }
1352
+ .aws-mobile-nav-item.active { color: #3b82f6; }
1353
+ .aws-mobile-nav-item:hover { color: #94a3b8; }
1354
+
1355
+ .aws-auth-overlay {
1356
+ overflow-y: auto;
1357
+ -webkit-overflow-scrolling: touch;
1358
+ }
1359
+
1360
+ .aws-auth-card { padding: 28px 20px; }
1361
+ .aws-auth-title { font-size: 1.3rem; }
1362
+ .aws-plans-grid { grid-template-columns: 1fr; }
1363
+
1364
+ .aws-browser-nav { display: none; }
1365
+ .aws-chat-suggestions { overflow-x: auto; flex-wrap: nowrap; padding-bottom: 4px; margin-bottom: 0; }
1366
+
1367
+ .aws-result-actions { flex-direction: column; }
1368
+ .aws-result-card { margin: 0 4px; }
1369
+
1370
+ /* Agent messages: prevent overflow */
1371
+ .aws-msg { max-width: 95%; word-break: break-word; }
1372
+
1373
+ /* Chat input textarea on mobile */
1374
+ .aws-chat-textarea { font-size: 16px; } /* Prevents zoom on iOS */
1375
+ }
1376
+
1377
+ /* ─── Mobile Nav (hidden on desktop) ───────────────────────────────── */
1378
+ .aws-mobile-nav { display: none; }
1379
+
1380
+ /* ─── Layout Variants ──────────────────────────────────────────────── */
1381
+ .aws-workspace.layout-horizontal {
1382
+ grid-template-columns: repeat(4, 1fr);
1383
+ grid-template-rows: 1fr;
1384
+ }
1385
+
1386
+ .aws-workspace.layout-focus-browser {
1387
+ grid-template-columns: 2fr 1fr;
1388
+ grid-template-rows: 1fr 1fr;
1389
+ }
1390
+
1391
+ .aws-workspace.layout-focus-browser .aws-panel:first-child {
1392
+ grid-row: 1 / -1;
1393
+ }
1394
+
1395
+ /* ─── Loading spinner ──────────────────────────────────────────────── */
1396
+ .aws-spinner {
1397
+ width: 20px;
1398
+ height: 20px;
1399
+ border: 2px solid #1e293b;
1400
+ border-top-color: #3b82f6;
1401
+ border-radius: 50%;
1402
+ animation: spin 0.7s linear infinite;
1403
+ display: inline-block;
1404
+ }
1405
+
1406
+ @keyframes spin { to { transform: rotate(360deg); } }
1407
+
1408
+ /* ─── Notification toast ──────────────────────────────────────────── */
1409
+ .aws-toast {
1410
+ position: fixed;
1411
+ top: 64px;
1412
+ right: 16px;
1413
+ z-index: 300;
1414
+ padding: 12px 20px;
1415
+ background: #1a2236;
1416
+ border: 1px solid #1e293b;
1417
+ border-radius: 10px;
1418
+ font-size: 0.82rem;
1419
+ color: #f0f4ff;
1420
+ box-shadow: 0 8px 32px rgba(0,0,0,0.4);
1421
+ transform: translateX(120%);
1422
+ transition: transform 0.3s ease-out;
1423
+ }
1424
+
1425
+ .aws-toast.visible { transform: translateX(0); }
1426
+ .aws-toast.success { border-color: rgba(16,185,129,0.4); }
1427
+ .aws-toast.error { border-color: rgba(239,68,68,0.4); }
1428
+ .aws-toast.info { border-color: rgba(59,130,246,0.4); }
1429
+
1430
+ /* ─── Dark scrollbar global ──────────────────────────────────────── */
1431
+ .aws-body ::-webkit-scrollbar { width: 4px; height: 4px; }
1432
+ .aws-body ::-webkit-scrollbar-track { background: transparent; }
1433
+ .aws-body ::-webkit-scrollbar-thumb { background: #1e293b; border-radius: 4px; }
1434
+
1435
+ /* ═══ Dynamic Pricing Shield ═══════════════════════════════════════ */
1436
+
1437
+ #priceShieldSection {
1438
+ margin: 12px 0;
1439
+ background: linear-gradient(135deg, rgba(139,92,246,0.08), rgba(59,130,246,0.06));
1440
+ border: 1px solid rgba(139,92,246,0.2);
1441
+ border-radius: 12px;
1442
+ padding: 16px;
1443
+ animation: shieldFadeIn 0.4s ease-out;
1444
+ }
1445
+
1446
+ @keyframes shieldFadeIn {
1447
+ from { opacity: 0; transform: translateY(8px); }
1448
+ to { opacity: 1; transform: translateY(0); }
1449
+ }
1450
+
1451
+ .aws-shield-header {
1452
+ display: flex;
1453
+ justify-content: space-between;
1454
+ align-items: center;
1455
+ margin-bottom: 12px;
1456
+ }
1457
+
1458
+ .aws-shield-title {
1459
+ font-size: 0.95rem;
1460
+ font-weight: 700;
1461
+ color: #c4b5fd;
1462
+ }
1463
+
1464
+ .aws-shield-badge {
1465
+ padding: 3px 10px;
1466
+ border-radius: 20px;
1467
+ font-size: 0.75rem;
1468
+ font-weight: 700;
1469
+ }
1470
+
1471
+ .aws-shield-badge.shield-clean { background: rgba(16,185,129,0.2); color: #34d399; }
1472
+ .aws-shield-badge.shield-minor { background: rgba(250,204,21,0.15); color: #fcd34d; }
1473
+ .aws-shield-badge.shield-moderate { background: rgba(251,146,60,0.2); color: #fb923c; }
1474
+ .aws-shield-badge.shield-significant { background: rgba(239,68,68,0.2); color: #f87171; }
1475
+ .aws-shield-badge.shield-severe { background: rgba(220,38,38,0.3); color: #fca5a5; }
1476
+
1477
+ .aws-shield-scanning {
1478
+ font-size: 0.85rem;
1479
+ color: #94a3b8;
1480
+ animation: pulse 1.5s infinite;
1481
+ }
1482
+
1483
+ @keyframes pulse {
1484
+ 0%, 100% { opacity: 1; }
1485
+ 50% { opacity: 0.5; }
1486
+ }
1487
+
1488
+ .aws-shield-probe-item {
1489
+ font-size: 0.8rem;
1490
+ color: #64748b;
1491
+ padding: 3px 0;
1492
+ animation: probeSlideIn 0.3s ease-out;
1493
+ }
1494
+
1495
+ @keyframes probeSlideIn {
1496
+ from { opacity: 0; transform: translateX(-8px); }
1497
+ to { opacity: 1; transform: translateX(0); }
1498
+ }
1499
+
1500
+ .aws-shield-clean {
1501
+ text-align: center;
1502
+ padding: 12px;
1503
+ font-size: 0.9rem;
1504
+ color: #34d399;
1505
+ }
1506
+
1507
+ .aws-shield-alert {
1508
+ display: flex;
1509
+ flex-direction: column;
1510
+ gap: 8px;
1511
+ }
1512
+
1513
+ .aws-shield-alert-title {
1514
+ font-size: 0.95rem;
1515
+ font-weight: 700;
1516
+ color: #f87171;
1517
+ }
1518
+
1519
+ .aws-shield-score {
1520
+ font-size: 0.85rem;
1521
+ color: #e2e8f0;
1522
+ }
1523
+
1524
+ .aws-shield-spread {
1525
+ font-size: 0.85rem;
1526
+ color: #94a3b8;
1527
+ }
1528
+
1529
+ .aws-shield-best {
1530
+ font-size: 0.9rem;
1531
+ font-weight: 600;
1532
+ color: #34d399;
1533
+ }
1534
+
1535
+ .aws-shield-savings {
1536
+ font-size: 0.9rem;
1537
+ font-weight: 700;
1538
+ color: #fbbf24;
1539
+ }
1540
+
1541
+ .aws-shield-tips {
1542
+ margin-top: 8px;
1543
+ padding: 10px;
1544
+ background: rgba(59,130,246,0.06);
1545
+ border-radius: 8px;
1546
+ border: 1px solid rgba(59,130,246,0.12);
1547
+ }
1548
+
1549
+ .aws-shield-tip {
1550
+ font-size: 0.8rem;
1551
+ color: #93c5fd;
1552
+ padding: 3px 0;
1553
+ }
1554
+
1555
+ .aws-shield-types {
1556
+ display: flex;
1557
+ flex-wrap: wrap;
1558
+ gap: 6px;
1559
+ margin-top: 6px;
1560
+ }
1561
+
1562
+ .aws-shield-type-item {
1563
+ display: inline-flex;
1564
+ align-items: center;
1565
+ gap: 5px;
1566
+ padding: 3px 10px;
1567
+ border-radius: 20px;
1568
+ font-size: 0.75rem;
1569
+ background: rgba(30,41,59,0.6);
1570
+ border: 1px solid rgba(71,85,105,0.3);
1571
+ }
1572
+
1573
+ .aws-shield-type-item.severity-low { border-color: rgba(250,204,21,0.3); }
1574
+ .aws-shield-type-item.severity-medium { border-color: rgba(251,146,60,0.3); }
1575
+ .aws-shield-type-item.severity-high { border-color: rgba(239,68,68,0.3); }
1576
+ .aws-shield-type-item.severity-critical { border-color: rgba(220,38,38,0.5); background: rgba(220,38,38,0.1); }
1577
+
1578
+ .aws-shield-type-label {
1579
+ color: #cbd5e1;
1580
+ text-transform: capitalize;
1581
+ }
1582
+
1583
+ .aws-shield-type-severity {
1584
+ color: #64748b;
1585
+ font-size: 0.7rem;
1586
+ text-transform: uppercase;
1587
+ }
1588
+
1589
+ .aws-shield-probes-table {
1590
+ margin-top: 10px;
1591
+ overflow-x: auto;
1592
+ }
1593
+
1594
+ .aws-shield-probes-table table {
1595
+ width: 100%;
1596
+ border-collapse: collapse;
1597
+ font-size: 0.8rem;
1598
+ }
1599
+
1600
+ .aws-shield-probes-table th {
1601
+ text-align: start;
1602
+ color: #94a3b8;
1603
+ font-weight: 600;
1604
+ padding: 6px 8px;
1605
+ border-bottom: 1px solid rgba(71,85,105,0.3);
1606
+ }
1607
+
1608
+ .aws-shield-probes-table td {
1609
+ padding: 5px 8px;
1610
+ color: #e2e8f0;
1611
+ border-bottom: 1px solid rgba(30,41,59,0.5);
1612
+ }
1613
+
1614
+ .aws-shield-probes-table tr.probe-best td {
1615
+ color: #34d399;
1616
+ font-weight: 600;
1617
+ }
1618
+
1619
+ .aws-shield-probes-table tr.probe-worst td {
1620
+ color: #f87171;
1621
+ }
1622
+
1623
+ /* ══════════════════════════════════════════════════════
1624
+ Universal Agent Workspace Styles
1625
+ ══════════════════════════════════════════════════════ */
1626
+
1627
+ .aws-universal-header {
1628
+ display: flex; align-items: center; justify-content: space-between;
1629
+ padding: 10px 14px; background: linear-gradient(135deg, rgba(59,130,246,.12), rgba(139,92,246,.12));
1630
+ border-radius: 10px 10px 0 0; font-weight: 700; font-size: 0.95rem;
1631
+ border-bottom: 1px solid rgba(59,130,246,.2); margin-bottom: 10px;
1632
+ }
1633
+
1634
+ .aws-uni-badge {
1635
+ display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px;
1636
+ border-radius: 14px; font-size: 0.75rem; font-weight: 600; margin: 3px 4px 3px 0;
1637
+ }
1638
+ .aws-uni-badge.bridge { background: rgba(59,130,246,.15); color: #60a5fa; }
1639
+ .aws-uni-badge.negotiate { background: rgba(34,197,94,.15); color: #4ade80; }
1640
+ .aws-uni-badge.listed { background: rgba(168,85,247,.15); color: #c084fc; }
1641
+ .aws-uni-badge.neutral { background: rgba(148,163,184,.1); color: #94a3b8; }
1642
+ .aws-uni-badge.small { font-size: 0.65rem; padding: 2px 6px; }
1643
+
1644
+ .aws-uni-fairness h4,
1645
+ .aws-uni-products h4,
1646
+ .aws-uni-dark h4,
1647
+ .aws-uni-alerts h4,
1648
+ .aws-uni-compare h4 {
1649
+ font-size: 0.82rem; font-weight: 700; margin: 10px 0 6px;
1650
+ color: #e2e8f0;
1651
+ }
1652
+
1653
+ .aws-uni-score-bar {
1654
+ height: 8px; background: rgba(255,255,255,.06); border-radius: 4px; overflow: hidden; margin-bottom: 6px;
1655
+ }
1656
+ .aws-uni-score-fill { height: 100%; border-radius: 4px; transition: width .4s ease; }
1657
+ .aws-uni-score-row { display: flex; justify-content: space-between; align-items: center; font-size: 0.9rem; }
1658
+ .aws-uni-score-val { font-weight: 700; }
1659
+ .aws-uni-score-cat { font-size: 0.8rem; }
1660
+ .aws-uni-meta { font-size: 0.72rem; color: #94a3b8; margin-top: 3px; }
1661
+ .aws-uni-meta.bridge-bonus { color: #60a5fa; }
1662
+ .aws-uni-breakdown { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; font-size: 0.7rem; color: #94a3b8; }
1663
+
1664
+ .aws-uni-product {
1665
+ display: flex; justify-content: space-between; align-items: center;
1666
+ padding: 6px 0; border-bottom: 1px solid rgba(255,255,255,.04);
1667
+ font-size: 0.82rem;
1668
+ }
1669
+ .aws-uni-product:last-child { border-bottom: none; }
1670
+ .aws-uni-product-name { flex: 1; margin-inline-end: 10px; line-height: 1.3; }
1671
+ .aws-uni-product-details strong { color: #34d399; margin-inline-end: 6px; }
1672
+ .aws-uni-product-details s { color: #64748b; margin-inline-end: 6px; font-size: 0.75rem; }
1673
+
1674
+ .aws-uni-dark-item {
1675
+ padding: 4px 0; font-size: 0.78rem; line-height: 1.4;
1676
+ }
1677
+ .aws-uni-dark-item.high { color: #f87171; }
1678
+ .aws-uni-dark-item.medium { color: #fbbf24; }
1679
+ .aws-uni-dark-item.low { color: #94a3b8; }
1680
+
1681
+ .aws-uni-alert-item {
1682
+ padding: 6px 8px; border-radius: 6px; margin-bottom: 4px; font-size: 0.78rem; line-height: 1.4;
1683
+ }
1684
+ .aws-uni-alert-item.high { background: rgba(239,68,68,.08); color: #f87171; }
1685
+ .aws-uni-alert-item.medium { background: rgba(234,179,8,.08); color: #fbbf24; }
1686
+
1687
+ .aws-uni-insight { font-size: 0.78rem; color: #94a3b8; padding: 3px 0; line-height: 1.4; }
1688
+
1689
+ .aws-uni-deal {
1690
+ padding: 8px 10px; border: 1px solid rgba(255,255,255,.06);
1691
+ border-radius: 8px; margin-bottom: 6px;
1692
+ }
1693
+ .aws-uni-deal.best { border-color: rgba(34,197,94,.3); background: rgba(34,197,94,.04); }
1694
+ .aws-uni-deal.wab-bridge { border-inline-start: 3px solid #3b82f6; }
1695
+ .aws-uni-deal-header { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
1696
+ .aws-uni-deal-source { font-weight: 600; font-size: 0.82rem; flex: 1; }
1697
+ .aws-uni-deal-score { font-size: 0.78rem; font-weight: 700; color: #8b5cf6; }
1698
+ .aws-uni-deal-name { font-size: 0.75rem; color: #94a3b8; margin-bottom: 4px; }
1699
+ .aws-uni-deal-row { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; }
1700
+ .aws-uni-fairness-chip {
1701
+ font-size: 0.68rem; padding: 2px 6px; border-radius: 8px; font-weight: 600;
1702
+ }
1703
+ .aws-uni-fairness-chip.recommended { background: rgba(34,197,94,.15); color: #4ade80; }
1704
+ .aws-uni-fairness-chip.caution { background: rgba(239,68,68,.15); color: #f87171; }
1705
+ .aws-uni-deal-link {
1706
+ display: inline-block; margin-top: 4px; font-size: 0.75rem;
1707
+ color: #60a5fa; text-decoration: none;
1708
+ }
1709
+ .aws-uni-deal-link:hover { text-decoration: underline; }
1710
+ .aws-uni-compare-summary {
1711
+ text-align: center; font-size: 0.72rem; color: #64748b;
1712
+ padding-top: 6px; border-top: 1px solid rgba(255,255,255,.06); margin-top: 4px;
1713
+ }