ape-claw 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/.cursor/skills/ape-claw/SKILL.md +322 -0
  2. package/LICENSE +21 -0
  3. package/README.md +826 -0
  4. package/allowlists/opensea-slug-overrides.json +13 -0
  5. package/allowlists/recommended.apechain.json +322 -0
  6. package/config/clawbots.example.json +3 -0
  7. package/config/policy.example.json +27 -0
  8. package/data/starter-pack-bundle.json +1 -0
  9. package/data/starter-pack.json +495 -0
  10. package/docs/ACP_BOUNTIES.md +108 -0
  11. package/docs/APECLAW_V2_ALPHA.md +206 -0
  12. package/docs/AUTONOMY_AND_SUBSTRATE.md +69 -0
  13. package/docs/CLAWBOTS_AND_INVITES.md +102 -0
  14. package/docs/CLI_GUIDE.md +124 -0
  15. package/docs/CONTRIBUTING.md +130 -0
  16. package/docs/DASHBOARD_GUIDE.md +108 -0
  17. package/docs/GLOBAL_BACKEND.md +145 -0
  18. package/docs/ONCHAIN_V2_GUIDE.md +140 -0
  19. package/docs/PRODUCT_OVERVIEW.md +127 -0
  20. package/docs/README.md +40 -0
  21. package/docs/SKILLCARDS_AND_IMPORTER.md +147 -0
  22. package/docs/STARTER_PACK.md +297 -0
  23. package/docs/SUPPORTED_NETWORKS.md +58 -0
  24. package/docs/TELEMETRY_AND_EVENTS.md +103 -0
  25. package/docs/THE_POD_RUNNER.md +198 -0
  26. package/docs/V1_WORKFLOWS.md +108 -0
  27. package/docs/V2_ONCHAIN_SKILLS.md +157 -0
  28. package/docs/WEB4_PLAN_STATUS.md +95 -0
  29. package/docs/WEB4_SWARM_MODEL.md +104 -0
  30. package/docs/archive/AUTONOMY_AND_SUBSTRATE.md +66 -0
  31. package/docs/archive/WEB4_PLAN_STATUS.md +93 -0
  32. package/docs/archive/WEB4_SWARM_MODEL.md +98 -0
  33. package/docs/developer/01-architecture.md +345 -0
  34. package/docs/developer/02-contracts.md +1034 -0
  35. package/docs/developer/03-writing-modules.md +513 -0
  36. package/docs/developer/04-skillcard-spec.md +336 -0
  37. package/docs/developer/05-backend-api.md +1079 -0
  38. package/docs/developer/06-telemetry.md +798 -0
  39. package/docs/developer/07-testing.md +546 -0
  40. package/docs/developer/08-contributing.md +211 -0
  41. package/docs/operator/01-quickstart.md +49 -0
  42. package/docs/operator/02-dashboard.md +174 -0
  43. package/docs/operator/03-cli-reference.md +818 -0
  44. package/docs/operator/04-skills-library.md +169 -0
  45. package/docs/operator/05-pod-operations.md +314 -0
  46. package/docs/operator/06-deployment.md +299 -0
  47. package/docs/operator/07-safety-and-policy.md +311 -0
  48. package/docs/operator/08-troubleshooting.md +457 -0
  49. package/docs/operator/09-env-reference.md +238 -0
  50. package/docs/social/STARTER_PACK_THREAD.md +209 -0
  51. package/package.json +77 -0
  52. package/skillcards/import-sources.json +93 -0
  53. package/skillcards/seed/acp-bounty-poll.v1.json +38 -0
  54. package/skillcards/seed/acp-bounty-post.v1.json +55 -0
  55. package/skillcards/seed/acp-browse.v1.json +41 -0
  56. package/skillcards/seed/acp-fulfill-and-route.v1.json +56 -0
  57. package/skillcards/seed/apeclaw-bridge-relay.v1.json +46 -0
  58. package/skillcards/seed/apeclaw-nft-autobuy.v1.json +60 -0
  59. package/skillcards/seed/apeclaw-receipt-recorder.v1.json +64 -0
  60. package/skillcards/seed/humanizer.v1.json +74 -0
  61. package/skillcards/seed/otherside-navigator.v1.json +116 -0
  62. package/skillcards/seed/stonkbrokers-launcher.v1.json +280 -0
  63. package/skillcards/seed/walkie-p2p.v1.json +66 -0
  64. package/src/cli/index.mjs +8 -0
  65. package/src/cli.mjs +1929 -0
  66. package/src/lib/bridge-relay.mjs +294 -0
  67. package/src/lib/clawbots.mjs +94 -0
  68. package/src/lib/io.mjs +36 -0
  69. package/src/lib/market.mjs +233 -0
  70. package/src/lib/nft-opensea.mjs +159 -0
  71. package/src/lib/paths.mjs +17 -0
  72. package/src/lib/pod-init.mjs +40 -0
  73. package/src/lib/policy.mjs +112 -0
  74. package/src/lib/rpc.mjs +49 -0
  75. package/src/lib/telemetry.mjs +92 -0
  76. package/src/lib/v2-onchain-abi.mjs +294 -0
  77. package/src/lib/v2-skillcard.mjs +27 -0
  78. package/src/server/index.mjs +169 -0
  79. package/src/server/logger.mjs +21 -0
  80. package/src/server/middleware/auth.mjs +90 -0
  81. package/src/server/middleware/body-limit.mjs +35 -0
  82. package/src/server/middleware/cors.mjs +33 -0
  83. package/src/server/middleware/rate-limit.mjs +44 -0
  84. package/src/server/routes/chat.mjs +178 -0
  85. package/src/server/routes/clawbots.mjs +182 -0
  86. package/src/server/routes/events.mjs +95 -0
  87. package/src/server/routes/health.mjs +72 -0
  88. package/src/server/routes/pod.mjs +64 -0
  89. package/src/server/routes/quotes.mjs +161 -0
  90. package/src/server/routes/skills.mjs +239 -0
  91. package/src/server/routes/static.mjs +161 -0
  92. package/src/server/routes/v2.mjs +48 -0
  93. package/src/server/sse.mjs +73 -0
  94. package/src/server/storage/file-backend.mjs +295 -0
  95. package/src/server/storage/index.mjs +37 -0
  96. package/src/server/storage/sqlite-backend.mjs +380 -0
  97. package/src/telemetry-server.mjs +1604 -0
  98. package/ui/css/dashboard.css +792 -0
  99. package/ui/css/skills.css +689 -0
  100. package/ui/docs.html +840 -0
  101. package/ui/favicon-180.png +0 -0
  102. package/ui/favicon-192.png +0 -0
  103. package/ui/favicon-32.png +0 -0
  104. package/ui/favicon-lobster.png +0 -0
  105. package/ui/favicon.svg +10 -0
  106. package/ui/index.html +2957 -0
  107. package/ui/js/dashboard.js +1766 -0
  108. package/ui/js/skills.js +1621 -0
  109. package/ui/pod.html +909 -0
  110. package/ui/shared/motion.css +286 -0
  111. package/ui/shared/motion.js +170 -0
  112. package/ui/shared/sidebar-nav.css +379 -0
  113. package/ui/shared/sidebar-nav.js +137 -0
  114. package/ui/skills.html +2879 -0
@@ -0,0 +1,792 @@
1
+ /* ── Reset & base ─────────────────────────────────── */
2
+ *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
3
+ :root{
4
+ --bg:#0c0c0c;--surface:#1a1a1a;--surface2:#212121;--surface3:#2a2a2a;
5
+ --border:rgba(207,255,4,.35);--border-strong:rgba(207,255,4,.75);
6
+ --text:#e6e6e6;--dim:#a6a6a6;--accent:#cfff04;
7
+ --accent2:#cfff04;--accent-glow:rgba(207,255,4,.22);
8
+ --neon-cyan:#63d7ff;--neon-green:#00ff00;--neon-pink:#ff3333;
9
+ --neon-purple:#b026ff;--gold:#cfff04;
10
+ --font-display:'Outfit','Inter','Segoe UI',sans-serif;
11
+ --font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
12
+ --font-sans:'Outfit','Inter','Segoe UI',sans-serif;
13
+ --radius:2px;
14
+ --panel-shadow:0 10px 28px rgba(0,0,0,.34);
15
+ }
16
+ .skip-link{
17
+ position:absolute;left:12px;top:-40px;z-index:99;
18
+ background:#0b1622;color:#d4e6fa;padding:8px 10px;border-radius:2px;border:1px solid #2a4056;
19
+ font-size:.72rem;text-decoration:none;transition:top .15s;
20
+ }
21
+ .skip-link:focus{top:10px}
22
+ .panel-actions{margin-left:auto;display:flex;gap:6px;align-items:center}
23
+ .mini-btn{
24
+ border:1px solid var(--border);background:rgba(255,255,255,.02);color:var(--dim);
25
+ border-radius:2px;padding:3px 7px;font-size:.65rem;cursor:pointer
26
+ }
27
+ .mini-btn:hover{color:var(--text);border-color:var(--neon-cyan)}
28
+ .shortcut-popover{position:relative}
29
+ .shortcut-panel{
30
+ position:absolute;right:0;top:30px;z-index:20;min-width:260px;
31
+ padding:10px;border-radius:2px;border:1px solid var(--border);
32
+ background:linear-gradient(180deg, rgba(255,255,255,.04), rgba(0,0,0,.3)), var(--surface2);
33
+ box-shadow:var(--panel-shadow);display:none
34
+ }
35
+ .shortcut-panel.open{display:block}
36
+ .shortcut-title{font-size:.68rem;color:var(--accent2);font-weight:700;margin-bottom:8px}
37
+ .shortcut-row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:.66rem;color:var(--dim);padding:4px 0}
38
+ .shortcut-keys{display:flex;gap:4px;flex-wrap:wrap}
39
+ .toast-stack{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:55;max-width:320px}
40
+ .toast{
41
+ border:1px solid var(--border);border-radius:2px;padding:8px 10px;font-size:.68rem;line-height:1.4;
42
+ background:linear-gradient(180deg, rgba(255,255,255,.06), rgba(0,0,0,.25)), var(--surface2);
43
+ box-shadow:var(--panel-shadow);animation:revealUp .25s ease-out both
44
+ }
45
+ .toast.success{border-color:rgba(57,255,20,.35)}
46
+ .toast.error{border-color:rgba(255,90,31,.4)}
47
+ .theme-daylight{
48
+ --bg:#f3f2eb;--surface:#ffffff;--surface2:#f2f4f7;--surface3:#e8ebf1;
49
+ --border:#cfd5e2;--text:#131722;--dim:#5f6a7d;--accent:#ff5a1f;--accent2:#cc3d00;--neon-cyan:#0479ff;
50
+ }
51
+ .theme-ember{
52
+ --bg:#0e0908;--surface:#181111;--surface2:#221717;--surface3:#2c1f1f;
53
+ --border:#523737;--text:#ffd9c8;--dim:#b88f82;--accent:#ff6a2f;--accent2:#ff9c61;--neon-cyan:#ffb347;
54
+ }
55
+ .dense-ui .panel-body{padding:10px !important}
56
+ .dense-ui .setup-step{padding:10px}
57
+ .focus-ui .panel:not(.chat-panel){opacity:.35;filter:saturate(.8)}
58
+ .focus-ui .chat-panel{transform:scale(1.01)}
59
+ .motion-low *{animation-duration:.01ms !important;transition-duration:.01ms !important}
60
+ .collections-tools{
61
+ display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px
62
+ }
63
+ .collections-tools input,.collections-tools select{
64
+ background:rgba(0,0,0,.35);border:1px solid var(--border);color:var(--text);
65
+ padding:6px 8px;border-radius:2px;font-size:.68rem
66
+ }
67
+ .collections-tools label{font-size:.65rem;color:var(--dim);display:flex;gap:4px;align-items:center}
68
+ .setup-step .copy-code-btn{
69
+ margin-top:6px;border:1px solid var(--border);background:rgba(207,255,4,.06);color:var(--text);
70
+ border-radius:2px;padding:4px 8px;font-size:.62rem;cursor:pointer
71
+ }
72
+ .chat-input-meta{display:flex;justify-content:space-between;align-items:center;margin-top:4px}
73
+ .chat-counter{font-size:.62rem;color:var(--dim)}
74
+ .kbd{font-family:var(--font-mono);font-size:.62rem;border:1px solid var(--border);border-radius:2px;padding:1px 4px;color:var(--dim)}
75
+ html{font-size:14px;scroll-behavior:smooth}
76
+ body{
77
+ background:var(--bg);color:var(--text);font-family:var(--font-sans);
78
+ min-height:100vh;overflow-x:hidden;
79
+ }
80
+ a{color:var(--neon-cyan);text-decoration:none}
81
+ a:hover{text-decoration:underline}
82
+ code{font-family:var(--font-mono);font-size:.85em;background:rgba(255,255,255,.06);padding:1px 5px;border-radius:3px}
83
+
84
+ /* ── Terminal background (matching pod/skills/docs) ── */
85
+ body::before{
86
+ content:"";
87
+ position:fixed;inset:0;pointer-events:none;z-index:0;
88
+ background:
89
+ radial-gradient(900px 500px at 20% 10%, rgba(207,255,4,0.10) 0%, transparent 60%),
90
+ radial-gradient(700px 380px at 85% 75%, rgba(0,255,0,0.06) 0%, transparent 55%),
91
+ linear-gradient(180deg, rgba(0,0,0,0.35), rgba(0,0,0,0.85));
92
+ }
93
+ body::after{display:none !important}
94
+ .noise{
95
+ position:fixed;inset:0;pointer-events:none;z-index:2;opacity:0.07;mix-blend-mode:overlay;
96
+ background-image:
97
+ repeating-linear-gradient(0deg, rgba(255,255,255,0.06) 0px, rgba(255,255,255,0.06) 1px, rgba(0,0,0,0) 2px, rgba(0,0,0,0) 4px),
98
+ repeating-linear-gradient(90deg, rgba(255,255,255,0.04) 0px, rgba(255,255,255,0.04) 1px, rgba(0,0,0,0) 2px, rgba(0,0,0,0) 6px);
99
+ }
100
+ .scanlines{overflow:hidden;position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:1}
101
+ .scanlines:before,.scanlines:after{display:block;pointer-events:none;content:"";position:absolute}
102
+ .scanlines:before{width:100%;height:2px;z-index:2147483649;background:rgba(0,0,0,0.3);opacity:0.75;animation:scanline 6s linear infinite}
103
+ .scanlines:after{top:0;right:0;bottom:0;left:0;z-index:2147483648;background:linear-gradient(to bottom, transparent 50%, rgba(0,0,0,0.3) 51%);background-size:100% 4px;animation:scanlines 1s steps(60) infinite}
104
+ @keyframes scanline{0%{transform:translate3d(0,200000%,0)}}
105
+ @keyframes scanlines{0%{background-position:0 200000%}}
106
+ .bg-collage,.bg-fade{display:none !important}
107
+
108
+ /* ── Layout ───────────────────────────────────────── */
109
+ .app{position:relative;z-index:2;display:flex;flex-direction:column;min-height:100vh}
110
+ .stat{text-align:center}
111
+ .stat-value{font-size:1.2rem;font-weight:900;font-family:var(--font-mono);color:var(--accent)}
112
+ .stat-label{font-size:.6rem;text-transform:uppercase;letter-spacing:.12em;color:var(--dim)}
113
+ @keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
114
+ .connection-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:4px}
115
+ .connection-dot.connected{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green)}
116
+ .connection-dot.disconnected{background:var(--neon-pink);box-shadow:0 0 6px var(--neon-pink);animation:pulse 1s infinite}
117
+
118
+ .main{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto 1fr;gap:16px;padding:16px 24px;flex:1}
119
+
120
+ /* ── Panels ───────────────────────────────────────── */
121
+ .panel{
122
+ background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
123
+ overflow:hidden;display:flex;flex-direction:column;
124
+ box-shadow:var(--panel-shadow);
125
+ }
126
+ .panel-header{
127
+ display:flex;align-items:center;gap:8px;padding:12px 16px;
128
+ border-bottom:1px solid var(--border);
129
+ background:linear-gradient(180deg, rgba(255,255,255,.02), transparent), var(--surface2);
130
+ font-size:.78rem;font-family:var(--font-display);font-weight:700;text-transform:uppercase;letter-spacing:.11em;
131
+ }
132
+ .panel-header .icon{font-size:1rem}
133
+ .panel-header .badge{
134
+ margin-left:auto;font-size:.6rem;padding:2px 8px;border-radius:2px;
135
+ background:rgba(207,255,4,.08);border:1px solid rgba(207,255,4,.3);color:var(--accent);
136
+ font-weight:700;font-family:var(--font-mono);
137
+ }
138
+ .panel-toolbar{
139
+ display:flex;gap:8px;align-items:center;flex-wrap:wrap;
140
+ padding:10px 12px;margin-bottom:10px;
141
+ background:rgba(255,255,255,.02);border:1px solid var(--border);border-radius:2px;
142
+ }
143
+ .mini-input,.mini-select{
144
+ background:rgba(0,0,0,.35);border:1px solid var(--border);color:var(--text);
145
+ padding:6px 8px;border-radius:2px;font-size:.68rem
146
+ }
147
+ .mini-input::placeholder{color:rgba(138,142,180,.9)}
148
+ .mini-btn[disabled],.mini-select[disabled]{opacity:.55;cursor:not-allowed}
149
+ .segmented{
150
+ display:inline-flex;gap:0;border:1px solid var(--border);border-radius:2px;overflow:hidden;
151
+ background:rgba(0,0,0,.25)
152
+ }
153
+ .seg-btn{
154
+ border:0;background:transparent;color:var(--dim);
155
+ padding:6px 10px;font-size:.66rem;cursor:pointer
156
+ }
157
+ .seg-btn + .seg-btn{border-left:1px solid rgba(45,45,88,.7)}
158
+ .seg-btn.active{color:var(--text);background:rgba(207,255,4,.08)}
159
+ .hint-row{font-size:.62rem;color:var(--dim);line-height:1.5}
160
+ .panel-body{padding:16px;flex:1;overflow-y:auto;max-height:480px}
161
+ .panel-body::-webkit-scrollbar{width:4px}
162
+ .panel-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
163
+ .full-width{grid-column:1/-1}
164
+
165
+ /* ── Setup instructions panel ────────────────────── */
166
+ .setup-panel{grid-column:1/-1;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
167
+ .setup-header{
168
+ display:flex;align-items:center;gap:8px;padding:12px 16px;cursor:pointer;
169
+ background:linear-gradient(180deg, rgba(255,255,255,.03), transparent), var(--surface2);border-bottom:1px solid var(--border);
170
+ font-size:.78rem;font-family:var(--font-display);font-weight:700;text-transform:uppercase;letter-spacing:.1em;
171
+ user-select:none;transition:background .2s;
172
+ }
173
+ .setup-header:hover{background:var(--surface3)}
174
+ .setup-header .chevron{margin-left:auto;transition:transform .3s;font-size:.7rem}
175
+ .setup-header.open .chevron{transform:rotate(180deg)}
176
+ .setup-body{padding:0;max-height:0;overflow:hidden;transition:max-height .4s ease,padding .3s ease}
177
+ .setup-body.open{max-height:3000px;padding:20px 24px}
178
+ .setup-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}
179
+ .setup-step{position:relative}
180
+ .setup-step-num{
181
+ display:inline-flex;align-items:center;justify-content:center;
182
+ width:24px;height:24px;border-radius:2px;font-size:.7rem;font-weight:800;
183
+ border:1px solid var(--border-strong);background:rgba(207,255,4,.1);color:var(--accent);margin-bottom:8px;
184
+ }
185
+ .setup-step h3{font-size:.85rem;font-weight:700;margin-bottom:6px;color:var(--text)}
186
+ .setup-step p{font-size:.72rem;color:var(--dim);line-height:1.6;margin-bottom:8px}
187
+ .setup-step pre{
188
+ background:#0b1622;border:1px solid rgba(207,255,4,.25);border-radius:2px;
189
+ padding:10px 14px;font-family:var(--font-mono);font-size:.68rem;
190
+ color:#d4e6fa;line-height:1.7;overflow-x:auto;margin-bottom:6px;
191
+ white-space:pre-wrap;word-break:break-all;
192
+ }
193
+ .setup-step .note{font-size:.62rem;color:var(--dim);font-style:italic}
194
+
195
+ /* ── Agent cards ──────────────────────────────────── */
196
+ .agents-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
197
+ .agent-card{
198
+ background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);
199
+ padding:14px;position:relative;overflow:hidden;transition:border-color .35s,box-shadow .35s,transform .25s cubic-bezier(.22,.68,0,1);
200
+ }
201
+ .agent-card:hover{border-color:var(--accent);box-shadow:0 0 20px var(--accent-glow),0 8px 32px rgba(0,0,0,.3);transform:translateY(-4px)}
202
+ .agent-card:active{transform:translateY(-2px) scale(0.99)}
203
+ .agent-card::before{
204
+ content:'';position:absolute;top:0;left:0;right:0;height:2px;
205
+ background:linear-gradient(90deg,var(--accent),var(--neon-cyan),var(--accent));
206
+ background-size:200% 100%;animation:shimmerGlow 4s linear infinite;
207
+ }
208
+ .agent-card.verified-card::before{background:linear-gradient(90deg,var(--neon-green),var(--neon-cyan),var(--neon-green));background-size:200% 100%;animation:shimmerGlow 4s linear infinite}
209
+ .agent-name{font-weight:700;font-size:.85rem;margin-bottom:2px;display:flex;align-items:center;gap:6px}
210
+ .verified-badge{
211
+ font-size:.55rem;padding:1px 6px;border-radius:2px;font-weight:700;
212
+ background:rgba(57,255,20,.12);color:var(--neon-green);border:1px solid rgba(57,255,20,.3);
213
+ text-transform:uppercase;letter-spacing:.06em;
214
+ }
215
+ .agent-id{font-family:var(--font-mono);font-size:.65rem;color:var(--dim);margin-bottom:8px}
216
+ .agent-status{display:flex;align-items:center;gap:5px;font-size:.7rem;margin-bottom:8px}
217
+ .agent-status .dot{width:6px;height:6px;border-radius:50%}
218
+ .agent-status .dot.active{background:var(--neon-green);box-shadow:0 0 6px var(--neon-green)}
219
+ .agent-status .dot.idle{background:var(--gold);box-shadow:0 0 6px var(--gold)}
220
+ .agent-status .dot.offline{background:#555}
221
+ .agent-stat-row{display:flex;justify-content:space-between;font-size:.7rem;color:var(--dim);margin-top:4px}
222
+ .agent-stat-row span:last-child{color:var(--text);font-family:var(--font-mono)}
223
+
224
+ /* ── Activity feed ────────────────────────────────── */
225
+ .feed-item{
226
+ display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(42,42,74,.4);
227
+ animation:feedIn .4s ease-out;
228
+ }
229
+ @keyframes feedIn{from{opacity:0;transform:translateX(-12px)}to{opacity:1;transform:none}}
230
+ .feed-time{
231
+ font-family:var(--font-mono);font-size:.65rem;color:var(--dim);
232
+ min-width:60px;padding-top:2px;
233
+ }
234
+ .feed-icon{font-size:1rem;min-width:24px;text-align:center}
235
+ .feed-content{flex:1}
236
+ .feed-action{font-size:.78rem;line-height:1.5}
237
+ .feed-action strong{color:var(--accent2)}
238
+ .feed-action .hash{font-family:var(--font-mono);color:var(--neon-cyan);font-size:.7rem}
239
+ .feed-action .collection-tag{
240
+ display:inline-block;padding:1px 6px;border-radius:3px;font-size:.65rem;
241
+ background:rgba(176,38,255,.15);border:1px solid rgba(176,38,255,.3);color:var(--neon-purple);
242
+ font-weight:600;
243
+ }
244
+ .feed-action .price{color:var(--gold);font-weight:700;font-family:var(--font-mono)}
245
+ .feed-action .tx-link{font-family:var(--font-mono);font-size:.65rem;color:var(--neon-cyan)}
246
+ .feed-action .tx-link:hover{text-decoration:underline}
247
+
248
+ /* ── NFT gallery ──────────────────────────────────── */
249
+ .nft-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
250
+ .nft-card{
251
+ background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);
252
+ overflow:hidden;transition:transform .2s,box-shadow .3s;cursor:pointer;
253
+ }
254
+ .nft-card:hover{transform:translateY(-4px);box-shadow:0 8px 24px rgba(0,0,0,.5),0 0 16px var(--accent-glow)}
255
+ .nft-img{
256
+ width:100%;aspect-ratio:1;
257
+ display:flex;align-items:center;justify-content:center;font-size:2.5rem;
258
+ position:relative;
259
+ }
260
+ .nft-img .nft-bg{
261
+ position:absolute;inset:0;
262
+ background:linear-gradient(135deg,var(--surface3),var(--surface));
263
+ }
264
+ .nft-img span{position:relative;z-index:1}
265
+ .nft-img img{
266
+ position:relative;z-index:1;width:72%;height:72%;border-radius:2px;object-fit:cover;
267
+ border:1px solid rgba(255,255,255,.12);
268
+ }
269
+ .nft-info{padding:10px}
270
+ .nft-collection{font-size:.6rem;text-transform:uppercase;letter-spacing:.08em;color:var(--neon-purple);font-weight:600;margin-bottom:2px}
271
+ .nft-name{font-size:.78rem;font-weight:700;margin-bottom:4px}
272
+ .nft-price{font-family:var(--font-mono);font-size:.75rem;color:var(--gold)}
273
+ .nft-agent{font-size:.6rem;color:var(--dim);margin-top:3px}
274
+ .nft-tx{font-size:.58rem;margin-top:3px}
275
+ .nft-tx a{font-family:var(--font-mono);color:var(--neon-cyan);font-size:.58rem}
276
+
277
+ /* ── Bridge panel ─────────────────────────────────── */
278
+ .bridge-item{
279
+ display:flex;align-items:center;gap:12px;padding:10px 12px;
280
+ background:var(--surface2);border-radius:var(--radius);margin-bottom:8px;
281
+ border:1px solid var(--border);
282
+ }
283
+ .bridge-route{display:flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600}
284
+ .bridge-arrow{color:var(--neon-cyan);font-size:1rem}
285
+ .bridge-amount{font-family:var(--font-mono);font-size:.85rem;font-weight:700;color:var(--text);margin-left:auto}
286
+ .bridge-status-tag{
287
+ font-size:.6rem;padding:2px 8px;border-radius:2px;font-weight:700;
288
+ text-transform:uppercase;letter-spacing:.06em;
289
+ }
290
+ .bridge-status-tag.completed{background:rgba(57,255,20,.12);color:var(--neon-green);border:1px solid rgba(57,255,20,.3)}
291
+ .bridge-status-tag.pending{background:rgba(255,215,0,.12);color:var(--gold);border:1px solid rgba(255,215,0,.3)}
292
+ .bridge-status-tag.failed{background:rgba(255,45,149,.12);color:var(--neon-pink);border:1px solid rgba(255,45,149,.3)}
293
+
294
+ /* ── Collections bar ──────────────────────────────── */
295
+ .collections-bar{
296
+ grid-column:1/-1;display:flex;gap:10px;overflow-x:auto;padding:4px 0;
297
+ scroll-behavior:smooth;
298
+ }
299
+ .collections-bar::-webkit-scrollbar{height:3px}
300
+ .collections-bar::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
301
+ .collections-shell{
302
+ display:flex;align-items:center;gap:10px;
303
+ }
304
+ .carousel-btn{
305
+ width:30px;height:30px;border-radius:50%;
306
+ border:1px solid var(--border);background:var(--surface2);color:var(--dim);
307
+ display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
308
+ font-size:.9rem;transition:all .2s;flex-shrink:0;
309
+ }
310
+ .carousel-btn:hover{border-color:var(--accent);color:var(--accent);background:rgba(207,255,4,.06)}
311
+ .collections-status{
312
+ margin-left:auto;font-size:.65rem;color:var(--dim);font-family:var(--font-mono);white-space:nowrap;
313
+ }
314
+ .col-chip{
315
+ flex-shrink:0;display:flex;align-items:center;gap:8px;padding:8px 14px;
316
+ background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
317
+ cursor:pointer;transition:border-color .2s,background .2s;
318
+ }
319
+ .col-chip:hover,.col-chip.active{border-color:var(--accent);background:rgba(207,255,4,.06)}
320
+ .col-chip-name{font-size:.75rem;font-weight:700;white-space:nowrap}
321
+ .col-chip-floor{font-family:var(--font-mono);font-size:.65rem;color:var(--gold)}
322
+ .col-chip-vol{font-size:.6rem;color:var(--dim)}
323
+ .col-chip-icon{
324
+ width:22px;height:22px;border-radius:50%;object-fit:cover;display:block;
325
+ border:1px solid rgba(255,255,255,.12);background:var(--surface2);
326
+ }
327
+ .col-chip-emoji{font-size:1rem;line-height:1}
328
+
329
+ /* ── Policy status bar ────────────────────────────── */
330
+ .policy-bar{
331
+ grid-column:1/-1;display:flex;gap:12px;flex-wrap:wrap;
332
+ padding:10px 16px;background:var(--surface);border:1px solid var(--border);
333
+ border-radius:var(--radius);
334
+ }
335
+ .policy-item{display:flex;align-items:center;gap:6px;font-size:.7rem}
336
+ .policy-item .tag{
337
+ padding:2px 8px;border-radius:4px;font-weight:700;text-transform:uppercase;
338
+ font-size:.6rem;letter-spacing:.06em;
339
+ }
340
+ .tag.enforced{background:rgba(57,255,20,.1);color:var(--neon-green);border:1px solid rgba(57,255,20,.25)}
341
+ .tag.warn{background:rgba(255,215,0,.1);color:var(--gold);border:1px solid rgba(255,215,0,.25)}
342
+
343
+ /* ── Chat panel ──────────────────────────────────── */
344
+ .chat-panel{grid-column:1/-1}
345
+ .chat-rooms{
346
+ display:flex;gap:8px;overflow-x:auto;padding:10px 16px;border-top:1px solid var(--border);
347
+ background:rgba(255,255,255,.01)
348
+ }
349
+ .chat-room-chip{
350
+ flex-shrink:0;display:flex;align-items:center;gap:6px;padding:5px 10px;border-radius:2px;
351
+ border:1px solid var(--border);background:var(--surface2);font-size:.66rem;color:var(--dim);cursor:pointer
352
+ }
353
+ .chat-room-chip.active{border-color:var(--accent);color:var(--accent);background:rgba(207,255,4,.08)}
354
+ .chat-room-chip .room-unread{
355
+ min-width:16px;height:16px;border-radius:2px;background:rgba(207,255,4,.15);color:var(--accent);
356
+ display:inline-flex;align-items:center;justify-content:center;font-size:.6rem;font-family:var(--font-mono);padding:0 4px
357
+ }
358
+ .chat-messages{
359
+ display:flex;flex-direction:column;gap:8px;padding:16px;
360
+ max-height:360px;overflow-y:auto;flex:1;
361
+ }
362
+ .chat-messages::-webkit-scrollbar{width:4px}
363
+ .chat-messages::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
364
+ .chat-msg{
365
+ display:flex;gap:10px;padding:10px 14px;
366
+ background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);
367
+ animation:feedIn .3s ease-out;
368
+ }
369
+ .chat-msg.self{border-color:rgba(207,255,4,.25);background:rgba(207,255,4,.03)}
370
+ .chat-msg-avatar{
371
+ width:32px;height:32px;border-radius:50%;
372
+ background:var(--surface3);border:1px solid var(--border);
373
+ display:flex;align-items:center;justify-content:center;
374
+ font-size:1rem;flex-shrink:0;
375
+ }
376
+ .chat-msg-body{flex:1;min-width:0}
377
+ .chat-msg-header{display:flex;align-items:baseline;gap:8px;margin-bottom:3px}
378
+ .chat-msg-name{font-size:.78rem;font-weight:700;color:var(--accent2)}
379
+ .chat-msg-id{font-family:var(--font-mono);font-size:.6rem;color:var(--dim)}
380
+ .chat-msg-time{font-family:var(--font-mono);font-size:.6rem;color:var(--dim);margin-left:auto}
381
+ .chat-msg-text{font-size:.78rem;line-height:1.55;color:var(--text);word-break:break-word}
382
+ .chat-msg-reply{
383
+ margin:4px 0 6px;padding:6px 8px;border-radius:2px;border:1px solid var(--border);
384
+ background:rgba(255,255,255,.02);font-size:.65rem;color:var(--dim)
385
+ }
386
+ .chat-msg-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:7px}
387
+ .chat-msg-action-btn{
388
+ padding:3px 7px;border-radius:2px;border:1px solid var(--border);background:rgba(255,255,255,.03);
389
+ color:var(--dim);font-size:.62rem;cursor:pointer
390
+ }
391
+ .chat-msg-action-btn:hover{border-color:var(--accent);color:var(--text)}
392
+ .chat-reaction-chip{
393
+ padding:2px 6px;border-radius:2px;border:1px solid rgba(207,255,4,.22);background:rgba(207,255,4,.06);
394
+ color:var(--accent);font-size:.62rem;cursor:pointer
395
+ }
396
+ .chat-reaction-chip.active{border-color:rgba(99,215,255,.35);background:rgba(99,215,255,.1);color:var(--neon-cyan)}
397
+ .chat-replying{
398
+ margin:8px 16px 0;padding:7px 10px;border-radius:2px;border:1px solid var(--border);
399
+ background:rgba(255,255,255,.03);display:none;align-items:center;gap:8px;font-size:.66rem;color:var(--dim)
400
+ }
401
+ .chat-replying.active{display:flex}
402
+ .chat-replying strong{color:var(--text)}
403
+ .chat-replying button{
404
+ margin-left:auto;padding:3px 8px;border-radius:2px;border:1px solid var(--border);background:rgba(255,255,255,.04);
405
+ color:var(--dim);font-size:.62rem;cursor:pointer
406
+ }
407
+ .chat-input-bar{
408
+ display:flex;gap:8px;padding:12px 16px;
409
+ border-top:1px solid var(--border);
410
+ background:linear-gradient(180deg, rgba(207,255,4,.03), transparent), var(--surface2);
411
+ }
412
+ .chat-input-bar input{
413
+ flex:1;padding:8px 14px;border-radius:2px;border:1px solid var(--border);
414
+ background:#0b1622;color:var(--text);font-family:var(--font-sans);font-size:.78rem;
415
+ outline:none;transition:border-color .2s;
416
+ }
417
+ .chat-input-bar input:focus{border-color:var(--accent)}
418
+ .chat-input-bar input::placeholder{color:var(--dim)}
419
+ .chat-send-btn{
420
+ padding:8px 18px;border-radius:2px;border:1px solid var(--accent);
421
+ background:rgba(207,255,4,.08);color:var(--accent);font-size:.75rem;
422
+ font-weight:700;cursor:pointer;transition:all .2s;white-space:nowrap;
423
+ }
424
+ .chat-send-btn:hover{background:var(--accent);color:#111}
425
+ .chat-send-btn:disabled{opacity:.4;cursor:not-allowed}
426
+ .chat-auth-bar{
427
+ display:flex;gap:6px;padding:10px 16px;
428
+ border-top:1px solid var(--border);background:linear-gradient(180deg, rgba(207,255,4,.03), transparent);
429
+ align-items:center;flex-wrap:wrap;
430
+ }
431
+ .chat-auth-bar label{font-size:.64rem;color:var(--dim);font-weight:700;text-transform:uppercase;letter-spacing:.08em}
432
+ .chat-auth-bar input{
433
+ padding:5px 10px;border-radius:2px;border:1px solid var(--border);
434
+ background:#0b1622;color:var(--text);font-family:var(--font-mono);font-size:.68rem;
435
+ outline:none;transition:border-color .2s;width:160px;
436
+ }
437
+ .chat-auth-bar input:focus{border-color:var(--accent)}
438
+ .chat-auth-mini-btn{
439
+ padding:5px 10px;border-radius:2px;border:1px solid rgba(207,255,4,.35);
440
+ background:rgba(207,255,4,.06);color:var(--accent);cursor:pointer;
441
+ font-size:.64rem;font-family:var(--font-mono);font-weight:600;transition:all .2s;
442
+ }
443
+ .chat-auth-mini-btn:hover{background:rgba(207,255,4,.15);text-decoration:none}
444
+ .chat-auth-mini-btn.ghost{
445
+ border-color:rgba(99,215,255,.35);background:rgba(99,215,255,.06);color:var(--neon-cyan);
446
+ }
447
+ .chat-auth-mini-btn.ghost:hover{background:rgba(99,215,255,.12)}
448
+ .chat-auth-bar .chat-auth-status{
449
+ font-size:.62rem;padding:2px 8px;border-radius:2px;font-weight:700;
450
+ margin-left:auto;
451
+ }
452
+ .chat-auth-bar .chat-auth-status.ok{background:rgba(57,255,20,.1);color:var(--neon-green);border:1px solid rgba(57,255,20,.25)}
453
+ .chat-auth-bar .chat-auth-status.none{background:rgba(120,120,160,.1);color:var(--dim);border:1px solid var(--border)}
454
+ .chat-empty{
455
+ text-align:center;padding:32px 16px;color:var(--dim);font-size:.78rem;
456
+ }
457
+ .chat-empty .chat-empty-icon{font-size:2rem;margin-bottom:8px}
458
+
459
+ /* ── Terminal overlay ─────────────────────────────── */
460
+ .terminal-panel{
461
+ grid-column:1/-1;background:var(--surface);border:1px solid var(--border);
462
+ border-radius:var(--radius);overflow:hidden;
463
+ box-shadow:var(--panel-shadow);
464
+ }
465
+ .terminal-header{
466
+ display:flex;align-items:center;gap:8px;padding:8px 16px;
467
+ background:var(--surface2);border-bottom:1px solid var(--border);
468
+ }
469
+ .terminal-dots{display:flex;gap:5px}
470
+ .terminal-dots span{width:10px;height:10px;border-radius:50%}
471
+ .terminal-dots span:nth-child(1){background:#ff5f56}
472
+ .terminal-dots span:nth-child(2){background:#ffbd2e}
473
+ .terminal-dots span:nth-child(3){background:#27c93f}
474
+ .terminal-title{font-size:.7rem;font-family:var(--font-mono);color:var(--dim);margin-left:8px}
475
+ .terminal-body{
476
+ padding:14px 16px;font-family:var(--font-mono);font-size:.72rem;
477
+ line-height:1.7;max-height:200px;overflow-y:auto;color:var(--dim);
478
+ }
479
+ .terminal-body::-webkit-scrollbar{width:4px}
480
+ .terminal-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
481
+ .t-prompt{color:var(--neon-green)}
482
+ .t-cmd{color:var(--text)}
483
+ .t-output{color:var(--dim)}
484
+ .t-accent{color:var(--accent2)}
485
+ .t-cyan{color:var(--neon-cyan)}
486
+ .t-gold{color:var(--gold)}
487
+ .t-success{color:var(--neon-green)}
488
+ .t-error{color:var(--neon-pink)}
489
+
490
+ /* ── Footer ───────────────────────────────────────── */
491
+ footer{
492
+ padding:16px 24px;text-align:center;font-size:.65rem;color:var(--dim);
493
+ border-top:1px solid var(--border);letter-spacing:.06em;line-height:1.8;
494
+ background:linear-gradient(180deg, transparent, rgba(255,255,255,.02));
495
+ }
496
+ footer a{color:var(--neon-cyan);font-weight:600}
497
+ footer .footer-links{display:flex;gap:16px;justify-content:center;margin-top:6px;flex-wrap:wrap}
498
+
499
+ /* ── Page entrance animation system ──────────────── */
500
+ @keyframes revealUp{
501
+ from{opacity:0;transform:translateY(18px)}
502
+ to{opacity:1;transform:translateY(0)}
503
+ }
504
+ @keyframes revealScale{
505
+ from{opacity:0;transform:scale(.97)}
506
+ to{opacity:1;transform:scale(1)}
507
+ }
508
+ @keyframes headerSlide{
509
+ from{opacity:0;transform:translateY(-100%)}
510
+ to{opacity:1;transform:translateY(0)}
511
+ }
512
+ @keyframes shimmerGlow{
513
+ 0%{background-position:200% 0}
514
+ 100%{background-position:-200% 0}
515
+ }
516
+ @keyframes ambientDrift{
517
+ 0%{transform:translate(0,0) scale(1)}
518
+ 33%{transform:translate(2%,-1%) scale(1.02)}
519
+ 66%{transform:translate(-1%,2%) scale(.98)}
520
+ 100%{transform:translate(0,0) scale(1)}
521
+ }
522
+ @keyframes borderGlow{
523
+ 0%,100%{opacity:.5}
524
+ 50%{opacity:1}
525
+ }
526
+ header{animation:headerSlide .5s cubic-bezier(.22,1,.36,1) both}
527
+ .reveal{opacity:0;animation:revealUp .6s cubic-bezier(.22,1,.36,1) both}
528
+ .reveal-1{animation-delay:.08s}
529
+ .reveal-2{animation-delay:.16s}
530
+ .reveal-3{animation-delay:.24s}
531
+ .reveal-4{animation-delay:.32s}
532
+ .reveal-5{animation-delay:.40s}
533
+ .reveal-6{animation-delay:.48s}
534
+ .reveal-7{animation-delay:.56s}
535
+ .reveal-8{animation-delay:.64s}
536
+ .reveal-scale{opacity:0;animation:revealScale .5s cubic-bezier(.22,1,.36,1) both}
537
+
538
+ /* ── Animated ambient background ────────────────── */
539
+ .ambient-layer{
540
+ position:fixed;inset:-10%;z-index:0;pointer-events:none;
541
+ background:
542
+ radial-gradient(ellipse at 15% 20%, rgba(255,90,31,.16), transparent 40%),
543
+ radial-gradient(ellipse at 78% 15%, rgba(0,240,255,.12), transparent 38%),
544
+ radial-gradient(ellipse at 60% 80%, rgba(176,38,255,.11), transparent 40%),
545
+ radial-gradient(ellipse at 30% 70%, rgba(255,215,0,.06), transparent 35%);
546
+ animation:ambientDrift 25s ease-in-out infinite;
547
+ filter:blur(60px);
548
+ }
549
+
550
+ /* Terminal theme uses collage+fade background. */
551
+ .ambient-layer{display:none}
552
+
553
+ /* ── Header accent underline ────────────────────── */
554
+ header::after{
555
+ content:'';position:absolute;bottom:-1px;left:0;right:0;height:2px;
556
+ background:linear-gradient(90deg, var(--accent), var(--neon-cyan), var(--accent));
557
+ background-size:300% 100%;
558
+ animation:shimmerGlow 6s linear infinite;
559
+ opacity:.6;
560
+ }
561
+
562
+ /* ── Panel gradient border effect ────────────────── */
563
+ .panel{position:relative}
564
+ .panel::before{
565
+ content:'';position:absolute;inset:-1px;border-radius:var(--radius);z-index:-1;
566
+ background:linear-gradient(135deg, rgba(207,255,4,.15), rgba(99,215,255,.1), rgba(0,255,0,.08));
567
+ opacity:0;transition:opacity .4s;
568
+ animation:borderGlow 4s ease-in-out infinite;
569
+ }
570
+ .panel:hover::before{opacity:1}
571
+
572
+ /* ── Stat counter enhancement ────────────────────── */
573
+ .stat{position:relative}
574
+ .stat-value{
575
+ position:relative;
576
+ padding:2px 0;
577
+ }
578
+
579
+ /* ── Agent card inner glow ───────────────────────── */
580
+ .agent-card::after{
581
+ content:'';position:absolute;top:0;left:0;right:0;bottom:0;
582
+ background:radial-gradient(ellipse at 50% 0%, rgba(207,255,4,.06), transparent 60%);
583
+ opacity:0;transition:opacity .3s;pointer-events:none;
584
+ }
585
+ .agent-card:hover::after{opacity:1}
586
+ .agent-card.verified-card::after{
587
+ background:radial-gradient(ellipse at 50% 0%, rgba(57,255,20,.08), transparent 60%);
588
+ }
589
+
590
+ /* ── NFT card shimmer effect ─────────────────────── */
591
+ .nft-card{position:relative}
592
+ .nft-card::after{
593
+ content:'';position:absolute;inset:0;
594
+ background:linear-gradient(105deg, transparent 40%, rgba(255,255,255,.06) 45%, transparent 50%);
595
+ background-size:200% 100%;
596
+ opacity:0;transition:opacity .3s;pointer-events:none;
597
+ }
598
+ .nft-card:hover::after{
599
+ opacity:1;
600
+ animation:shimmerGlow 1.4s ease-in-out;
601
+ }
602
+
603
+ /* ── Feed item hover highlight ───────────────────── */
604
+ .feed-item{
605
+ transition:background .2s;border-radius:6px;padding:10px 6px;margin:0 -6px;
606
+ }
607
+ .feed-item:hover{background:rgba(255,255,255,.02)}
608
+
609
+ /* ── Bridge item enhancement ─────────────────────── */
610
+ .bridge-item{transition:border-color .2s,box-shadow .2s}
611
+ .bridge-item:hover{border-color:rgba(0,240,255,.3);box-shadow:0 0 12px rgba(0,240,255,.08)}
612
+
613
+ /* ── Collection chip enhancement ─────────────────── */
614
+ .col-chip{transition:border-color .2s,background .2s,transform .15s,box-shadow .2s}
615
+ .col-chip:hover,.col-chip.active{
616
+ border-color:var(--accent);background:rgba(207,255,4,.06);
617
+ transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.2);
618
+ }
619
+
620
+ /* ── Chat message hover ──────────────────────────── */
621
+ .chat-msg{transition:border-color .2s,background .2s}
622
+ .chat-msg:hover{border-color:rgba(255,255,255,.08);background:rgba(255,255,255,.02)}
623
+ .chat-msg.self:hover{border-color:rgba(207,255,4,.35);background:rgba(207,255,4,.06)}
624
+
625
+ /* ── Chat empty state enhancement ────────────────── */
626
+ .chat-empty{
627
+ text-align:center;padding:48px 24px;color:var(--dim);font-size:.78rem;
628
+ background:radial-gradient(ellipse at 50% 60%, rgba(0,240,255,.04), transparent 60%);
629
+ }
630
+ .chat-empty .chat-empty-icon{
631
+ font-size:2.8rem;margin-bottom:12px;
632
+ filter:drop-shadow(0 0 16px rgba(0,240,255,.3));
633
+ animation:pulse 3s ease-in-out infinite;
634
+ }
635
+ .chat-empty p{margin-top:8px;color:var(--dim);font-size:.72rem;line-height:1.5;max-width:280px;margin-left:auto;margin-right:auto}
636
+
637
+ /* ── Terminal enhancement ────────────────────────── */
638
+ .terminal-body{
639
+ background:linear-gradient(180deg, rgba(0,0,0,.15), transparent);
640
+ }
641
+ .terminal-header{position:relative}
642
+ .terminal-header::after{
643
+ content:'';position:absolute;bottom:-1px;left:0;right:0;height:1px;
644
+ background:linear-gradient(90deg, transparent, rgba(0,240,255,.2), transparent);
645
+ }
646
+
647
+ /* ── Text selection ──────────────────────────────── */
648
+ ::selection{background:rgba(207,255,4,.3);color:#fff}
649
+ ::-moz-selection{background:rgba(207,255,4,.3);color:#fff}
650
+
651
+ /* ── Global focus-visible ────────────────────────── */
652
+ :focus-visible{
653
+ outline:2px solid rgba(0,240,255,.5);
654
+ outline-offset:2px;
655
+ }
656
+
657
+ /* ── Scrollbar global styling ────────────────────── */
658
+ *::-webkit-scrollbar{width:5px;height:5px}
659
+ *::-webkit-scrollbar-track{background:transparent}
660
+ *::-webkit-scrollbar-thumb{background:rgba(45,45,88,.7);border-radius:3px}
661
+ *::-webkit-scrollbar-thumb:hover{background:rgba(0,240,255,.3)}
662
+
663
+ /* ── Policy bar enhancement ──────────────────────── */
664
+ .policy-bar{
665
+ box-shadow:var(--panel-shadow);
666
+ background:linear-gradient(180deg, rgba(255,255,255,.015), transparent), var(--surface);
667
+ }
668
+ .policy-item{transition:transform .15s}
669
+ .policy-item:hover{transform:translateY(-1px)}
670
+
671
+ /* ── Setup step hover ────────────────────────────── */
672
+ .setup-step{
673
+ padding:16px;border-radius:var(--radius);
674
+ transition:background .2s,box-shadow .2s;
675
+ }
676
+ .setup-step:hover{
677
+ background:rgba(255,255,255,.02);
678
+ box-shadow:0 4px 16px rgba(0,0,0,.15);
679
+ }
680
+ .setup-step-num{
681
+ box-shadow:0 0 8px var(--accent-glow);
682
+ transition:transform .2s,box-shadow .2s;
683
+ }
684
+ .setup-step:hover .setup-step-num{
685
+ transform:scale(1.05);
686
+ box-shadow:0 0 14px var(--accent-glow);
687
+ }
688
+
689
+ /* ── Footer enhancement ──────────────────────────── */
690
+ footer{position:relative}
691
+ footer::before{
692
+ content:'';position:absolute;top:0;left:10%;right:10%;height:1px;
693
+ background:linear-gradient(90deg, transparent, rgba(207,255,4,.3), transparent);
694
+ }
695
+
696
+ /* ── Responsive ───────────────────────────────────── */
697
+ @media(max-width:1100px){
698
+ .setup-grid{grid-template-columns:1fr}
699
+ }
700
+ @media(max-width:900px){
701
+ .main{grid-template-columns:1fr}
702
+ .agents-grid{grid-template-columns:1fr 1fr}
703
+ .header-stats{gap:12px}
704
+ .header-links{flex-wrap:wrap}
705
+ }
706
+ @media(max-width:600px){
707
+ .agents-grid{grid-template-columns:1fr}
708
+ header{flex-wrap:wrap}
709
+ .header-right{margin-left:0;width:100%;justify-content:space-between;flex-wrap:wrap;gap:8px}
710
+ .chat-auth-bar{gap:8px}
711
+ .chat-auth-bar input{width:100%}
712
+ .chat-auth-bar .chat-auth-status{margin-left:0}
713
+ }
714
+
715
+ /* ── Platform stats bar ──────────────────────────── */
716
+ .platform-stats-bar{
717
+ display:flex;flex-wrap:wrap;gap:6px 16px;
718
+ padding:14px 24px;margin-bottom:2px;
719
+ background:linear-gradient(90deg, rgba(207,255,4,.03), rgba(99,215,255,.03));
720
+ border-bottom:1px solid var(--border);
721
+ position:relative;z-index:1;
722
+ backdrop-filter:blur(4px);
723
+ }
724
+ .platform-stat{
725
+ display:flex;align-items:center;gap:6px;
726
+ font-size:.7rem;color:var(--dim);
727
+ transition:color .2s;
728
+ }
729
+ .platform-stat:hover{color:var(--text)}
730
+ .platform-stat .ps-icon{font-size:.85rem}
731
+ .platform-stat .ps-val{
732
+ font-family:var(--font-mono);font-weight:800;color:var(--accent);
733
+ font-size:.85rem;min-width:24px;
734
+ }
735
+ .platform-stat .ps-label{letter-spacing:.06em;text-transform:uppercase;font-size:.58rem}
736
+ .platform-stat.highlight .ps-val{color:var(--neon-green);text-shadow:0 0 8px rgba(57,255,20,.4)}
737
+ @keyframes statPulse{0%,100%{opacity:1}50%{opacity:.6}}
738
+ .platform-stat.pulsing .ps-val{animation:statPulse 1.5s ease-in-out 3}
739
+
740
+ /* ── Skills library panel ────────────────────────── */
741
+ .skills-panel-grid{
742
+ display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;
743
+ max-height:400px;overflow-y:auto;padding:4px 0;
744
+ }
745
+ .skill-mini-card{
746
+ background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
747
+ padding:10px 12px;position:relative;overflow:hidden;
748
+ transition:border-color .2s,box-shadow .2s,transform .15s;cursor:default;
749
+ }
750
+ .skill-mini-card:hover{
751
+ border-color:rgba(0,240,255,.35);
752
+ box-shadow:0 0 14px rgba(0,240,255,.08);
753
+ transform:translateY(-1px);
754
+ }
755
+ .skill-mini-card::before{
756
+ content:'';position:absolute;top:0;left:0;bottom:0;width:3px;
757
+ background:var(--accent);
758
+ }
759
+ .skill-mini-card[data-tier="low"]::before{background:var(--neon-green)}
760
+ .skill-mini-card[data-tier="medium"]::before{background:var(--gold)}
761
+ .skill-mini-card[data-tier="high"]::before{background:#ff4444}
762
+ .skill-mini-card[data-tier="critical"]::before{background:#ff0055}
763
+ .skill-mini-name{font-size:.72rem;font-weight:700;color:var(--text);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
764
+ .skill-mini-desc{font-size:.6rem;color:var(--dim);line-height:1.4;max-height:2.8em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
765
+ .skill-mini-meta{display:flex;gap:6px;margin-top:5px;font-size:.55rem;color:var(--dim)}
766
+ .skill-mini-meta .sms{font-family:var(--font-mono);padding:1px 5px;border-radius:3px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06)}
767
+ .skill-mini-meta .sms.src-seed{color:var(--accent);border-color:rgba(207,255,4,.2)}
768
+ .skill-mini-meta .sms.src-imported{color:var(--neon-green);border-color:rgba(57,255,20,.2)}
769
+ .skill-mini-meta .sms.src-user{color:#a78bfa;border-color:rgba(167,139,250,.2)}
770
+ .skill-mini-meta .sms.onchain{color:var(--gold);border-color:rgba(243,202,64,.2)}
771
+ .skills-summary-row{
772
+ display:flex;flex-wrap:wrap;gap:12px;padding:8px 0;
773
+ border-bottom:1px solid rgba(255,255,255,.04);margin-bottom:8px;
774
+ }
775
+ .skills-summary-stat{
776
+ display:flex;align-items:center;gap:5px;font-size:.65rem;
777
+ }
778
+ .skills-summary-stat .ss-num{font-family:var(--font-mono);font-weight:800;color:var(--accent);font-size:.8rem}
779
+ .skills-summary-stat .ss-label{color:var(--dim);text-transform:uppercase;letter-spacing:.06em;font-size:.55rem}
780
+ .skills-recent-label{
781
+ font-size:.6rem;color:var(--dim);text-transform:uppercase;letter-spacing:.1em;
782
+ margin:8px 0 6px;
783
+ }
784
+
785
+ /* ── Reduced motion ──────────────────────────────── */
786
+ @media(prefers-reduced-motion:reduce){
787
+ *,*::before,*::after{
788
+ animation-duration:0.001ms !important;
789
+ animation-iteration-count:1 !important;
790
+ transition-duration:0.001ms !important;
791
+ }
792
+ }