@shapeshiftoss/swap-widget 0.0.2 → 0.2.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 (158) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +18 -11
  3. package/package.json +77 -28
  4. package/Dockerfile +0 -87
  5. package/dist/assets/PhArrowCircleDown-B305t-Sh.js +0 -14
  6. package/dist/assets/PhArrowClockwise-CJPxQhr_.js +0 -14
  7. package/dist/assets/PhArrowDown-C4hT9BVu.js +0 -14
  8. package/dist/assets/PhArrowLeft-Way4Cu-r.js +0 -14
  9. package/dist/assets/PhArrowRight-Cp5ZME0F.js +0 -14
  10. package/dist/assets/PhArrowSquareOut-NnrK69c5.js +0 -14
  11. package/dist/assets/PhArrowUp-Dph6j8rm.js +0 -14
  12. package/dist/assets/PhArrowUpRight-BpJjRRRh.js +0 -14
  13. package/dist/assets/PhArrowsClockwise-CFUT8X7R.js +0 -14
  14. package/dist/assets/PhArrowsDownUp-BjBI4ckC.js +0 -14
  15. package/dist/assets/PhArrowsLeftRight-CuLpbKRk.js +0 -14
  16. package/dist/assets/PhBank-Dchr4XQJ.js +0 -14
  17. package/dist/assets/PhBrowser-dUu2TrC1.js +0 -14
  18. package/dist/assets/PhCaretDown-78IuKU3V.js +0 -14
  19. package/dist/assets/PhCaretLeft-_aiyH7n1.js +0 -14
  20. package/dist/assets/PhCaretRight-8zJQEuDX.js +0 -14
  21. package/dist/assets/PhCaretUp-CiCxKWwN.js +0 -14
  22. package/dist/assets/PhCheck-CcADx8br.js +0 -14
  23. package/dist/assets/PhCircleHalf-BYzSzd2h.js +0 -14
  24. package/dist/assets/PhClock-UItiXeJq.js +0 -14
  25. package/dist/assets/PhCompass-CUy3uA7t.js +0 -14
  26. package/dist/assets/PhCopy-C-PDgSlZ.js +0 -14
  27. package/dist/assets/PhCreditCard-CWRaUT6F.js +0 -14
  28. package/dist/assets/PhCurrencyDollar-Cqla3AXT.js +0 -14
  29. package/dist/assets/PhDesktop-BBIPrYLl.js +0 -14
  30. package/dist/assets/PhDeviceMobile-BdsPaATg.js +0 -14
  31. package/dist/assets/PhDotsThree-BMXCQl-0.js +0 -14
  32. package/dist/assets/PhEnvelope-yUsis6yU.js +0 -14
  33. package/dist/assets/PhFunnelSimple-Ba7BbWTp.js +0 -14
  34. package/dist/assets/PhGlobe-DgLxBk5U.js +0 -14
  35. package/dist/assets/PhIdentificationCard-Czjmq9Z3.js +0 -14
  36. package/dist/assets/PhImage-BAJ_erz6.js +0 -14
  37. package/dist/assets/PhInfo-Cr4DhVUE.js +0 -14
  38. package/dist/assets/PhLightbulb-BX_7duTr.js +0 -14
  39. package/dist/assets/PhMagnifyingGlass-Mygfryvz.js +0 -14
  40. package/dist/assets/PhPaperPlaneRight-BeuCA660.js +0 -14
  41. package/dist/assets/PhPlus-BMjcHjsT.js +0 -14
  42. package/dist/assets/PhPower-CGffGmdb.js +0 -14
  43. package/dist/assets/PhPuzzlePiece-wm_GpVSi.js +0 -14
  44. package/dist/assets/PhQrCode-DRwRzXCH.js +0 -14
  45. package/dist/assets/PhQuestion-M09j2U0T.js +0 -14
  46. package/dist/assets/PhQuestionMark-BP9EMB6h.js +0 -14
  47. package/dist/assets/PhSealCheck-BfG80yKn.js +0 -14
  48. package/dist/assets/PhSignOut-C5YOWlPT.js +0 -14
  49. package/dist/assets/PhSpinner-BXooDYzU.js +0 -14
  50. package/dist/assets/PhTrash-Biq6rmmL.js +0 -14
  51. package/dist/assets/PhUser-CAgZSpGe.js +0 -14
  52. package/dist/assets/PhVault-l2PHF38a.js +0 -14
  53. package/dist/assets/PhWallet-w25D16It.js +0 -14
  54. package/dist/assets/PhWarning-DPEydIPw.js +0 -14
  55. package/dist/assets/PhWarningCircle-BqjT745H.js +0 -14
  56. package/dist/assets/PhX-s-SmVExa.js +0 -14
  57. package/dist/assets/SwapController-If0bFrNc.js +0 -1
  58. package/dist/assets/ccip-BBB7uCdL.js +0 -1
  59. package/dist/assets/ccip-CkkdfKKI.js +0 -1
  60. package/dist/assets/data-capture-D4gAy-Yc.js +0 -242
  61. package/dist/assets/email-B1AJehis.js +0 -90
  62. package/dist/assets/embedded-wallet-Q6DQopDk.js +0 -410
  63. package/dist/assets/features-B6JAPAFb.js +0 -5
  64. package/dist/assets/index-5jd8RPN9.js +0 -7428
  65. package/dist/assets/index-B4kNtSTk.js +0 -1080
  66. package/dist/assets/index-B753eAob.js +0 -1
  67. package/dist/assets/index-BZoLTv77.js +0 -3
  68. package/dist/assets/index-Bcw9UURX.js +0 -3
  69. package/dist/assets/index-BkrV-ahK.js +0 -2
  70. package/dist/assets/index-CRQzQ_up.js +0 -9
  71. package/dist/assets/index-CSW0Gt5y.js +0 -132
  72. package/dist/assets/index-CZ4jTIsk.js +0 -138
  73. package/dist/assets/index-Cwa8SB3h.js +0 -61
  74. package/dist/assets/index-DEwQgT4r.js +0 -78
  75. package/dist/assets/index-DVfQiQ1d.js +0 -1
  76. package/dist/assets/index-cV3UdaMs.css +0 -1
  77. package/dist/assets/index-hAmu622O.js +0 -43
  78. package/dist/assets/onramp-XcPNCLRU.js +0 -422
  79. package/dist/assets/pay-with-exchange-BeHt4OF4.js +0 -280
  80. package/dist/assets/property-C9JG5tag.js +0 -27
  81. package/dist/assets/receive-7ff4he2S.js +0 -131
  82. package/dist/assets/send-CkMBIRXT.js +0 -554
  83. package/dist/assets/socials-DmmxuLrP.js +0 -250
  84. package/dist/assets/swaps-IHAYRQ0x.js +0 -1050
  85. package/dist/assets/transactions-9Cxdk7o9.js +0 -16
  86. package/dist/assets/v4-BOvFkHkt.js +0 -1
  87. package/dist/assets/w3m-modal-kJzFnBfB.js +0 -891
  88. package/dist/assets/wallet-standard-Dv8LMoUB.js +0 -1
  89. package/dist/favicon.png +0 -0
  90. package/dist/favicon.svg +0 -11
  91. package/dist/icon-192x192.png +0 -0
  92. package/dist/icon-512x512.png +0 -0
  93. package/dist/index.html +0 -33
  94. package/index.html +0 -32
  95. package/public/favicon.png +0 -0
  96. package/public/favicon.svg +0 -11
  97. package/public/icon-192x192.png +0 -0
  98. package/public/icon-512x512.png +0 -0
  99. package/railway.toml +0 -10
  100. package/src/api/client.ts +0 -95
  101. package/src/components/AddressInputModal.css +0 -173
  102. package/src/components/AddressInputModal.tsx +0 -250
  103. package/src/components/ApprovalStep.tsx +0 -92
  104. package/src/components/ExecutionStep.tsx +0 -27
  105. package/src/components/InputStep.tsx +0 -431
  106. package/src/components/QuoteSelector.css +0 -146
  107. package/src/components/QuoteSelector.tsx +0 -137
  108. package/src/components/QuotesModal.css +0 -250
  109. package/src/components/QuotesModal.tsx +0 -182
  110. package/src/components/SettingsModal.css +0 -145
  111. package/src/components/SettingsModal.tsx +0 -180
  112. package/src/components/StatusStep.tsx +0 -139
  113. package/src/components/SwapWidget.css +0 -713
  114. package/src/components/SwapWidget.tsx +0 -607
  115. package/src/components/TokenSelectModal.css +0 -438
  116. package/src/components/TokenSelectModal.tsx +0 -487
  117. package/src/components/WalletProvider.tsx +0 -92
  118. package/src/config/appkit.ts +0 -104
  119. package/src/config/wagmi.ts +0 -27
  120. package/src/constants/chains.ts +0 -72
  121. package/src/constants/defaults.ts +0 -28
  122. package/src/constants/swappers.ts +0 -48
  123. package/src/constants/viemChains.ts +0 -69
  124. package/src/contexts/SwapWalletContext.tsx +0 -25
  125. package/src/demo/App.css +0 -458
  126. package/src/demo/App.tsx +0 -481
  127. package/src/demo/main.tsx +0 -25
  128. package/src/hooks/useAssets.ts +0 -180
  129. package/src/hooks/useBalances.ts +0 -822
  130. package/src/hooks/useBitcoinSigning.ts +0 -276
  131. package/src/hooks/useMarketData.ts +0 -169
  132. package/src/hooks/useSolanaSigning.ts +0 -275
  133. package/src/hooks/useStatusPolling.ts +0 -137
  134. package/src/hooks/useSwapApproval.ts +0 -106
  135. package/src/hooks/useSwapDisplayValues.ts +0 -157
  136. package/src/hooks/useSwapExecution.ts +0 -199
  137. package/src/hooks/useSwapHandlers.ts +0 -119
  138. package/src/hooks/useSwapQuote.ts +0 -71
  139. package/src/hooks/useSwapQuoting.ts +0 -102
  140. package/src/hooks/useSwapRates.ts +0 -61
  141. package/src/index.ts +0 -43
  142. package/src/machines/SwapMachineContext.ts +0 -5
  143. package/src/machines/__tests__/guards.test.ts +0 -228
  144. package/src/machines/__tests__/setup.test.ts +0 -7
  145. package/src/machines/__tests__/swapMachine.test.ts +0 -544
  146. package/src/machines/__tests__/types.test.ts +0 -124
  147. package/src/machines/guards.ts +0 -33
  148. package/src/machines/swapMachine.ts +0 -288
  149. package/src/machines/types.ts +0 -54
  150. package/src/services/transactionStatus.ts +0 -322
  151. package/src/types/index.ts +0 -361
  152. package/src/utils/addressValidation.ts +0 -201
  153. package/src/utils/redirect.ts +0 -45
  154. package/src/vite-env.d.ts +0 -10
  155. package/tsconfig.json +0 -23
  156. package/tsconfig.node.json +0 -10
  157. package/vite.config.ts +0 -101
  158. package/vitest.config.ts +0 -18
@@ -1,78 +0,0 @@
1
- import{y as d,z as m,D as c,F as r,G as f,I as v,K as y,L as b,J as h,M as g,U as w}from"./index-5jd8RPN9.js";const x=d`
2
- :host {
3
- position: relative;
4
- display: inline-block;
5
- }
6
-
7
- :host([data-error='true']) > input {
8
- color: ${({tokens:t})=>t.core.textError};
9
- }
10
-
11
- :host([data-error='false']) > input {
12
- color: ${({tokens:t})=>t.theme.textPrimary};
13
- }
14
-
15
- input {
16
- background: transparent;
17
- height: auto;
18
- box-sizing: border-box;
19
- color: ${({tokens:t})=>t.theme.textPrimary};
20
- font-feature-settings: 'case' on;
21
- font-size: ${({textSize:t})=>t.h4};
22
- caret-color: ${({tokens:t})=>t.core.backgroundAccentPrimary};
23
- line-height: ${({typography:t})=>t["h4-regular-mono"].lineHeight};
24
- letter-spacing: ${({typography:t})=>t["h4-regular-mono"].letterSpacing};
25
- -webkit-appearance: none;
26
- -moz-appearance: textfield;
27
- padding: 0px;
28
- font-family: ${({fontFamily:t})=>t.mono};
29
- }
30
-
31
- :host([data-width-variant='auto']) input {
32
- width: 100%;
33
- }
34
-
35
- :host([data-width-variant='fit']) input {
36
- width: 1ch;
37
- }
38
-
39
- .wui-input-amount-fit-mirror {
40
- position: absolute;
41
- visibility: hidden;
42
- white-space: pre;
43
- font-size: var(--local-font-size);
44
- line-height: 130%;
45
- letter-spacing: -1.28px;
46
- font-family: ${({fontFamily:t})=>t.mono};
47
- }
48
-
49
- .wui-input-amount-fit-width {
50
- display: inline-block;
51
- position: relative;
52
- }
53
-
54
- input::-webkit-outer-spin-button,
55
- input::-webkit-inner-spin-button {
56
- -webkit-appearance: none;
57
- margin: 0;
58
- }
59
-
60
- input::placeholder {
61
- color: ${({tokens:t})=>t.theme.textSecondary};
62
- }
63
- `;var a=function(t,e,n,s){var p=arguments.length,o=p<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var u=t.length-1;u>=0;u--)(l=t[u])&&(o=(p<3?l(o):p>3?l(e,n,o):l(e,n))||o);return p>3&&o&&Object.defineProperty(e,n,o),o};let i=class extends v{constructor(){super(...arguments),this.inputElementRef=y(),this.disabled=!1,this.value="",this.placeholder="0",this.widthVariant="auto",this.maxDecimals=void 0,this.maxIntegers=void 0,this.fontSize="h4",this.error=!1}firstUpdated(){this.resizeInput()}updated(){this.style.setProperty("--local-font-size",b.textSize[this.fontSize]),this.resizeInput()}render(){var e;return this.dataset.widthVariant=this.widthVariant,this.dataset.error=String(this.error),(e=this.inputElementRef)!=null&&e.value&&this.value&&(this.inputElementRef.value.value=this.value),this.widthVariant==="auto"?this.inputTemplate():h`
64
- <div class="wui-input-amount-fit-width">
65
- <span class="wui-input-amount-fit-mirror"></span>
66
- ${this.inputTemplate()}
67
- </div>
68
- `}inputTemplate(){return h`<input
69
- ${g(this.inputElementRef)}
70
- type="text"
71
- inputmode="decimal"
72
- pattern="[0-9,.]*"
73
- placeholder=${this.placeholder}
74
- ?disabled=${this.disabled}
75
- autofocus
76
- value=${this.value??""}
77
- @input=${this.dispatchInputChangeEvent.bind(this)}
78
- />`}dispatchInputChangeEvent(){this.inputElementRef.value&&(this.inputElementRef.value.value=w.maskInput({value:this.inputElementRef.value.value,decimals:this.maxDecimals,integers:this.maxIntegers}),this.dispatchEvent(new CustomEvent("inputChange",{detail:this.inputElementRef.value.value,bubbles:!0,composed:!0})),this.resizeInput())}resizeInput(){if(this.widthVariant==="fit"){const e=this.inputElementRef.value;if(e){const n=e.previousElementSibling;n&&(n.textContent=e.value||"0",e.style.width=`${n.offsetWidth}px`)}}}};i.styles=[m,c,x];a([r({type:Boolean})],i.prototype,"disabled",void 0);a([r({type:String})],i.prototype,"value",void 0);a([r({type:String})],i.prototype,"placeholder",void 0);a([r({type:String})],i.prototype,"widthVariant",void 0);a([r({type:Number})],i.prototype,"maxDecimals",void 0);a([r({type:Number})],i.prototype,"maxIntegers",void 0);a([r({type:String})],i.prototype,"fontSize",void 0);a([r({type:Boolean})],i.prototype,"error",void 0);i=a([f("wui-input-amount")],i);
@@ -1 +0,0 @@
1
- import{P as t,A as m,a as d}from"./index-B4kNtSTk.js";import{b as B,c as G,W}from"./index-B4kNtSTk.js";import"./index-5jd8RPN9.js";const U=3e5;async function E(e){return t.handleOpenPay(e)}async function P(e,n=U){if(n<=0)throw new m(d.INVALID_PAYMENT_CONFIG,"Timeout must be greater than 0");try{await E(e)}catch(s){throw s instanceof m?s:new m(d.UNABLE_TO_INITIATE_PAYMENT,s.message)}return new Promise((s,b)=>{let r=!1;const i=setTimeout(()=>{r||(r=!0,c(),b(new m(d.GENERIC_PAYMENT_ERROR,"Payment timeout")))},n);function o(){if(r)return;const a=t.state.currentPayment,u=t.state.error,C=t.state.isPaymentInProgress;if((a==null?void 0:a.status)==="SUCCESS"){r=!0,c(),clearTimeout(i),s({success:!0,result:a.result});return}if((a==null?void 0:a.status)==="FAILED"){r=!0,c(),clearTimeout(i),s({success:!1,error:u||"Payment failed"});return}u&&!C&&!a&&(r=!0,c(),clearTimeout(i),s({success:!1,error:u}))}const y=l("currentPayment",o),S=l("error",o),D=l("isPaymentInProgress",o),c=T([y,S,D]);o()})}function w(){return t.getExchanges()}function h(){var e;return(e=t.state.currentPayment)==null?void 0:e.result}function k(){return t.state.error}function g(){return t.state.isPaymentInProgress}function l(e,n){return t.subscribeKey(e,n)}function T(e){return()=>{e.forEach(n=>{try{n()}catch{}})}}const A={network:"eip155:8453",asset:"native",metadata:{name:"Ethereum",symbol:"ETH",decimals:18}},I={network:"eip155:8453",asset:"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",metadata:{name:"USD Coin",symbol:"USDC",decimals:6}},N={network:"eip155:84532",asset:"native",metadata:{name:"Ethereum",symbol:"ETH",decimals:18}},x={network:"eip155:1",asset:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",metadata:{name:"USD Coin",symbol:"USDC",decimals:6}},v={network:"eip155:10",asset:"0x0b2c639c533813f4aa9d7837caf62653d097ff85",metadata:{name:"USD Coin",symbol:"USDC",decimals:6}},F={network:"eip155:42161",asset:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",metadata:{name:"USD Coin",symbol:"USDC",decimals:6}},K={network:"eip155:137",asset:"0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",metadata:{name:"USD Coin",symbol:"USDC",decimals:6}},R={network:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",asset:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",metadata:{name:"USD Coin",symbol:"USDC",decimals:6}},Y={network:"eip155:1",asset:"0xdAC17F958D2ee523a2206206994597C13D831ec7",metadata:{name:"Tether USD",symbol:"USDT",decimals:6}},q={network:"eip155:10",asset:"0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",metadata:{name:"Tether USD",symbol:"USDT",decimals:6}},_={network:"eip155:42161",asset:"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",metadata:{name:"Tether USD",symbol:"USDT",decimals:6}},M={network:"eip155:137",asset:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f",metadata:{name:"Tether USD",symbol:"USDT",decimals:6}},O={network:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",asset:"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",metadata:{name:"Tether USD",symbol:"USDT",decimals:6}},H={network:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",asset:"native",metadata:{name:"Solana",symbol:"SOL",decimals:9}};export{t as PayController,B as W3mPayLoadingView,G as W3mPayQuoteView,W as W3mPayView,F as arbitrumUSDC,_ as arbitrumUSDT,A as baseETH,N as baseSepoliaETH,I as baseUSDC,x as ethereumUSDC,Y as ethereumUSDT,w as getExchanges,g as getIsPaymentInProgress,k as getPayError,h as getPayResult,E as openPay,v as optimismUSDC,q as optimismUSDT,P as pay,K as polygonUSDC,M as polygonUSDT,H as solanaSOL,R as solanaUSDC,O as solanaUSDT};
@@ -1 +0,0 @@
1
- *{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;min-height:100vh}.demo-app{width:100%;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;display:flex;flex-direction:column}.demo-app.dark{--demo-bg: var(--demo-page-bg, #09090f);--demo-bg-secondary: color-mix( in srgb, var(--demo-page-bg, #09090f), white 5% );--demo-text: #ffffff;--demo-text-secondary: #a0a0b0;--demo-text-muted: #6b6b80;--demo-border: rgba(255, 255, 255, .08);--demo-accent: var(--demo-page-accent, #3861fb);background:var(--demo-bg);background-image:radial-gradient(ellipse 80% 50% at 50% -20%,color-mix(in srgb,var(--demo-page-accent, #3861fb),transparent 88%),transparent),radial-gradient(ellipse 60% 40% at 80% 100%,color-mix(in srgb,var(--demo-page-accent, #6366f1),transparent 92%),transparent);color:var(--demo-text)}.demo-app.light{--demo-bg: #f5f5f7;--demo-bg-secondary: #ffffff;--demo-text: #1a1a2e;--demo-text-secondary: #5c5c70;--demo-text-muted: #9090a0;--demo-border: rgba(0, 0, 0, .08);--demo-accent: #3861fb;background:var(--demo-bg);color:var(--demo-text)}.demo-header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--demo-border);background:var(--demo-bg-secondary);position:sticky;top:0;z-index:100}.demo-logo{display:flex;align-items:center;gap:10px;color:var(--demo-text);text-decoration:none;transition:opacity .15s ease}.demo-logo:hover{opacity:.8}.demo-logo-text{font-size:17px;font-weight:700;letter-spacing:-.02em}.demo-header-actions{display:flex;align-items:center;gap:12px}.demo-customize-btn{display:flex;align-items:center;gap:6px;padding:10px 14px;border:1px solid var(--demo-border);border-radius:12px;background:transparent;color:var(--demo-text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.demo-customize-btn:hover{border-color:var(--demo-accent);color:var(--demo-text)}.demo-main{flex:1;display:flex;flex-direction:column;align-items:center;padding:48px 24px}.demo-content{width:100%;max-width:1100px;display:flex;flex-direction:column;align-items:center;gap:40px}.demo-hero{text-align:center;max-width:500px}.demo-title{font-size:42px;font-weight:700;letter-spacing:-.03em;margin-bottom:12px;color:var(--demo-accent)}.demo-subtitle{font-size:16px;color:var(--demo-text-secondary);line-height:1.5}.demo-layout{display:flex;gap:24px;align-items:flex-start;justify-content:center;width:100%}.demo-customizer{width:280px;padding:20px;background:var(--demo-bg-secondary);border:1px solid var(--demo-border);border-radius:16px;flex-shrink:0}.demo-customizer-title{font-size:15px;font-weight:600;color:var(--demo-text);margin-bottom:20px}.demo-customizer-section{margin-bottom:20px}.demo-customizer-section:last-child{margin-bottom:0}.demo-customizer-label{display:block;font-size:12px;font-weight:500;color:var(--demo-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px}.demo-theme-toggle{display:flex;gap:8px}.demo-theme-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:10px;border:1px solid var(--demo-border);border-radius:10px;background:transparent;color:var(--demo-text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.demo-theme-btn:hover{border-color:var(--demo-text-muted)}.demo-theme-btn.active{border-color:var(--demo-accent);background:color-mix(in srgb,var(--demo-accent),transparent 90%);color:var(--demo-accent)}.demo-color-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.demo-color-btn{width:100%;aspect-ratio:1;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all .15s ease}.demo-color-btn:hover{transform:scale(1.1)}.demo-color-btn.active{border-color:var(--demo-text);box-shadow:0 0 0 2px var(--demo-bg)}.demo-preset-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.demo-preset-btn{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px;border:1px solid var(--demo-border);border-radius:10px;background:transparent;cursor:pointer;transition:all .15s ease}.demo-preset-btn:hover{border-color:var(--demo-accent);transform:translateY(-1px)}.demo-preset-preview{width:100%;aspect-ratio:1.2;border-radius:6px;position:relative;overflow:hidden}.demo-preset-card{position:absolute;top:20%;right:20%;bottom:20%;left:20%;border-radius:4px}.demo-preset-accent{position:absolute;bottom:15%;left:25%;right:25%;height:12%;border-radius:2px}.demo-preset-name{font-size:10px;font-weight:500;color:var(--demo-text-secondary)}.demo-color-input-row{display:flex;gap:8px;align-items:center}.demo-color-picker{width:40px;height:40px;padding:0;border:1px solid var(--demo-border);border-radius:8px;cursor:pointer;background:transparent}.demo-color-picker::-webkit-color-swatch-wrapper{padding:2px}.demo-color-picker::-webkit-color-swatch{border-radius:6px;border:none}.demo-color-text{flex:1;padding:10px 12px;border:1px solid var(--demo-border);border-radius:8px;background:var(--demo-bg);color:var(--demo-text);font-size:13px;font-family:monospace}.demo-color-text:focus{outline:none;border-color:var(--demo-accent)}.demo-copy-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px 16px;border:1px solid var(--demo-accent);border-radius:10px;background:color-mix(in srgb,var(--demo-accent),transparent 90%);color:var(--demo-accent);font-size:13px;font-weight:600;cursor:pointer;transition:all .15s ease}.demo-copy-btn:hover{background:color-mix(in srgb,var(--demo-accent),transparent 80%)}.demo-copy-btn:active{transform:scale(.98)}.demo-connection-info{display:flex;flex-direction:column;gap:6px}.demo-connected-badge{display:inline-flex;align-items:center;padding:4px 8px;background:#10b9811a;color:#10b981;border-radius:6px;font-size:12px;font-weight:500;width:fit-content}.demo-address{font-size:13px;color:var(--demo-text-secondary);font-family:monospace}.demo-disconnected{font-size:13px;color:var(--demo-text-muted)}.demo-widget-container{display:flex;justify-content:center}.demo-footer{padding:20px;text-align:center;border-top:1px solid var(--demo-border);color:var(--demo-text-muted);font-size:13px}@media (max-width: 768px){.demo-header{padding:12px 16px;flex-wrap:wrap;gap:12px}.demo-customize-btn span{display:none}.demo-customize-btn{padding:10px}.demo-title{font-size:32px}.demo-subtitle{font-size:14px}.demo-layout{flex-direction:column;align-items:center}.demo-customizer{width:100%;max-width:420px}.demo-main{padding:32px 16px}}.ssw-widget{--ssw-accent: #3861fb;--ssw-accent-light: rgba(56, 97, 251, .1);--ssw-success: #00d395;--ssw-error: #f44336;--ssw-warning: #ffc107;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;width:100%;max-width:420px;border-radius:20px;overflow:hidden}.ssw-widget *,.ssw-widget *:before,.ssw-widget *:after{box-sizing:border-box}.ssw-widget.ssw-dark{--ssw-bg-primary: #0a0a14;--ssw-bg-secondary: #12121c;--ssw-bg-tertiary: #1a1a2e;--ssw-bg-input: #0d0d16;--ssw-bg-hover: rgba(255, 255, 255, .05);--ssw-border: rgba(255, 255, 255, .08);--ssw-border-hover: rgba(255, 255, 255, .15);--ssw-text-primary: #ffffff;--ssw-text-secondary: #a0a0b0;--ssw-text-muted: #6b6b80;background:var(--ssw-bg-secondary);color:var(--ssw-text-primary)}.ssw-widget.ssw-light{--ssw-bg-primary: #ffffff;--ssw-bg-secondary: #f8f9fc;--ssw-bg-tertiary: #ffffff;--ssw-bg-input: #f0f2f5;--ssw-bg-hover: rgba(0, 0, 0, .04);--ssw-border: rgba(0, 0, 0, .08);--ssw-border-hover: rgba(0, 0, 0, .15);--ssw-text-primary: #1a1a2e;--ssw-text-secondary: #5c5c70;--ssw-text-muted: #9090a0;background:var(--ssw-bg-secondary);color:var(--ssw-text-primary);box-shadow:0 4px 24px #00000014}.ssw-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--ssw-border)}.ssw-header-title{font-size:16px;font-weight:600;color:var(--ssw-text-primary)}.ssw-header-actions{display:flex;align-items:center;gap:8px}.ssw-connect-btn{display:flex;align-items:center;gap:6px;padding:8px 12px;border:1px solid var(--ssw-border);background:var(--ssw-bg-tertiary);border-radius:10px;color:var(--ssw-text-primary);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.ssw-connect-btn:hover{background:var(--ssw-bg-hover);border-color:var(--ssw-accent)}.ssw-connect-btn.ssw-connected{background:color-mix(in srgb,var(--ssw-accent) 15%,var(--ssw-bg-tertiary));border-color:color-mix(in srgb,var(--ssw-accent) 40%,transparent)}.ssw-connect-btn.ssw-wrong-network{background:color-mix(in srgb,var(--ssw-error) 15%,var(--ssw-bg-tertiary));border-color:var(--ssw-error);color:var(--ssw-error)}.ssw-settings-btn{padding:8px;border:none;background:none;border-radius:10px;color:var(--ssw-text-secondary);cursor:pointer;transition:all .15s ease}.ssw-settings-btn:hover{color:var(--ssw-text-primary);background:var(--ssw-bg-hover)}.ssw-swap-container{padding:16px;display:flex;flex-direction:column;gap:4px;position:relative}.ssw-token-section{background:var(--ssw-bg-tertiary);border-radius:16px;padding:16px;border:1px solid var(--ssw-border);transition:border-color .15s ease}.ssw-token-section:focus-within{border-color:var(--ssw-accent)}.ssw-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.ssw-section-label{font-size:13px;font-weight:500;color:var(--ssw-text-secondary)}.ssw-wallet-badge{font-size:12px;color:var(--ssw-accent);padding:2px 8px;background:var(--ssw-accent-light);border-radius:6px}.ssw-input-row{display:flex;align-items:center;gap:12px}.ssw-amount-input{flex:1;background:none;border:none;font-size:32px;font-weight:500;color:var(--ssw-text-primary);outline:none;min-width:0}.ssw-amount-input::placeholder{color:var(--ssw-text-muted)}.ssw-token-btn{display:flex;align-items:center;gap:10px;padding:8px 12px;border:none;background:var(--ssw-bg-secondary);border-radius:12px;cursor:pointer;transition:all .15s ease;flex-shrink:0}.ssw-token-btn:hover{background:var(--ssw-bg-hover)}.ssw-token-icon{width:32px;height:32px;border-radius:50%;object-fit:contain}.ssw-token-icon-placeholder{width:32px;height:32px;border-radius:50%;background:var(--ssw-accent);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;color:#fff}.ssw-token-info{display:flex;flex-direction:column;align-items:flex-start;gap:2px}.ssw-token-chain{font-size:12px;color:var(--ssw-text-secondary)}.ssw-token-btn svg{color:var(--ssw-text-muted)}.ssw-section-footer{display:flex;align-items:center;justify-content:space-between;margin-top:8px}.ssw-balance{font-size:12px;color:var(--ssw-text-muted)}.ssw-balance-skeleton{width:80px;height:14px;border-radius:4px;background:linear-gradient(90deg,var(--ssw-bg-hover) 25%,var(--ssw-border) 50%,var(--ssw-bg-hover) 75%);background-size:200% 100%;animation:ssw-skeleton-shimmer 1.5s infinite}.ssw-usd-value{font-size:13px;color:var(--ssw-text-muted)}.ssw-swap-divider{display:flex;justify-content:center;margin:-12px 0;position:relative;z-index:10}.ssw-swap-btn{width:36px;height:36px;border:4px solid var(--ssw-bg-secondary);background:var(--ssw-bg-tertiary);border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--ssw-text-secondary);transition:all .15s ease}.ssw-swap-btn:hover{color:var(--ssw-text-primary);background:var(--ssw-bg-hover)}.ssw-receive-address-btn{display:flex;align-items:center;gap:6px;padding:4px 10px;background:var(--ssw-bg-tertiary);border:1px solid var(--ssw-border);border-radius:8px;cursor:pointer;transition:all .15s ease}.ssw-receive-address-btn:hover{background:var(--ssw-bg-hover);border-color:var(--ssw-accent)}.ssw-receive-address-btn.ssw-custom{border-color:var(--ssw-accent);background:color-mix(in srgb,var(--ssw-accent) 10%,var(--ssw-bg-tertiary))}.ssw-receive-address-text{font-size:12px;font-family:monospace;color:var(--ssw-accent)}.ssw-receive-address-btn svg{color:var(--ssw-text-muted);flex-shrink:0}.ssw-receive-address-btn:hover svg{color:var(--ssw-accent)}.ssw-quotes{padding:0 16px 16px}.ssw-action-btn{width:calc(100% - 32px);margin:0 16px 16px;padding:16px;border:none;border-radius:14px;background:var(--ssw-accent);color:#fff;font-size:16px;font-weight:600;cursor:pointer;transition:all .15s ease}.ssw-action-btn:hover:not(:disabled){filter:brightness(1.1)}.ssw-action-btn:disabled{background:var(--ssw-bg-tertiary);color:var(--ssw-text-muted);cursor:not-allowed}.ssw-action-btn.ssw-secondary{background:color-mix(in srgb,var(--ssw-accent) 15%,var(--ssw-bg-tertiary));color:var(--ssw-text-primary);border:1px solid color-mix(in srgb,var(--ssw-accent) 40%,transparent)}.ssw-action-btn.ssw-secondary:hover:not(:disabled){background:color-mix(in srgb,var(--ssw-accent) 25%,var(--ssw-bg-tertiary));filter:none}.ssw-powered-by{padding:12px 16px;display:flex;align-items:center;justify-content:center;gap:4px;font-size:12px;color:var(--ssw-text-muted);border-top:1px solid var(--ssw-border)}.ssw-powered-by a{color:var(--ssw-accent);text-decoration:none;font-weight:500}.ssw-powered-by-link{display:inline-flex;align-items:center;gap:4px}.ssw-powered-by a:hover{opacity:.8}.ssw-tx-status{display:flex;align-items:center;gap:12px;padding:12px 16px;margin:0 16px 16px;border-radius:12px;background:var(--ssw-bg-tertiary);border:1px solid var(--ssw-border)}.ssw-tx-status-pending{border-color:var(--ssw-accent);background:var(--ssw-accent-light)}.ssw-tx-status-success{border-color:var(--ssw-success);background:#00d3951a}.ssw-tx-status-error{border-color:var(--ssw-error);background:#f443361a}.ssw-tx-status-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px}.ssw-tx-status-pending .ssw-tx-status-icon{color:var(--ssw-accent)}.ssw-tx-status-success .ssw-tx-status-icon{color:var(--ssw-success)}.ssw-tx-status-error .ssw-tx-status-icon{color:var(--ssw-error)}.ssw-tx-status-content{flex:1;display:flex;flex-direction:row;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.ssw-tx-status-message{font-size:14px;font-weight:500;color:var(--ssw-text-primary);word-break:break-word}.ssw-tx-status-link{font-size:13px;color:var(--ssw-accent);text-decoration:none}.ssw-tx-status-link:hover{text-decoration:underline}.ssw-tx-status-close{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;color:var(--ssw-text-muted);transition:color .15s ease}.ssw-tx-status-close:hover{color:var(--ssw-text-primary)}@keyframes ssw-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ssw-spinner{animation:ssw-spin 1s linear infinite}.ssw-address-modal{background:var(--ssw-bg-secondary);border-radius:16px;width:90%;max-width:420px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.ssw-address-content{padding:16px;display:flex;flex-direction:column;gap:12px}.ssw-address-label{font-size:14px;color:var(--ssw-text-secondary)}.ssw-address-input-wrapper{display:flex;align-items:center;gap:8px;background:var(--ssw-bg-tertiary);border:1px solid var(--ssw-border);border-radius:12px;padding:12px 16px;transition:border-color .15s ease}.ssw-address-input-wrapper:focus-within{border-color:var(--ssw-accent)}.ssw-address-input-wrapper.ssw-invalid{border-color:var(--ssw-error)}.ssw-address-input{flex:1;background:none;border:none;outline:none;color:var(--ssw-text-primary);font-size:14px;font-family:monospace}.ssw-address-input::placeholder{color:var(--ssw-text-muted)}.ssw-address-clear-btn{display:flex;align-items:center;justify-content:center;padding:4px;border:none;background:none;color:var(--ssw-text-muted);cursor:pointer;border-radius:4px;transition:all .15s ease}.ssw-address-clear-btn:hover{color:var(--ssw-text-primary);background:var(--ssw-bg-hover)}.ssw-address-error{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ssw-error)}.ssw-use-wallet-btn{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;background:var(--ssw-bg-tertiary);border:1px solid var(--ssw-border);border-radius:10px;color:var(--ssw-text-secondary);font-size:14px;cursor:pointer;transition:all .15s ease}.ssw-use-wallet-btn:hover{background:var(--ssw-bg-hover);color:var(--ssw-text-primary)}.ssw-address-actions{display:flex;gap:12px;margin-top:8px}.ssw-address-btn{flex:1;padding:14px 16px;border-radius:12px;font-size:14px;font-weight:600;cursor:pointer;transition:all .15s ease}.ssw-address-btn-secondary{background:var(--ssw-bg-tertiary);border:1px solid var(--ssw-border);color:var(--ssw-text-secondary)}.ssw-address-btn-secondary:hover{background:var(--ssw-bg-hover);color:var(--ssw-text-primary)}.ssw-address-btn-primary{background:var(--ssw-accent);border:none;color:#fff}.ssw-address-btn-primary:hover:not(:disabled){filter:brightness(1.1)}.ssw-address-btn-primary:disabled{background:var(--ssw-bg-tertiary);color:var(--ssw-text-muted);cursor:not-allowed}.ssw-quote-selector{width:100%;padding:14px 16px;border-radius:14px;background:var(--ssw-bg-tertiary);border:1px solid var(--ssw-border);cursor:pointer;transition:all .15s ease;display:flex;align-items:center;justify-content:space-between;gap:12px}.ssw-quote-selector:hover{border-color:var(--ssw-border-hover);background:var(--ssw-bg-hover)}.ssw-quote-selector.ssw-loading{cursor:default;justify-content:center}.ssw-quote-selector.ssw-loading:hover{border-color:var(--ssw-border);background:var(--ssw-bg-tertiary)}.ssw-quote-loading{display:flex;align-items:center;justify-content:center;gap:10px;color:var(--ssw-text-secondary);font-size:14px}.ssw-spinner-small{width:16px;height:16px;border:2px solid var(--ssw-border);border-top-color:var(--ssw-accent);border-radius:50%;animation:ssw-spin .8s linear infinite}.ssw-quote-left{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.ssw-quote-provider{display:flex;align-items:center;gap:10px}.ssw-quote-provider-icon{width:28px;height:28px;border-radius:8px;object-fit:contain;background:var(--ssw-bg-secondary)}.ssw-quote-provider-icon-placeholder{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff}.ssw-quote-provider-name{font-size:14px;font-weight:600;color:var(--ssw-text-primary)}.ssw-quote-best-tag{padding:3px 7px;border-radius:5px;background:var(--ssw-accent);color:#fff;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.ssw-quote-usd{font-size:13px;color:var(--ssw-text-secondary);padding-left:38px}.ssw-quote-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.ssw-quote-amount-row{display:flex;align-items:baseline;gap:5px}.ssw-quote-amount{font-size:17px;font-weight:600;color:var(--ssw-text-primary)}.ssw-quote-symbol{font-size:13px;color:var(--ssw-text-secondary);font-weight:500}.ssw-quote-more{display:flex;align-items:center;gap:3px;font-size:12px;color:var(--ssw-accent);font-weight:500}.ssw-quote-more svg{opacity:.9}.ssw-quotes-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000bf;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px;animation:ssw-fade-in .15s ease}@keyframes ssw-fade-in{0%{opacity:0}to{opacity:1}}.ssw-quotes-modal{width:100%;max-width:400px;max-height:70vh;background:var(--ssw-bg-secondary, #12121c);border-radius:20px;border:1px solid var(--ssw-border, rgba(255, 255, 255, .08));display:flex;flex-direction:column;overflow:hidden;animation:ssw-slide-up .2s ease}@keyframes ssw-slide-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ssw-quotes-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 20px 16px;flex-shrink:0}.ssw-quotes-header-content{display:flex;flex-direction:column;gap:4px}.ssw-quotes-modal-title{font-size:18px;font-weight:600;color:var(--ssw-text-primary, #ffffff);margin:0}.ssw-quotes-modal-subtitle{font-size:13px;color:var(--ssw-text-secondary, #a0a0b0)}.ssw-quotes-modal-close{padding:6px;border:none;background:none;border-radius:8px;color:var(--ssw-text-muted, #6b6b80);cursor:pointer;transition:all .15s ease;display:flex;align-items:center;justify-content:center;margin:-2px -6px 0 0}.ssw-quotes-modal-close:hover{color:var(--ssw-text-primary, #ffffff);background:var(--ssw-bg-hover, rgba(255, 255, 255, .05))}.ssw-quotes-modal-list{flex:1;overflow-y:auto;padding:0 12px 12px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:var(--ssw-border) transparent}.ssw-quotes-modal-list::-webkit-scrollbar{width:6px}.ssw-quotes-modal-list::-webkit-scrollbar-track{background:transparent}.ssw-quotes-modal-list::-webkit-scrollbar-thumb{background:var(--ssw-border);border-radius:3px}.ssw-quotes-modal-list::-webkit-scrollbar-thumb:hover{background:var(--ssw-border-hover)}.ssw-quote-row{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border:1px solid transparent;border-radius:14px;background:var(--ssw-bg-tertiary, #1a1a2e);cursor:pointer;transition:all .15s ease;text-align:left;width:100%;gap:12px}.ssw-quote-row:hover{background:var(--ssw-bg-hover, rgba(255, 255, 255, .05))}.ssw-quote-row.ssw-best{border-color:var(--ssw-accent, #3861fb);background:#3861fb0f}.ssw-quote-row.ssw-best:hover{background:#3861fb1a}.ssw-quote-row.ssw-selected{border-color:var(--ssw-success, #00d395);background:#00d3950f}.ssw-quote-row-left{display:flex;align-items:center;gap:12px;min-width:0}.ssw-quote-row-icon{width:36px;height:36px;border-radius:10px;object-fit:contain;background:var(--ssw-bg-secondary, #12121c);flex-shrink:0}.ssw-quote-row-icon-placeholder{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:600;color:#fff;flex-shrink:0}.ssw-quote-row-info{display:flex;flex-direction:column;gap:2px;min-width:0}.ssw-quote-row-name-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ssw-quote-row-name{font-size:14px;font-weight:600;color:var(--ssw-text-primary, #ffffff)}.ssw-quote-row-best{padding:2px 6px;border-radius:4px;background:var(--ssw-accent, #3861fb);color:#fff;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.ssw-quote-row-diff{padding:2px 6px;border-radius:4px;background:#ef44441f;color:#ef4444;font-size:10px;font-weight:600}.ssw-quote-row-time{font-size:12px;color:var(--ssw-text-muted, #6b6b80)}.ssw-quote-row-right{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex-shrink:0}.ssw-quote-row-amount{font-size:15px;font-weight:600;color:var(--ssw-text-primary, #ffffff)}.ssw-quote-row-symbol{font-size:13px;font-weight:500;color:var(--ssw-text-secondary, #a0a0b0)}.ssw-quote-row-usd{font-size:12px;color:var(--ssw-text-muted, #6b6b80)}.ssw-settings-modal{background:var(--ssw-bg-secondary);border-radius:16px;width:100%;max-width:400px;overflow:hidden;box-shadow:0 24px 48px #0003}.ssw-settings-content{padding:20px 24px 24px}.ssw-settings-section{display:flex;flex-direction:column;gap:12px}.ssw-settings-label{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:500;color:var(--ssw-text-secondary)}.ssw-info-btn{background:none;border:none;padding:2px;cursor:pointer;color:var(--ssw-text-muted);border-radius:50%;transition:color .15s ease}.ssw-info-btn:hover{color:var(--ssw-text-secondary)}.ssw-slippage-options{display:flex;gap:8px}.ssw-slippage-btn{flex:1;padding:10px 12px;border:1px solid var(--ssw-border);border-radius:10px;background:var(--ssw-bg-tertiary);color:var(--ssw-text-primary);font-size:14px;font-weight:500;cursor:pointer;transition:all .15s ease}.ssw-slippage-btn:hover{border-color:var(--ssw-accent)}.ssw-slippage-btn.ssw-selected{background:var(--ssw-accent-light);border-color:var(--ssw-accent);color:var(--ssw-accent)}.ssw-slippage-custom{flex:1.2;position:relative;display:flex;align-items:center}.ssw-slippage-custom input{width:100%;padding:10px 28px 10px 12px;border:1px solid var(--ssw-border);border-radius:10px;background:var(--ssw-bg-tertiary);color:var(--ssw-text-primary);font-size:14px;font-weight:500;outline:none;transition:border-color .15s ease}.ssw-slippage-custom input:focus{border-color:var(--ssw-accent)}.ssw-slippage-custom input::placeholder{color:var(--ssw-text-muted);font-weight:400}.ssw-slippage-custom.ssw-selected input{background:var(--ssw-accent-light);border-color:var(--ssw-accent)}.ssw-slippage-suffix{position:absolute;right:12px;color:var(--ssw-text-secondary);font-size:14px;pointer-events:none}.ssw-slippage-warning{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:10px;background:#ffc1071a;color:#ffc107;font-size:13px;line-height:1.4}.ssw-slippage-warning svg{flex-shrink:0;margin-top:1px}.ssw-slippage-warning.ssw-error{background:#f443361a;color:#f44336}.ssw-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}.ssw-modal{background:var(--ssw-bg-secondary);border-radius:16px;width:100%;max-width:680px;max-height:80vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 48px #0003}.ssw-modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--ssw-border)}.ssw-modal-title{font-size:18px;font-weight:600;color:var(--ssw-text-primary);margin:0}.ssw-modal-close{background:none;border:none;padding:8px;cursor:pointer;color:var(--ssw-text-secondary);border-radius:8px;transition:all .15s ease}.ssw-modal-close:hover{background:var(--ssw-bg-hover);color:var(--ssw-text-primary)}.ssw-modal-content{display:flex;flex:1;min-height:0}.ssw-chain-sidebar{width:200px;border-right:1px solid var(--ssw-border);display:flex;flex-direction:column;background:var(--ssw-bg-tertiary)}.ssw-search-wrapper{position:relative;padding:16px}.ssw-search-icon{position:absolute;left:28px;top:50%;transform:translateY(-50%);color:var(--ssw-text-muted);pointer-events:none}.ssw-chain-search,.ssw-token-search{width:100%;padding:10px 12px 10px 36px;border:1px solid var(--ssw-border);border-radius:10px;background:var(--ssw-bg-input);color:var(--ssw-text-primary);font-size:14px;outline:none;transition:border-color .15s ease}.ssw-chain-search:focus,.ssw-token-search:focus{border-color:var(--ssw-accent)}.ssw-chain-search::placeholder,.ssw-token-search::placeholder{color:var(--ssw-text-muted)}.ssw-chain-list{flex:1;overflow-y:auto;padding:0 8px 16px;scrollbar-width:thin;scrollbar-color:var(--ssw-border) transparent;min-height:300px}.ssw-chain-list::-webkit-scrollbar{width:6px}.ssw-chain-list::-webkit-scrollbar-track{background:transparent}.ssw-chain-list::-webkit-scrollbar-thumb{background:var(--ssw-border);border-radius:3px}.ssw-chain-list::-webkit-scrollbar-thumb:hover{background:var(--ssw-border-hover)}.ssw-chain-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:none;background:none;border-radius:10px;cursor:pointer;transition:background .15s ease;text-align:left}.ssw-chain-item:hover{background:var(--ssw-bg-hover)}.ssw-chain-item.ssw-selected{background:var(--ssw-accent-light)}.ssw-chain-icon,.ssw-chain-icon-placeholder,.ssw-chain-icon-multi{width:28px;height:28px;border-radius:8px;flex-shrink:0}.ssw-chain-icon{object-fit:contain}.ssw-chain-icon-placeholder{display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff}.ssw-chain-icon-multi{display:flex;align-items:center;justify-content:center;background:var(--ssw-bg-hover);font-size:14px}.ssw-chain-name{font-size:14px;font-weight:500;color:var(--ssw-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ssw-token-panel{flex:1;display:flex;flex-direction:column;min-width:0}.ssw-token-list{flex:1;overflow-y:auto;padding:0 16px 16px;scrollbar-width:thin;scrollbar-color:var(--ssw-border) transparent}.ssw-token-list::-webkit-scrollbar{width:6px}.ssw-token-list::-webkit-scrollbar-track{background:transparent}.ssw-token-list::-webkit-scrollbar-thumb{background:var(--ssw-border);border-radius:3px}.ssw-token-list::-webkit-scrollbar-thumb:hover{background:var(--ssw-border-hover)}.ssw-token-item{display:flex;align-items:center;gap:12px;width:100%;padding:12px;border:none;background:none;border-radius:12px;cursor:pointer;transition:background .15s ease;text-align:left}.ssw-token-item:hover{background:var(--ssw-bg-hover)}.ssw-token-icon-wrapper{position:relative;width:40px;height:40px;flex-shrink:0}.ssw-token-icon,.ssw-token-icon-placeholder{width:40px;height:40px;border-radius:50%}.ssw-token-icon{object-fit:contain}.ssw-token-icon-placeholder{display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;color:#fff}.ssw-token-chain-badge{position:absolute;bottom:-2px;right:-2px;width:16px;height:16px;border-radius:4px;border:2px solid var(--ssw-bg-secondary);background:var(--ssw-bg-secondary)}.ssw-token-info{display:flex;flex-direction:column;gap:2px;min-width:0}.ssw-token-symbol{font-size:15px;font-weight:600;color:var(--ssw-text-primary)}.ssw-token-name{font-size:13px;color:var(--ssw-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ssw-token-right{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex-shrink:0}.ssw-token-fiat-value{font-size:14px;font-weight:500;color:var(--ssw-text-primary)}.ssw-token-balance{font-size:13px;font-weight:400;color:var(--ssw-text-secondary)}.ssw-token-balance-skeleton{width:60px;height:14px;border-radius:4px;background:linear-gradient(90deg,var(--ssw-bg-hover) 25%,var(--ssw-border) 50%,var(--ssw-bg-hover) 75%);background-size:200% 100%;animation:ssw-skeleton-shimmer 1.5s infinite;flex-shrink:0}@keyframes ssw-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.ssw-loading,.ssw-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:var(--ssw-text-secondary);font-size:14px}.ssw-spinner{width:24px;height:24px;border:2px solid var(--ssw-border);border-top-color:var(--ssw-accent);border-radius:50%;animation:ssw-spin .8s linear infinite}@keyframes ssw-spin{to{transform:rotate(360deg)}}@media (max-width: 600px){.ssw-modal{max-height:90vh}.ssw-modal-content{flex-direction:column}.ssw-chain-sidebar{width:100%;border-right:none;border-bottom:1px solid var(--ssw-border);max-height:200px}.ssw-chain-list{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 16px}.ssw-chain-item{padding:8px 12px}.ssw-chain-name{font-size:13px}}