ethagent 1.1.2 → 2.0.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 (268) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +126 -30
  3. package/package.json +7 -2
  4. package/src/app/FirstRun.tsx +190 -146
  5. package/src/app/FirstRunTimeline.tsx +47 -0
  6. package/src/app/input/AppInputProvider.tsx +1 -1
  7. package/src/app/keybindings/KeybindingProvider.tsx +1 -1
  8. package/src/chat/ChatBottomPane.tsx +0 -1
  9. package/src/chat/ChatInput.tsx +6 -6
  10. package/src/chat/ChatScreen.tsx +35 -15
  11. package/src/chat/ContextLimitView.tsx +4 -4
  12. package/src/chat/ContinuityEditReviewView.tsx +10 -22
  13. package/src/chat/CopyPicker.tsx +0 -1
  14. package/src/chat/MessageList.tsx +62 -45
  15. package/src/chat/PermissionPrompt.tsx +13 -9
  16. package/src/chat/PlanApprovalView.tsx +3 -3
  17. package/src/chat/ResumeView.tsx +1 -4
  18. package/src/chat/RewindView.tsx +2 -2
  19. package/src/chat/chatInputState.ts +1 -1
  20. package/src/chat/chatScreenUtils.ts +22 -11
  21. package/src/chat/chatSessionState.ts +2 -2
  22. package/src/chat/chatTurnOrchestrator.ts +16 -81
  23. package/src/chat/commands.ts +1 -1
  24. package/src/chat/textCursor.ts +1 -1
  25. package/src/chat/transcriptViewport.ts +2 -7
  26. package/src/cli/ResetConfirmView.tsx +1 -1
  27. package/src/cli/main.tsx +9 -3
  28. package/src/cli/preview.tsx +0 -5
  29. package/src/cli/updateNotice.ts +4 -2
  30. package/src/identity/continuity/editor.ts +7 -107
  31. package/src/identity/continuity/envelope.ts +1048 -40
  32. package/src/identity/continuity/history.ts +4 -4
  33. package/src/identity/continuity/localBackup.ts +249 -0
  34. package/src/identity/continuity/privateEdit/apply.ts +170 -0
  35. package/src/identity/continuity/privateEdit/diff.ts +82 -0
  36. package/src/identity/continuity/privateEdit/files.ts +23 -0
  37. package/src/identity/continuity/privateEdit/types.ts +28 -0
  38. package/src/identity/continuity/privateEdit.ts +10 -298
  39. package/src/identity/continuity/publicSkills.ts +8 -9
  40. package/src/identity/continuity/snapshots.ts +17 -6
  41. package/src/identity/continuity/storage/defaults.ts +111 -0
  42. package/src/identity/continuity/storage/files.ts +72 -0
  43. package/src/identity/continuity/storage/markdown.ts +81 -0
  44. package/src/identity/continuity/storage/paths.ts +24 -0
  45. package/src/identity/continuity/storage/scaffold.ts +124 -0
  46. package/src/identity/continuity/storage/status.ts +86 -0
  47. package/src/identity/continuity/storage/types.ts +27 -0
  48. package/src/identity/continuity/storage.ts +32 -507
  49. package/src/identity/continuity/zipWriter.ts +95 -0
  50. package/src/identity/crypto/backupEnvelope.ts +14 -247
  51. package/src/identity/crypto/eth.ts +7 -7
  52. package/src/identity/ens/agentRecords.ts +96 -0
  53. package/src/identity/ens/ensAutomation/contracts.ts +38 -0
  54. package/src/identity/ens/ensAutomation/delete.ts +80 -0
  55. package/src/identity/ens/ensAutomation/names.ts +14 -0
  56. package/src/identity/ens/ensAutomation/operators.ts +29 -0
  57. package/src/identity/ens/ensAutomation/read.ts +114 -0
  58. package/src/identity/ens/ensAutomation/root.ts +63 -0
  59. package/src/identity/ens/ensAutomation/setup.ts +284 -0
  60. package/src/identity/ens/ensAutomation/transactions.ts +107 -0
  61. package/src/identity/ens/ensAutomation/types.ts +126 -0
  62. package/src/identity/ens/ensAutomation.ts +29 -0
  63. package/src/identity/ens/ensLookup/client.ts +43 -0
  64. package/src/identity/ens/ensLookup/constants.ts +26 -0
  65. package/src/identity/ens/ensLookup/discovery.ts +70 -0
  66. package/src/identity/ens/ensLookup/names.ts +34 -0
  67. package/src/identity/ens/ensLookup/records.ts +45 -0
  68. package/src/identity/ens/ensLookup/resolve.ts +75 -0
  69. package/src/identity/ens/ensLookup/tokenReference.ts +17 -0
  70. package/src/identity/ens/ensLookup/types.ts +38 -0
  71. package/src/identity/ens/ensLookup/validation.ts +72 -0
  72. package/src/identity/ens/ensLookup.ts +19 -0
  73. package/src/identity/ens/ensRegistration.ts +199 -0
  74. package/src/identity/ens/resolverDelegation.ts +48 -0
  75. package/src/identity/hub/IdentityHub.tsx +13 -817
  76. package/src/identity/hub/OperationalRoutes.tsx +370 -0
  77. package/src/identity/hub/Routes.tsx +361 -0
  78. package/src/identity/hub/advancedEnsValidation.ts +45 -0
  79. package/src/identity/hub/{screens → components}/DetailsScreen.tsx +14 -8
  80. package/src/identity/hub/{screens → components}/ErrorScreen.tsx +15 -5
  81. package/src/identity/hub/components/FlowTimeline.tsx +27 -0
  82. package/src/identity/hub/components/IdentitySummary.tsx +190 -0
  83. package/src/identity/hub/components/MenuScreen.tsx +237 -0
  84. package/src/identity/hub/{screens → components}/NetworkScreen.tsx +3 -3
  85. package/src/identity/hub/{screens/RebackupStorageScreen.tsx → components/PinataJwtInput.tsx} +21 -18
  86. package/src/identity/hub/components/UnlinkedIdentityScreen.tsx +76 -0
  87. package/src/identity/hub/{screens → components}/WalletApprovalScreen.tsx +9 -8
  88. package/src/identity/hub/components/menuFlagsFromReconciliation.ts +68 -0
  89. package/src/identity/hub/effects/create.ts +310 -0
  90. package/src/identity/hub/effects/ens/flows.ts +218 -0
  91. package/src/identity/hub/effects/ens/index.ts +11 -0
  92. package/src/identity/hub/effects/ens/transactions.ts +239 -0
  93. package/src/identity/hub/effects/index.ts +74 -0
  94. package/src/identity/hub/effects/profile/profileState.ts +173 -0
  95. package/src/identity/hub/effects/publicProfile/index.ts +5 -0
  96. package/src/identity/hub/effects/publicProfile/runPublicProfileSave.ts +646 -0
  97. package/src/identity/hub/effects/rebackup/index.ts +7 -0
  98. package/src/identity/hub/effects/rebackup/operatorVault.ts +378 -0
  99. package/src/identity/hub/effects/rebackup/runRebackup.ts +451 -0
  100. package/src/identity/hub/effects/receipts.ts +46 -0
  101. package/src/identity/hub/effects/restore/apply.ts +112 -0
  102. package/src/identity/hub/effects/restore/auth.ts +159 -0
  103. package/src/identity/hub/effects/restore/discover.ts +86 -0
  104. package/src/identity/hub/effects/restore/envelopes.ts +21 -0
  105. package/src/identity/hub/effects/restore/fetch.ts +25 -0
  106. package/src/identity/hub/effects/restore/index.ts +22 -0
  107. package/src/identity/hub/effects/restore/recovery.ts +135 -0
  108. package/src/identity/hub/effects/restore/resolve.ts +102 -0
  109. package/src/identity/hub/effects/restore/restoreEffects.ts +22 -0
  110. package/src/identity/hub/effects/restore/shared.ts +91 -0
  111. package/src/identity/hub/effects/restoreAdmin.ts +93 -0
  112. package/src/identity/hub/effects/shared/profilePrep.ts +139 -0
  113. package/src/identity/hub/effects/shared/snapshot.ts +336 -0
  114. package/src/identity/hub/effects/shared/sync.ts +190 -0
  115. package/src/identity/hub/effects/token-transfer/index.ts +6 -0
  116. package/src/identity/hub/effects/token-transfer/progress.ts +59 -0
  117. package/src/identity/hub/effects/token-transfer/runTokenTransfer.ts +299 -0
  118. package/src/identity/hub/effects/types.ts +53 -0
  119. package/src/identity/hub/effects/vault/preflight.ts +50 -0
  120. package/src/identity/hub/flows/continuity/ContinuityDashboardScreen.tsx +170 -0
  121. package/src/identity/hub/flows/continuity/RebackupStorageScreen.tsx +28 -0
  122. package/src/identity/hub/{screens → flows/continuity}/RecoveryConfirmScreen.tsx +28 -19
  123. package/src/identity/hub/flows/continuity/SavePromptScreen.tsx +49 -0
  124. package/src/identity/hub/{screens → flows/create}/CreateFlow.tsx +61 -62
  125. package/src/identity/hub/flows/custody/CustodyEditFlow.tsx +347 -0
  126. package/src/identity/hub/flows/custody/custodyEffects.ts +321 -0
  127. package/src/identity/hub/flows/custody/custodyFlowActions.ts +236 -0
  128. package/src/identity/hub/flows/custody/custodyFlowEffects.ts +163 -0
  129. package/src/identity/hub/flows/custody/custodyFlowHelpers.ts +25 -0
  130. package/src/identity/hub/flows/custody/custodyFlowRoutes.tsx +239 -0
  131. package/src/identity/hub/flows/custody/custodyFlowTypes.ts +45 -0
  132. package/src/identity/hub/flows/custody/useCustodyFlow.tsx +25 -0
  133. package/src/identity/hub/flows/ens/EnsEditAdvancedScreens.tsx +336 -0
  134. package/src/identity/hub/flows/ens/EnsEditFlow.tsx +397 -0
  135. package/src/identity/hub/flows/ens/EnsEditMaintenanceScreens.tsx +332 -0
  136. package/src/identity/hub/flows/ens/EnsEditReviewScreens.tsx +471 -0
  137. package/src/identity/hub/flows/ens/EnsEditRunners.tsx +198 -0
  138. package/src/identity/hub/flows/ens/EnsEditShared.tsx +162 -0
  139. package/src/identity/hub/flows/ens/EnsEditSimpleScreens.tsx +518 -0
  140. package/src/identity/hub/flows/ens/IdentityHubEnsFlow.tsx +299 -0
  141. package/src/identity/hub/flows/ens/OperatorWalletsScreen.tsx +398 -0
  142. package/src/identity/hub/flows/ens/ensEditCopy.ts +117 -0
  143. package/src/identity/hub/flows/ens/ensEditTypes.ts +91 -0
  144. package/src/identity/hub/flows/profile/EditProfileFlow.tsx +271 -0
  145. package/src/identity/hub/flows/restore/RestoreFlow.tsx +324 -0
  146. package/src/identity/hub/flows/restore/useRestoreFlowEffects.ts +77 -0
  147. package/src/identity/hub/{screens → flows/settings}/StorageCredentialScreen.tsx +23 -44
  148. package/src/identity/hub/flows/token-transfer/IdentityHubTokenTransferFlow.tsx +162 -0
  149. package/src/identity/hub/flows/token-transfer/TokenTransferScreens.tsx +256 -0
  150. package/src/identity/hub/identityHubReducer.ts +164 -99
  151. package/src/identity/hub/model/continuity.ts +94 -0
  152. package/src/identity/hub/model/copy.ts +35 -0
  153. package/src/identity/hub/model/custody.ts +54 -0
  154. package/src/identity/hub/model/ens.ts +49 -0
  155. package/src/identity/hub/model/errors.ts +140 -0
  156. package/src/identity/hub/model/format.ts +15 -0
  157. package/src/identity/hub/model/identity.ts +94 -0
  158. package/src/identity/hub/model/network.ts +32 -0
  159. package/src/identity/hub/model/transfer.ts +57 -0
  160. package/src/identity/hub/operatorWallets.ts +131 -0
  161. package/src/identity/hub/reconciliation/agentReconciliation/hook.ts +46 -0
  162. package/src/identity/hub/reconciliation/agentReconciliation/ownership.ts +129 -0
  163. package/src/identity/hub/reconciliation/agentReconciliation/run.ts +302 -0
  164. package/src/identity/hub/reconciliation/agentReconciliation/types.ts +17 -0
  165. package/src/identity/hub/reconciliation/index.ts +21 -0
  166. package/src/identity/hub/reconciliation/useAgentReconciliation.ts +10 -0
  167. package/src/identity/hub/reconciliation/walletSetup.ts +220 -0
  168. package/src/identity/hub/txGuard.ts +51 -0
  169. package/src/identity/hub/types.ts +17 -0
  170. package/src/identity/hub/useIdentityHubContinuity.ts +136 -0
  171. package/src/identity/hub/useIdentityHubController.ts +396 -0
  172. package/src/identity/hub/useIdentityHubSideEffects.ts +309 -0
  173. package/src/identity/hub/utils.ts +79 -0
  174. package/src/identity/identityCompat.ts +34 -0
  175. package/src/identity/profile/agentIcon.ts +61 -0
  176. package/src/identity/profile/imagePicker.ts +12 -12
  177. package/src/identity/registry/erc8004/abi.ts +14 -0
  178. package/src/identity/registry/erc8004/chains.ts +150 -0
  179. package/src/identity/registry/erc8004/client.ts +11 -0
  180. package/src/identity/registry/erc8004/discovery.ts +511 -0
  181. package/src/identity/registry/erc8004/metadata.ts +335 -0
  182. package/src/identity/registry/erc8004/ownership.ts +121 -0
  183. package/src/identity/registry/erc8004/preflight.ts +123 -0
  184. package/src/identity/registry/erc8004/transactions.ts +77 -0
  185. package/src/identity/registry/erc8004/types.ts +88 -0
  186. package/src/identity/registry/erc8004/uri.ts +59 -0
  187. package/src/identity/registry/erc8004/utils.ts +58 -0
  188. package/src/identity/registry/erc8004.ts +53 -1106
  189. package/src/identity/registry/fieldParsers.ts +28 -0
  190. package/src/identity/registry/operatorVault/bytecode.ts +98 -0
  191. package/src/identity/registry/operatorVault/constants.ts +38 -0
  192. package/src/identity/registry/operatorVault/read.ts +246 -0
  193. package/src/identity/registry/operatorVault/transactions.ts +81 -0
  194. package/src/identity/registry/operatorVault.ts +44 -0
  195. package/src/identity/storage/ipfs.ts +26 -24
  196. package/src/identity/wallet/browserWallet/gas.ts +41 -0
  197. package/src/identity/wallet/browserWallet/html.ts +106 -0
  198. package/src/identity/wallet/browserWallet/http.ts +28 -0
  199. package/src/identity/wallet/browserWallet/requestServer.ts +106 -0
  200. package/src/identity/wallet/browserWallet/requests.ts +191 -0
  201. package/src/identity/wallet/browserWallet/session.ts +325 -0
  202. package/src/identity/wallet/browserWallet/types.ts +192 -0
  203. package/src/identity/wallet/browserWallet/validation.ts +74 -0
  204. package/src/identity/wallet/browserWallet.ts +30 -393
  205. package/src/identity/wallet/page/constants.ts +5 -0
  206. package/src/identity/wallet/page/controller.ts +251 -0
  207. package/src/identity/wallet/page/copy.ts +340 -0
  208. package/src/identity/wallet/page/grainient.ts +278 -0
  209. package/src/identity/wallet/page/html.ts +28 -0
  210. package/src/identity/wallet/page/markup.ts +50 -0
  211. package/src/identity/wallet/page/state.ts +9 -0
  212. package/src/identity/wallet/page/styles/base.ts +259 -0
  213. package/src/identity/wallet/page/styles/components.ts +262 -0
  214. package/src/identity/wallet/page/styles/index.ts +5 -0
  215. package/src/identity/wallet/page/styles/responsive.ts +247 -0
  216. package/src/identity/wallet/page/types.ts +47 -0
  217. package/src/identity/wallet/page/view.ts +535 -0
  218. package/src/identity/wallet/page/walletProvider.ts +70 -0
  219. package/src/identity/wallet/page.tsx +38 -0
  220. package/src/identity/wallet/walletPurposeCompat.ts +27 -0
  221. package/src/mcp/manager.ts +0 -1
  222. package/src/models/ModelPicker.tsx +36 -30
  223. package/src/models/catalog.ts +5 -2
  224. package/src/models/huggingface.ts +9 -9
  225. package/src/models/llamacpp.ts +13 -13
  226. package/src/models/modelDisplay.ts +75 -0
  227. package/src/models/modelPickerOptions.ts +16 -3
  228. package/src/models/modelRecommendation.ts +0 -1
  229. package/src/providers/errors.ts +16 -0
  230. package/src/providers/gemini.ts +252 -39
  231. package/src/providers/registry.ts +2 -2
  232. package/src/providers/retry.ts +1 -1
  233. package/src/runtime/sessionMode.ts +1 -1
  234. package/src/runtime/systemPrompt.ts +2 -0
  235. package/src/runtime/toolExecution.ts +18 -22
  236. package/src/runtime/toolIntent.ts +0 -20
  237. package/src/runtime/turn.ts +0 -92
  238. package/src/storage/atomicWrite.ts +4 -1
  239. package/src/storage/config.ts +181 -5
  240. package/src/storage/identity.ts +9 -3
  241. package/src/storage/secrets.ts +2 -2
  242. package/src/tools/bashSafety.ts +8 -0
  243. package/src/tools/changeDirectoryTool.ts +1 -1
  244. package/src/tools/deleteFileTool.ts +4 -4
  245. package/src/tools/editTool.ts +4 -4
  246. package/src/tools/editUtils.ts +5 -5
  247. package/src/tools/privateContinuityEditTool.ts +4 -5
  248. package/src/tools/privateContinuityReadTool.ts +1 -2
  249. package/src/tools/registry.ts +30 -0
  250. package/src/tools/writeFileTool.ts +5 -5
  251. package/src/ui/BrandSplash.tsx +20 -85
  252. package/src/ui/ProgressBar.tsx +3 -5
  253. package/src/ui/Select.tsx +20 -8
  254. package/src/ui/Spinner.tsx +38 -3
  255. package/src/ui/Surface.tsx +2 -2
  256. package/src/ui/TextInput.tsx +63 -20
  257. package/src/ui/theme.ts +7 -34
  258. package/src/utils/openExternal.ts +21 -0
  259. package/src/utils/withRetry.ts +47 -3
  260. package/src/identity/hub/identityHubEffects.ts +0 -937
  261. package/src/identity/hub/identityHubModel.ts +0 -371
  262. package/src/identity/hub/screens/ContinuityDashboardScreen.tsx +0 -156
  263. package/src/identity/hub/screens/EditProfileFlow.tsx +0 -146
  264. package/src/identity/hub/screens/IdentitySummary.tsx +0 -106
  265. package/src/identity/hub/screens/MenuScreen.tsx +0 -117
  266. package/src/identity/hub/screens/RestoreFlow.tsx +0 -206
  267. package/src/identity/wallet/wallet-page/wallet.html +0 -1202
  268. /package/src/identity/hub/{screens → components}/BusyScreen.tsx +0 -0
@@ -0,0 +1,50 @@
1
+ import { WALLET_CSS } from './styles/index.js'
2
+
3
+ export const CARD_HTML = `
4
+ <canvas id="grainient" class="grainient-canvas" aria-hidden="true"></canvas>
5
+ <main data-flow="sign" id="card">
6
+ <div class="chrome">
7
+ <span class="chrome-spacer"></span>
8
+ <span class="chrome-title" id="chrome-title">ethagent</span>
9
+ <span class="chrome-actions"></span>
10
+ </div>
11
+ <div class="body">
12
+ <div class="splash-wrap"><pre class="splash" id="splash"></pre></div>
13
+ <div class="head"><span class="label" id="prompt-text">signature request</span></div>
14
+ <h2 class="flow-title" id="flow-title">Sign Message</h2>
15
+ <ol class="timeline" id="timeline" hidden aria-label="Wallet flow steps"></ol>
16
+ <div class="details" id="details-block">
17
+ <p class="flow-detail" id="flow-detail">
18
+ <span class="key" id="detail-key">message</span>
19
+ <span id="detail-val"></span>
20
+ </p>
21
+ </div>
22
+ <div class="status" id="status-block">
23
+ <p class="status-line">
24
+ <span class="marker" id="status-marker"></span>
25
+ <span id="status-text">Connecting to your wallet…</span>
26
+ </p>
27
+ <p class="status-hint" id="status-hint">Open your wallet extension if it doesn't pop up automatically.</p>
28
+ <p class="status-hint" id="reconnect-hint" hidden>Reconnecting to terminal…</p>
29
+ </div>
30
+ <div id="error-block-slot"></div>
31
+ </div>
32
+ <div class="footer">
33
+ <span class="net-pill" id="network-row"><span class="dot"></span><span id="net-val">Sepolia</span></span>
34
+ <div class="actions">
35
+ <button id="cancel" class="shortcut"><span class="key">esc</span><span>cancel</span></button>
36
+ <button id="approve" class="shortcut primary" hidden>
37
+ <span class="key">enter</span><span>retry</span>
38
+ </button>
39
+ </div>
40
+ </div>
41
+ </main>
42
+ `;
43
+
44
+ export function injectStylesAndMarkup(): void {
45
+ const style = document.createElement("style");
46
+ style.id = "wallet-styles";
47
+ style.textContent = WALLET_CSS;
48
+ document.head.appendChild(style);
49
+ document.body.insertAdjacentHTML("afterbegin", CARD_HTML);
50
+ }
@@ -0,0 +1,9 @@
1
+ import type { WalletConfig } from './types.js'
2
+
3
+ export const config: WalletConfig =
4
+ (window.__WALLET_CONFIG__ as WalletConfig) || {
5
+ sessionToken: 'preview',
6
+ kind: 'sign',
7
+ chainIdHex: '0xaa36a7',
8
+ message: 'identity proof for 0x9F2a???BC4e',
9
+ }
@@ -0,0 +1,259 @@
1
+ export const BASE_CSS = String.raw`
2
+ *,
3
+ *::before,
4
+ *::after { box-sizing: border-box; }
5
+
6
+ :root {
7
+ interpolate-size: allow-keywords;
8
+ --font-ui: Inter, "SF Pro Text", "Segoe UI", system-ui, sans-serif;
9
+ --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas,
10
+ "DejaVu Sans Mono", "Liberation Mono", monospace;
11
+ --font-display: Inter, "SF Pro Display", "Segoe UI", system-ui, sans-serif;
12
+
13
+ --c-gray-900: #1f2330;
14
+ --c-gray-800: #2f364a;
15
+ --c-gray-700: #49526a;
16
+ --c-gray-500: #6f7890;
17
+ --c-gray-400: #949bb0;
18
+ --c-blue-400: #5f8fff;
19
+ --c-blue-500: #3f76ff;
20
+ --c-blue-700: #2954c6;
21
+ --c-danger: #e5484d;
22
+ --c-success: #1aa86b;
23
+
24
+ --mint-accent: #ededfd;
25
+ --mint-accent-strong: #d8dcfa;
26
+ --mint-accent-soft: rgba(237, 237, 253, 0.20);
27
+ --mint-glow: rgba(237, 237, 253, 0.32);
28
+ --c-text-accent: #9eaae0;
29
+
30
+ --ease-standard: cubic-bezier(0.2, 0.0, 0, 1);
31
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
32
+ --fg-1: #1f2330;
33
+ }
34
+
35
+ html, body { height: 100%; margin: 0; overflow: hidden; }
36
+
37
+ body {
38
+ position: relative;
39
+ font-family: var(--font-ui);
40
+ color: var(--fg-1);
41
+ background: #120f17;
42
+ display: grid;
43
+ place-items: center;
44
+ padding: clamp(18px, 3vw, 28px);
45
+ }
46
+
47
+
48
+ .grainient-canvas {
49
+ position: fixed;
50
+ inset: 0;
51
+ width: 100%;
52
+ height: 100%;
53
+ display: block;
54
+ z-index: 0;
55
+ pointer-events: none;
56
+ }
57
+
58
+ main {
59
+ position: relative;
60
+ z-index: 1;
61
+ width: min(700px, 100%);
62
+ max-height: calc(100dvh - 36px);
63
+ display: flex;
64
+ flex-direction: column;
65
+ background: #030509;
66
+ color: #f1f1f1;
67
+ border: 1px solid rgba(255, 255, 255, 0.06);
68
+ border-radius: 26px;
69
+ box-shadow:
70
+ 0 1px 0 rgba(255, 255, 255, 0.04) inset,
71
+ 0 -1px 0 rgba(0, 0, 0, 0.6) inset,
72
+ 0 30px 80px -20px rgba(0, 0, 0, 0.75),
73
+ 0 12px 28px -8px rgba(0, 0, 0, 0.5);
74
+ overflow: hidden;
75
+ height: fit-content;
76
+
77
+ --c-gray-900: #f1f1f1;
78
+ --c-gray-800: #d8d8d8;
79
+ --c-gray-700: #b0b0b0;
80
+ --c-gray-500: #8a8a8a;
81
+ --c-gray-400: #6f6f6f;
82
+ }
83
+
84
+
85
+ .chrome {
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ gap: 12px;
90
+ padding: 12px 14px 12px 20px;
91
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
92
+ background: transparent;
93
+ flex: none;
94
+ }
95
+
96
+ .chrome-spacer { flex: 1 1 0; min-width: 0; }
97
+
98
+ .chrome-title {
99
+ flex: 0 1 auto;
100
+ text-align: center;
101
+ font-size: 11.5px;
102
+ color: rgba(241, 241, 241, 0.55);
103
+ font-weight: 500;
104
+ letter-spacing: 0.01em;
105
+ margin: 0;
106
+ }
107
+
108
+ .chrome-actions {
109
+ flex: 1 1 0;
110
+ display: flex;
111
+ justify-content: flex-end;
112
+ align-items: center;
113
+ }
114
+
115
+
116
+ .body {
117
+ flex: 1;
118
+ min-height: 0;
119
+ padding: clamp(20px, 3vw, 28px) clamp(22px, 4vw, 32px) clamp(22px, 3vw, 30px);
120
+ display: flex;
121
+ flex-direction: column;
122
+ gap: 15px;
123
+ overflow: hidden;
124
+ }
125
+
126
+ .splash-wrap {
127
+ flex: none;
128
+ display: flex;
129
+ justify-content: center;
130
+ margin: 6px 0 2px;
131
+ padding: 4px 0;
132
+ }
133
+
134
+ .splash {
135
+ font-family: var(--font-mono);
136
+ font-size: clamp(9.5px, 1.35vw, 11px);
137
+ font-weight: 700;
138
+ line-height: 1.05;
139
+ letter-spacing: 0;
140
+ white-space: pre;
141
+ margin: 0;
142
+ text-align: left;
143
+ transform: scaleX(0.8);
144
+ transform-origin: 50% 50%;
145
+ color: rgba(255, 255, 255, 0.7);
146
+ }
147
+
148
+ .spinner {
149
+ display: inline-block;
150
+ width: 12px;
151
+ height: 12px;
152
+ border-radius: 999px;
153
+ border: 1.5px solid color-mix(in srgb, var(--accent) 28%, transparent);
154
+ border-top-color: var(--accent);
155
+ animation: spin 0.9s linear infinite;
156
+ }
157
+
158
+ @keyframes spin { to { transform: rotate(360deg); } }
159
+
160
+ [data-flow] {
161
+ --accent: var(--mint-accent);
162
+ --accent-soft: var(--mint-accent-soft);
163
+ --glow: var(--mint-glow);
164
+ }
165
+
166
+ main, .head .label, .status, .status-line, .status-hint, .flow-detail,
167
+ #error-block-slot, .net-pill {
168
+ transition: height 480ms var(--ease-standard),
169
+ background-color 320ms var(--ease-standard),
170
+ border-color 320ms var(--ease-standard),
171
+ color 320ms var(--ease-standard),
172
+ box-shadow 320ms var(--ease-standard);
173
+ }
174
+
175
+ .status-line, .status-hint {
176
+ transition: opacity 280ms var(--ease-standard),
177
+ transform 280ms var(--ease-standard),
178
+ color 320ms var(--ease-standard);
179
+ }
180
+
181
+ .status-line.is-changing, .status-hint.is-changing {
182
+ opacity: 0;
183
+ transform: translateY(-3px);
184
+ }
185
+
186
+ .head {
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: space-between;
190
+ gap: 12px;
191
+ }
192
+
193
+ .head .label {
194
+ font-family: var(--font-ui);
195
+ color: var(--c-gray-800);
196
+ font-size: 11.5px;
197
+ font-weight: 500;
198
+ letter-spacing: 0;
199
+ text-transform: capitalize;
200
+ display: inline-flex;
201
+ align-items: center;
202
+ gap: 6px;
203
+ padding: 5px 13px 5px 10px;
204
+ background: rgba(255, 255, 255, 0.08);
205
+ border-radius: 999px;
206
+ border: 1px solid rgba(255, 255, 255, 0.14);
207
+ backdrop-filter: blur(14px) saturate(140%);
208
+ -webkit-backdrop-filter: blur(14px) saturate(140%);
209
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3),
210
+ 0 1px 0 rgba(255, 255, 255, 0.08) inset;
211
+ }
212
+
213
+ .head .label::before {
214
+ content: "";
215
+ width: 7px;
216
+ height: 7px;
217
+ border-radius: 999px;
218
+ background: #d8dcfa;
219
+ border: 1px solid #a3a3c2;
220
+ }
221
+
222
+ .flow-title {
223
+ font-family: var(--font-display);
224
+ font-size: clamp(18px, 2.6vw, 20px);
225
+ font-weight: 600;
226
+ line-height: 1.22;
227
+ letter-spacing: 0;
228
+ margin: 0;
229
+ color: var(--c-gray-900);
230
+ text-wrap: balance;
231
+ }
232
+
233
+
234
+ .timeline {
235
+ list-style: none;
236
+ margin: 0;
237
+ padding: 14px 10px 4px;
238
+ display: flex;
239
+ align-items: flex-start;
240
+ justify-content: space-between;
241
+ gap: 4px;
242
+ background: transparent;
243
+ border: 0;
244
+ border-radius: 0;
245
+ box-shadow: none;
246
+ max-height: 96px;
247
+ opacity: 1;
248
+ overflow: visible;
249
+ position: relative;
250
+ transition: max-height 480ms var(--ease-standard),
251
+ padding 480ms var(--ease-standard),
252
+ margin 480ms var(--ease-standard),
253
+ opacity 480ms var(--ease-standard);
254
+ }
255
+
256
+ .timeline[hidden] {
257
+ display: flex;
258
+ max-height: 0;
259
+ `;
@@ -0,0 +1,262 @@
1
+ export const COMPONENT_CSS = String.raw`
2
+ opacity: 0;
3
+ padding-top: 0;
4
+ padding-bottom: 0;
5
+ margin-top: -6px;
6
+ overflow: hidden;
7
+ pointer-events: none;
8
+ }
9
+
10
+ .timeline-step {
11
+ position: relative;
12
+ flex: 1 1 0;
13
+ min-width: 0;
14
+ display: flex;
15
+ flex-direction: column;
16
+ align-items: center;
17
+ gap: 12px;
18
+ padding-top: 2px;
19
+ }
20
+
21
+
22
+ .timeline-step + .timeline-step::before {
23
+ content: "";
24
+ position: absolute;
25
+ top: 6px;
26
+ right: calc(50% + 9px);
27
+ left: calc(-50% + 9px);
28
+ height: 1.5px;
29
+ border-radius: 2px;
30
+ background: rgba(255, 255, 255, 0.09);
31
+ }
32
+
33
+
34
+ .timeline-step + .timeline-step::after {
35
+ content: "";
36
+ position: absolute;
37
+ top: 6px;
38
+ right: calc(50% + 9px);
39
+ left: calc(-50% + 9px);
40
+ height: 1.5px;
41
+ border-radius: 2px;
42
+ background: linear-gradient(
43
+ to right,
44
+ color-mix(in srgb, #d8dcfa 70%, transparent),
45
+ #d8dcfa
46
+ );
47
+ transform-origin: left center;
48
+ transform: scaleX(0);
49
+ transition: transform 620ms var(--ease-out);
50
+ }
51
+
52
+ .timeline-step[data-state="done"] + .timeline-step::after {
53
+ transform: scaleX(1);
54
+ }
55
+
56
+
57
+ .timeline-marker {
58
+ position: relative;
59
+ z-index: 1;
60
+ width: 10px;
61
+ height: 10px;
62
+ border-radius: 999px;
63
+ display: inline-block;
64
+ background: #030509;
65
+ border: 1.5px solid rgba(255, 255, 255, 0.22);
66
+ box-sizing: border-box;
67
+ transition: background 280ms var(--ease-standard),
68
+ border-color 280ms var(--ease-standard),
69
+ transform 280ms var(--ease-standard);
70
+ }
71
+
72
+ .timeline-step[data-state="active"] .timeline-marker {
73
+ background: var(--accent);
74
+ border-color: var(--accent);
75
+ transform: scale(1.1);
76
+ }
77
+
78
+
79
+ .timeline-step[data-state="active"] .timeline-marker::after {
80
+ content: "";
81
+ position: absolute;
82
+ inset: -5px;
83
+ border-radius: 999px;
84
+ border: 1.5px solid color-mix(in srgb, var(--accent) 38%, transparent);
85
+ animation: timeline-ping 1.9s var(--ease-out) infinite;
86
+ pointer-events: none;
87
+ }
88
+
89
+ @keyframes timeline-ping {
90
+ 0% { opacity: 0.85; transform: scale(0.62); }
91
+ 70% { opacity: 0; transform: scale(1.35); }
92
+ 100% { opacity: 0; transform: scale(1.35); }
93
+ }
94
+
95
+ .timeline-step[data-state="done"] .timeline-marker {
96
+ background: #d8dcfa;
97
+ border-color: #d8dcfa;
98
+ }
99
+
100
+ .timeline-label {
101
+ display: flex;
102
+ flex-direction: column;
103
+ align-items: center;
104
+ gap: 2px;
105
+ min-width: 0;
106
+ width: 100%;
107
+ text-align: center;
108
+ }
109
+
110
+ .timeline-action {
111
+ font-family: var(--font-ui);
112
+ font-size: 12px;
113
+ font-weight: 500;
114
+ color: rgba(241, 241, 241, 0.42);
115
+ line-height: 1.3;
116
+ white-space: nowrap;
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ max-width: 100%;
120
+ letter-spacing: 0;
121
+ transition: color 320ms var(--ease-standard),
122
+ font-weight 320ms var(--ease-standard),
123
+ opacity 320ms var(--ease-standard);
124
+ }
125
+
126
+ .timeline-step[data-state="active"] .timeline-action {
127
+ color: #ffffff;
128
+ font-weight: 600;
129
+ }
130
+
131
+ .timeline-step[data-state="done"] .timeline-action {
132
+ color: color-mix(in srgb, #d8dcfa 78%, rgba(241, 241, 241, 0.55));
133
+ font-weight: 500;
134
+ }
135
+
136
+
137
+ .details {
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: 9px;
141
+ padding: 14px 16px;
142
+ background: #080a10;
143
+ border: 1px solid rgba(255, 255, 255, 0.06);
144
+ border-radius: 14px;
145
+ box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.45),
146
+ 0 1px 0 rgba(255, 255, 255, 0.03) inset;
147
+ max-height: 210px;
148
+ opacity: 1;
149
+ margin-top: 0;
150
+ overflow: hidden;
151
+ transition: max-height 480ms var(--ease-standard),
152
+ padding 480ms var(--ease-standard),
153
+ margin 480ms var(--ease-standard),
154
+ opacity 480ms var(--ease-standard),
155
+ border-color 480ms var(--ease-standard),
156
+ box-shadow 480ms var(--ease-standard);
157
+ }
158
+
159
+ .details[hidden] {
160
+ display: flex;
161
+ max-height: 0;
162
+ opacity: 0;
163
+ padding-top: 0;
164
+ padding-bottom: 0;
165
+ margin-top: -14px;
166
+ border-color: transparent;
167
+ box-shadow: none;
168
+ pointer-events: none;
169
+ }
170
+
171
+ .flow-detail {
172
+ display: grid;
173
+ grid-template-columns: 96px 1fr;
174
+ align-items: center;
175
+ gap: 12px;
176
+ font-size: 13.5px;
177
+ color: var(--c-gray-700);
178
+ margin: 0;
179
+ line-height: 1.35;
180
+ }
181
+
182
+ .flow-detail[hidden] { display: none; }
183
+
184
+ .flow-detail .key {
185
+ font-family: var(--font-mono);
186
+ font-size: 10px;
187
+ font-weight: 500;
188
+ color: var(--c-gray-500);
189
+ text-transform: lowercase;
190
+ letter-spacing: 0.05em;
191
+ padding: 3px 8px;
192
+ background: rgba(255, 255, 255, 0.05);
193
+ border: 1px solid rgba(255, 255, 255, 0.08);
194
+ border-radius: 6px;
195
+ justify-self: start;
196
+ min-width: 0;
197
+ }
198
+
199
+ .flow-detail span:last-child {
200
+ overflow: hidden;
201
+ text-overflow: ellipsis;
202
+ white-space: nowrap;
203
+ color: var(--c-gray-900);
204
+ font-weight: 500;
205
+ }
206
+
207
+ .status {
208
+ display: flex;
209
+ flex-direction: column;
210
+ gap: 6px;
211
+ padding: 14px 16px;
212
+ background: #080a10;
213
+ border: 1px solid rgba(255, 255, 255, 0.06);
214
+ border-radius: 14px;
215
+ box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.45),
216
+ 0 1px 0 rgba(255, 255, 255, 0.03) inset;
217
+ }
218
+
219
+ .status-line {
220
+ display: flex;
221
+ align-items: center;
222
+ gap: 10px;
223
+ font-size: 13.5px;
224
+ font-weight: 500;
225
+ color: var(--c-gray-900);
226
+ margin: 0;
227
+ }
228
+
229
+
230
+ .status-line .marker {
231
+ font-family: var(--font-mono);
232
+ font-size: 12px;
233
+ width: 18px;
234
+ height: 18px;
235
+ display: inline-flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+ color: var(--accent);
239
+ flex: none;
240
+ font-variant-numeric: tabular-nums;
241
+ font-weight: 600;
242
+ background: rgba(255, 255, 255, 0.06);
243
+ border: 1px solid rgba(255, 255, 255, 0.14);
244
+ border-radius: 6px;
245
+ -webkit-backdrop-filter: blur(10px) saturate(140%);
246
+ backdrop-filter: blur(10px) saturate(140%);
247
+ box-shadow: none;
248
+ }
249
+
250
+ .status-hint {
251
+ font-size: 12.5px;
252
+ color: var(--c-gray-500);
253
+ margin: 0 0 0 24px;
254
+ line-height: 1.4;
255
+ }
256
+
257
+ #error-block-slot:empty {
258
+ display: block;
259
+ max-height: 0;
260
+ opacity: 0;
261
+ padding-top: 0;
262
+ `;
@@ -0,0 +1,5 @@
1
+ import { BASE_CSS } from './base.js'
2
+ import { COMPONENT_CSS } from './components.js'
3
+ import { RESPONSIVE_CSS } from './responsive.js'
4
+
5
+ export const WALLET_CSS = [BASE_CSS, COMPONENT_CSS, RESPONSIVE_CSS].join('\n')