@hsuite/native-connect-angular 1.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 (276) hide show
  1. package/README.md +48 -0
  2. package/USAGE_EXAMPLES.md +476 -0
  3. package/assets/wallets/extension.svg +7 -0
  4. package/assets/wallets/hashpack.svg +6 -0
  5. package/assets/wallets/hsuite.svg +11 -0
  6. package/assets/wallets/kabila.svg +11 -0
  7. package/assets/wallets/walletconnect.svg +13 -0
  8. package/coverage/base.css +224 -0
  9. package/coverage/block-navigation.js +87 -0
  10. package/coverage/coverage-summary.json +50 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +476 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +476 -0
  17. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  18. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
  19. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  20. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
  21. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  22. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  23. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  24. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
  25. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  26. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  27. package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
  28. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
  29. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  30. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
  31. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  32. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
  33. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  34. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
  35. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  36. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  37. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  38. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
  39. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  40. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  41. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  42. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
  43. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  44. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
  45. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  46. package/coverage/lcov-report/lib/directives/index.html +146 -0
  47. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
  48. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
  49. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
  50. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
  51. package/coverage/lcov-report/lib/index.html +116 -0
  52. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
  53. package/coverage/lcov-report/lib/models/index.html +131 -0
  54. package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
  55. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
  56. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  57. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
  58. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
  59. package/coverage/lcov-report/lib/providers/index.html +146 -0
  60. package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
  61. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  62. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  63. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
  64. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
  65. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  66. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  67. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  68. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  69. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  70. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  71. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
  72. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  73. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  74. package/coverage/lcov-report/lib/services/index.html +191 -0
  75. package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
  76. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  77. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  78. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  79. package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
  80. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  81. package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
  82. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
  83. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
  84. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
  85. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
  86. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
  87. package/coverage/lcov-report/lib/transports/index.html +116 -0
  88. package/coverage/lcov-report/lib/utils/index.html +116 -0
  89. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
  90. package/coverage/lcov-report/prettify.css +1 -0
  91. package/coverage/lcov-report/prettify.js +2 -0
  92. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  93. package/coverage/lcov-report/sorter.js +210 -0
  94. package/coverage/lcov.info +19252 -0
  95. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  96. package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
  97. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  98. package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
  99. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  100. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  101. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  102. package/coverage/lib/components/account-selector/account-list/index.html +116 -0
  103. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  104. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  105. package/coverage/lib/components/account-selector/index.html +161 -0
  106. package/coverage/lib/components/wallet-account-display/index.html +116 -0
  107. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  108. package/coverage/lib/components/wallet-connect-button/index.html +116 -0
  109. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  110. package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
  111. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  112. package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
  113. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  114. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  115. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  116. package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
  117. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  118. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  119. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  120. package/coverage/lib/components/wallet-session-display/index.html +116 -0
  121. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  122. package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
  123. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  124. package/coverage/lib/directives/index.html +146 -0
  125. package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
  126. package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
  127. package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
  128. package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
  129. package/coverage/lib/index.html +116 -0
  130. package/coverage/lib/models/connection-config.model.ts.html +280 -0
  131. package/coverage/lib/models/index.html +131 -0
  132. package/coverage/lib/models/provider-types.ts.html +577 -0
  133. package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
  134. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  135. package/coverage/lib/providers/hsuite-native/index.html +116 -0
  136. package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
  137. package/coverage/lib/providers/index.html +146 -0
  138. package/coverage/lib/providers/p2p-native/index.html +131 -0
  139. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  140. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  141. package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
  142. package/coverage/lib/providers/walletconnect/core/index.html +176 -0
  143. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  144. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  145. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  146. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  147. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  148. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  149. package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
  150. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  151. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  152. package/coverage/lib/services/index.html +191 -0
  153. package/coverage/lib/services/logger.service.ts.html +463 -0
  154. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  155. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  156. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  157. package/coverage/lib/services/transaction-builders/index.html +161 -0
  158. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  159. package/coverage/lib/services/transaction.service.ts.html +1123 -0
  160. package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
  161. package/coverage/lib/services/wallet-context.service.ts.html +637 -0
  162. package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
  163. package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
  164. package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
  165. package/coverage/lib/transports/index.html +116 -0
  166. package/coverage/lib/utils/index.html +116 -0
  167. package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
  168. package/coverage/prettify.css +1 -0
  169. package/coverage/prettify.js +2 -0
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +210 -0
  172. package/dist/README.md +48 -0
  173. package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
  174. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
  175. package/dist/index.d.ts +6949 -0
  176. package/examples/minimal-connect.ts +178 -0
  177. package/examples/multi-protocol.ts +495 -0
  178. package/examples/transaction-signing.ts +361 -0
  179. package/jest.config.json +45 -0
  180. package/karma.conf.js +42 -0
  181. package/ng-package.json +20 -0
  182. package/package.json +60 -0
  183. package/src/index.ts +203 -0
  184. package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
  185. package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
  186. package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
  187. package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
  188. package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
  189. package/src/lib/components/account-selector/account-selector.component.html +135 -0
  190. package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
  191. package/src/lib/components/account-selector/account-selector.component.ts +470 -0
  192. package/src/lib/components/account-selector/account-selector.service.ts +501 -0
  193. package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
  194. package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
  195. package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
  196. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
  197. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
  198. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
  199. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
  200. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
  201. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
  202. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
  203. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
  204. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
  205. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
  206. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
  207. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
  208. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
  209. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
  210. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
  211. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
  212. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
  213. package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
  214. package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
  215. package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
  216. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
  217. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
  218. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
  219. package/src/lib/directives/wallet-connected.directive.ts +195 -0
  220. package/src/lib/directives/wallet-context.directive.ts +154 -0
  221. package/src/lib/directives/wallet-events.directive.ts +232 -0
  222. package/src/lib/hsuite-wallet.module.ts +210 -0
  223. package/src/lib/models/connection-config.model.ts +65 -0
  224. package/src/lib/models/provider-types.ts +164 -0
  225. package/src/lib/models/unified-account.model.ts +76 -0
  226. package/src/lib/models/wallet-context.model.ts +121 -0
  227. package/src/lib/models/wallet-events.model.ts +158 -0
  228. package/src/lib/providers/base-wallet-provider.ts +351 -0
  229. package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
  230. package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
  231. package/src/lib/providers/hsuite-native/index.ts +8 -0
  232. package/src/lib/providers/hsuite-native-provider.ts +754 -0
  233. package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
  234. package/src/lib/providers/p2p-native/index.ts +30 -0
  235. package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
  236. package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
  237. package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
  238. package/src/lib/providers/wallet-error-handler.ts +349 -0
  239. package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
  240. package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
  241. package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
  242. package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
  243. package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
  244. package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
  245. package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
  246. package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
  247. package/src/lib/providers/walletconnect/index.ts +33 -0
  248. package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
  249. package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
  250. package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
  251. package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
  252. package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
  253. package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
  254. package/src/lib/services/logger.service.ts +126 -0
  255. package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
  256. package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
  257. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
  258. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
  259. package/src/lib/services/transaction-builders/index.ts +54 -0
  260. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
  261. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
  262. package/src/lib/services/transaction.service.ts +346 -0
  263. package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
  264. package/src/lib/services/unified-wallet.service.ts +852 -0
  265. package/src/lib/services/wallet-context.service.ts +184 -0
  266. package/src/lib/services/wallet-event-bus.service.ts +186 -0
  267. package/src/lib/services/wallet-providers.service.ts +137 -0
  268. package/src/lib/transports/chrome-extension-transport.ts +246 -0
  269. package/src/lib/utils/index.ts +14 -0
  270. package/src/lib/utils/ledger-icons.util.ts +78 -0
  271. package/test/test-setup.ts +21 -0
  272. package/test-setup.ts +63 -0
  273. package/tsconfig.build.json +11 -0
  274. package/tsconfig.json +29 -0
  275. package/tsconfig.spec.json +15 -0
  276. package/vitest.config.ts +48 -0
@@ -0,0 +1,2039 @@
1
+ /**
2
+ * @file account-selector.component.scss
3
+ * @description Modal-based account selector with glass morphism design
4
+ * Follows wallet-connection-modal design patterns
5
+ */
6
+
7
+ /* Host styles - adapt based on presentation mode */
8
+ /* Note: Using component selector instead of :host because ViewEncapsulation.None is used */
9
+ wallet-account-selector {
10
+ display: block;
11
+ width: 100%;
12
+
13
+ /* Modal mode: full screen centered */
14
+ &[data-presentation-mode='modal'] {
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: center;
18
+ height: 100%;
19
+ width: 100%;
20
+ }
21
+
22
+ /* Inline mode: block display */
23
+ &[data-presentation-mode='inline'] {
24
+ display: block;
25
+ width: 100%;
26
+ }
27
+ }
28
+
29
+ /* Scoped to modal mode only - these styles should only apply to ion-content within this component */
30
+ wallet-account-selector[data-presentation-mode='modal'] ion-content {
31
+ --background: transparent;
32
+ --padding-start: 0;
33
+ --padding-end: 0;
34
+ --padding-top: 0;
35
+ --padding-bottom: 0;
36
+ height: 100vh;
37
+ width: 100%;
38
+ display: flex !important;
39
+ align-items: center !important;
40
+ justify-content: center !important;
41
+
42
+ &::part(scroll) {
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ min-height: 100%;
47
+ width: 100%;
48
+ }
49
+ }
50
+
51
+ /* ============ Modal Container ============ */
52
+ .modal-inner-content {
53
+ width: 90%;
54
+ max-width: var(--account-selector-modal-max-width, 600px);
55
+ max-height: var(--account-selector-modal-max-height, 80vh);
56
+ background: var(--account-selector-modal-bg, var(--glass-background));
57
+ border-radius: var(--account-selector-modal-border-radius, var(--border-radius-xl, 16px));
58
+ padding: 0;
59
+ display: flex;
60
+ flex-direction: column;
61
+ box-shadow: var(--account-selector-shadow-modal, var(--shadow-2xl));
62
+ border: var(--border-width-thin, 1px) solid
63
+ var(--account-selector-border-color, var(--border-flat, rgba(var(--ion-color-light-rgb), 0.1)));
64
+ overflow: hidden;
65
+ animation: modalFadeIn var(--account-selector-transition-slow, var(--duration-slow, 0.3s)) ease;
66
+ }
67
+
68
+ @keyframes modalFadeIn {
69
+ from {
70
+ opacity: 0;
71
+ transform: scale(0.95);
72
+ }
73
+ to {
74
+ opacity: 1;
75
+ transform: scale(1);
76
+ }
77
+ }
78
+
79
+ /* ============ Header ============ */
80
+ .header {
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: space-between;
84
+ padding: var(--account-selector-spacing-md, var(--space-md, 14px))
85
+ var(--account-selector-spacing-xl, var(--space-xl, 20px));
86
+ background: var(
87
+ --account-selector-header-bg,
88
+ var(--surface-flat, rgba(var(--ion-color-light-rgb), 0.05))
89
+ );
90
+ border-bottom: var(--border-width-thin, 1px) solid
91
+ var(--account-selector-border-color, var(--border-flat, rgba(var(--ion-color-light-rgb), 0.1)));
92
+ flex-shrink: 0;
93
+
94
+ .title {
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: var(--account-selector-spacing-xs, var(--space-xs, 4px));
98
+ align-items: start;
99
+
100
+ h2 {
101
+ margin: 0;
102
+ font-size: var(--account-selector-font-size-xl, var(--font-size-2xl, 24px));
103
+ font-weight: var(--account-selector-font-weight-bold, var(--font-weight-bold, 700));
104
+ color: var(--account-selector-text-primary, var(--ion-text-color));
105
+ letter-spacing: var(--letter-spacing-tight, -0.5px);
106
+ line-height: var(--account-selector-line-height-tight, var(--line-height-tight, 1.2));
107
+ }
108
+
109
+ .subtitle {
110
+ margin: 0;
111
+ font-size: var(--account-selector-font-size-sm, var(--font-size-sm, 13px));
112
+ font-weight: var(--account-selector-font-weight-normal, var(--font-weight-normal, 400));
113
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
114
+ line-height: 1.3;
115
+ }
116
+ }
117
+
118
+ .close-modal {
119
+ --padding-start: var(--account-selector-spacing-sm, var(--space-sm, 8px));
120
+ --padding-end: var(--account-selector-spacing-sm, var(--space-sm, 8px));
121
+ margin: 0;
122
+ cursor: pointer;
123
+ pointer-events: auto;
124
+ z-index: var(--account-selector-z-index-close, 10);
125
+ transition: all var(--account-selector-transition-fast, var(--transition-all, 0.15s ease));
126
+
127
+ ion-icon {
128
+ font-size: var(--account-selector-icon-size-lg, var(--font-size-2xl, 24px));
129
+ color: var(--account-selector-text-primary, var(--ion-text-color));
130
+ }
131
+
132
+ &:hover:not(:disabled) {
133
+ transform: scale(var(--button-hover-scale, 1.05));
134
+ }
135
+
136
+ &:active:not(:disabled) {
137
+ transform: scale(var(--button-press-scale, 0.95));
138
+ }
139
+ }
140
+ }
141
+
142
+ /* ============ Form Content Area ============ */
143
+ .form {
144
+ flex: 1;
145
+ overflow-y: auto;
146
+ padding: var(--account-selector-spacing-lg, var(--space-lg, 16px)) !important;
147
+ background: var(--account-selector-content-bg, transparent);
148
+
149
+ &::-webkit-scrollbar {
150
+ width: var(--account-selector-scrollbar-width, var(--space-sm, 8px));
151
+ }
152
+
153
+ &::-webkit-scrollbar-track {
154
+ background: var(
155
+ --account-selector-scrollbar-track,
156
+ var(--surface-flat, rgba(var(--ion-color-light-rgb), 0.05))
157
+ );
158
+ border-radius: calc(var(--account-selector-scrollbar-width, var(--space-sm, 8px)) / 2);
159
+ }
160
+
161
+ &::-webkit-scrollbar-thumb {
162
+ background: var(--account-selector-scrollbar-thumb, rgba(var(--ion-color-light-rgb), 0.2));
163
+ border-radius: calc(var(--account-selector-scrollbar-width, 8px) / 2);
164
+ transition: background var(--account-selector-transition-fast, 0.15s) ease;
165
+
166
+ &:hover {
167
+ background: var(
168
+ --account-selector-scrollbar-thumb-hover,
169
+ rgba(var(--ion-color-light-rgb), 0.3)
170
+ );
171
+ }
172
+ }
173
+ }
174
+
175
+ /* ============ Modal Footer ============ */
176
+ .modal-footer {
177
+ display: flex;
178
+ gap: var(--account-selector-spacing-sm, 8px);
179
+ padding: var(--account-selector-spacing-md, 12px) var(--account-selector-spacing-lg, 16px);
180
+ background: var(--account-selector-footer-bg, rgba(var(--ion-color-light-rgb), 0.05));
181
+ border-top: 1px solid var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.1));
182
+ flex-shrink: 0;
183
+
184
+ .footer-btn {
185
+ margin: 0;
186
+ flex: 1;
187
+ --border-radius: var(--account-selector-item-border-radius, 10px);
188
+ font-weight: var(--account-selector-font-weight-semibold, 600);
189
+ font-size: var(--account-selector-font-size-sm, 12px);
190
+ height: var(--account-selector-button-height, 36px);
191
+ cursor: pointer;
192
+ pointer-events: auto;
193
+ transition: all var(--account-selector-transition-fast, 0.15s) ease;
194
+
195
+ ion-icon {
196
+ font-size: var(--account-selector-spacing-lg, 16px);
197
+ color: inherit;
198
+ }
199
+
200
+ &:hover:not(:disabled) {
201
+ transform: translateY(-1px);
202
+ }
203
+
204
+ &:active:not(:disabled) {
205
+ transform: translateY(0);
206
+ }
207
+
208
+ &[color='danger'] {
209
+ --background: rgba(var(--ion-color-danger-rgb), 0.1);
210
+ --border-color: rgba(var(--ion-color-danger-rgb), 0.3);
211
+ --color: var(--ion-color-danger);
212
+
213
+ &:hover:not(:disabled) {
214
+ --background: rgba(var(--ion-color-danger-rgb), 0.15);
215
+ }
216
+ }
217
+ }
218
+ }
219
+
220
+ /* ============ Modal Sections ============ */
221
+ .modal-section {
222
+ margin-bottom: var(--account-selector-spacing-2xl, 24px);
223
+
224
+ &:last-child {
225
+ margin-bottom: 0;
226
+ }
227
+ }
228
+
229
+ .section-title {
230
+ font-size: var(--account-selector-font-size-sm, 12px);
231
+ font-weight: var(--account-selector-font-weight-semibold, 600);
232
+ text-transform: uppercase;
233
+ letter-spacing: 0.5px;
234
+ color: var(--account-selector-text-tertiary, var(--ion-color-step-600));
235
+ margin: 0 0 var(--account-selector-spacing-md, 12px) 0;
236
+ padding: 0px;
237
+ line-height: var(--account-selector-line-height-normal, 1.5);
238
+ }
239
+
240
+ /* ============ No Accounts State (Modal) ============ */
241
+ .no-accounts-modal {
242
+ display: flex;
243
+ flex-direction: column;
244
+ align-items: center;
245
+ justify-content: center;
246
+ padding: 60px 24px;
247
+ text-align: center;
248
+
249
+ ion-icon {
250
+ font-size: 64px;
251
+ margin-bottom: 20px;
252
+ opacity: 0.5;
253
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
254
+ }
255
+
256
+ h3 {
257
+ font-size: 18px;
258
+ font-weight: 600;
259
+ color: var(--account-selector-text-primary, var(--ion-text-color));
260
+ margin: 0 0 12px 0;
261
+ }
262
+
263
+ p {
264
+ margin: 0;
265
+ font-size: 14px;
266
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
267
+ line-height: 1.5;
268
+ }
269
+ }
270
+
271
+ /* ============ Loading Overlay ============ */
272
+ .loading-overlay {
273
+ position: absolute;
274
+ top: 0;
275
+ left: 0;
276
+ right: 0;
277
+ bottom: 0;
278
+ background: var(--surface-flat-active);
279
+ display: flex;
280
+ flex-direction: column;
281
+ align-items: center;
282
+ justify-content: center;
283
+ z-index: var(--account-selector-z-index-loading, 1000);
284
+ backdrop-filter: var(--backdrop-blur, blur(4px));
285
+
286
+ ion-spinner {
287
+ font-size: 48px;
288
+ color: var(--ion-color-primary);
289
+ margin-bottom: var(--account-selector-spacing-lg, 16px);
290
+ }
291
+
292
+ p {
293
+ color: var(--account-selector-text-primary, var(--ion-text-color));
294
+ font-size: var(--account-selector-font-size-md, 16px);
295
+ font-weight: var(--account-selector-font-weight-medium, 500);
296
+ margin: 0;
297
+ line-height: var(--account-selector-line-height-normal, 1.5);
298
+ }
299
+ }
300
+
301
+ /* ============ Account Selector Header (Inline Mode) ============ */
302
+ .account-selector-header {
303
+ padding: 12px 0;
304
+ margin-bottom: 12px;
305
+ border-bottom: 1px solid rgba(var(--ion-color-light-rgb), 0.1);
306
+
307
+ .header-title {
308
+ font-size: 16px;
309
+ font-weight: 600;
310
+ color: var(--account-selector-text-primary, var(--ion-text-color));
311
+ margin: 0;
312
+ text-align: center;
313
+ letter-spacing: 0.3px;
314
+ }
315
+ }
316
+
317
+ /* ============ Custom Header Text ============ */
318
+ .custom-header-text {
319
+ font-size: var(--account-selector-font-size-sm, 12px);
320
+ font-weight: var(--account-selector-font-weight-medium, 500);
321
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
322
+ margin-bottom: var(--account-selector-spacing-sm, 8px);
323
+ padding: 0 var(--account-selector-spacing-xs, 4px);
324
+ text-transform: uppercase;
325
+ letter-spacing: 0.5px;
326
+ line-height: var(--account-selector-line-height-normal, 1.5);
327
+ }
328
+
329
+ /* ============ Compact Header (Inline Mode) ============ */
330
+ .compact-header {
331
+ display: flex;
332
+ align-items: center;
333
+ gap: var(--account-selector-spacing-md, 12px);
334
+ padding: var(--account-selector-spacing-md, 12px) 0px;
335
+ background: var(--account-selector-item-bg, rgba(var(--ion-color-light-rgb), 0.05));
336
+ border: 1px solid var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.1));
337
+ border-radius: var(--account-selector-content-border-radius, 12px);
338
+ cursor: pointer;
339
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
340
+ user-select: none;
341
+ min-height: var(--account-selector-touch-target-min, 44px);
342
+ margin-bottom: var(--account-selector-spacing-md, 12px);
343
+ box-shadow:
344
+ var(--account-selector-shadow-inset, var(--shadow-inset)),
345
+ var(--account-selector-shadow-sm, var(--shadow-sm));
346
+
347
+ &:hover {
348
+ background: var(--account-selector-item-bg-hover, rgba(var(--ion-color-light-rgb), 0.08));
349
+ border-color: var(--account-selector-border-color-hover, rgba(var(--ion-color-light-rgb), 0.2));
350
+ transform: translateY(-1px);
351
+ box-shadow:
352
+ var(--account-selector-shadow-inset, var(--shadow-inset)),
353
+ var(--account-selector-shadow-md, var(--shadow-md));
354
+ }
355
+
356
+ &:active {
357
+ transform: scale(0.98);
358
+ }
359
+
360
+ &:focus {
361
+ outline: 2px solid var(--account-selector-border-color-focus, var(--ion-color-primary));
362
+ outline-offset: 2px;
363
+ }
364
+
365
+ /* Navbar size variant */
366
+ &.navbar-size {
367
+ padding: 8px 12px;
368
+ min-height: 40px;
369
+ border-radius: 10px;
370
+
371
+ .compact-icon {
372
+ font-size: 20px;
373
+ }
374
+
375
+ .compact-info {
376
+ .compact-primary {
377
+ font-size: 13px;
378
+ }
379
+
380
+ .compact-secondary {
381
+ font-size: 11px;
382
+ }
383
+ }
384
+
385
+ .wallet-count-badge {
386
+ font-size: 11px;
387
+ padding: 3px 7px;
388
+ }
389
+
390
+ .toggle-icon {
391
+ font-size: 18px;
392
+ }
393
+ }
394
+
395
+ /* Small size variant */
396
+ &.small-size {
397
+ padding: 6px 10px;
398
+ min-height: 36px;
399
+ border-radius: 8px;
400
+ gap: 10px;
401
+
402
+ .compact-icon {
403
+ font-size: 18px;
404
+ }
405
+
406
+ .compact-info {
407
+ .compact-primary {
408
+ font-size: 12px;
409
+ }
410
+
411
+ .compact-secondary {
412
+ font-size: 10px;
413
+ }
414
+ }
415
+
416
+ .wallet-count-badge {
417
+ font-size: 10px;
418
+ padding: 2px 6px;
419
+ }
420
+
421
+ .toggle-icon {
422
+ font-size: 16px;
423
+ }
424
+ }
425
+ }
426
+
427
+ /* Account Preview Section (Inline Mode) */
428
+ .account-preview {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: var(--account-selector-spacing-sm, 8px);
432
+ flex: 1;
433
+ min-width: 0;
434
+ }
435
+
436
+ .account-address-compact {
437
+ font-size: var(--account-selector-font-size-sm, 13px);
438
+ font-weight: var(--account-selector-font-weight-semibold, 600);
439
+ color: var(--account-selector-text-primary, var(--ion-text-color));
440
+ font-family: var(--ion-font-family-monospace, 'Courier New', monospace);
441
+ line-height: var(--account-selector-line-height-normal, 1.5);
442
+ overflow: hidden;
443
+ text-overflow: ellipsis;
444
+ white-space: nowrap;
445
+ flex-shrink: 1;
446
+ transition: color var(--account-selector-transition-fast, 0.15s) ease;
447
+ }
448
+
449
+ .network-badge-compact {
450
+ font-size: var(--account-selector-badge-font-size, 10px);
451
+ font-weight: var(--account-selector-font-weight-semibold, 600);
452
+ padding: var(--account-selector-badge-padding, 3px 7px);
453
+ border-radius: var(--account-selector-badge-border-radius, 6px);
454
+ flex-shrink: 0;
455
+ line-height: var(--account-selector-line-height-tight, 1.2);
456
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
457
+
458
+ .compact-header:hover & {
459
+ transform: scale(1.05);
460
+ }
461
+ }
462
+
463
+ .wallet-logo-compact {
464
+ width: var(--account-selector-logo-size-sm, 20px);
465
+ height: var(--account-selector-logo-size-sm, 20px);
466
+ border-radius: var(--account-selector-logo-border-radius, 4px);
467
+ flex-shrink: 0;
468
+ box-shadow: var(--account-selector-logo-shadow, var(--shadow-sm));
469
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
470
+
471
+ .compact-header:hover & {
472
+ transform: scale(1.05);
473
+ }
474
+ }
475
+
476
+ .account-count-badge {
477
+ font-size: var(--account-selector-font-size-xs, 11px);
478
+ font-weight: var(--account-selector-font-weight-semibold, 600);
479
+ padding: var(--account-selector-badge-padding, 3px 8px);
480
+ border-radius: var(--account-selector-badge-border-radius, 6px);
481
+ flex-shrink: 0;
482
+ line-height: var(--account-selector-line-height-tight, 1.2);
483
+ }
484
+
485
+ .compact-icon {
486
+ font-size: var(--account-selector-icon-size-lg, 24px);
487
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
488
+ flex-shrink: 0;
489
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
490
+
491
+ .compact-header:hover & {
492
+ transform: scale(1.05);
493
+ }
494
+ }
495
+
496
+ .compact-info {
497
+ display: flex;
498
+ flex-direction: column;
499
+ gap: var(--account-selector-spacing-xs, 2px);
500
+ flex: 1;
501
+ min-width: 0;
502
+
503
+ .compact-primary {
504
+ font-size: var(--account-selector-font-size-base, 14px);
505
+ font-weight: var(--account-selector-font-weight-semibold, 600);
506
+ color: var(--account-selector-text-primary, var(--ion-text-color));
507
+ line-height: var(--account-selector-line-height-tight, 1.2);
508
+ overflow: hidden;
509
+ text-overflow: ellipsis;
510
+ white-space: nowrap;
511
+ transition: color var(--account-selector-transition-fast, 0.15s) ease;
512
+ }
513
+
514
+ .compact-secondary {
515
+ font-size: var(--account-selector-font-size-sm, 12px);
516
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
517
+ line-height: var(--account-selector-line-height-tight, 1.2);
518
+ }
519
+ }
520
+
521
+ .wallet-count-badge {
522
+ font-size: var(--account-selector-font-size-sm, 12px);
523
+ font-weight: var(--account-selector-font-weight-semibold, 600);
524
+ padding: var(--account-selector-spacing-xs, 4px) var(--account-selector-spacing-sm, 8px);
525
+ border-radius: var(--account-selector-badge-border-radius, 6px);
526
+ flex-shrink: 0;
527
+ line-height: var(--account-selector-line-height-tight, 1.2);
528
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
529
+
530
+ .compact-header:hover & {
531
+ transform: scale(1.05);
532
+ }
533
+ }
534
+
535
+ .toggle-icon {
536
+ font-size: var(--account-selector-icon-size, 20px);
537
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
538
+ transition: transform var(--account-selector-transition-slow, 0.3s) cubic-bezier(0.4, 0, 0.2, 1);
539
+ flex-shrink: 0;
540
+
541
+ &.expanded {
542
+ transform: rotate(180deg);
543
+ }
544
+
545
+ .compact-header:hover & {
546
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
547
+ }
548
+ }
549
+
550
+ /* Collapsible Account List Wrapper */
551
+ .account-list-wrapper {
552
+ overflow: hidden;
553
+ transition:
554
+ max-height 0.3s ease,
555
+ opacity 0.2s ease;
556
+
557
+ &.collapsed {
558
+ max-height: 0;
559
+ opacity: 0;
560
+ }
561
+
562
+ &.expanded {
563
+ max-height: 3000px;
564
+ opacity: 1;
565
+ }
566
+ }
567
+
568
+ /* Expanded Content Card - Glassmorphism style matching compact header */
569
+ .expanded-content-card {
570
+ background: var(--account-selector-item-bg, rgba(var(--ion-color-light-rgb), 0.05));
571
+ border: 1px solid var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.1));
572
+ border-radius: var(--account-selector-content-border-radius, 12px);
573
+ padding: var(--account-selector-spacing-lg, 16px);
574
+ margin-top: var(--account-selector-spacing-sm, 8px);
575
+ box-shadow:
576
+ var(--account-selector-shadow-inset, var(--shadow-inset)),
577
+ var(--account-selector-shadow-sm, var(--shadow-sm));
578
+ animation: fadeIn var(--account-selector-transition-slow, 0.3s) ease;
579
+ }
580
+
581
+ /* ============ Account Selector ============ */
582
+ .account-selector {
583
+ display: flex;
584
+ flex-direction: column;
585
+ animation: fadeIn 0.3s ease;
586
+
587
+ /* Inline mode: no outer container styling */
588
+ &.inline-mode {
589
+ background: transparent;
590
+ border: none;
591
+ border-radius: 0;
592
+ padding: 0;
593
+ box-shadow: none;
594
+ }
595
+
596
+ /* Modal mode: no extra container styling (handled by modal-inner-content) */
597
+ &.modal-mode {
598
+ padding: 0;
599
+ }
600
+ }
601
+
602
+ @keyframes fadeIn {
603
+ from {
604
+ opacity: 0;
605
+ }
606
+ to {
607
+ opacity: 1;
608
+ }
609
+ }
610
+
611
+ /* ============ Selector Description ============ */
612
+ .selector-description {
613
+ font-size: var(--account-selector-font-size-base, 14px);
614
+ color: var(--account-selector-text-primary, var(--ion-text-color));
615
+ margin-bottom: var(--account-selector-spacing-xl, 20px);
616
+ font-weight: var(--account-selector-font-weight-medium, 500);
617
+ line-height: var(--account-selector-line-height-normal, 1.5);
618
+ }
619
+
620
+ /* ============ Sessions Groups ============ */
621
+ .sessions-groups {
622
+ display: flex;
623
+ flex-direction: column;
624
+ gap: 0;
625
+ }
626
+
627
+ /* ============ Ledger Group ============ */
628
+ .ledger-group {
629
+ background: transparent;
630
+ border: none;
631
+ border-radius: 0;
632
+ overflow: visible;
633
+ box-shadow: none;
634
+ transition: all 0.3s ease;
635
+
636
+ &:not(:last-child) {
637
+ margin-bottom: 20px;
638
+ }
639
+
640
+ /* Modal modifier */
641
+ &.modal-group:not(:last-child) {
642
+ margin-bottom: 16px;
643
+ }
644
+ }
645
+
646
+ /* Ledger Header Row - Clickable section header */
647
+ .ledger-header-row {
648
+ display: flex;
649
+ align-items: center;
650
+ justify-content: space-between;
651
+ padding: 8px 4px;
652
+ margin-bottom: 8px;
653
+ border-radius: 8px;
654
+ cursor: pointer;
655
+ transition: all var(--account-selector-transition-fast, 0.15s) ease;
656
+ user-select: none;
657
+
658
+ &:hover {
659
+ background: rgba(var(--ion-color-light-rgb), 0.05);
660
+ }
661
+
662
+ &:active {
663
+ transform: scale(0.99);
664
+ }
665
+
666
+ /* Modal modifier */
667
+ &.modal-header {
668
+ padding: 10px 6px;
669
+ margin-bottom: 10px;
670
+ }
671
+
672
+ .ledger-label {
673
+ display: flex;
674
+ align-items: center;
675
+ gap: 10px;
676
+ }
677
+
678
+ .ledger-icon {
679
+ font-size: 18px;
680
+ flex-shrink: 0;
681
+ }
682
+
683
+ .ledger-icon-img {
684
+ width: 20px;
685
+ height: 20px;
686
+ flex-shrink: 0;
687
+ border-radius: 50%;
688
+ object-fit: contain;
689
+ }
690
+
691
+ .ledger-name {
692
+ font-size: 14px;
693
+ font-weight: 600;
694
+ color: var(--account-selector-text-primary, var(--ion-text-color));
695
+ line-height: 1.2;
696
+ }
697
+ }
698
+
699
+ .ledger-header {
700
+ font-size: var(--account-selector-font-size-md, 16px);
701
+ font-weight: var(--account-selector-font-weight-bold, 700);
702
+ color: var(--account-selector-text-primary, var(--ion-text-color));
703
+ padding: var(--account-selector-spacing-md, 0px) 0px;
704
+ margin-bottom: var(--account-selector-spacing-md, 12px);
705
+ user-select: none;
706
+ display: flex;
707
+ align-items: center;
708
+ justify-content: space-between;
709
+ line-height: var(--account-selector-line-height-tight, 1.2);
710
+ transition: all var(--account-selector-transition-fast, 0.15s) ease;
711
+
712
+ &.clickable {
713
+ cursor: pointer;
714
+
715
+ &:hover {
716
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
717
+ }
718
+
719
+ &:active {
720
+ transform: scale(0.98);
721
+ }
722
+ }
723
+
724
+ /* Modal modifier */
725
+ &.modal-header {
726
+ font-size: var(--account-selector-font-size-md, 16px);
727
+ padding: var(--account-selector-spacing-md, 12px) 0px;
728
+ margin-bottom: var(--account-selector-spacing-md, 12px);
729
+ }
730
+ }
731
+
732
+ .expand-icon {
733
+ transition: transform var(--account-selector-transition-slow, 0.3s) cubic-bezier(0.4, 0, 0.2, 1);
734
+ font-size: var(--account-selector-icon-size, 18px);
735
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
736
+ flex-shrink: 0;
737
+
738
+ &.expanded {
739
+ transform: rotate(180deg);
740
+ }
741
+
742
+ .ledger-header:hover & {
743
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
744
+ }
745
+ }
746
+
747
+ .protocol-icon {
748
+ font-size: var(--account-selector-icon-size, 20px);
749
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
750
+ flex-shrink: 0;
751
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
752
+
753
+ .network-header:hover & {
754
+ transform: scale(1.05);
755
+ }
756
+ }
757
+
758
+ .protocol-name {
759
+ font-weight: var(--account-selector-font-weight-semibold, 600);
760
+ font-size: var(--account-selector-font-size-base, 14px);
761
+ color: var(--account-selector-text-primary, var(--ion-text-color));
762
+ line-height: var(--account-selector-line-height-normal, 1.5);
763
+ flex: 1;
764
+ transition: color var(--account-selector-transition-fast, 0.15s) ease;
765
+ }
766
+
767
+ .account-count {
768
+ font-size: var(--account-selector-font-size-xs, 11px);
769
+ padding: var(--account-selector-badge-padding, 3px 8px);
770
+ font-weight: var(--account-selector-font-weight-semibold, 600);
771
+ border-radius: var(--account-selector-badge-border-radius, 6px);
772
+ line-height: var(--account-selector-line-height-tight, 1.2);
773
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
774
+
775
+ .network-header:hover & {
776
+ transform: scale(1.05);
777
+ }
778
+ }
779
+
780
+ .expand-icon {
781
+ font-size: var(--account-selector-icon-size, 20px);
782
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
783
+ transition: transform var(--account-selector-transition-slow, 0.3s) cubic-bezier(0.4, 0, 0.2, 1);
784
+ flex-shrink: 0;
785
+
786
+ &.expanded {
787
+ transform: rotate(180deg);
788
+ }
789
+
790
+ &.small {
791
+ font-size: var(--account-selector-spacing-lg, 16px);
792
+ }
793
+
794
+ .network-header:hover & {
795
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
796
+ }
797
+ }
798
+
799
+ /* ============ Collapsible Content Animation ============ */
800
+ .collapsible-content {
801
+ animation: expandIn 0.3s ease-out;
802
+ }
803
+
804
+ @keyframes expandIn {
805
+ from {
806
+ opacity: 0;
807
+ max-height: 0;
808
+ }
809
+ to {
810
+ opacity: 1;
811
+ max-height: 2000px;
812
+ }
813
+ }
814
+
815
+ /* ============ Network Groups ============ */
816
+ .network-groups {
817
+ display: flex;
818
+ flex-direction: column;
819
+ overflow: hidden;
820
+
821
+ /* Flat mode: no nesting padding */
822
+ &.flat-mode {
823
+ .network-header {
824
+ padding-left: 0;
825
+ }
826
+
827
+ .account-item {
828
+ padding-left: 16px;
829
+ }
830
+ }
831
+ }
832
+
833
+ .network-group {
834
+ &:not(:last-child) {
835
+ margin-bottom: var(--account-selector-spacing-xl, 20px);
836
+ padding-bottom: var(--account-selector-spacing-xl, 20px);
837
+ border-bottom: 1px solid
838
+ var(--account-selector-border-color, rgba(var(--ion-color-medium-rgb), 0.1));
839
+ }
840
+ }
841
+
842
+ .network-header {
843
+ display: flex;
844
+ align-items: center;
845
+ gap: var(--account-selector-spacing-md, 10px);
846
+ padding: var(--account-selector-spacing-md, 12px) 0;
847
+ background: transparent;
848
+ transition: all var(--account-selector-transition-slow, 0.3s) ease;
849
+ user-select: none;
850
+ margin-bottom: var(--account-selector-spacing-sm, 8px);
851
+ border-radius: var(--account-selector-item-border-radius, 10px);
852
+
853
+ &:not(.static-header) {
854
+ cursor: pointer;
855
+
856
+ &:hover {
857
+ background: var(--account-selector-item-bg-hover, rgba(var(--ion-color-light-rgb), 0.06));
858
+ padding-left: var(--account-selector-spacing-xs, 4px);
859
+ padding-right: var(--account-selector-spacing-xs, 4px);
860
+ }
861
+
862
+ &:focus {
863
+ outline: 2px solid var(--account-selector-border-color-focus, var(--ion-color-primary));
864
+ outline-offset: -2px;
865
+ }
866
+
867
+ &:active {
868
+ transform: scale(0.98);
869
+ }
870
+ }
871
+
872
+ &.static-header {
873
+ cursor: default;
874
+ }
875
+
876
+ .wallet-logo-header {
877
+ width: 20px;
878
+ height: 20px;
879
+ border-radius: 4px;
880
+ flex-shrink: 0;
881
+ box-shadow: var(--shadow-sm);
882
+ }
883
+
884
+ .provider-name {
885
+ font-size: 13px;
886
+ font-weight: 600;
887
+ color: var(--account-selector-text-primary, var(--ion-text-color));
888
+ flex: 1;
889
+ }
890
+
891
+ .provider-account-count {
892
+ font-size: 10px;
893
+ font-weight: 600;
894
+ padding: 3px 7px;
895
+ }
896
+
897
+ ion-badge {
898
+ font-size: 11px;
899
+ font-weight: 600;
900
+ padding: 3px 8px;
901
+ }
902
+ }
903
+
904
+ .network-account-count {
905
+ font-size: 11px;
906
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
907
+ flex: 1;
908
+ }
909
+
910
+ /* ============ Accounts List ============ */
911
+ .accounts-list {
912
+ display: flex;
913
+ flex-direction: column;
914
+ gap: var(--account-selector-spacing-sm, 8px);
915
+ }
916
+
917
+ .session-wrapper {
918
+ display: contents;
919
+ }
920
+
921
+ /* ============ Account Card (Modern Layout) ============ */
922
+ .account-card {
923
+ display: flex;
924
+ align-items: center;
925
+ gap: var(--account-selector-spacing-md, 12px);
926
+ padding: var(--account-selector-spacing-sm, 10px) var(--account-selector-spacing-md, 14px);
927
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
928
+ border: 1px solid var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.08));
929
+ background: var(--account-selector-item-bg, rgba(var(--ion-color-light-rgb), 0.03));
930
+ user-select: none;
931
+ border-radius: var(--account-selector-item-border-radius, 10px);
932
+ cursor: pointer;
933
+ min-height: var(--account-selector-touch-target-min, 44px);
934
+
935
+ &:hover {
936
+ background: var(--account-selector-item-bg-hover, rgba(var(--ion-color-light-rgb), 0.06));
937
+ border-color: var(
938
+ --account-selector-border-color-hover,
939
+ rgba(var(--ion-color-light-rgb), 0.15)
940
+ );
941
+ transform: translateY(-1px);
942
+ box-shadow: var(--account-selector-shadow-sm, var(--shadow-sm));
943
+ }
944
+
945
+ &:active {
946
+ transform: translateY(0);
947
+ }
948
+
949
+ &:focus-within {
950
+ outline: 2px solid var(--account-selector-border-color-focus, var(--ion-color-primary));
951
+ outline-offset: 2px;
952
+ }
953
+
954
+ &.selected {
955
+ background: var(--account-selector-item-bg-selected, rgba(var(--ion-color-primary-rgb), 0.08));
956
+ border-color: var(
957
+ --account-selector-border-color-selected,
958
+ rgba(var(--ion-color-primary-rgb), 0.25)
959
+ );
960
+
961
+ .account-address {
962
+ color: var(--account-selector-text-selected, var(--ion-color-primary));
963
+ }
964
+ }
965
+
966
+ /* Modal modifier */
967
+ &.modal-item {
968
+ padding: var(--account-selector-spacing-md, 12px) var(--account-selector-spacing-md, 16px);
969
+
970
+ &:hover {
971
+ box-shadow: var(--account-selector-shadow-md, var(--shadow-md));
972
+ }
973
+ }
974
+ }
975
+
976
+ /* Card Layout Sections */
977
+ .card-left {
978
+ display: flex;
979
+ align-items: center;
980
+ gap: var(--account-selector-spacing-sm, 8px);
981
+ flex-shrink: 0;
982
+ }
983
+
984
+ .card-center {
985
+ display: flex;
986
+ flex-direction: column;
987
+ gap: 2px;
988
+ flex: 1;
989
+ min-width: 0;
990
+ overflow: hidden;
991
+ }
992
+
993
+ .card-right {
994
+ display: flex;
995
+ align-items: center;
996
+ gap: var(--account-selector-spacing-sm, 8px);
997
+ flex-shrink: 0;
998
+ }
999
+
1000
+ /* Selection Indicator */
1001
+ .selection-indicator {
1002
+ width: 16px;
1003
+ height: 16px;
1004
+ border-radius: 50%;
1005
+ border: 2px solid var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.25));
1006
+ display: flex;
1007
+ align-items: center;
1008
+ justify-content: center;
1009
+ flex-shrink: 0;
1010
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
1011
+ background: transparent;
1012
+
1013
+ &.active {
1014
+ border-color: var(--ion-color-primary);
1015
+ background: rgba(var(--ion-color-primary-rgb), 0.1);
1016
+ }
1017
+
1018
+ .indicator-dot {
1019
+ width: 8px;
1020
+ height: 8px;
1021
+ border-radius: 50%;
1022
+ background: var(--ion-color-primary);
1023
+ animation: radioCheckIn var(--account-selector-transition-normal, 0.2s)
1024
+ cubic-bezier(0.68, -0.55, 0.265, 1.55);
1025
+ }
1026
+
1027
+ .account-card:hover &:not(.active) {
1028
+ border-color: rgba(var(--ion-color-primary-rgb), 0.5);
1029
+ }
1030
+ }
1031
+
1032
+ /* Wallet Logo - Small (for account list items) */
1033
+ .wallet-logo-sm {
1034
+ width: 24px;
1035
+ height: 24px;
1036
+ border-radius: 6px;
1037
+ flex-shrink: 0;
1038
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
1039
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1040
+ object-fit: contain;
1041
+
1042
+ .account-card:hover & {
1043
+ transform: scale(1.05);
1044
+ }
1045
+ }
1046
+
1047
+ /* Account Label & Address */
1048
+ .account-label {
1049
+ font-size: 13px;
1050
+ font-weight: 600;
1051
+ color: var(--account-selector-text-primary, var(--ion-text-color));
1052
+ line-height: 1.3;
1053
+ overflow: hidden;
1054
+ text-overflow: ellipsis;
1055
+ white-space: nowrap;
1056
+ }
1057
+
1058
+ .account-address {
1059
+ font-size: 12px;
1060
+ font-weight: 500;
1061
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
1062
+ font-family: var(--ion-font-family-monospace, 'SF Mono', 'Monaco', 'Consolas', monospace);
1063
+ line-height: 1.3;
1064
+ overflow: hidden;
1065
+ text-overflow: ellipsis;
1066
+ white-space: nowrap;
1067
+ transition: color var(--account-selector-transition-fast, 0.15s) ease;
1068
+
1069
+ &.has-label {
1070
+ font-size: 11px;
1071
+ opacity: 0.8;
1072
+ }
1073
+ }
1074
+
1075
+ /* Badge Stack */
1076
+ .badge-stack {
1077
+ display: flex;
1078
+ flex-direction: column;
1079
+ align-items: flex-end;
1080
+ gap: 4px;
1081
+ }
1082
+
1083
+ /* Network Badge (Testnet/Mainnet) */
1084
+ .network-badge {
1085
+ font-size: 9px;
1086
+ font-weight: 600;
1087
+ padding: 2px 6px;
1088
+ height: auto;
1089
+ border-radius: 4px;
1090
+ line-height: 1.2;
1091
+ letter-spacing: 0.3px;
1092
+ text-transform: uppercase;
1093
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1094
+
1095
+ .account-card:hover & {
1096
+ transform: scale(1.03);
1097
+ }
1098
+ }
1099
+
1100
+ /* Provider Badge Row (contains signing type + provider badges) */
1101
+ .provider-badge-row {
1102
+ display: flex;
1103
+ align-items: center;
1104
+ gap: 4px;
1105
+ }
1106
+
1107
+ /* Provider Badge (HSuite Native, WalletConnect) */
1108
+ .provider-badge {
1109
+ font-size: 9px;
1110
+ font-weight: 500;
1111
+ padding: 2px 6px;
1112
+ height: auto;
1113
+ border-radius: 4px;
1114
+ line-height: 1.2;
1115
+ opacity: 0.85;
1116
+ transition: all var(--account-selector-transition-fast, 0.15s) ease;
1117
+
1118
+ .account-card:hover & {
1119
+ opacity: 1;
1120
+ transform: scale(1.03);
1121
+ }
1122
+ }
1123
+
1124
+ /* Signing Type Badge (Multisig/Singlesig) */
1125
+ .signing-badge {
1126
+ display: inline-flex;
1127
+ align-items: center;
1128
+ gap: 3px;
1129
+ font-size: 9px;
1130
+ font-weight: 600;
1131
+ padding: 2px 6px;
1132
+ height: auto;
1133
+ border-radius: 4px;
1134
+ line-height: 1.2;
1135
+ transition: all var(--account-selector-transition-fast, 0.15s) ease;
1136
+
1137
+ .signing-icon {
1138
+ font-size: 10px;
1139
+ }
1140
+
1141
+ &.multisig {
1142
+ --background: rgba(var(--ion-color-tertiary-rgb), 0.15);
1143
+ --color: var(--ion-color-tertiary);
1144
+ background: rgba(var(--ion-color-tertiary-rgb), 0.15);
1145
+ color: var(--ion-color-tertiary);
1146
+ border: 1px solid rgba(var(--ion-color-tertiary-rgb), 0.3);
1147
+ }
1148
+
1149
+ .account-card:hover & {
1150
+ transform: scale(1.03);
1151
+ }
1152
+ }
1153
+
1154
+ /* Disconnect Button in Card */
1155
+ .disconnect-btn {
1156
+ --padding-start: 6px;
1157
+ --padding-end: 6px;
1158
+ margin: 0;
1159
+ width: 28px;
1160
+ height: 28px;
1161
+ min-height: 28px;
1162
+ transition: all var(--account-selector-transition-fast, 0.15s) ease;
1163
+
1164
+ ion-icon {
1165
+ font-size: 16px;
1166
+ }
1167
+
1168
+ &:hover:not(:disabled) {
1169
+ transform: scale(1.1);
1170
+ }
1171
+
1172
+ &:active:not(:disabled) {
1173
+ transform: scale(0.95);
1174
+ }
1175
+ }
1176
+
1177
+ .account-item {
1178
+ display: flex;
1179
+ align-items: center;
1180
+ gap: var(--account-selector-spacing-md, 12px);
1181
+ padding: var(--account-selector-spacing-md, 10px) var(--account-selector-spacing-md, 12px);
1182
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
1183
+ border: 1px solid var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.1));
1184
+ background: var(--account-selector-item-bg, rgba(var(--ion-color-light-rgb), 0.05));
1185
+ user-select: none;
1186
+ border-radius: var(--account-selector-item-border-radius, 10px);
1187
+ margin-bottom: var(--account-selector-spacing-sm, 8px);
1188
+ cursor: pointer;
1189
+ min-height: var(--account-selector-touch-target-min, 44px);
1190
+
1191
+ &:last-child {
1192
+ margin-bottom: 0;
1193
+ }
1194
+
1195
+ &:hover {
1196
+ background: var(--account-selector-item-bg-hover, rgba(var(--ion-color-light-rgb), 0.08));
1197
+ border-color: var(--account-selector-border-color-hover, rgba(var(--ion-color-light-rgb), 0.2));
1198
+ transform: translateY(-1px);
1199
+ box-shadow: var(--account-selector-shadow-sm, var(--shadow-sm));
1200
+ }
1201
+
1202
+ &:active {
1203
+ transform: translateY(0);
1204
+ }
1205
+
1206
+ &:focus-within {
1207
+ outline: 2px solid var(--account-selector-border-color-focus, var(--ion-color-primary));
1208
+ outline-offset: 2px;
1209
+ }
1210
+
1211
+ &.selected {
1212
+ background: var(--account-selector-item-bg-selected, rgba(var(--ion-color-primary-rgb), 0.1));
1213
+ border-color: var(
1214
+ --account-selector-border-color-selected,
1215
+ rgba(var(--ion-color-primary-rgb), 0.3)
1216
+ );
1217
+
1218
+ .account-address-main {
1219
+ color: var(--account-selector-text-selected, var(--ion-color-primary));
1220
+ font-weight: var(--account-selector-font-weight-semibold, 600);
1221
+ }
1222
+ }
1223
+
1224
+ /* Modal modifier */
1225
+ &.modal-item {
1226
+ padding: var(--account-selector-spacing-md, 12px) var(--account-selector-spacing-md, 14px);
1227
+ margin-bottom: var(--account-selector-spacing-md, 10px);
1228
+
1229
+ &:hover {
1230
+ box-shadow: var(--account-selector-shadow-md, var(--shadow-md));
1231
+ }
1232
+ }
1233
+ }
1234
+
1235
+ /* Wallet Logo in Item */
1236
+ .wallet-logo-item {
1237
+ width: var(--account-selector-logo-size, 32px);
1238
+ height: var(--account-selector-logo-size, 32px);
1239
+ border-radius: var(--account-selector-logo-border-radius, 6px);
1240
+ flex-shrink: 0;
1241
+ box-shadow: var(--account-selector-logo-shadow, var(--shadow-sm));
1242
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1243
+
1244
+ .account-item:hover & {
1245
+ transform: scale(1.05);
1246
+ }
1247
+ }
1248
+
1249
+ /* Account Content with Badges */
1250
+ .account-content-with-badges {
1251
+ display: flex;
1252
+ flex-direction: row;
1253
+ align-items: center;
1254
+ gap: var(--account-selector-spacing-md, 12px);
1255
+ flex: 1;
1256
+ min-width: 0;
1257
+ cursor: pointer;
1258
+ padding: var(--account-selector-spacing-xs, 4px) 0;
1259
+ flex-wrap: wrap;
1260
+ }
1261
+
1262
+ .account-address-with-badges {
1263
+ display: flex;
1264
+ align-items: center;
1265
+ gap: var(--account-selector-spacing-md, 12px);
1266
+ flex-wrap: wrap;
1267
+ }
1268
+
1269
+ .account-address-main {
1270
+ font-size: var(--account-selector-font-size-base, 14px);
1271
+ font-weight: var(--account-selector-font-weight-medium, 500);
1272
+ color: var(--account-selector-text-primary, var(--ion-text-color));
1273
+ line-height: var(--account-selector-line-height-normal, 1.5);
1274
+ transition: color var(--account-selector-transition-fast, 0.15s) ease;
1275
+ }
1276
+
1277
+ .account-badges {
1278
+ display: flex;
1279
+ align-items: center;
1280
+ gap: var(--account-selector-spacing-sm, 6px);
1281
+ flex-wrap: wrap;
1282
+ }
1283
+
1284
+ .network-badge-item,
1285
+ .wallet-badge-item {
1286
+ font-size: var(--account-selector-badge-font-size, 10px);
1287
+ font-weight: var(--account-selector-font-weight-semibold, 600);
1288
+ padding: var(--account-selector-badge-padding, 3px 8px);
1289
+ height: auto;
1290
+ border-radius: var(--account-selector-badge-border-radius, 6px);
1291
+ line-height: var(--account-selector-line-height-tight, 1.2);
1292
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1293
+
1294
+ .account-item:hover & {
1295
+ transform: scale(1.05);
1296
+ }
1297
+ }
1298
+
1299
+ /* Account Actions (Radio + Disconnect) */
1300
+ .account-actions {
1301
+ display: flex;
1302
+ align-items: center;
1303
+ gap: var(--account-selector-spacing-sm, 8px);
1304
+ flex-shrink: 0;
1305
+ }
1306
+
1307
+ .disconnect-btn-small {
1308
+ --padding-start: var(--account-selector-spacing-sm, 6px);
1309
+ --padding-end: var(--account-selector-spacing-sm, 6px);
1310
+ --padding-top: var(--account-selector-spacing-sm, 6px);
1311
+ --padding-bottom: var(--account-selector-spacing-sm, 6px);
1312
+ margin: 0;
1313
+ width: var(--account-selector-logo-size, 32px);
1314
+ height: var(--account-selector-logo-size, 32px);
1315
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1316
+
1317
+ ion-icon {
1318
+ font-size: var(--account-selector-icon-size, 18px);
1319
+ }
1320
+
1321
+ &:hover:not(:disabled) {
1322
+ transform: scale(1.1);
1323
+ }
1324
+
1325
+ &:active:not(:disabled) {
1326
+ transform: scale(0.95);
1327
+ }
1328
+ }
1329
+
1330
+ /* Add Account List Item */
1331
+ .add-account-item {
1332
+ display: flex;
1333
+ align-items: center;
1334
+ gap: var(--account-selector-spacing-md, 12px);
1335
+ padding: var(--account-selector-spacing-md, 12px) var(--account-selector-spacing-md, 14px);
1336
+ margin-top: var(--account-selector-spacing-md, 12px);
1337
+ cursor: pointer;
1338
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
1339
+ border: 1px dashed
1340
+ var(--account-selector-add-account-border, rgba(var(--ion-color-primary-rgb), 0.3));
1341
+ background: var(--account-selector-add-account-bg, rgba(var(--ion-color-primary-rgb), 0.05));
1342
+ border-radius: var(--account-selector-item-border-radius, 10px);
1343
+ user-select: none;
1344
+ min-height: var(--account-selector-touch-target-min, 44px);
1345
+
1346
+ ion-icon {
1347
+ font-size: var(--account-selector-icon-size-lg, 24px);
1348
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
1349
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1350
+ }
1351
+
1352
+ span {
1353
+ font-size: var(--account-selector-font-size-base, 14px);
1354
+ font-weight: var(--account-selector-font-weight-semibold, 600);
1355
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
1356
+ line-height: var(--account-selector-line-height-normal, 1.5);
1357
+ }
1358
+
1359
+ &:hover:not(.disabled) {
1360
+ background: var(
1361
+ --account-selector-add-account-bg-hover,
1362
+ rgba(var(--ion-color-primary-rgb), 0.1)
1363
+ );
1364
+ border-color: rgba(var(--ion-color-primary-rgb), 0.5);
1365
+ transform: translateY(-1px);
1366
+ box-shadow: var(--account-selector-shadow-sm, var(--shadow-sm));
1367
+
1368
+ ion-icon {
1369
+ transform: scale(1.1) rotate(90deg);
1370
+ }
1371
+ }
1372
+
1373
+ &:active:not(.disabled) {
1374
+ transform: scale(0.98);
1375
+ }
1376
+
1377
+ &.disabled {
1378
+ opacity: 0.5;
1379
+ cursor: not-allowed;
1380
+ pointer-events: none;
1381
+ }
1382
+ }
1383
+
1384
+ /* Account Content - Compact Format */
1385
+ .account-content-compact {
1386
+ display: flex;
1387
+ align-items: center;
1388
+ gap: 8px;
1389
+ flex: 1;
1390
+ min-width: 0;
1391
+ flex-wrap: wrap;
1392
+ }
1393
+
1394
+ .account-address-main {
1395
+ font-size: 14px;
1396
+ font-weight: 500;
1397
+ color: var(--ion-text-color);
1398
+ font-family: var(--ion-font-family-monospace, 'Courier New', monospace);
1399
+ line-height: 1.4;
1400
+ }
1401
+
1402
+ .account-tags {
1403
+ display: flex;
1404
+ align-items: center;
1405
+ gap: 6px;
1406
+ flex-wrap: wrap;
1407
+ }
1408
+
1409
+ .account-tag {
1410
+ font-size: 12px;
1411
+ font-weight: 500;
1412
+ line-height: 1.2;
1413
+ font-family: var(--ion-font-family-monospace, 'Courier New', monospace);
1414
+
1415
+ // network-tag color is set inline based on network type
1416
+
1417
+ &.wallet-tag {
1418
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
1419
+ }
1420
+ }
1421
+
1422
+ /* Radio Button */
1423
+ .radio-button {
1424
+ width: var(--account-selector-radio-size, 20px);
1425
+ height: var(--account-selector-radio-size, 20px);
1426
+ border-radius: 50%;
1427
+ border: var(--account-selector-radio-border, 2px solid rgba(var(--ion-color-light-rgb), 0.4));
1428
+ display: flex;
1429
+ align-items: center;
1430
+ justify-content: center;
1431
+ flex-shrink: 0;
1432
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
1433
+ cursor: pointer;
1434
+
1435
+ &.selected {
1436
+ border-color: var(--account-selector-radio-bg-selected, var(--ion-color-primary));
1437
+ background: rgba(var(--ion-color-primary-rgb), 0.1);
1438
+ box-shadow: 0 0 0 3px rgba(var(--ion-color-primary-rgb), 0.1);
1439
+ }
1440
+
1441
+ .account-item:hover &:not(.selected) {
1442
+ border-color: rgba(var(--ion-color-primary-rgb), 0.6);
1443
+ transform: scale(1.05);
1444
+ }
1445
+ }
1446
+
1447
+ .radio-inner {
1448
+ width: var(--account-selector-radio-inner-size, 10px);
1449
+ height: var(--account-selector-radio-inner-size, 10px);
1450
+ border-radius: 50%;
1451
+ background: var(--account-selector-radio-bg-selected, var(--ion-color-primary));
1452
+ animation: radioCheckIn var(--account-selector-transition-normal, 0.2s)
1453
+ cubic-bezier(0.68, -0.55, 0.265, 1.55);
1454
+ }
1455
+
1456
+ @keyframes radioCheckIn {
1457
+ from {
1458
+ transform: scale(0);
1459
+ opacity: 0;
1460
+ }
1461
+ to {
1462
+ transform: scale(1);
1463
+ opacity: 1;
1464
+ }
1465
+ }
1466
+
1467
+ /* Legacy styles (kept for modal mode compatibility) */
1468
+ .account-content {
1469
+ display: flex;
1470
+ align-items: center;
1471
+ gap: 12px;
1472
+ flex: 1;
1473
+ min-width: 0;
1474
+ }
1475
+
1476
+ .account-icon {
1477
+ font-size: 20px;
1478
+ flex-shrink: 0;
1479
+ }
1480
+
1481
+ .account-info {
1482
+ display: flex;
1483
+ flex-direction: column;
1484
+ gap: 3px;
1485
+ flex: 1;
1486
+ min-width: 0;
1487
+ }
1488
+
1489
+ .account-name {
1490
+ font-size: 14px;
1491
+ font-weight: 500;
1492
+ color: var(--ion-text-color);
1493
+ line-height: 1.2;
1494
+ }
1495
+
1496
+ .account-addr {
1497
+ font-size: 12px;
1498
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
1499
+ font-family: var(--ion-font-family-monospace, 'Courier New', monospace);
1500
+ }
1501
+
1502
+ .account-balance,
1503
+ .account-activity {
1504
+ small {
1505
+ font-size: 11px;
1506
+ color: var(--account-selector-text-tertiary, var(--ion-color-step-600));
1507
+ }
1508
+ }
1509
+
1510
+ .wallet-logo-inline {
1511
+ width: 24px;
1512
+ height: 24px;
1513
+ border-radius: 4px;
1514
+ flex-shrink: 0;
1515
+ box-shadow: var(--shadow-sm);
1516
+ }
1517
+
1518
+ .ledger-badge {
1519
+ font-size: 10px;
1520
+ padding: 3px 7px;
1521
+ flex-shrink: 0;
1522
+ font-weight: 600;
1523
+ }
1524
+
1525
+ .status-badge {
1526
+ font-size: 9px;
1527
+ padding: 2px 6px;
1528
+ flex-shrink: 0;
1529
+ }
1530
+
1531
+ .disconnect-btn {
1532
+ flex-shrink: 0;
1533
+ margin: 0;
1534
+ --padding-start: 8px;
1535
+ --padding-end: 8px;
1536
+ transition: transform 0.2s ease;
1537
+
1538
+ &:hover {
1539
+ transform: scale(1.1);
1540
+ }
1541
+
1542
+ ion-icon {
1543
+ font-size: 20px;
1544
+ color: inherit;
1545
+ }
1546
+ }
1547
+
1548
+ /* ============ Connect Wallet Button ============ */
1549
+ .connect-wallet-btn {
1550
+ margin-top: var(--account-selector-spacing-lg, 16px);
1551
+ --border-radius: var(--account-selector-content-border-radius, 12px);
1552
+ font-weight: var(--account-selector-font-weight-semibold, 600);
1553
+ --border-width: 1px;
1554
+ --border-style: solid;
1555
+ --border-color: var(
1556
+ --account-selector-add-account-border,
1557
+ rgba(var(--ion-color-primary-rgb), 0.3)
1558
+ );
1559
+ min-height: var(--account-selector-button-height-lg, 44px);
1560
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
1561
+
1562
+ &:hover:not(:disabled) {
1563
+ --background: var(
1564
+ --account-selector-add-account-bg-hover,
1565
+ rgba(var(--ion-color-primary-rgb), 0.1)
1566
+ );
1567
+ --border-color: rgba(var(--ion-color-primary-rgb), 0.4);
1568
+ transform: translateY(-1px);
1569
+ }
1570
+
1571
+ &:active:not(:disabled) {
1572
+ transform: scale(0.98);
1573
+ }
1574
+
1575
+ ion-icon {
1576
+ font-size: var(--account-selector-icon-size, 18px);
1577
+ color: inherit;
1578
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
1579
+ }
1580
+
1581
+ &:hover:not(:disabled) ion-icon {
1582
+ transform: scale(1.1);
1583
+ }
1584
+ }
1585
+
1586
+ /* ============ Empty State ============ */
1587
+ .no-accounts {
1588
+ display: flex;
1589
+ flex-direction: column;
1590
+ align-items: center;
1591
+ justify-content: center;
1592
+ padding: 60px 24px;
1593
+ text-align: center;
1594
+ background: var(--surface-flat);
1595
+ border: var(--border-width-thin, 1px) solid var(--border-flat);
1596
+ border-radius: var(--border-radius-lg, 12px);
1597
+ box-shadow: var(--shadow-sm);
1598
+ animation: fadeIn var(--duration-slow, 0.3s) ease;
1599
+
1600
+ .empty-state-content {
1601
+ max-width: 320px;
1602
+
1603
+ ion-icon {
1604
+ font-size: 64px;
1605
+ margin-bottom: 20px;
1606
+ opacity: 0.5;
1607
+ animation: float 3s ease-in-out infinite;
1608
+ }
1609
+
1610
+ h3 {
1611
+ font-size: 18px;
1612
+ font-weight: 600;
1613
+ color: var(--account-selector-text-primary, var(--ion-text-color));
1614
+ margin: 0 0 12px 0;
1615
+ }
1616
+
1617
+ p {
1618
+ margin: 0 0 24px 0;
1619
+ font-size: 14px;
1620
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
1621
+ line-height: 1.5;
1622
+ }
1623
+
1624
+ ion-button {
1625
+ margin-top: 8px;
1626
+ }
1627
+ }
1628
+ }
1629
+
1630
+ @keyframes float {
1631
+ 0%,
1632
+ 100% {
1633
+ transform: translateY(0);
1634
+ }
1635
+ 50% {
1636
+ transform: translateY(-10px);
1637
+ }
1638
+ }
1639
+
1640
+ /* ============ Error State ============ */
1641
+ .error-state {
1642
+ display: flex;
1643
+ flex-direction: column;
1644
+ align-items: center;
1645
+ justify-content: center;
1646
+ padding: 40px 24px;
1647
+ text-align: center;
1648
+ background: rgba(var(--ion-color-danger-rgb), 0.1);
1649
+ border: var(--border-width-thin, 1px) solid rgba(var(--ion-color-danger-rgb), 0.2);
1650
+ border-radius: var(--border-radius-lg, 12px);
1651
+ animation: fadeIn var(--duration-slow, 0.3s) ease;
1652
+
1653
+ ion-icon {
1654
+ font-size: 48px;
1655
+ margin-bottom: 16px;
1656
+ }
1657
+
1658
+ h3 {
1659
+ font-size: 16px;
1660
+ font-weight: 600;
1661
+ color: var(--ion-color-danger);
1662
+ margin: 0 0 8px 0;
1663
+ }
1664
+
1665
+ p {
1666
+ margin: 0 0 20px 0;
1667
+ font-size: 14px;
1668
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
1669
+ line-height: 1.4;
1670
+ }
1671
+ }
1672
+
1673
+ /* ============ Responsive Design ============ */
1674
+ @media (min-width: 768px) {
1675
+ .modal-inner-content {
1676
+ width: 80%;
1677
+ max-width: 700px;
1678
+ border-radius: 20px;
1679
+ }
1680
+
1681
+ .header {
1682
+ padding: 16px 24px;
1683
+
1684
+ .title h2 {
1685
+ font-size: 26px;
1686
+ }
1687
+
1688
+ .subtitle {
1689
+ font-size: 14px;
1690
+ }
1691
+ }
1692
+
1693
+ .form {
1694
+ padding: 20px 24px;
1695
+ }
1696
+
1697
+ .compact-header {
1698
+ padding: 14px 18px;
1699
+
1700
+ .compact-icon {
1701
+ font-size: 26px;
1702
+ }
1703
+
1704
+ .compact-info {
1705
+ .compact-primary {
1706
+ font-size: 15px;
1707
+ }
1708
+
1709
+ .compact-secondary {
1710
+ font-size: 13px;
1711
+ }
1712
+ }
1713
+ }
1714
+
1715
+ .ledger-header {
1716
+ font-size: 17px;
1717
+ padding: 14px 0px;
1718
+ }
1719
+
1720
+ .selector-description {
1721
+ font-size: 15px;
1722
+ }
1723
+
1724
+ .account-item {
1725
+ padding: 14px 16px;
1726
+ }
1727
+
1728
+ .account-address-main {
1729
+ font-size: 15px;
1730
+ }
1731
+
1732
+ .account-tag {
1733
+ font-size: 13px;
1734
+ }
1735
+
1736
+ .radio-button {
1737
+ width: 24px;
1738
+ height: 24px;
1739
+
1740
+ .radio-inner {
1741
+ width: 14px;
1742
+ height: 14px;
1743
+ }
1744
+ }
1745
+ }
1746
+
1747
+ @media (max-width: 480px) {
1748
+ .modal-inner-content {
1749
+ width: 95%;
1750
+ max-height: 85vh;
1751
+ }
1752
+
1753
+ .header {
1754
+ padding: 12px 16px;
1755
+
1756
+ .title h2 {
1757
+ font-size: 20px;
1758
+ }
1759
+
1760
+ .subtitle {
1761
+ font-size: 12px;
1762
+ }
1763
+ }
1764
+
1765
+ .wallet-logo-item {
1766
+ width: 28px;
1767
+ height: 28px;
1768
+ }
1769
+
1770
+ .disconnect-btn-small {
1771
+ width: 28px;
1772
+ height: 28px;
1773
+
1774
+ ion-icon {
1775
+ font-size: 16px;
1776
+ }
1777
+ }
1778
+
1779
+ .modal-footer {
1780
+ padding: 10px 12px;
1781
+ gap: 6px;
1782
+
1783
+ .footer-btn {
1784
+ font-size: 11px;
1785
+ height: 32px;
1786
+
1787
+ ion-icon {
1788
+ font-size: 14px;
1789
+ }
1790
+ }
1791
+ }
1792
+
1793
+ .compact-header {
1794
+ padding: 10px 14px;
1795
+
1796
+ .compact-icon {
1797
+ font-size: 22px;
1798
+ }
1799
+
1800
+ .compact-info {
1801
+ .compact-primary {
1802
+ font-size: 13px;
1803
+ }
1804
+
1805
+ .compact-secondary {
1806
+ font-size: 11px;
1807
+ }
1808
+ }
1809
+ }
1810
+
1811
+ .account-item {
1812
+ padding: 10px 12px;
1813
+ }
1814
+
1815
+ .selector-description {
1816
+ font-size: 13px;
1817
+ }
1818
+
1819
+ .ledger-header {
1820
+ font-size: 15px;
1821
+ padding: 10px 0px;
1822
+ }
1823
+
1824
+ .account-address-main {
1825
+ font-size: 13px;
1826
+ }
1827
+
1828
+ .account-tag {
1829
+ font-size: 11px;
1830
+ }
1831
+
1832
+ .radio-button {
1833
+ width: 20px;
1834
+ height: 20px;
1835
+ border-width: 1.5px;
1836
+
1837
+ .radio-inner {
1838
+ width: 10px;
1839
+ height: 10px;
1840
+ }
1841
+ }
1842
+
1843
+ .expanded-content-card {
1844
+ padding: 12px;
1845
+ }
1846
+
1847
+ /* Account Card - Mobile */
1848
+ .account-card {
1849
+ padding: 8px 12px;
1850
+ gap: 10px;
1851
+ }
1852
+
1853
+ .wallet-logo-sm {
1854
+ width: 22px;
1855
+ height: 22px;
1856
+ }
1857
+
1858
+ .selection-indicator {
1859
+ width: 14px;
1860
+ height: 14px;
1861
+
1862
+ .indicator-dot {
1863
+ width: 7px;
1864
+ height: 7px;
1865
+ }
1866
+ }
1867
+
1868
+ .account-label {
1869
+ font-size: 12px;
1870
+ }
1871
+
1872
+ .account-address {
1873
+ font-size: 11px;
1874
+ }
1875
+
1876
+ .network-badge,
1877
+ .provider-badge,
1878
+ .signing-badge {
1879
+ font-size: 8px;
1880
+ padding: 2px 5px;
1881
+
1882
+ .signing-icon {
1883
+ font-size: 9px;
1884
+ }
1885
+ }
1886
+
1887
+ .badge-stack {
1888
+ gap: 3px;
1889
+ }
1890
+
1891
+ .provider-badge-row {
1892
+ gap: 3px;
1893
+ }
1894
+
1895
+ .ledger-header-row {
1896
+ padding: 6px 4px;
1897
+ margin-bottom: 6px;
1898
+
1899
+ .ledger-icon {
1900
+ font-size: 16px;
1901
+ }
1902
+
1903
+ .ledger-icon-img {
1904
+ width: 18px;
1905
+ height: 18px;
1906
+ }
1907
+
1908
+ .ledger-name {
1909
+ font-size: 13px;
1910
+ }
1911
+ }
1912
+ }
1913
+
1914
+ /* ============ Dark Mode (body.dark already applied) ============ */
1915
+ body.dark {
1916
+ .modal-inner-content {
1917
+ background: var(--glass-background);
1918
+ box-shadow: var(--shadow-2xl);
1919
+ }
1920
+
1921
+ .compact-header {
1922
+ background: var(--surface-flat);
1923
+
1924
+ &:hover {
1925
+ background: var(--surface-flat-hover);
1926
+ box-shadow: var(--shadow-md);
1927
+ }
1928
+ }
1929
+
1930
+ .expanded-content-card {
1931
+ background: var(--surface-flat);
1932
+ box-shadow: var(--shadow-sm);
1933
+ }
1934
+
1935
+ .selector-description {
1936
+ color: var(--ion-color-medium);
1937
+ }
1938
+
1939
+ .account-item {
1940
+ background: var(--surface-flat);
1941
+ border-color: var(--border-flat);
1942
+
1943
+ &:hover {
1944
+ background: var(--surface-flat-hover);
1945
+ border-color: var(--border-flat-hover);
1946
+ }
1947
+
1948
+ &.selected {
1949
+ background: rgba(var(--ion-color-primary-rgb), 0.15);
1950
+ border-color: rgba(var(--ion-color-primary-rgb), 0.4);
1951
+ }
1952
+ }
1953
+
1954
+ /* Account Card - Dark Mode */
1955
+ .account-card {
1956
+ background: rgba(var(--ion-color-light-rgb), 0.03);
1957
+ border-color: rgba(var(--ion-color-light-rgb), 0.08);
1958
+
1959
+ &:hover {
1960
+ background: rgba(var(--ion-color-light-rgb), 0.06);
1961
+ border-color: rgba(var(--ion-color-light-rgb), 0.12);
1962
+ }
1963
+
1964
+ &.selected {
1965
+ background: rgba(var(--ion-color-primary-rgb), 0.12);
1966
+ border-color: rgba(var(--ion-color-primary-rgb), 0.3);
1967
+ }
1968
+ }
1969
+
1970
+ .selection-indicator {
1971
+ border-color: rgba(var(--ion-color-light-rgb), 0.2);
1972
+
1973
+ &.active {
1974
+ border-color: var(--ion-color-primary);
1975
+ background: rgba(var(--ion-color-primary-rgb), 0.15);
1976
+ }
1977
+ }
1978
+
1979
+ .ledger-header-row {
1980
+ &:hover {
1981
+ background: rgba(var(--ion-color-light-rgb), 0.05);
1982
+ }
1983
+ }
1984
+
1985
+ .radio-button {
1986
+ border-color: var(--border-flat);
1987
+
1988
+ &.selected {
1989
+ border-color: var(--ion-color-primary);
1990
+ background: rgba(var(--ion-color-primary-rgb), 0.15);
1991
+ }
1992
+ }
1993
+
1994
+ .ledger-header {
1995
+ color: var(--ion-color-primary);
1996
+ }
1997
+ }
1998
+
1999
+ /* ============ Focus Visible ============ */
2000
+ *:focus-visible {
2001
+ outline: 2px solid var(--ion-color-primary);
2002
+ outline-offset: 2px;
2003
+ }
2004
+
2005
+ /* ============ Reduced Motion Support ============ */
2006
+ @media (prefers-reduced-motion: reduce) {
2007
+ *,
2008
+ *::before,
2009
+ *::after {
2010
+ animation-duration: 0.01ms !important;
2011
+ animation-iteration-count: 1 !important;
2012
+ transition-duration: 0.01ms !important;
2013
+ scroll-behavior: auto !important;
2014
+ }
2015
+
2016
+ .expand-icon {
2017
+ transition: none !important;
2018
+ }
2019
+
2020
+ .radio-inner {
2021
+ animation: none !important;
2022
+ }
2023
+
2024
+ @keyframes modalFadeIn {
2025
+ from,
2026
+ to {
2027
+ opacity: 1;
2028
+ transform: scale(1);
2029
+ }
2030
+ }
2031
+
2032
+ @keyframes radioCheckIn {
2033
+ from,
2034
+ to {
2035
+ transform: scale(1);
2036
+ opacity: 1;
2037
+ }
2038
+ }
2039
+ }