@antseed/gateway-console 0.1.8 → 0.1.10
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.
- package/dist/assets/Activity-jZYZ0SDm.js +1 -0
- package/dist/assets/{Audit-DEeTafQK.js → Audit-C-dFTX_u.js} +1 -1
- package/dist/assets/{ChainGate-BGzMcc9t.js → ChainGate-In51TI2h.js} +1 -1
- package/dist/assets/ChannelClose-D8CcISX0.js +1 -0
- package/dist/assets/{Charts-BqpYsDwi.js → Charts-doK0mDVf.js} +1 -1
- package/dist/assets/{Chat-CoYr5t7Q.js → Chat-CaImcsH1.js} +34 -34
- package/dist/assets/{ConnectWallet-BPEdComN.js → ConnectWallet-DQ0PC6SO.js} +1 -1
- package/dist/assets/{DataTable-nSpXggux.js → DataTable-BTwj5g1m.js} +1 -1
- package/dist/assets/{KeyHolder-DaUngSci.js → KeyHolder-D90Uu-Jv.js} +1 -1
- package/dist/assets/Keys-B5LppZtn.js +1 -0
- package/dist/assets/Logs-Dw4sZ9lo.js +1 -0
- package/dist/assets/Members-CnaHKFut.js +1 -0
- package/dist/assets/{Migrate-LZPwWSjY.js → Migrate-BQYY5ty3.js} +1 -1
- package/dist/assets/Models-zIuHewdV.js +1 -0
- package/dist/assets/OperatorActions-DrRpfDBV.js +1 -0
- package/dist/assets/{OperatorGateAlert-BTIl2CQW.js → OperatorGateAlert-D92zhyXC.js} +1 -1
- package/dist/assets/{Overview-B3WLdQF3.js → Overview-CJmp6b7M.js} +1 -1
- package/dist/assets/{PeerPicker-BvexRNjB.js → PeerPicker-BJfjL7Dy.js} +1 -1
- package/dist/assets/PolicyEditor-BpoV34ra.js +1 -0
- package/dist/assets/{PolicyField-BL2_pz19.js → PolicyField-CfRYcr_J.js} +1 -1
- package/dist/assets/Presets-c1J4UwX0.js +4 -0
- package/dist/assets/Providers-B0LuYcAw.js +1 -0
- package/dist/assets/RequestLog-D2YGgG1C.js +1 -0
- package/dist/assets/Rewards-DNNxx3NO.js +2 -0
- package/dist/assets/RewardsClaim-nstcyJvi.js +1 -0
- package/dist/assets/Routing-B79eDIZL.js +1 -0
- package/dist/assets/{Segmented-D-_FvNVa.js → Segmented-BelxPFkk.js} +1 -1
- package/dist/assets/SelectField-BWyF8Ku8.js +1 -0
- package/dist/assets/Settings-Cws5Z--R.js +7 -0
- package/dist/assets/Staking-DHwoflHG.js +1 -0
- package/dist/assets/StakingDashboard-CJbBUUQE.css +1 -0
- package/dist/assets/StakingDashboard-DtOKTmys.js +1 -0
- package/dist/assets/Switch-BwBYBnSS.js +1 -0
- package/dist/assets/{Tabs-iPKA2Kfx.js → Tabs-yVL4Cd6z.js} +1 -1
- package/dist/assets/TextAreaField-B6jcl4RR.js +1 -0
- package/dist/assets/{UsageByModel-CWVN_g_S.js → UsageByModel-DhTF-c1H.js} +1 -1
- package/dist/assets/Wallet-QXhhg_E-.js +9 -0
- package/dist/assets/{WalletConfirm-PHdM3GaV.js → WalletConfirm-CgWBuaMN.js} +1 -1
- package/dist/assets/WalletFunding-Ydd9gD2t.js +1 -0
- package/dist/assets/{WalletSignIn-3MlBmMgW.js → WalletSignIn-DvVSFW4u.js} +1 -1
- package/dist/assets/Workspaces-DuxGwCQ2.js +1 -0
- package/dist/assets/{add-R0POQ3W1.js → add-ChFb9YAz.js} +1 -1
- package/dist/assets/{all-wallets-DVwWXGmT.js → all-wallets-rdNweGUd.js} +1 -1
- package/dist/assets/{app-store-BiL_qTZd.js → app-store-s294A1qn.js} +1 -1
- package/dist/assets/{apple-_Y_Xx6lJ.js → apple-Cs8Kx1eO.js} +1 -1
- package/dist/assets/{arrow-bottom-QxKexUBC.js → arrow-bottom-BMmCEQIa.js} +1 -1
- package/dist/assets/{arrow-bottom-circle-C-fUzpyi.js → arrow-bottom-circle-CThmnDp3.js} +1 -1
- package/dist/assets/{arrow-left-B5dxgBhW.js → arrow-left-BJxgCTi0.js} +1 -1
- package/dist/assets/{arrow-right-B4qewp0i.js → arrow-right-CnLYkBsH.js} +1 -1
- package/dist/assets/{arrow-top-BKBiVc06.js → arrow-top-Dc0DLP-U.js} +1 -1
- package/dist/assets/{bank-FHD-xNqV.js → bank-CSWOYeMW.js} +1 -1
- package/dist/assets/{basic-BccV4Pg1.js → basic-BHdv4O5I.js} +1 -1
- package/dist/assets/{browser-CLLI-CzN.js → browser-mp33aPgo.js} +1 -1
- package/dist/assets/{bundle-full-C_dLAJOc.js → bundle-full-CDQ5iC5h.js} +1 -1
- package/dist/assets/{card-NLpMEn-Z.js → card-BcVuRQiM.js} +1 -1
- package/dist/assets/ccip-O1XLvWon.js +1 -0
- package/dist/assets/{checkmark-ChFh19kF.js → checkmark-CQVJIWW1.js} +1 -1
- package/dist/assets/{checkmark-bold-CJoZ_Jrk.js → checkmark-bold-DDU5XQfq.js} +1 -1
- package/dist/assets/{chevron-bottom-yTRY8YSB.js → chevron-bottom-Bqi9FW2q.js} +1 -1
- package/dist/assets/{chevron-left-DFmsJ_8-.js → chevron-left-Vd5st0yB.js} +1 -1
- package/dist/assets/{chevron-right-IFdWvKJ1.js → chevron-right-BVwFrlss.js} +1 -1
- package/dist/assets/{chevron-top-Boye5Dtz.js → chevron-top-D5dQ2xFn.js} +1 -1
- package/dist/assets/{chrome-store-D8_25Dil.js → chrome-store-C9C4k8IO.js} +1 -1
- package/dist/assets/{clock-D9LUFCJ6.js → clock-Cuvc7bNo.js} +1 -1
- package/dist/assets/{close-C1PmyegA.js → close-fW1pJ13b.js} +1 -1
- package/dist/assets/{code-block-oleEXE1g.js → code-block-Djv3iQ0G.js} +2 -2
- package/dist/assets/{coinPlaceholder-DIV2a9lC.js → coinPlaceholder-CKymvNA8.js} +1 -1
- package/dist/assets/{compass-CHoy_ibd.js → compass-D3h_6fr8.js} +1 -1
- package/dist/assets/{copy-CHW4cQpR.js → copy-CNGN_cOz.js} +1 -1
- package/dist/assets/{core-BTKMBBlw.js → core-LDeQm5nv.js} +21 -22
- package/dist/assets/cursor-CTNYpsWo.js +3 -0
- package/dist/assets/{cursor-transparent-C642YpxV.js → cursor-transparent-BblOfv3t.js} +1 -1
- package/dist/assets/{desktop-CFX22rtl.js → desktop-gpVOlZ1-.js} +1 -1
- package/dist/assets/{disconnect-D3FRtzUF.js → disconnect-C_phPN0_.js} +1 -1
- package/dist/assets/{discord-DVAbkC-9.js → discord-Dk_2Plhc.js} +1 -1
- package/dist/assets/{en_US-Y4ZOVFV4-CkCCvmU2.js → en_US-Y4ZOVFV4-CmhP8GU2.js} +22 -22
- package/dist/assets/{etherscan-CbJMIgqi.js → etherscan-Cyrh-2Lr.js} +1 -1
- package/dist/assets/{exclamation-triangle-Co4Jh1eh.js → exclamation-triangle-SeeDwZ6A.js} +1 -1
- package/dist/assets/{extension-BDLbDfWs.js → extension-e_11O0GI.js} +1 -1
- package/dist/assets/{external-link-zdLNy8XP.js → external-link-Dl0AqCn3.js} +1 -1
- package/dist/assets/{facebook-JC7OgGSS.js → facebook-Cp_-Axbh.js} +1 -1
- package/dist/assets/{farcaster-Clihjnkd.js → farcaster-Zwu26KYL.js} +1 -1
- package/dist/assets/{filters-CUYKBCRj.js → filters-CdkpWvgi.js} +1 -1
- package/dist/assets/{github-D6Beytth.js → github-DuPUePDJ.js} +1 -1
- package/dist/assets/{google-BwFZTm-H.js → google-DlKW7Gx7.js} +1 -1
- package/dist/assets/{help-circle-bA9CuhxX.js → help-circle-19xLhjPt.js} +1 -1
- package/dist/assets/highlighted-body-KQOG7T2V-D7DB9nBd.js +1 -0
- package/dist/assets/{id-B1fJDhOC.js → id-B4PjxpL6.js} +1 -1
- package/dist/assets/{image-Bs0ponob.js → image-CHz8w95r.js} +1 -1
- package/dist/assets/{index-7LAxO3mh.js → index-BYZ6CM-r.js} +1 -1
- package/dist/assets/index-BhwNCc8y.js +1 -0
- package/dist/assets/{index-DBg2OUwU.js → index-CAflmCbT.js} +3 -3
- package/dist/assets/index-CZbdRW9K.js +1 -0
- package/dist/assets/index-CfhMI0GY.css +1 -0
- package/dist/assets/index-CgyFWy7G.js +16 -0
- package/dist/assets/index-DIcymBxc.js +91 -0
- package/dist/assets/index.es-0kjt2ETS.js +38 -0
- package/dist/assets/{info-Crty5prY.js → info-CFnwPck_.js} +1 -1
- package/dist/assets/{info-circle-bDiLcX0l.js → info-circle-DNYjRzmq.js} +1 -1
- package/dist/assets/{lightbulb-wiOiTKWo.js → lightbulb-DPrYcwVp.js} +1 -1
- package/dist/assets/{limits-CLb8Vgob.js → limits-D8_oE0N-.js} +1 -1
- package/dist/assets/{mail-Bpk1E7XK.js → mail-Do_T12XQ.js} +1 -1
- package/dist/assets/{mermaid-MCJ5UELQ-BGV7b3EX.js → mermaid-MCJ5UELQ-Cr83KTfF.js} +3 -3
- package/dist/assets/{metamask-sdk-C52uEAVB.js → metamask-sdk-CHSvqgLD.js} +1 -1
- package/dist/assets/{mobile-emFaTh5J.js → mobile-2wdwD-gm.js} +1 -1
- package/dist/assets/models-CLos5_p0.js +1 -0
- package/dist/assets/{more-zpBj89SK.js → more-CugjlKbm.js} +1 -1
- package/dist/assets/{network-placeholder-Ck50Grfu.js → network-placeholder-D0CvRN9Z.js} +1 -1
- package/dist/assets/{nftPlaceholder-Du211GMR.js → nftPlaceholder-CjCtJ3VF.js} +1 -1
- package/dist/assets/{off-_wDqmoP5.js → off-CjwzxGqC.js} +1 -1
- package/dist/assets/{play-store-CnBTcLjB.js → play-store-ts_mM-L7.js} +1 -1
- package/dist/assets/{plus-Cb-EWMOz.js → plus-CayVcA5r.js} +1 -1
- package/dist/assets/{qr-code-IAHrSZeD.js → qr-code-BJFXX7Ga.js} +1 -1
- package/dist/assets/{recycle-horizontal-Dp5-d1QB.js → recycle-horizontal-Dxd_xbuW.js} +1 -1
- package/dist/assets/{refresh-D-cPnY1R.js → refresh-2tSMiCzO.js} +1 -1
- package/dist/assets/{reown-logo-h7OXEqAA.js → reown-logo-C3tg9yiK.js} +1 -1
- package/dist/assets/{search-3DHLTaqT.js → search-By38_AjN.js} +1 -1
- package/dist/assets/{send-B4rs7eAg.js → send-DhLEHc2T.js} +1 -1
- package/dist/assets/sendTransaction-CqpP3CZj.js +1 -0
- package/dist/assets/stored-CFfx95Ep.js +1 -0
- package/dist/assets/{swapHorizontal-CvyPi1B5.js → swapHorizontal-BSy_Qzqy.js} +1 -1
- package/dist/assets/{swapHorizontalBold-08GsNiPL.js → swapHorizontalBold-B4pOkOa-.js} +1 -1
- package/dist/assets/{swapHorizontalMedium-BGToxjIs.js → swapHorizontalMedium-BbDDLHs6.js} +1 -1
- package/dist/assets/{swapHorizontalRoundedBold-Brn-wznU.js → swapHorizontalRoundedBold-MzTdSarg.js} +1 -1
- package/dist/assets/{swapVertical-DrQ-Bc70.js → swapVertical-D0uKM7wm.js} +1 -1
- package/dist/assets/{telegram-NopFeNMG.js → telegram-Q_WwsPzx.js} +1 -1
- package/dist/assets/{three-dots-DdTyzR9Y.js → three-dots-Cpl_X23E.js} +1 -1
- package/dist/assets/{twitch-CgscKAJj.js → twitch-B7x-eAo9.js} +1 -1
- package/dist/assets/{twitterIcon-Dj2w3xJD.js → twitterIcon-BRMMjDzW.js} +1 -1
- package/dist/assets/usage-DktoZRc8.js +1 -0
- package/dist/assets/{useInfiniteQuery-D6hnkAjP.js → useInfiniteQuery-NenQ5Num.js} +1 -1
- package/dist/assets/useTx-WkiDSW_A.js +1 -0
- package/dist/assets/{verify-DYZt4X2T.js → verify-BxTMhyZY.js} +1 -1
- package/dist/assets/{verify-filled-CsYaVqHh.js → verify-filled-CaKhO-hp.js} +1 -1
- package/dist/assets/{w3m-modal-DPin_wEK.js → w3m-modal-DZ2_0Ukm.js} +1 -1
- package/dist/assets/waitForCallsStatus-CtriTPoz.js +1 -0
- package/dist/assets/{wallet-BUXq0k4x.js → wallet-BeZF3I-Z.js} +1 -1
- package/dist/assets/{wallet-placeholder-BDl3Cn3J.js → wallet-placeholder-BDvuTJ6r.js} +1 -1
- package/dist/assets/{walletconnect-B8r28svX.js → walletconnect-U8tnyg6m.js} +1 -1
- package/dist/assets/{warning-circle-CyUfdBFs.js → warning-circle-Dg69jmuZ.js} +1 -1
- package/dist/assets/writeContract-DrAWt0yz.js +1 -0
- package/dist/assets/{x-DO-oPY_e.js → x-CJ-uWPue.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/Activity-BTHWjCfF.js +0 -1
- package/dist/assets/ChannelClose-B6aqPNyc.js +0 -1
- package/dist/assets/Disclosure-DaXKEWtB.js +0 -1
- package/dist/assets/Keys-BIlAH1SD.js +0 -1
- package/dist/assets/Logs-D6o56kmk.js +0 -1
- package/dist/assets/Members-33LlQeJ4.js +0 -1
- package/dist/assets/Models-n5Y-SyjO.js +0 -1
- package/dist/assets/OperatorActions-hBx0zsfp.js +0 -1
- package/dist/assets/PolicyEditor-zST9UHdU.js +0 -1
- package/dist/assets/Presets-CMVeG1hO.js +0 -4
- package/dist/assets/Providers-CVteCWoy.js +0 -1
- package/dist/assets/RequestLog-DHFCVVlZ.js +0 -1
- package/dist/assets/Rewards-D3Hh7Soh.js +0 -2
- package/dist/assets/RewardsClaim-D2E08Ty-.js +0 -1
- package/dist/assets/Routing-DSRUEAFE.js +0 -1
- package/dist/assets/SelectField-CL9GSHwf.js +0 -1
- package/dist/assets/Settings-DvqGXXJg.js +0 -7
- package/dist/assets/Switch-C5_JEBYO.js +0 -1
- package/dist/assets/TextAreaField-BwxpmCEP.js +0 -1
- package/dist/assets/Wallet-DUot1EZD.js +0 -9
- package/dist/assets/WalletFunding-BsxwGyzf.js +0 -1
- package/dist/assets/Workspaces-Cbcnklsg.js +0 -1
- package/dist/assets/ccip-CRC4f413.js +0 -1
- package/dist/assets/cursor-D7dlE2wt.js +0 -3
- package/dist/assets/highlighted-body-KQOG7T2V-BhiY5JgE.js +0 -1
- package/dist/assets/index-BwpQbdIU.js +0 -1
- package/dist/assets/index-CL8Uzy58.js +0 -91
- package/dist/assets/index-D8vXwUTI.css +0 -1
- package/dist/assets/index-DZnhs53K.js +0 -16
- package/dist/assets/index-DeMxDxlw.js +0 -1
- package/dist/assets/index.es-BMcYAA4u.js +0 -39
- package/dist/assets/models-BSFEBc_r.js +0 -1
- package/dist/assets/secp256k1-Cb4vPU9D.js +0 -1
- package/dist/assets/secp256k1-D_Ekx0rf.js +0 -1
- package/dist/assets/usage-CVWdWZuC.js +0 -1
- package/dist/assets/useTx-rdzQSfyH.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{bQ as Ke,ay as pe,b5 as Ge,u as Z,a as fe,F as Qe,G as Ye,n as we,i as ye,r as p,U as He,c as be,e as Je,bR as We,bo as Ze,$ as U,bS as Xe,bT as es,f as A,aF as ss,j as s,C as X,ah as Q,o as ee,B as k,L as ve,A as ts,bj as rs,t as ke,q as xe,l as je,Q as Pe,E as W,I as V,D as ns,T as q,w as F,M as Se,aN as Ce,v as L,at as as,bO as N,aw as Ie,ax as Ne,h as $e,Z as os,bU as Ae,bV as Fe,bW as ls,bf as is,bX as cs,Y as ds,bY as us,O as ms,R as hs,bZ as gs,b as ps,a3 as fs,aa as ws,bg as ys,b_ as bs,bx as ce,bh as vs,y as de,b$ as ks,P as xs}from"./index-DIcymBxc.js";import{p as Y,P as js}from"./PeerPicker-BJfjL7Dy.js";import{S as $}from"./SelectField-BWyF8Ku8.js";import{D as Le}from"./DataTable-BTwj5g1m.js";import{V as Te,T as Me,P as De,a as Ps,p as Ss,S as Cs}from"./models-CLos5_p0.js";import{f as Is}from"./ants-B38m9Phv.js";import{PresetForm as Ns}from"./Presets-c1J4UwX0.js";import{T as $s,a as As}from"./Tabs-yVL4Cd6z.js";import{S as H}from"./Switch-BwBYBnSS.js";import"./PolicyField-CfRYcr_J.js";import"./PolicyEditor-BpoV34ra.js";import"./Segmented-BelxPFkk.js";import"./roving-DkptacxO.js";import"./TextAreaField-B6jcl4RR.js";function Ee(e,t="admin"){return t==="owner"&&Ge(e)?"ownerRoutingPolicy":"routingPolicy"}async function Oe(e,t){const r=(await e.keys.list({workspace:t.workspaceId})).find(a=>a.id===t.keyId);if(!r)throw new Error("That key no longer exists.");return r}async function Re(e,t){switch(t.kind){case"gateway":return e.network.gatewayPolicy();case"workspace-org":return(await e.workspaces.get(t.workspaceId)).orgRoutingPolicy;case"workspace":return(await e.workspaces.get(t.workspaceId)).routingPolicy;case"member":{const r=(await e.members.list()).find(a=>a.id===t.memberId);if(!r)throw new Error("That member no longer exists.");return r.routingPolicy}case"key":{const r=await Oe(e,t);return r[Ee(r,t.layer)]??null}}}async function Fs(e,t,r,a){const o=a!=null&&a.confirmEmpty||a!=null&&a.acceptNarrowed?[a]:[];switch(t.kind){case"gateway":await e.network.setGatewayPolicy(r??{},...o);return;case"workspace-org":await e.workspaces.update(t.workspaceId,{orgRoutingPolicy:r},...o);return;case"workspace":await e.workspaces.update(t.workspaceId,{routingPolicy:r},...o);return;case"member":await e.members.update(t.memberId,{routingPolicy:r},...o);return;case"key":{const i=t.layer==="owner"?Ee(await Oe(e,t),"owner"):"routingPolicy";await e.keys.update(t.keyId,{[i]:r},...o);return}}}const ue=e=>JSON.stringify(e??{},Object.keys(e??{}).sort());async function Ls(e,t,r,a,o,i){const m=await Re(e,t),c=Ke(m,r,a,o),g=ue(m)!==ue(c)||JSON.stringify(m??{})!==JSON.stringify(c);return g&&await Fs(e,t,c,i),{before:m,after:c,changed:g}}function Ts(e,t,r){return e.kind==="key"?{model:t,key:e.keyId,workspace:e.workspaceId}:e.kind==="member"?{model:t,member:e.memberId,workspace:r}:e.kind==="gateway"?{model:t,workspace:r}:{model:t,workspace:e.workspaceId}}const Ms={allow:"Allowed",block:"Blocked",prefer:"Preferred"};function Ds(e){const{action:t,name:r,scopeLabel:a,changed:o,model:i,preview:m,peerId:c}=e,g=Ms[t],f=t==="prefer"?`already first for ${i}`:`already ${g.toLowerCase()}`,l=o?`${g} ${r} ${t==="prefer"?`for ${i} `:""}on ${a}`:`${r} was ${f} on ${a}; nothing changed`;if(!m)return t==="block"?{tone:o?"success":"info",text:`${l}.`}:{tone:"info",text:`${l}. ${e.previewError?`Could not check whether it can serve: ${e.previewError}`:"Could not check whether it can serve."}`};const u=m.candidates.find(b=>pe(b.peerId,c));if(t==="block")return u!=null&&u.eligible?{tone:"warning",text:`${l}, but the route preview still lists it as eligible for ${i}. Reload and check the policy.`}:{tone:o?"success":"info",text:`${l}.`};if(!m.modelAllowed)return{tone:"warning",text:`${l}, but ${i} is not an allowed model here, so it still cannot serve it.`};if(!u)return{tone:"info",text:`${l}. It does not offer ${i} right now, so the preview cannot show its rank.`};if(!u.eligible){const b=u.reasons.length?u.reasons.join("; "):"another level excludes it";return{tone:"warning",text:`${l}, but it still cannot serve ${i} here: ${b}.`}}return t==="prefer"&&u.rank!==null&&u.rank>1?{tone:"warning",text:`${l}, but it ranks #${u.rank} for ${i}: a fallback chain on another level comes first.`}:{tone:o?"success":"info",text:`${l}.${u.rank?` It ranks #${u.rank} for ${i}.`:""}`}}function Es(e,t,r,a){return e==="gateway"?{kind:e}:e==="workspace"||e==="workspace-org"?{kind:e,workspaceId:r}:t?e==="member"?{kind:e,memberId:t}:{kind:"key",keyId:t,workspaceId:r,layer:a?"admin":"owner"}:null}function Os(e){return e.canForce?"Not allowed above":e.tone==="warning"?"Check the result":"Done"}function Rs({fetching:e,error:t,ready:r,policy:a}){return e?s.jsx(ve,{rows:1}):t?s.jsx(ee,{error:t,title:"Could not load this scope's policy"}):r?s.jsxs("p",{className:"gc-muted",children:["Current policy: ",ts(a)]}):null}const me={allow:{title:"Allow seller",verb:"Allow"},block:{title:"Block seller",verb:"Block"},prefer:{title:"Prefer seller",verb:"Prefer"}};function Be({peer:e,action:t,onClose:r,peers:a}){var te,re,ne,ae;const{viewer:o,workspace:i,me:m}=Z(),c=fe(),g=Qe(),f=Ye(),l=we(o),u=ye(o),b=[...l?[{value:"gateway",label:"Gateway default (everyone)"}]:[],...l?[{value:"workspace-org",label:`${i.name}: organization policy`}]:[],...u?[{value:"workspace",label:`${i.name}: workspace policy`}]:[],...l?[{value:"member",label:"A member"}]:[],{value:"key",label:"An API key"}],[y,h]=p.useState(b[0].value),[n,v]=p.useState(""),[x,E]=p.useState(""),O=He(y==="member"),R=be(c,y==="key");p.useEffect(()=>{v("")},[y]),p.useEffect(()=>{var d;E(((d=e==null?void 0:e.services[0])==null?void 0:d.service)??"")},[e]);const w=(R.data??[]).filter(d=>d.status==="active"&&(u||d.ownerMemberId===m.member.id)),j=Es(y,n,i.id,u),[C,M]=p.useState(null);p.useEffect(()=>{M(null)},[y,n,e]);const B=Je({queryKey:["routing","scope-policy",j],queryFn:()=>Re(A,j),enabled:j!==null&&e!==null,staleTime:0}),z=j!==null&&B.isSuccess&&(t!=="prefer"||x!==""),I=B.data??null,Ve=t==="allow"&&z&&!(I!=null&&I.allowedPeerIds)&&!(I!=null&&I.allowedPeerLists),qe=t==="block"&&z&&e!==null&&We(I,e.peerId);let D=((te=b.find(d=>d.value===y))==null?void 0:te.label.replace(/^A[n]? /,"the "))??"this scope";y==="key"&&(D=`key “${((re=w.find(d=>d.id===n))==null?void 0:re.label)??n}”`),y==="member"&&(D=`member “${((ae=(ne=O.data)==null?void 0:ne.find(d=>d.id===n))==null?void 0:ae.label)??n}”`);const P=Ze({mutationFn:async(d={})=>{var ie;if(!e||!j)return null;const S=x||((ie=e.services[0])==null?void 0:ie.service)||"",{changed:G}=await Ls(A,j,t,e.peerId,x||void 0,d);let oe=null,le=null;if(S)try{oe=await A.network.routePreview(Ts(j,S,i.id))}catch(_e){le=ss(_e)}return Ds({action:t,name:Y(a,e.peerId),scopeLabel:D,changed:G,model:S,preview:oe,peerId:e.peerId,previewError:le})},onSuccess:d=>{for(const S of es)g.invalidateQueries({queryKey:[S]});d&&(d.tone==="success"?(f(d.text),r()):M(d))},onError:d=>{const S=e?Y(a,e.peerId):"this seller";if(U(d,"narrowed"))M({tone:"warning",canForce:!0,text:`Nothing changed yet. The levels above ${D} do not allow ${S}, so saving this would not let it serve. ${Xe(d.details).join(" ")}`.trim()});else if(U(d,"empty_allow_list")){const G=t==="block"?`Blocking ${S}`:`Allowing only ${S}`;M({tone:"warning",text:`Nothing changed. ${G} on ${D} would leave no seller that the levels above allow, so requests would fail. Change the policy on the Routing page if you really want that.`})}}}),K=e?Y(a,e.peerId):"";return s.jsx(X,{isOpen:e!==null,onClose:r,title:me[t].title,subtitle:K,children:s.jsxs("div",{className:"gc-stack",children:[s.jsx($,{label:"Apply to",value:y,onChange:d=>h(d),options:b}),y==="member"&&s.jsx($,{label:"Member",value:n,onChange:v,options:[{value:"",label:"Choose a member"},...(O.data??[]).filter(d=>d.status!=="disabled").map(d=>({value:d.id,label:d.label}))]}),y==="key"&&s.jsx($,{label:"Key",value:n,onChange:v,options:[{value:"",label:w.length?"Choose a key":"No keys you can edit"},...w.map(d=>({value:d.id,label:d.label}))]}),t==="prefer"&&e&&s.jsx($,{label:"For model",value:x,onChange:E,options:e.services.map(d=>({value:d.service,label:d.service})),hint:"The seller goes first in this model's fallback chain."}),s.jsx(Rs,{fetching:B.isFetching,error:B.error,ready:z,policy:I}),Ve&&s.jsxs(Q,{tone:"warning",children:["This scope has no allow list yet. Allowing ",K," creates one, so only allowed sellers can serve it."]}),qe&&s.jsxs(Q,{tone:"warning",title:"This is the only allowed seller",children:["Blocking ",K," empties this scope's allow list, so the allow list is removed: any seller that is not blocked may serve it again."]}),t==="block"&&s.jsx("p",{className:"gc-muted",children:"Blocked sellers never serve this scope or anything under it."}),y==="key"&&!u&&s.jsx("p",{className:"gc-muted",children:"This changes your own restrictions on the key. Restrictions a workspace admin set still apply."}),P.error&&!U(P.error,"narrowed")&&!U(P.error,"empty_allow_list")?s.jsx(ee,{error:P.error,title:"Could not update the policy"}):null,C?s.jsxs(s.Fragment,{children:[s.jsx(Q,{tone:C.tone,title:Os(C),children:C.text}),s.jsxs("div",{className:"gc-actions",children:[C.canForce&&s.jsx(k,{variant:"ghost",disabled:P.isPending,onClick:()=>{M(null),P.mutate({acceptNarrowed:!0})},children:"Save it anyway"}),s.jsx(k,{onClick:r,children:C.canForce?"Cancel":"Done"})]})]}):s.jsxs("div",{className:"gc-actions",children:[s.jsx(k,{variant:"ghost",onClick:r,children:"Cancel"}),s.jsx(k,{variant:t==="block"?"danger":"primary",disabled:!z||P.isPending,onClick:()=>P.mutate({}),children:P.isPending?"Saving…":me[t].verb})]})]})})}function Bs({initial:e,peers:t,onDone:r}){const[a,o]=p.useState((e==null?void 0:e.name)??""),[i,m]=p.useState((e==null?void 0:e.description)??""),[c,g]=p.useState((e==null?void 0:e.peerIds)??[]),f=ke({mutationFn:()=>{const l={name:a.trim(),description:i.trim()||null,peerIds:c};return e?A.network.updatePeerList(e.id,l):A.network.createPeerList(l)},onSuccess:r,invalidate:[xe.peerLists]});return s.jsxs("form",{className:"gc-stack",onSubmit:l=>{l.preventDefault(),f.mutate()},children:[s.jsx(q,{label:"Name",required:!0,placeholder:"e.g. Our own sellers",value:a,onChange:l=>o(l.target.value)}),s.jsx(q,{label:"Description",value:i,onChange:l=>m(l.target.value)}),s.jsx(js,{label:"Sellers",value:c,onChange:g,peers:t}),s.jsx("p",{className:"gc-fineprint",children:"Policies refer to a list by name, so editing it changes every policy that uses it."}),f.error?s.jsx(ee,{error:f.error,title:"Could not save the list"}):null,s.jsxs("div",{className:"gc-actions",children:[s.jsx(k,{variant:"ghost",onClick:r,children:"Cancel"}),s.jsx(k,{type:"submit",disabled:f.isPending||!a.trim(),children:f.isPending?"Saving…":"Save list"})]})]})}function zs({peers:e}){const{viewer:t}=Z(),r=we(t),a=rs(),[o,i]=p.useState(null),[m,c]=p.useState(null),g=ke({mutationFn:f=>A.network.removePeerList(f.id),onSuccess:()=>c(null),invalidate:[xe.peerLists]});return s.jsxs(je,{flush:!0,title:"Peer lists",description:"Named groups of sellers to allow or block in one step.",actions:r&&s.jsx(k,{size:"sm",variant:"outline",leadingIcon:s.jsx(V.plus,{size:14}),onClick:()=>i("new"),children:"New list"}),children:[s.jsx(Pe,{query:a,children:f=>s.jsx(Le,{label:"Peer lists",rows:f,rowKey:l=>l.id,rowLabel:l=>l.name,actions:l=>r?[{label:"Edit",onSelect:()=>i(l)},{label:"Delete",tone:"danger",onSelect:()=>c(l)}]:[],empty:s.jsx(W,{icon:s.jsx(V.network,{size:18}),title:"No peer lists",body:"Group sellers you trust, or ones you run yourself."}),columns:[{key:"name",header:"Name",render:l=>s.jsx("span",{className:"gc-strong",children:l.name})},{key:"desc",header:"Description",secondary:!0,render:l=>s.jsx("span",{className:"gc-muted",children:l.description??"—"})},{key:"count",header:"Sellers",align:"right",render:l=>l.peerIds.length}]})}),s.jsx(X,{isOpen:o!==null,onClose:()=>i(null),title:o==="new"?"New peer list":"Edit peer list",size:"lg",children:o!==null&&s.jsx(Bs,{initial:o==="new"?null:o,peers:e,onDone:()=>i(null)})}),s.jsx(ns,{isOpen:m!==null,busy:g.isPending,error:g.error,onClose:()=>c(null),onConfirm:()=>m&&g.mutate(m),title:"Delete this list?",confirmLabel:"Delete",body:"Policies refer to lists by reference: once deleted, the list adds no sellers to them. An allow list made only of deleted lists lets no seller serve."})]})}function ze(e,t){return t?e.services.filter(r=>r.service===t):e.services}function _(e,t,r=""){const a=ze(e,r).map(o=>o[t]).filter(o=>o!==null);return a.length?{min:Math.min(...a),max:Math.max(...a)}:null}function Us(e,t=""){var r;return((r=_(e,"inputUsdPerMillion",t))==null?void 0:r.min)??null}function Vs(e,t=""){var r;return((r=_(e,"outputUsdPerMillion",t))==null?void 0:r.min)??null}function se(e,t=""){return ze(e,t).some(r=>r.inputUsdPerMillion===0&&(r.outputUsdPerMillion??0)===0)}function qs(e,t){const r=t.search.trim().toLowerCase();return e.filter(a=>{var o;return!(r&&!a.peerId.toLowerCase().includes(r)&&!(a.displayName??"").toLowerCase().includes(r)&&!a.services.some(i=>i.service.toLowerCase().includes(r))||t.model&&!a.services.some(i=>i.service===t.model)||t.tee&&!a.tee||t.linked&&!((o=a.verificationLinks)!=null&&o.length)||t.free&&!se(a,t.model))})}const Ue={"openai-chat-completions":"Chat completions","openai-responses":"Responses","anthropic-messages":"Messages","openai-images":"Images"};function he(e){return e===null?"—":String(Math.round(e))}function J(e){return e.displayName??F(e.peerId,8,4)}function T(e){return`${e.provider}:${e.service}`}function _s({peer:e}){const t=(e.health.coolingDownUntil??0)>Date.now();return s.jsxs("span",{className:"gc-seller__meta",children:[s.jsxs("span",{className:"gc-peer-id",children:[s.jsx(Se,{title:e.peerId,children:F(e.peerId,6,4)}),s.jsx(Ce,{iconOnly:!0,value:e.peerId,label:"Copy peer id"})]}),s.jsx(Te,{links:e.verificationLinks}),s.jsx(Me,{tee:e.tee,scope:e.teeScope}),se(e,"")&&s.jsx(L,{tone:"success",children:"Free"}),e.washFlagged&&s.jsx(L,{tone:"danger",children:"Flagged"}),t&&s.jsx(L,{tone:"warning",children:"Cooling down"}),s.jsxs("span",{className:"gc-muted",children:["Last seen ",as(e.lastSeen)]})]})}function Ks({peer:e,showReputation:t}){const r=(e.health.coolingDownUntil??0)>Date.now();return s.jsxs("div",{className:"gc-grid gc-grid--2 gc-figures gc-panel-figures",children:[s.jsx(N,{label:"Trust score",value:he(e.trustScore)}),t&&s.jsx(N,{label:"Reputation",value:he(e.reputationScore)}),s.jsx(N,{label:"Stake",value:e.stakeAnts?Is(e.stakeAnts):"—"}),s.jsx(N,{label:"Network usage share",value:e.usageShareBps===null?"—":`${(e.usageShareBps/100).toFixed(2)}%`}),s.jsx(N,{label:"First token p50 (this gateway)",value:Ie(e.firstTokenMsP50)}),s.jsx(N,{label:"Speed p50 (this gateway)",value:Ne(e.tokensPerSecondP50)}),s.jsx(N,{label:"Requests, 24h (this gateway)",value:$e(e.requests24h)}),s.jsx(N,{label:"Failure streak",value:r?`${e.health.failureStreak}, cooling down until ${os(e.health.coolingDownUntil)}`:String(e.health.failureStreak)})]})}function Gs({peer:e,selected:t,onSelect:r}){const[a,o]=p.useState(""),i=a.trim().toLowerCase(),m=e.services.filter(c=>!i||c.service.toLowerCase().includes(i));return s.jsx(De,{title:`Models (${e.services.length})`,actions:e.services.length>6&&s.jsx(q,{size:"sm",type:"search","aria-label":"Search this provider's models",placeholder:"Search models",value:a,onChange:c=>o(c.target.value)}),children:m.length===0?s.jsx("p",{className:"gc-fineprint",children:i?"No models match.":"This provider lists no models."}):s.jsx("ul",{className:"gc-panel-rows","aria-label":"Models and prices",children:m.map(c=>{const g=t!==null&&T(t)===T(c);return s.jsx(Ps,{selected:g,title:s.jsx("span",{className:"gc-strong",children:c.service}),meta:s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Ss(c)}),s.jsx("span",{children:Ue[Fe(c)]})]}),actions:s.jsxs(s.Fragment,{children:[s.jsx(Ce,{iconOnly:!0,value:Ae(e.peerId,c.service),label:`Copy ${c.service} pinned to this provider (peer@model)`}),s.jsx(k,{size:"sm",variant:g?"outline":"ghost","aria-pressed":g,title:"Show the API call for this model",onClick:()=>r(c),children:"API call"})]})},T(c))})})})}function Qs({peer:e,service:t,onSelect:r}){var R;const{workspace:a,viewer:o}=Z(),i=fe(),m=ls(),c=be(i),g=is(a.id),[f,l]=p.useState("curl"),[u,b]=p.useState(!1),y=Fe(t),h=Ae(e.peerId,t.service),n=((R=g.data)==null?void 0:R.find(w=>w.model===h))??null,v=cs(m,e.peerId,t.service,y,n?`@preset/${n.slug}`:null),x=v.find(w=>w.id===f)??v[0],E=(c.data??[]).some(w=>w.status==="active"),O=ye(o);return s.jsxs(De,{title:"API call",actions:e.services.length>1&&s.jsx($,{size:"sm","aria-label":"Model",value:T(t),onChange:w=>{const j=e.services.find(C=>T(C)===w);j&&r(j)},options:e.services.map(w=>({value:T(w),label:w.service}))}),children:[s.jsxs("p",{className:"gc-fineprint",children:["Pinned to this provider with ",s.jsx("code",{children:F(h,10,12)}),"."]}),s.jsx($s,{id:"gc-connect",label:"Ways to connect",value:x.id,onChange:l,className:"gc-connect-tabs",tabs:v.map(w=>({id:w.id,label:w.label}))}),s.jsxs(As,{tabsId:"gc-connect",tab:x.id,className:"gc-stack",children:[x.id==="codex"&&s.jsxs("div",{className:"gc-summary-row",children:[s.jsx("p",{className:"gc-fineprint gc-summary-row__text",children:n?s.jsxs(s.Fragment,{children:["Uses the preset ",s.jsxs("code",{children:["@preset/",n.slug]})," for this model. Codex needs a preset: with a raw GPT model name it switches to a tool format some sellers drop."]}):s.jsx(s.Fragment,{children:"Codex needs a preset, not a raw model name: with a GPT model name it switches to a tool format some sellers drop. Create one for this model, then use its slug."})}),!n&&O&&s.jsx(k,{size:"sm",variant:"outline",onClick:()=>b(!0),children:"Create preset for this model"})]}),x.id==="claude-code"&&y!=="anthropic-messages"&&s.jsxs("p",{className:"gc-fineprint",children:["This model speaks ",Ue[y],"; the gateway translates Claude Code's requests for it."]}),s.jsx(ds,{code:x.code,label:`${t.service} · ${x.label}`})]}),s.jsxs("p",{className:"gc-fineprint",children:["Set ",s.jsx("code",{children:us})," to one of your API keys first."," ",c.data&&!E&&s.jsx(ms,{to:"keys",children:"Create an API key"})]}),s.jsx(X,{isOpen:u,onClose:()=>b(!1),size:"lg",title:"New preset",children:u&&s.jsx(Ns,{initial:null,prefill:{name:t.service,model:h},onDone:w=>{b(!1),w&&l("codex")}})})]})}function Ys({peer:e,peers:t,showReputation:r}){const[a,o]=p.useState(null),[i,m]=p.useState(null),c=p.useRef(null),g=i??e.services[0]??null,f=l=>{var u;m(l),(u=c.current)==null||u.scrollIntoView({behavior:"smooth",block:"start"})};return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"gc-stack",children:[s.jsx(_s,{peer:e}),s.jsxs("div",{className:"gc-panel-actions",children:[s.jsx(k,{size:"sm",variant:"outline",onClick:()=>o("allow"),children:"Allow"}),s.jsx(k,{size:"sm",variant:"outline",onClick:()=>o("prefer"),children:"Prefer"}),s.jsx(k,{size:"sm",variant:"danger",onClick:()=>o("block"),children:"Block"})]}),s.jsx(Ks,{peer:e,showReputation:r})]}),s.jsx(Gs,{peer:e,selected:g,onSelect:f}),g&&s.jsx("div",{ref:c,className:"gc-scroll-target",children:s.jsx(Qs,{peer:e,service:g,onSelect:m})}),a&&s.jsx(Be,{peer:e,action:a,peers:t,onClose:()=>o(null)})]})}function ge(e){return e===null?"—":String(Math.round(e))}function Hs({peer:e,model:t}){const r=(e.health.coolingDownUntil??0)>Date.now();return s.jsxs("div",{className:"gc-badges",children:[s.jsx(Me,{tee:e.tee,scope:e.teeScope}),se(e,t)&&s.jsx(L,{tone:"success",children:"Free"}),e.washFlagged&&s.jsx(L,{tone:"danger",children:"Flagged"}),r&&s.jsx(L,{tone:"warning",children:"Cooling down"})]})}function dt(){const e=hs(),t=gs(e.rest),r=ps(),a=p.useMemo(()=>{var h;return t?((h=r.data)==null?void 0:h.find(n=>pe(n.peerId,t)))??null:null},[r.data,t]),[o,i]=p.useState({search:"",model:"",tee:!1,linked:!1,free:!1}),[m,c]=p.useState(null),g=p.useMemo(()=>fs(r.data),[r.data]),f=ws(r.data),l=ys(),u=(h,n)=>i(v=>({...v,[h]:n})),b=t===null?null:{eyebrow:"Provider",title:a?J(a):F(t,8,6),body:r.isLoading?s.jsx(ve,{rows:6}):a?s.jsx(Ys,{peer:a,peers:r.data,showReputation:f},a.peerId):s.jsx(W,{icon:s.jsx(V.providers,{size:18}),title:"Provider not found",body:`This gateway does not see ${F(t,8,6)} right now.`})},y=s.jsxs("div",{className:"gc-page",children:[s.jsx(je,{flush:!0,children:s.jsx(Pe,{query:r,rows:8,children:h=>s.jsx(Le,{label:"Providers",rows:qs(h,o),rowKey:n=>n.peerId,selectedKey:(a==null?void 0:a.peerId)??null,onRowClick:n=>de(ks("providers",n.peerId)),rowLabel:n=>J(n),actions:n=>[o.model!==""&&vs(l,n.peerId,o.model),{label:"Allow…",onSelect:()=>c({peer:n,kind:"allow"})},{label:"Prefer…",onSelect:()=>c({peer:n,kind:"prefer"})},{label:"Block…",tone:"danger",onSelect:()=>c({peer:n,kind:"block"})}],initialSort:{key:"trust",direction:"desc"},empty:s.jsx(W,{icon:s.jsx(V.providers,{size:18}),title:h.length?"No providers match these filters":"No providers found yet",body:h.length?void 0:"The buyer is still discovering the network. Check back in a minute."}),columns:[{key:"name",header:"Provider",sortValue:n=>n.displayName??n.peerId,render:n=>s.jsxs("div",{className:"gc-cell-lines",children:[s.jsx("div",{className:"gc-strong gc-ellipsis",title:n.displayName??n.peerId,children:J(n)}),n.displayName&&s.jsx("div",{className:"gc-muted gc-ellipsis",children:s.jsx(Se,{title:n.peerId,children:F(n.peerId,6,4)})}),s.jsx(Hs,{peer:n,model:o.model})]}),after:n=>s.jsx(bs,{value:n.peerId,label:`Copy peer id ${n.peerId}`})},{key:"identity",header:"Domain / GitHub",secondary:!0,render:n=>{var v;return(v=n.verificationLinks)!=null&&v.length?s.jsx(Te,{links:n.verificationLinks}):s.jsx("span",{className:"gc-muted",children:"—"})}},{key:"models",header:"Models",secondary:!0,optional:!0,render:n=>s.jsx("span",{className:"gc-muted",children:n.services.length})},{key:"input",header:"Input $/M",align:"right",sortValue:n=>Us(n,o.model),render:n=>ce(_(n,"inputUsdPerMillion",o.model))},{key:"output",header:"Output $/M",align:"right",secondary:!0,sortValue:n=>Vs(n,o.model),render:n=>ce(_(n,"outputUsdPerMillion",o.model))},{key:"trust",header:"Trust",align:"right",sortValue:n=>n.trustScore,render:n=>ge(n.trustScore)},...f?[{key:"reputation",header:"Reputation",align:"right",secondary:!0,optional:!0,sortValue:n=>n.reputationScore,render:n=>ge(n.reputationScore)}]:[],{key:"firstToken",header:"First token",align:"right",secondary:!0,optional:!0,sortValue:n=>n.firstTokenMsP50,render:n=>Ie(n.firstTokenMsP50)},{key:"speed",header:"Speed",align:"right",secondary:!0,optional:!0,sortValue:n=>n.tokensPerSecondP50,render:n=>Ne(n.tokensPerSecondP50)},{key:"usage",header:"Your 24h",align:"right",secondary:!0,sortValue:n=>n.requests24h,render:n=>$e(n.requests24h)}]})})}),s.jsx(zs,{peers:r.data})]});return s.jsxs("div",{className:"gc-page",children:[s.jsx(xs,{title:"Providers",description:"Providers on the network this gateway can route to. Open one to copy its models and an API call, or allow, block or prefer it for any scope."}),s.jsxs("div",{className:"gc-toolbar",children:[s.jsx(q,{size:"sm",type:"search","aria-label":"Search providers",placeholder:"Search name, peer id or model",value:o.search,onChange:h=>u("search",h.target.value)}),s.jsx($,{size:"sm","aria-label":"Filter by model",value:o.model,onChange:h=>u("model",h),options:[{value:"",label:"All models"},...g.map(h=>({value:h,label:h}))]}),s.jsx(H,{checked:o.linked,onChange:h=>u("linked",h),label:"Domain or GitHub"}),s.jsx(H,{checked:o.tee,onChange:h=>u("tee",h),label:"TEE"}),s.jsx(H,{checked:o.free,onChange:h=>u("free",h),label:"Free"})]}),s.jsx(Cs,{list:y,panel:b,onClose:()=>de("providers"),closeLabel:"Close provider"}),m&&s.jsx(Be,{peer:m.peer,action:m.kind,peers:r.data,onClose:()=>c(null)})]})}export{dt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as M,j as e,L as j,o as y,Z as f,aw as c,ax as k,h as i,E as I,I as w,B as C,W as L,f as N,q,v as d,b as v,M as l,g as u,e as A,$ as D,ah as E,X as $,Y as O}from"./index-DIcymBxc.js";import{u as K}from"./useInfiniteQuery-NenQ5Num.js";import{p as b}from"./PeerPicker-BJfjL7Dy.js";import{f as h,h as _}from"./usage-DktoZRc8.js";import{D as z}from"./DataTable-BTwj5g1m.js";const J=50;function g(s){return s===null?e.jsx(d,{tone:"info",children:"In flight"}):s<400?e.jsx(d,{tone:"success",children:s}):s<500?e.jsx(d,{tone:"warning",children:s}):e.jsx(d,{tone:"danger",children:s})}function R({entry:s}){const n=h(s,Date.now());return n==="video-charged"?e.jsx("span",{className:"gc-muted",title:"Charged on the request that downloaded this video",children:u(s.video.charged)}):n==="on-delivery"?e.jsx("span",{className:"gc-muted",title:"A video is charged when its finished file is downloaded",children:"on delivery"}):n==="not-charged"?e.jsx("span",{className:"gc-muted",title:"A video status check is not charged",children:"—"}):n==="free"?e.jsx("span",{className:"gc-muted",title:"Served by a free seller: $0",children:"Free"}):n==="pending"?e.jsx("span",{className:"gc-muted",title:"The buyer reports spend a moment after the response",children:"pending"}):n==="not-recorded"?e.jsx("span",{className:"gc-muted",title:"No spend was reported for this request: the buyer lost it",children:"not recorded"}):e.jsx(e.Fragment,{children:u(s.spent)})}function S({peerId:s,full:n=!1}){const t=v(),o=b(t.data,s);return n?e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx("span",{children:o}),e.jsx(l,{children:s})]}):e.jsx("span",{className:"gc-ellipsis",title:s,children:o})}function T({entry:s}){return s.servedModel?e.jsxs(e.Fragment,{children:[s.model??"—"," ",e.jsxs("span",{className:"gc-muted",children:["→ ",s.servedModel]})]}):e.jsx(e.Fragment,{children:s.model??"—"})}function Q(s){const n=s.model??"Request";return s.servedModel?`${n} → ${s.servedModel}`:n}function U({router:s,status:n}){const t=v();return e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx("span",{children:b(t.data,s.peerId)}),e.jsx(l,{children:s.peerId}),e.jsxs("span",{className:"gc-muted",children:[s.service?`${s.service} · `:"",_(s.rank,n)]})]})}function Z({entry:s}){if(s.routingSpent)return e.jsx(e.Fragment,{children:u(s.routingSpent)});const n=h(s,Date.now());return n==="pending"?e.jsx("span",{className:"gc-muted",children:"pending"}):n==="spent"||n==="free"?e.jsx("span",{className:"gc-muted",title:"The router reported no charge for this ranking",children:"Free"}):e.jsx("span",{className:"gc-muted",children:"—"})}function G(s){try{return JSON.stringify(JSON.parse(s),null,2)}catch{return s}}function x({title:s,body:n}){return e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx("div",{className:"as-field__label",children:s}),e.jsx(O,{code:G(n)})]})}function V({detail:s}){return!s.requestBody&&!s.responseBody?e.jsx("p",{className:"gc-fineprint",children:"Bodies are not stored for this request. Turn on content logging under Settings → Observability to keep them."}):e.jsxs(e.Fragment,{children:[s.requestBody&&e.jsx(x,{title:"Request body",body:s.requestBody}),s.responseBody&&e.jsx(x,{title:"Response body",body:s.responseBody})]})}function W({entry:s}){const n=A({queryKey:q.request(s.tag),queryFn:()=>N.usage.request(s.tag),retry:!1,staleTime:6e4}),t=n.data??s,o=D(n.error)&&n.error.status===404;return e.jsxs(e.Fragment,{children:[t.errorCode||t.errorMessage?e.jsx(E,{tone:"danger",title:t.errorCode??"Request failed",children:t.errorMessage??"No message was returned."}):null,e.jsx($,{items:[["Status",g(t.status)],["Request",e.jsxs(l,{children:[t.method," ",t.path]},"p")],["Model",e.jsx(T,{entry:t},"m")],["Key",t.keyLabel],["End user",t.endUser??"—"],...t.router?[["Router",e.jsx(U,{router:t.router,status:t.status},"r")]]:[],["Seller",t.sellerPeerId?e.jsx(S,{peerId:t.sellerPeerId,full:!0},"s"):"—"],["First token",c(t.firstTokenMs)],["Speed",k(t.tokensPerSecond)],["Duration",t.finishedAt?c(t.finishedAt-t.startedAt):"—"],["Input tokens",i(t.inputTokens)],["Cached input",i(t.cachedInputTokens)],["Output tokens",i(t.outputTokens)],["Cost",e.jsx(R,{entry:t},"c")],...t.router?[["Routing fee",e.jsx(Z,{entry:t},"f")]]:[],["Tag",e.jsx(l,{children:t.tag},"t")]]}),n.isLoading&&e.jsx(j,{rows:2}),n.error&&!o?e.jsx(y,{error:n.error,title:"Could not load the bodies"}):null,n.data&&e.jsx(V,{detail:n.data})]})}function te({filter:s,showKey:n=!0}){var m;const[t,o]=M.useState(null),a=K({queryKey:q.requests(s),queryFn:({pageParam:r})=>N.usage.requests({...s,before:r??void 0,limit:J}),initialPageParam:null,getNextPageParam:r=>r.nextBefore,refetchInterval:r=>{var p;return(p=r.state.data)!=null&&p.pages.some(F=>F.requests.some(P=>h(P,Date.now())==="pending"))?5e3:!1}});if(a.isLoading)return e.jsx(j,{rows:8});if(a.error)return e.jsx(y,{error:a.error,onRetry:()=>void a.refetch()});const B=((m=a.data)==null?void 0:m.pages.flatMap(r=>r.requests))??[];return e.jsxs(e.Fragment,{children:[e.jsx(z,{label:"Request log",rows:B,rowKey:r=>r.tag,onRowClick:o,rowLabel:r=>`request ${r.tag}`,empty:e.jsx(I,{icon:e.jsx(w.logs,{size:18}),title:"No requests found",body:"Requests appear here as soon as a key is used. Check the filters if you expected some."}),columns:[{key:"time",header:"Time",render:r=>e.jsx("span",{className:"gc-nowrap",children:f(r.startedAt)})},...n?[{key:"key",header:"Key",secondary:!0,render:r=>r.keyLabel}]:[],{key:"model",header:"Model",render:r=>e.jsxs("span",{className:"gc-ellipsis",children:[r.model?e.jsx(T,{entry:r}):e.jsxs("span",{className:"gc-muted",children:[r.method," ",r.path]}),r.status!==null&&r.status>=400?e.jsxs("span",{className:"gc-narrow-only",children:[" ",g(r.status)]}):null]})},{key:"seller",header:"Seller",render:r=>r.sellerPeerId?e.jsx(S,{peerId:r.sellerPeerId}):"—"},{key:"status",header:"Status",secondary:!0,render:r=>e.jsx("span",{title:r.errorMessage??void 0,children:g(r.status)})},{key:"firstToken",header:"First token",align:"right",secondary:!0,optional:!0,render:r=>c(r.firstTokenMs)},{key:"speed",header:"Speed",align:"right",secondary:!0,optional:!0,render:r=>k(r.tokensPerSecond)},{key:"tokens",header:"Tokens",align:"right",secondary:!0,render:r=>`${i(r.inputTokens)} → ${i(r.outputTokens)}`},{key:"cost",header:"Cost",align:"right",render:r=>e.jsx(R,{entry:r})}]}),a.hasNextPage&&e.jsx("div",{className:"gc-load-more",children:e.jsx(C,{variant:"outline",size:"sm",disabled:a.isFetchingNextPage,onClick:()=>void a.fetchNextPage(),children:a.isFetchingNextPage?"Loading…":"Load older requests"})}),e.jsx(L,{isOpen:t!==null,onClose:()=>o(null),title:t?Q(t):"Request",subtitle:t?f(t.startedAt):void 0,eyebrow:"Request",children:t&&e.jsx(W,{entry:t},t.tag)})]})}export{te as R};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RewardsClaim-nstcyJvi.js","assets/index-DIcymBxc.js","assets/index-CfhMI0GY.css","assets/ants-B38m9Phv.js","assets/useTx-WkiDSW_A.js","assets/en_US-Y4ZOVFV4-CmhP8GU2.js","assets/clsx-B-dksMZM.js","assets/index-BhwNCc8y.js","assets/en_US-Y4ZOVFV4-CcVPgXVa.css","assets/writeContract-DrAWt0yz.js","assets/sendTransaction-CqpP3CZj.js","assets/ConnectWallet-DQ0PC6SO.js","assets/OperatorGateAlert-D92zhyXC.js","assets/StakingDashboard-DtOKTmys.js","assets/waitForCallsStatus-CtriTPoz.js","assets/ChainGate-In51TI2h.js","assets/StakingDashboard-CJbBUUQE.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as _,F as R,G as N,e as z,q as w,H as E,J as F,r as o,j as e,P as T,Q as D,K as P,S as d,N as t,M as q,w as c,l as h,O as p,B as I,C as O,L as x,v as j,E as K,I as L,_ as k,f as Q}from"./index-DIcymBxc.js";import{C as M}from"./ChainGate-In51TI2h.js";import{f as n,a as y}from"./ants-B38m9Phv.js";import{D as $}from"./DataTable-BTwj5g1m.js";const B=o.lazy(()=>k(()=>import("./RewardsClaim-nstcyJvi.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),G=o.lazy(()=>k(()=>import("./StakingDashboard-DtOKTmys.js").then(r=>r.b),__vite__mapDeps([13,1,2,5,6,7,8,10,14,9,15,16])).then(r=>({default:r.StakingDashboard}))),H=["rewards"];function X(){const{workspace:r}=_(),S=R(),b=N(),f=z({queryKey:w.rewards(r.id),queryFn:()=>Q.wallet.rewards(r.id)}),u=E(),m=F(r.id),[A,i]=o.useState(!1);return e.jsxs("div",{className:"gc-page",children:[e.jsx(T,{title:"Rewards",description:"ANTS earned by this workspace's usage and by your staking."}),e.jsx(D,{query:f,rows:3,children:l=>{var g;const C=m.data?m.data.operator:l.operator,a={...l,operator:C};return e.jsxs(e.Fragment,{children:[e.jsx(P,{stale:l.stale}),e.jsxs("div",{className:"gc-grid gc-grid--3",children:[e.jsx(d,{label:"Ready to claim",value:n(a.pendingAnts)}),e.jsx(d,{label:"From the legacy program",value:n(((g=a.legacy)==null?void 0:g.pendingAnts)??"0"),sub:a.legacy?"Claimed together with the rest":void 0}),e.jsx(d,{label:"Authorized wallet",value:t(a.operator)?e.jsx(q,{title:a.operator,children:c(a.operator)}):"Not set"})]}),e.jsx(h,{children:e.jsxs("div",{className:"gc-summary-row",children:[e.jsxs("div",{className:"gc-summary-row__text",children:[e.jsx("span",{className:"gc-strong",children:y(a.pendingAnts)?`${n(a.pendingAnts)} ready to claim`:"Nothing to claim yet"}),e.jsxs("span",{className:"gc-fineprint",children:[t(a.operator)?e.jsxs(e.Fragment,{children:["Claimed ANTS go to the authorized wallet ",c(a.operator),", which signs the claim."]}):e.jsxs(e.Fragment,{children:["Only the authorized wallet can claim, and none is set. Authorize one on ",e.jsx(p,{to:"wallet",children:"Wallet & Funding"}),"."]}),y(a.pendingAnts)&&t(a.operator)?e.jsxs(e.Fragment,{children:[" Or stake them into a seller pool on ",e.jsx(p,{to:"staking",children:"Staking"}),"."]}):null]})]}),e.jsx(I,{size:"sm",variant:"outline",disabled:!t(a.operator),onClick:()=>i(!0),children:"Claim rewards"})]})}),e.jsx(O,{isOpen:A,onClose:()=>i(!1),title:"Claim rewards",subtitle:`${n(a.pendingAnts)} ready. Sent to the authorized wallet${t(a.operator)?` ${c(a.operator)}`:""}.`,children:e.jsx(M,{chain:u.data,error:u.error,children:s=>e.jsx(o.Suspense,{fallback:e.jsx(x,{rows:2}),children:e.jsx(B,{rewards:a,chain:s,onDone:()=>{b("Rewards claimed"),i(!1),S.invalidateQueries({queryKey:w.rewards(r.id)})}})})})}),e.jsx(h,{flush:!0,title:"Current program by epoch",description:"Rewards accrue at each epoch boundary from this workspace's paid usage.",children:e.jsx($,{label:"Reward epochs",rows:[...a.epochs].sort((s,v)=>v.epoch-s.epoch),rowKey:s=>String(s.epoch),empty:e.jsx(K,{icon:e.jsx(L.rewards,{size:18}),title:"No rewards yet",body:"Rewards accrue per epoch as this workspace's keys are used."}),columns:[{key:"epoch",header:"Epoch",render:s=>s.epoch},{key:"amount",header:"Amount",align:"right",render:s=>n(s.pendingAnts)},{key:"state",header:"Status",render:s=>s.claimed?e.jsx(j,{tone:"success",children:"Claimed"}):e.jsx(j,{tone:"warning",children:"Unclaimed"})}]})})]})}}),e.jsx(h,{title:"Staking rewards",description:e.jsxs(e.Fragment,{children:["ANTS earned by your staked positions, claimed or restaked with the wallet that holds them. Manage positions on ",e.jsx(p,{to:"staking",children:"Staking"}),"."]}),children:e.jsx(o.Suspense,{fallback:e.jsx(x,{rows:2}),children:e.jsx(G,{pages:H,buyerRewards:!1})})})]})}export{X as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,u as R,J as B,aH as N,aI as w,ah as E,aJ as b,w as k,B as O}from"./index-DIcymBxc.js";import{a as I}from"./ants-B38m9Phv.js";import{u as S,a as T,T as v,U as x,s as C,L as A}from"./useTx-WkiDSW_A.js";import{a as _}from"./ConnectWallet-DQ0PC6SO.js";import{O as W}from"./OperatorGateAlert-D92zhyXC.js";import{W as G,u as L,c as P}from"./en_US-Y4ZOVFV4-CmhP8GU2.js";import"./writeContract-DrAWt0yz.js";import"./sendTransaction-CqpP3CZj.js";import"./clsx-B-dksMZM.js";import"./index-BhwNCc8y.js";function U(a,s){return a?"Claiming…":s===0?"Nothing to claim":s===1?"Claim":`Claim (${s} transactions)`}function J({rewards:a,chain:s,onDone:j}){const{address:c}=L(),u=P(),{workspace:h}=R(),p=B(h.id),{refresh:y}=N(h.id),i=S(s.chainId),{writeContractAsync:g}=T(),d=w(s,"usageRewards"),f=a.epochs.filter(t=>!t.claimed&&I(t.pendingAnts)),o=a.legacy&&I(a.legacy.pendingAnts)?a.legacy:null,l=f.length+(o?1:0);if(!d)return e.jsx(E,{tone:"warning",children:"The gateway did not report the usage rewards contract address."});const m=b(p.data,c,"claim rewards");return m.ok?e.jsxs("div",{className:"gc-stack",children:[e.jsxs("p",{className:"gc-fineprint",children:["The ANTS go to ",k(m.operator),", the connected authorized wallet."]}),e.jsx(v,{chain:s,runner:i,done:"Rewards claimed."}),e.jsx(O,{disabled:i.running||l===0,onClick:async()=>{const t=f.map(n=>{const r=[a.address,BigInt(n.epoch)];return{label:`Claim epoch ${n.epoch}`,check:()=>C(u,{account:c,address:d,abi:x,functionName:"claimBuyerReward",args:r,chainId:s.chainId}),send:()=>g({address:d,abi:x,functionName:"claimBuyerReward",args:r,chainId:s.chainId})}});if(o){const n=[a.address,o.epochs.map(BigInt)],r=o.contract;t.push({label:"Claim legacy emissions",check:()=>C(u,{account:c,address:r,abi:A,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId}),send:()=>g({address:r,abi:A,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId})})}await i.run(t,{onStale:()=>void y().catch(()=>{})})&&j()},children:U(i.running,l)}),l>1&&e.jsx("p",{className:"gc-fineprint",children:"Each current-program epoch is its own transaction; legacy emissions are one more."})]}):e.jsx(W,{gate:m,state:p.data,connected:c})}function X(a){return e.jsx(G,{chain:a.chain,children:e.jsxs("div",{className:"gc-stack",children:[e.jsx(_,{}),e.jsx(J,{...a})]})})}export{X as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as C,a as se,b as O,a3 as ae,n as $,r as u,c as te,d as re,bf as ie,e as ne,j as e,l as D,T as le,B as b,L as G,o as z,bg as oe,ah as q,A as N,v as A,al as K,E as ce,bh as de,f as T,q as W,P as ue,a5 as pe,bi as ge,F as V,bj as H,b7 as ye,bk as X,bl as M,a6 as _,bm as Q,i as me,G as he,bn as R,bo as we,af as fe,b9 as ve,C as xe}from"./index-DIcymBxc.js";import{b as Z,a as je,d as be}from"./PolicyField-CfRYcr_J.js";import{P as ke}from"./PolicyEditor-BpoV34ra.js";import{p as U}from"./PeerPicker-BJfjL7Dy.js";import{S as Y}from"./SelectField-BWyF8Ku8.js";import{D as Pe}from"./DataTable-BTwj5g1m.js";import{T as Se,a as Ne}from"./Tabs-yVL4Cd6z.js";import"./Segmented-BelxPFkk.js";import"./roving-DkptacxO.js";import"./Switch-BwBYBnSS.js";function P({level:a,children:t,result:i}){return e.jsxs("div",{className:i?"gc-source gc-source--result":"gc-source",children:[e.jsx("div",{className:"gc-source__level",children:a}),e.jsx("div",{className:"gc-source__policy",children:t})]})}function Ce(a,t,i,n){return a==="key"?(t??[]).filter(r=>r.status==="active").map(r=>({value:r.id,label:r.label})):a==="member"?(i??[]).map(({member:r})=>({value:r.id,label:r.label})):a==="preset"?(n??[]).map(r=>({value:r.slug,label:r.name})):[]}function Le(){const{workspace:a,viewer:t}=C(),i=se(),n=O(),r=ae(n.data),p=$(t),[s,c]=u.useState("workspace"),[l,g]=u.useState(""),[y,w]=u.useState(""),[f,v]=u.useState(null),m=te(i,s==="key"),d=re(a.id,s==="member"),L=ie(a.id,s==="preset"),h=ne({queryKey:W.routePreview(f??{}),queryFn:()=>T.network.routePreview(f),enabled:f!==null}),j=Ce(s,m.data,d.data,L.data);function x(){const o={model:y.trim(),workspace:a.id};s!=="workspace"&&l&&(o[s]=l),v(o)}return e.jsxs(D,{title:"Route preview",description:"See which sellers a request would go to, and why.",children:[e.jsxs("form",{className:"gc-toolbar",onSubmit:o=>{o.preventDefault(),x()},children:[e.jsx(Y,{size:"sm","aria-label":"Preview for",value:s,onChange:o=>{c(o),g("")},options:[{value:"workspace",label:`Workspace: ${a.name}`},{value:"key",label:"A key"},...p?[{value:"member",label:"A member"}]:[],{value:"preset",label:"A preset"}]}),s!=="workspace"&&e.jsx(Y,{size:"sm","aria-label":`Choose a ${s}`,value:l,onChange:g,options:[{value:"",label:`Choose a ${s}`},...j]}),e.jsx(le,{size:"sm","aria-label":"Model",placeholder:"Model id",list:"gc-preview-models",value:y,onChange:o=>w(o.target.value)}),e.jsx("datalist",{id:"gc-preview-models",children:r.map(o=>e.jsx("option",{value:o},o))}),e.jsx(b,{type:"submit",size:"sm",disabled:!y.trim()||s!=="workspace"&&!l,children:"Preview"})]}),h.isFetching&&e.jsx(G,{rows:4}),h.error?e.jsx(z,{error:h.error}):null,h.data&&!h.isFetching&&e.jsx(Re,{preview:h.data})]})}const Ee={buyer:"Buyer",gateway:"Gateway","workspace-org":"Workspace (org policy)",workspace:"Workspace",member:"Member",key:"Key (admin)","key-owner":"Key (owner)",preset:"Preset"};function Me(a){return a.policy!==null?N(a.policy):e.jsx("span",{className:"gc-muted",children:a.level==="buyer"?"No hard limits":"Inherits"})}function Re({preview:a}){const{me:t}=C(),i=O(),n=oe(),r=a.candidates.filter(s=>s.eligible).length,p=s=>{var c;return s.id?s.level==="workspace"||s.level==="workspace-org"?((c=t.workspaces.find(l=>l.workspace.id===s.id))==null?void 0:c.workspace.name)??s.id:s.id:null};return e.jsxs("div",{className:"gc-stack",children:[!a.modelAllowed&&e.jsxs(q,{tone:"danger",title:"Model not allowed",children:["The policy does not allow ",a.model,". Requests for it get a 403."]}),e.jsxs("div",{className:"gc-sources",children:[a.sources.map((s,c)=>e.jsx(P,{level:e.jsxs(e.Fragment,{children:[Ee[s.level],p(s)?e.jsxs("span",{className:"gc-muted",children:[" · ",p(s)]}):null]}),children:Me(s)},`${s.level}-${c}`)),e.jsx(P,{level:"Effective",result:!0,children:N(a.policy)})]}),e.jsxs("p",{className:"gc-muted",children:[r," of ",a.candidates.length," sellers eligible."]}),r===0&&a.candidates.length>0&&e.jsxs(q,{tone:"warning",title:"No eligible seller",children:["Requests for ",a.model," fail with this policy. The reasons below show what excludes each seller."]}),e.jsx(Pe,{label:"Candidates",rows:[...a.candidates].sort((s,c)=>(s.rank??1e9)-(c.rank??1e9)),rowKey:s=>s.peerId,rowLabel:s=>s.displayName??U(i.data,s.peerId),actions:s=>[de(n,s.peerId,a.model)],empty:e.jsx(ce,{title:"No seller offers this model"}),columns:[{key:"rank",header:"#",render:s=>s.rank??"—",width:"3rem"},{key:"seller",header:"Seller",render:s=>s.displayName??U(i.data,s.peerId)},{key:"eligible",header:"Eligible",render:s=>s.eligible?e.jsx(A,{tone:"success",children:"Yes"}):e.jsx(A,{tone:"neutral",children:"No"})},{key:"reasons",header:"Why",render:s=>e.jsx("span",{className:"gc-muted",children:s.reasons.join(" · ")||"—"})},{key:"input",header:"Input $/M",align:"right",secondary:!0,render:s=>K(s.inputUsdPerMillion)},{key:"output",header:"Output $/M",align:"right",secondary:!0,render:s=>K(s.outputUsdPerMillion)},{key:"trust",header:"Trust",align:"right",secondary:!0,render:s=>s.trustScore===null?"—":Math.round(s.trustScore)}]})]})}const S={gateway:{title:"Gateway default",description:()=>"Applies to every request through this gateway. Workspaces, members, keys and presets can only narrow it."},org:{title:"Organization policy",description:a=>`Set by organization admins for ${a}. Workspace admins can only narrow it.`},workspace:{title:"Workspace policy",description:a=>`Set by ${a}'s admins, on top of the gateway default and the organization policy.`}},B=(a,t)=>JSON.stringify(a)===JSON.stringify(t);function qe(a,t){if(!a)return e.jsx(A,{children:"Read only"});if(t)return e.jsx(A,{tone:"warning",children:"Unsaved changes"})}function I({layer:a,source:t,parent:i,canEdit:n,onSave:r}){const{workspace:p}=C(),s=he(),c=O(),l=H(),g=je(),[y,w]=u.useState(()=>R(t)),[f,v]=u.useState(()=>R(t)),[m,d]=u.useState(null),[L,h]=u.useState(!1),j=u.useMemo(()=>R(t),[t]),x=!B(y,f);u.useEffect(()=>{B(j,f)||(!x||B(j,y)?(w(j),v(j),d(null)):d(j))},[j]);const o=we({mutationFn:async()=>{const k=fe(y,l.data??null);return await g.save([k],ee=>r(k,ee))===ve?null:k},onSuccess:k=>{if(!k)return;const F=R(k);w(F),v(F),d(null),h(!1),s(`${S[a].title} saved`)}}),E=be(y,l.data??null);return e.jsxs(D,{title:S[a].title,description:S[a].description(p.name),actions:qe(n,x),children:[e.jsxs("div",{className:"gc-policy-row",children:[e.jsxs("div",{className:"gc-policy-row__text",children:[e.jsx(Z,{policy:x?E.policy:t,invalid:x&&E.error!==null}),x&&e.jsx("span",{className:"gc-fineprint",children:"Showing your unsaved edits."})]}),e.jsx(b,{size:"sm",variant:"outline",onClick:()=>h(!0),children:n?"Edit":"View"})]}),m&&n&&!L&&e.jsx(q,{tone:"warning",title:"Changed elsewhere",children:"Someone saved this policy while you were editing it. Open it to reload theirs or keep yours."}),e.jsx(xe,{isOpen:L,onClose:()=>h(!1),size:"xl",title:S[a].title,subtitle:S[a].description(p.name),footer:n?e.jsxs(e.Fragment,{children:[E.error&&e.jsx("span",{className:"gc-warn gc-footer-note",children:E.error}),e.jsx(b,{variant:"ghost",disabled:!x,onClick:()=>{w(f),d(null)},children:"Discard changes"}),e.jsx(b,{disabled:o.isPending||!x,onClick:()=>o.mutate(),children:o.isPending?"Saving…":"Save policy"})]}):e.jsx(b,{variant:"outline",onClick:()=>h(!1),children:"Close"}),children:e.jsxs("div",{className:"gc-stack",children:[m&&n&&e.jsx(q,{tone:"warning",title:"Changed elsewhere",action:e.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[e.jsx(b,{size:"sm",variant:"outline",onClick:()=>{w(m),v(m),d(null)},children:"Reload"}),e.jsx(b,{size:"sm",variant:"ghost",onClick:()=>{v(m),d(null)},children:"Keep editing"})]}),children:"Someone saved this policy while you were editing it. Reload to see their version (your edits are dropped), or keep editing and save to replace it."}),o.error?e.jsx(z,{error:o.error,title:"Could not save"}):null,e.jsx(ke,{value:y,onChange:w,peers:c.data,lists:l.data??[],parent:i,disabled:!n})]})}),g.dialog]})}function Ae(){const a=V(),t=X();return t.isLoading?e.jsx(G,{rows:6}):t.error?e.jsx(z,{error:t.error,onRetry:()=>void t.refetch()}):e.jsx(I,{layer:"gateway",source:t.data??null,parent:null,canEdit:!0,onSave:async(i,n)=>{await T.network.setGatewayPolicy(i,n),await a.invalidateQueries({queryKey:W.group("routing")})}})}function J(){var f,v;const{workspace:a,viewer:t}=C(),i=V(),n=H(),r=ye(a.id),p=X(),s=n.data??[],c=p.data?M(p.data,s):null,l=((f=r.data)==null?void 0:f.orgRoutingPolicy)??null,g=((v=r.data)==null?void 0:v.routingPolicy)??null,y=u.useMemo(()=>_(c,l&&M(l,s),g&&M(g,s)),[c,l,g,s]);if(r.isLoading)return e.jsx(G,{rows:6});if(r.error)return e.jsx(z,{error:r.error,onRetry:()=>void r.refetch()});const w=async()=>{await i.invalidateQueries({queryKey:W.group("workspaces")}),await i.invalidateQueries({queryKey:W.group("routing")})};return e.jsxs("div",{className:"gc-stack",children:[e.jsx(D,{title:"Effective for this workspace",description:"What keys in this workspace get before member, key and preset policies narrow it further.",children:e.jsxs("div",{className:"gc-sources",children:[e.jsx(P,{level:"Gateway default",children:N(p.data)}),e.jsx(P,{level:"Organization",children:N(l)}),e.jsx(P,{level:"Workspace",children:N(g)}),e.jsx(P,{level:"Effective",result:!0,children:e.jsx(Z,{policy:y})})]})}),e.jsx(I,{layer:"org",source:l,parent:c,canEdit:$(t),onSave:async(m,d)=>{await T.workspaces.update(a.id,{orgRoutingPolicy:Q(m)},d),await w()}}),e.jsx(I,{layer:"workspace",source:g,parent:_(c,l&&M(l,s)),canEdit:me(t),onSave:async(m,d)=>{await T.workspaces.update(a.id,{routingPolicy:Q(m)},d),await w()}})]})}function Te(){const a=pe();if(!a.data)return null;const t=ge(a.data);return e.jsxs("p",{className:"gc-fineprint",children:["Buyer config, which every policy here can only narrow: ",t.length>0?t.join(" · "):"none","."]})}function We(){const{viewer:a}=C(),t=$(a),[i,n]=u.useState(t?"gateway":"workspace");return t?e.jsxs(e.Fragment,{children:[e.jsx(Se,{id:"gc-routing-level",label:"Policy level",value:i,onChange:n,tabs:[{id:"gateway",label:"Gateway default"},{id:"workspace",label:"This workspace"}]}),e.jsx(Ne,{tabsId:"gc-routing-level",tab:i,children:i==="gateway"?e.jsx(Ae,{}):e.jsx(J,{})})]}):e.jsx(J,{})}function Qe(){return e.jsxs("div",{className:"gc-page",children:[e.jsx(ue,{title:"Routing",description:"Which sellers serve your requests and how they are ranked. Each level can only narrow the one above."}),e.jsx(Te,{}),e.jsx(We,{}),e.jsx(Le,{})]})}export{Qe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as m}from"./index-
|
|
1
|
+
import{j as m}from"./index-DIcymBxc.js";import{r as f,f as g}from"./roving-DkptacxO.js";function _({value:l,onChange:n,options:a,label:u,className:c}){const o=Math.max(0,a.findIndex(e=>e.value===l));return m.jsx("div",{className:["as-segmented",c].filter(Boolean).join(" "),role:"radiogroup","aria-label":u,children:a.map((e,d)=>{const i=e.value===l;return m.jsx("button",{type:"button",role:"radio","aria-checked":i,tabIndex:d===o?0:-1,disabled:e.disabled,className:i?"as-segmented__item as-segmented__item--on":"as-segmented__item",onClick:()=>n(e.value),onKeyDown:t=>{const r=f(t,d,a.length);if(r===null)return;t.preventDefault();const s=a[r];!s||s.disabled||(n(s.value),g(t,r,".as-segmented__item"))},children:e.label},e.value)})})}export{_ as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as j,j as e,a0 as o,a1 as h,a2 as f}from"./index-DIcymBxc.js";function b({label:a,hint:d,error:t,options:c,onChange:r,className:i,id:n,size:u,...x}){const m=j.useId(),l=n??m;return e.jsxs("label",{className:f(i,u),htmlFor:l,children:[a&&e.jsx("span",{className:"as-field__label",children:a}),e.jsx("select",{id:l,className:o("as-field__select"),onChange:s=>r(s.target.value),...x,children:c.map(s=>e.jsx("option",{value:s.value,disabled:s.disabled,children:s.label},s.value))}),e.jsx(h,{error:t,hint:d})]})}export{b as S};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{F as re,G as ne,b as ge,bj as xe,r as d,bo as ae,q as U,f as E,ag as ve,a6 as be,al as K,g as ye,j as t,ah as D,aa as fe,T as O,B as f,o as $,D as ie,e as Se,P as je,by as we,Q as z,aC as ke,l as A,X as le,M as Pe,v as M,u as Re,V as Ce,t as Q,b3 as Ne,au as W,bc as Me,at as Ie,E as Ue,I as G,C as J,b2 as qe,$ as Te}from"./index-DIcymBxc.js";import{P as Y}from"./PeerPicker-BJfjL7Dy.js";import{S as X}from"./PolicyEditor-BpoV34ra.js";import{S as Oe}from"./Segmented-BelxPFkk.js";import{S as I,D as F}from"./Switch-BwBYBnSS.js";import{T as oe}from"./TextAreaField-B6jcl4RR.js";import{T as Ee,a as Ae}from"./Tabs-yVL4Cd6z.js";import{D as Fe}from"./DataTable-BTwj5g1m.js";import{S as B}from"./SelectField-BWyF8Ku8.js";import"./roving-DkptacxO.js";function De(e){return Object.entries(e).map(([s,r])=>`${s}: ${r}`).join(`
|
|
2
|
+
`)}function $e(e){const s={};for(const[r,n]of e.split(`
|
|
3
|
+
`).entries()){if(!n.trim())continue;const c=n.indexOf(":");if(c<=0)throw new Error(`Line ${r+1}: use "Name: value".`);const u=n.slice(0,c).trim();if(!/^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/.test(u))throw new Error(`Line ${r+1}: "${u}" is not a valid header name.`);s[u]=n.slice(c+1).trim()}return s}const ce="••••";function _e(e){return e.split(`
|
|
4
|
+
`).map(s=>{const r=s.indexOf(":");return r>0&&s.slice(r+1).trim()===ce?s.slice(0,r).trim():null}).filter(s=>!!s)}function Z(e){return e.split(`
|
|
5
|
+
`).map(s=>{const r=s.indexOf(":");return r>0&&s.slice(r+1).trim()===ce?`${s.slice(0,r)}: `:s}).join(`
|
|
6
|
+
`)}function Le(e,s){if(!e||!s)return!1;try{return new URL(e).origin!==new URL(s).origin}catch{return e!==s}}function Be(e){const s={},r=(n,c,u)=>{const a=e[n].trim();if(a===""){c&&(s[n]="Required.");return}const h=Number(a);!Number.isFinite(h)||h<0?s[n]="Use a number of 0 or more.":u!==void 0&&h>u&&(s[n]=`At most ${u}.`)};return r("input",!0),r("output",!0),r("cached",!1),r("reputation",!0,100),s}function w(e,s={}){const r=e.trim();if(r==="")return s.required?"Required.":void 0;const n=Number(r),c=s.min??0;if(!Number.isFinite(n))return"Use a number.";if(s.integer&&!Number.isInteger(n))return"Use a whole number.";if(n<c)return`Use ${c} or more.`;if(s.max!==void 0&&n>s.max)return`At most ${s.max}.`}function V(e){return e.split(/[\n,]/).map(s=>s.trim()).filter(Boolean)}function ee(e){const s=e.find(r=>!/^(?:0x)?[0-9a-f]{40}$/i.test(r));return s?`"${s}" is not a 40-character hex seller id.`:void 0}function te(e){const s=e.find(r=>!/^https?:\/\/\S+$/.test(r));return s?`"${s}" is not an http(s) URL.`:void 0}function ue(e,s){return e.some(r=>r===s||s.startsWith(`${r}.`)||r.startsWith(`${s}.`))}function Ve(){return t.jsxs("span",{className:"gc-override",children:[t.jsx("span",{className:"gc-attention","aria-hidden":"true"}),"Overridden by the buyer's environment or start flags"]})}function se(e){const s=e.routingPreferences,r=n=>n===null?"":String(n);return{allowMode:s.allowedPeerIds.length>0?"only":"any",allowedPeerIds:[...s.allowedPeerIds],blockedPeerIds:[...s.blockedPeerIds],minTrustScore:String(s.minTrustScore),minReputation:String(e.minPeerReputation),preferFree:s.preferFreePeers,softInputCap:String(s.maxInputUsdPerMillion),maxInput:String(e.maxPricing.inputUsdPerMillion),maxOutput:String(e.maxPricing.outputUsdPerMillion),maxCached:r(e.maxPricing.cachedInputUsdPerMillion),verify:e.verifier.enabled,requireVerified:e.verifier.require,verifiers:e.verifier.prefer.join(", "),sampleRate:r(e.evidence.sampleRate),maxSampleBytes:r(e.evidence.maxSampleBytes),autoSweep:e.payments.autoSweep,maxPerRequest:String(e.payments.maxPerRequestUsdc),maxReserve:String(e.payments.maxReserveUsdc),rpcUrl:e.payments.rpcUrl??"",fallbackRpcUrls:e.payments.fallbackRpcUrls.join(`
|
|
7
|
+
`),peerRefreshMs:String(e.network.peerRefreshIntervalMs),metadataTimeoutMs:String(e.network.metadataFetchTimeoutMs),requestTimeoutMs:String(e.network.requestTimeoutMs),maxStreamMs:String(e.network.maxStreamDurationMs),perServiceMetadata:!e.network.disableMetadataV2Services}}function ze(e){const s=Be({input:e.maxInput,output:e.maxOutput,cached:e.maxCached,reputation:e.minReputation}),r={maxInput:s.input,maxOutput:s.output,maxCached:s.cached,softInputCap:w(e.softInputCap,{required:!0}),allowedPeerIds:e.allowMode==="only"?ee(e.allowedPeerIds):void 0,blockedPeerIds:ee(e.blockedPeerIds),sampleRate:w(e.sampleRate,{max:1}),maxSampleBytes:w(e.maxSampleBytes,{min:1,integer:!0}),maxPerRequest:w(e.maxPerRequest,{required:!0,min:1e-6}),maxReserve:w(e.maxReserve,{required:!0,min:1e-6}),rpcUrl:e.rpcUrl.trim()?te([e.rpcUrl.trim()]):void 0,fallbackRpcUrls:te(V(e.fallbackRpcUrls)),peerRefreshMs:w(e.peerRefreshMs,{required:!0,min:1e3,integer:!0}),metadataTimeoutMs:w(e.metadataTimeoutMs,{required:!0,min:100,integer:!0}),requestTimeoutMs:w(e.requestTimeoutMs,{required:!0,min:1,integer:!0}),maxStreamMs:w(e.maxStreamMs,{required:!0,min:1,integer:!0})};return Object.fromEntries(Object.entries(r).filter(([,n])=>n))}function He(e){const s=r=>r.trim()?Number(r):null;return{routingPreferences:{minTrustScore:Number(e.minTrustScore),maxInputUsdPerMillion:Number(e.softInputCap),preferFreePeers:e.preferFree,allowedPeerIds:e.allowMode==="only"?e.allowedPeerIds:[],blockedPeerIds:e.blockedPeerIds},maxPricing:{inputUsdPerMillion:Number(e.maxInput),outputUsdPerMillion:Number(e.maxOutput),cachedInputUsdPerMillion:s(e.maxCached)},minPeerReputation:Number(e.minReputation),verifier:{enabled:e.verify,require:e.verify&&e.requireVerified,prefer:e.verify?V(e.verifiers):[]},evidence:{sampleRate:s(e.sampleRate),maxSampleBytes:s(e.maxSampleBytes)},payments:{autoSweep:e.autoSweep,maxPerRequestUsdc:Number(e.maxPerRequest),maxReserveUsdc:Number(e.maxReserve),rpcUrl:e.rpcUrl.trim()||null,fallbackRpcUrls:V(e.fallbackRpcUrls)},network:{peerRefreshIntervalMs:Number(e.peerRefreshMs),metadataFetchTimeoutMs:Number(e.metadataTimeoutMs),requestTimeoutMs:Number(e.requestTimeoutMs),maxStreamDurationMs:Number(e.maxStreamMs),disableMetadataV2Services:!e.perServiceMetadata}}}const Ke=["allowMode","allowedPeerIds","blockedPeerIds","minTrustScore","preferFree","softInputCap"];function L(e,s){return Object.keys(s).filter(r=>JSON.stringify(e[r])!==JSON.stringify(s[r]))}function Qe(e){const s=r=>r.trim()&&Number.isFinite(Number(r))?Number(r):void 0;return{...e.allowMode==="only"&&e.allowedPeerIds.length>0?{allowedPeerIds:e.allowedPeerIds}:{},...e.blockedPeerIds.length>0?{blockedPeerIds:e.blockedPeerIds}:{},...s(e.minTrustScore)?{minTrustScore:s(e.minTrustScore)}:{},...s(e.minReputation)?{minReputation:s(e.minReputation)}:{},...s(e.maxInput)!==void 0?{maxInputUsdPerMillion:s(e.maxInput)}:{},...s(e.maxOutput)!==void 0?{maxOutputUsdPerMillion:s(e.maxOutput)}:{},...s(e.maxCached)!==void 0?{maxCachedInputUsdPerMillion:s(e.maxCached)}:{}}}function We({buyer:e}){const s=re(),r=ne(),n=ge(),c=xe(),u=d.useMemo(()=>se(e),[e]),[a,h]=d.useState(u),[k,P]=d.useState(u),[v,S]=d.useState(null),[b,p]=d.useState(!1),[j,g]=d.useState(!1),l=(i,R)=>h(C=>({...C,[i]:R})),m=i=>{h(i),P(i),S(null)},o=ze(a),q=L(k,a);d.useEffect(()=>{L(k,u).length!==0&&(q.length===0||L(u,a).length===0?m(u):S(u))},[u]);const _=q.some(i=>!Ke.includes(i)),N=i=>ue(e.overrides,i)?t.jsx(Ve,{}):void 0,H=(i,R)=>N(i)??R,y=ae({mutationFn:()=>E.settings.updateBuyer(He(a)),onSuccess:i=>{const{restartRequired:R,...C}=i;s.setQueryData(U.settings,C),m(se(C.buyer)),s.invalidateQueries({queryKey:U.buyerLimits}),p(!1),g(R===!0),r(_?R?"Saved. Restart the buyer to apply them.":"Saved. The buyer is restarting.":"Saved. The buyer applies these at once.")}}),T=d.useMemo(()=>!n.data||n.data.length===0?null:{matched:ve(be(Qe(a)),n.data,c.data??[]).length,total:n.data.length},[a,n.data,c.data]),de=`${K(Number(a.maxInput))} in · ${K(Number(a.maxOutput))} out`,me=a.verify?a.requireVerified?"Required":"On":"Off",pe=`${a.autoSweep?"Auto-sweep on":"Auto-sweep off"} · ${ye(Number(a.maxPerRequest))} per request`,x=(i,R,C={})=>t.jsx(O,{size:"sm",className:C.className??"gc-num",label:R,inputMode:"decimal",placeholder:C.placeholder,value:a[i],error:o[i],hint:C.hint,onChange:he=>l(i,he.target.value)});return t.jsxs("div",{className:"gc-stack",children:[t.jsxs("div",{className:"gc-policy",children:[T&&(T.matched===0?t.jsxs(D,{tone:"warning",title:"No seller matches these settings",children:["None of the ",T.total," sellers this gateway sees passes them, so every request will fail."]}):t.jsxs("p",{className:"gc-muted","aria-live":"polite",children:["Matches ",T.matched," of ",T.total," sellers. Every key can only narrow this."]})),t.jsxs("div",{className:"gc-policy__cols",children:[t.jsxs("section",{className:"gc-policy__section",children:[t.jsx("h3",{children:"Sellers"}),t.jsx(Oe,{label:"Which sellers may serve",value:a.allowMode,onChange:i=>l("allowMode",i),options:[{value:"any",label:"Any seller"},{value:"only",label:"Only these"}]}),a.allowMode==="only"&&t.jsxs(t.Fragment,{children:[t.jsx(Y,{label:"Allowed sellers",value:a.allowedPeerIds,onChange:i=>l("allowedPeerIds",i),peers:n.data}),o.allowedPeerIds&&t.jsx("p",{className:"gc-warn",children:o.allowedPeerIds}),a.allowedPeerIds.length===0&&t.jsx("p",{className:"gc-fineprint",children:"With no sellers listed, any seller may serve."})]}),t.jsx(Y,{label:"Blocked sellers",value:a.blockedPeerIds,onChange:i=>l("blockedPeerIds",i),peers:n.data}),o.blockedPeerIds&&t.jsx("p",{className:"gc-warn",children:o.blockedPeerIds}),t.jsx("p",{className:"gc-fineprint",children:"Blocked here means blocked for every key."})]}),t.jsxs("section",{className:"gc-policy__section",children:[t.jsx("h3",{children:"Quality and ranking"}),t.jsx(X,{label:"Minimum trust score",clearable:!1,value:a.minTrustScore,onChange:i=>l("minTrustScore",i),hint:"Keys can raise it, not lower it."}),(fe(n.data)||a.minReputation!=="0")&&t.jsx(X,{label:"Minimum reputation",clearable:!1,value:a.minReputation,onChange:i=>l("minReputation",i),hint:H("minPeerReputation","Applies to pinned sellers too.")}),t.jsx("div",{className:"gc-policy__switches",children:t.jsx(I,{checked:a.preferFree,onChange:i=>l("preferFree",i),label:"Free sellers first"})}),x("softInputCap","Soft input price limit $/M",{hint:"Pricier sellers rank lower; none is excluded.",className:"gc-num gc-num--wide"})]})]}),t.jsxs("div",{className:"gc-policy__advanced",children:[t.jsxs(F,{title:"Price caps",summary:de,children:[t.jsx("p",{className:"gc-fineprint",children:"Hard limits for every request, pinned sellers included."}),t.jsxs("div",{className:"gc-policy__caps",children:[x("maxInput","Input $/M",{hint:N("maxPricing.inputUsdPerMillion")}),x("maxOutput","Output $/M",{hint:N("maxPricing.outputUsdPerMillion")}),x("maxCached","Cached input $/M",{placeholder:"Same as input"})]})]}),t.jsxs(F,{title:"Verification",summary:me,children:[N("verifier"),t.jsxs("div",{className:"gc-policy__switches",children:[t.jsx(I,{checked:a.verify,onChange:i=>l("verify",i),label:"Verify sellers"}),t.jsx(I,{checked:a.verify&&a.requireVerified,disabled:!a.verify,onChange:i=>l("requireVerified",i),label:"Require verification"})]}),t.jsx(O,{size:"sm",label:"Verifiers",value:a.verifiers,disabled:!a.verify,placeholder:"Seller's trusted default",hint:"Ordered, comma-separated verifier ids, e.g. TEE attestation.",onChange:i=>l("verifiers",i.target.value)}),t.jsxs("div",{className:"gc-policy__caps",children:[x("sampleRate","Evidence sample rate",{placeholder:"Default",hint:"Share of responses kept, 0 to 1."}),x("maxSampleBytes","Largest sample (bytes)",{placeholder:"Default",className:"gc-num gc-num--wide"})]})]}),t.jsxs(F,{title:"Payments",summary:pe,children:[t.jsx(I,{checked:a.autoSweep,onChange:i=>l("autoSweep",i),label:"Sweep deposits automatically",description:"Move USDC that arrives in the workspace wallets into their deposits."}),t.jsxs("div",{className:"gc-policy__caps",children:[x("maxPerRequest","Max per request (USDC)",{className:"gc-num gc-num--wide"}),x("maxReserve","Max channel reserve (USDC)",{className:"gc-num gc-num--wide"})]}),t.jsx(O,{size:"sm",label:"Base RPC URL",value:a.rpcUrl,error:o.rpcUrl,placeholder:"Chain default",hint:H("payments.rpcUrl","Your own endpoint avoids public rate limits. Saved URLs show without their path; leave them as they are to keep them."),onChange:i=>l("rpcUrl",i.target.value)}),t.jsx(oe,{label:"Fallback RPC URLs",rows:2,mono:!0,value:a.fallbackRpcUrls,error:o.fallbackRpcUrls,hint:"One per line, tried in order.",onChange:i=>l("fallbackRpcUrls",i.target.value)})]}),t.jsxs(F,{title:"Network and timeouts",summary:`Refresh ${Math.round(Number(a.peerRefreshMs)/1e3)} s`,children:[t.jsxs("div",{className:"gc-policy__caps",children:[x("peerRefreshMs","Peer refresh (ms)",{className:"gc-num gc-num--wide"}),x("metadataTimeoutMs","Metadata timeout (ms)",{className:"gc-num gc-num--wide",hint:N("network.metadataFetchTimeoutMs")}),x("requestTimeoutMs","Response start timeout (ms)",{className:"gc-num gc-num--wide"}),x("maxStreamMs","Longest stream (ms)",{className:"gc-num gc-num--wide",hint:N("network.maxStreamDurationMs")})]}),t.jsx(I,{checked:a.perServiceMetadata,onChange:i=>l("perServiceMetadata",i),label:"Per-service attribution in signed metadata",description:N("network.disableMetadataV2Services")??"Tells sellers which service each request used."})]})]})]}),j&&t.jsxs(D,{tone:"warning",title:"Restart the buyer to apply",children:["Saved, but this buyer was not restarted automatically. Restart it (for example ",t.jsx("code",{children:"systemctl restart antseed-buyer"}),", or stop and start ",t.jsx("code",{children:"antseed buyer start"}),") to use the new settings."]}),v&&t.jsx(D,{tone:"warning",title:"Changed elsewhere",action:t.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[t.jsx(f,{size:"sm",variant:"outline",onClick:()=>m(v),children:"Reload"}),t.jsx(f,{size:"sm",variant:"ghost",onClick:()=>{P(v),S(null)},children:"Keep editing"})]}),children:"Someone saved the buyer settings while you were editing them. Reload to see their version (your edits are dropped), or keep editing and save to replace it."}),!b&&y.error?t.jsx($,{error:y.error,title:"Could not save"}):null,t.jsxs("div",{className:"gc-actions",children:[t.jsx("span",{className:"gc-fineprint gc-actions__note",children:q.length===0?"No changes.":_?"Saving restarts the buyer.":"Applies at once, without a restart."}),t.jsx(f,{variant:"ghost",disabled:q.length===0||y.isPending,onClick:()=>m(v??k),children:"Reset"}),t.jsx(f,{disabled:q.length===0||Object.keys(o).length>0||y.isPending,onClick:()=>_?p(!0):y.mutate(),children:y.isPending?"Saving…":"Save"})]}),t.jsx(ie,{isOpen:b,busy:y.isPending,error:y.error,onClose:()=>{p(!1),y.reset()},onConfirm:()=>y.mutate(),title:"Restart the buyer?",confirmLabel:"Save and restart",tone:"primary",body:"These changes need a buyer restart. Requests in flight finish first; new requests wait a few seconds while it reconnects."})]})}const Ge=["general","buyer","observability","tokens","auth"];function Je(){const e=ke();return t.jsx(A,{title:"Gateway",children:t.jsx(z,{query:e,children:s=>t.jsx(le,{items:[["Public URL",s.publicUrl?t.jsx(Pe,{children:s.publicUrl},"u"):t.jsx("span",{className:"gc-muted",children:"Not set. Clients use this console's address."})],["Buyer",s.buyer.reachable?t.jsx(M,{tone:"success",children:"Connected"},"b"):t.jsx(M,{tone:"danger",children:"Unreachable"},"b")],["Sellers seen",String(s.buyer.peers)],["Spend feed",s.spendFeed],["USDC top-ups (x402)",s.x402?"On":"Off"]]})})})}function Ye({settings:e}){const s=e.buyer;return t.jsx(A,{title:"Buyer",description:t.jsxs(t.Fragment,{children:["The top of every routing policy: workspaces, members, keys and presets can only narrow it. Saved to the config file of the buyer on port ",s.proxyPort,ue(s.overrides,"proxyPort")?" (set by its start flags)":"","."]}),children:t.jsx(We,{buyer:s})})}function Xe({settings:e}){const s=re(),r=ne(),n=e.observability,[c,u]=d.useState(n.otlpEndpoint??""),[a,h]=d.useState(De(n.otlpHeaders)),[k,P]=d.useState(n.logContent),[v,S]=d.useState(n.retentionDays===null?"":String(n.retentionDays)),b=c.trim()&&!/^https?:\/\/\S+$/.test(c.trim())?"Use an http:// or https:// URL.":void 0,p=Le(n.otlpEndpoint,c.trim()||null)?_e(a):[],j=p.length?`Enter the value of ${p.join(", ")} again: saved values are not sent to a new endpoint.`:void 0,g=ae({mutationFn:()=>{if(b)throw new Error(b);if(j)throw new Error(j);const l=v===""?null:Number(v);return E.settings.setObservability({otlpEndpoint:c.trim()||null,otlpHeaders:$e(a),logContent:k,retentionDays:l})},onSuccess:l=>{const{restartRequired:m,...o}=l;s.setQueryData(U.settings,o),r(m?"Observability saved. Restart the gateway to apply it.":"Observability saved")},onError:l=>{Te(l,"otlp_headers_required")&&h(Z(a))}});return t.jsx(A,{title:"Observability",description:"Send one OpenTelemetry trace per request, and choose what the request log keeps.",children:t.jsxs("form",{className:"gc-stack",onSubmit:l=>{l.preventDefault(),g.mutate()},children:[t.jsx(O,{label:"OTLP/HTTP endpoint",placeholder:"https://otel.example.com/v1/traces",value:c,error:b,onChange:l=>u(l.target.value)}),t.jsx(oe,{label:"Headers",rows:3,mono:!0,placeholder:"Authorization: Bearer …",value:a,onChange:l=>h(l.target.value),error:j,hint:"One per line, as Name: value. Saved values show as ••••; leave them as they are to keep them (for the same endpoint only)."}),p.length>0&&t.jsx("div",{children:t.jsx(f,{size:"sm",variant:"outline",onClick:()=>h(Z(a)),children:"Clear saved values to re-enter them"})}),t.jsx(I,{checked:k,onChange:P,label:"Store request and response bodies",description:"Off by default. Bodies can contain personal data; only turn this on if you need it."}),t.jsx(B,{label:"Keep the request log for",value:v,onChange:S,options:[{value:"7",label:"7 days"},{value:"30",label:"30 days"},{value:"90",label:"90 days"},{value:"365",label:"1 year"},{value:"",label:"Forever"}]}),g.error?t.jsx($,{error:g.error,title:"Could not save"}):null,t.jsx("div",{className:"gc-actions",children:t.jsx(f,{type:"submit",disabled:g.isPending,children:g.isPending?"Saving…":"Save"})})]})})}function Ze(){const{me:e}=Re(),s=e.member.orgRole==="owner",r=Ce(),[n,c]=d.useState(!1),[u,a]=d.useState(""),[h,k]=d.useState("read"),[P,v]=d.useState("90"),[S,b]=d.useState(null),[p,j]=d.useState(null),g=Q({mutationFn:()=>E.adminTokens.create(u.trim(),h,P==="never"?null:Number(P)),onSuccess:m=>{c(!1),a(""),b(m.secret)},invalidate:[U.adminTokens]}),l=Q({mutationFn:m=>E.adminTokens.revoke(m.id),onSuccess:()=>j(null),invalidate:[U.adminTokens]});return t.jsxs(A,{flush:!0,title:"Management tokens",description:t.jsxs(t.Fragment,{children:["For scripts and CI. Send as ",t.jsx("code",{children:"Authorization: Bearer …"})," to ",t.jsx("code",{children:"/console/api"}),"."]}),actions:t.jsx(f,{size:"sm",leadingIcon:t.jsx(G.plus,{size:14}),onClick:()=>c(!0),children:"New token"}),children:[t.jsx(z,{query:r,children:m=>t.jsx(Fe,{label:"Management tokens",rows:m,rowKey:o=>o.id,rowLabel:o=>o.label,actions:o=>[{label:"Revoke",tone:"danger",onSelect:()=>j(o)}],empty:t.jsx(Ue,{icon:t.jsx(G.keys,{size:18}),title:"No management tokens"}),columns:[{key:"label",header:"Name",render:o=>t.jsx(Ne,{name:o.label,hint:o.hint})},{key:"scope",header:"Scope",render:o=>o.scope==="admin"?t.jsx(M,{tone:"warning",children:"Admin"}):t.jsx(M,{children:"Read only"})},{key:"created",header:"Created",secondary:!0,optional:!0,render:o=>W(o.createdAt)},{key:"expires",header:"Expires",secondary:!0,render:o=>t.jsx(Me,{at:o.expiresAt,format:W})},{key:"used",header:"Last used",secondary:!0,optional:!0,render:o=>Ie(o.lastUsedAt)}]})}),t.jsx(J,{isOpen:n,onClose:()=>c(!1),title:"New management token",children:t.jsxs("form",{className:"gc-stack",onSubmit:m=>{m.preventDefault(),g.mutate()},children:[t.jsx(O,{label:"Name",required:!0,value:u,onChange:m=>a(m.target.value),placeholder:"e.g. Terraform"}),t.jsx(B,{label:"Scope",value:h,onChange:m=>k(m),options:[{value:"read",label:"Read only (GET requests)"},{value:"admin",label:"Admin (everything an org admin can do)"}]}),t.jsx(B,{label:"Expires after",value:P,onChange:v,options:[{value:"30",label:"30 days"},{value:"90",label:"90 days"},{value:"365",label:"1 year"},...s?[{value:"never",label:"Never"}]:[]],hint:"Short-lived tokens limit the damage if one leaks."}),g.error?t.jsx($,{error:g.error,title:"Could not create the token"}):null,t.jsxs("div",{className:"gc-actions",children:[t.jsx(f,{variant:"ghost",onClick:()=>c(!1),children:"Cancel"}),t.jsx(f,{type:"submit",disabled:g.isPending||!u.trim(),children:"Create token"})]})]})}),t.jsx(J,{isOpen:S!==null,onClose:()=>b(null),title:"Token created",children:S&&t.jsxs("div",{className:"gc-stack",children:[t.jsx(qe,{secret:S}),t.jsx("div",{className:"gc-actions",children:t.jsx(f,{onClick:()=>b(null),children:"Done"})})]})}),t.jsx(ie,{isOpen:p!==null,busy:l.isPending,error:l.error,onClose:()=>j(null),onConfirm:()=>p&&l.mutate(p),title:"Revoke this token?",confirmLabel:"Revoke",body:`Anything using ${(p==null?void 0:p.label)??"this token"} loses access immediately.`})]})}function et({settings:e}){const s=e.auth,r=n=>n?t.jsx(M,{tone:"success",children:"On"}):t.jsx(M,{children:"Off"});return t.jsx(A,{title:"Sign-in methods",description:"Configured on the gateway host with environment variables. Read only here.",children:t.jsxs("div",{className:"gc-stack",children:[t.jsx(le,{items:[["Passkeys",r(s.passkey)],["Wallet (Sign-In with Ethereum)",r(s.wallet)],["OpenID Connect",s.oidc?t.jsx(M,{tone:"success",children:s.oidc.label},"o"):r(!1)],["Cloudflare Access",r(s.cloudflareAccess)],["API key view for key holders",r(s.apiKeyLogin)]]}),t.jsx(D,{tone:"info",title:"Using your own identity provider",children:"Set the OpenID Connect issuer, client id and secret in the gateway's environment and restart it, or put the console behind Cloudflare Access and enable trusted Access headers. The gateway docs list the exact variables. Antseed runs no sign-in service of its own."})]})})}function tt({tab:e,settings:s}){return e==="buyer"?t.jsx(Ye,{settings:s}):e==="observability"?t.jsx(Xe,{settings:s}):t.jsx(et,{settings:s})}function mt(){const[e,s]=d.useState(()=>{const n=new URLSearchParams(window.location.search).get("tab");return Ge.includes(n)?n:"general"}),r=Se({queryKey:U.settings,queryFn:E.settings.get});return d.useEffect(()=>{var n;(n=window.scrollTo)==null||n.call(window,0,0)},[e]),t.jsxs("div",{className:"gc-page",children:[t.jsx(je,{title:"Settings"}),t.jsx(Ee,{id:"gc-settings",label:"Settings sections",value:e,onChange:s,tabs:[{id:"general",label:"General"},{id:"buyer",label:"Buyer"},{id:"observability",label:"Observability"},{id:"tokens",label:"Management tokens"},{id:"auth",label:"Sign-in"}]}),t.jsxs(Ae,{tabsId:"gc-settings",tab:e,className:"gc-stack",children:[e==="general"&&t.jsxs(t.Fragment,{children:[t.jsx(Je,{}),t.jsx(we,{})]}),e==="tokens"&&t.jsx(Ze,{}),(e==="buyer"||e==="observability"||e==="auth")&&t.jsx(z,{query:r,children:n=>t.jsx(tt,{tab:e,settings:n})}),r.error&&e==="general"?t.jsx($,{error:r.error}):null]})]})}export{mt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{R as r,j as s,P as d,O as l,y as p}from"./index-DIcymBxc.js";import{S as m,P as g,a as c,N as S}from"./StakingDashboard-DtOKTmys.js";import{T as b,a as k}from"./Tabs-yVL4Cd6z.js";import"./en_US-Y4ZOVFV4-CmhP8GU2.js";import"./clsx-B-dksMZM.js";import"./index-BhwNCc8y.js";import"./sendTransaction-CqpP3CZj.js";import"./waitForCallsStatus-CtriTPoz.js";import"./writeContract-DrAWt0yz.js";import"./ChainGate-In51TI2h.js";import"./roving-DkptacxO.js";const u=new Map(S.flatMap(a=>a.items.map(t=>[t.id,t.label]))),i=g.filter(a=>c[a]==="staking").map(a=>({id:a,label:u.get(a)??a})),x=i.map(a=>a.id),o="gc-staking";function L(){var n;const a=r(),t=((n=i.find(e=>e.id===a.rest[0]))==null?void 0:n.id)??i[0].id;return s.jsxs("div",{className:"gc-page",children:[s.jsx(d,{title:"Staking",description:s.jsxs(s.Fragment,{children:["Stake ANTS into seller pools and manage your positions, signed with your wallet. Staking rewards are on ",s.jsx(l,{to:"rewards",children:"Rewards"}),"."]})}),s.jsx(b,{id:o,label:"Staking",value:t,onChange:e=>p(`staking/${e}`),tabs:i}),s.jsx(k,{tabsId:o,tab:t,children:s.jsx(m,{pages:x,buyerRewards:!0})})]})}export{L as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";.ants-embed{--pc-bg: var(--page-bg);--pc-panel: var(--card-bg);--pc-panel-2: var(--box-bg);--pc-ink: var(--text-primary);--pc-sub: var(--text-secondary);--pc-faint: var(--text-muted);--pc-line: var(--border);--pc-line-strong: var(--border-2);--pc-btn: var(--accent);--pc-btn-hover: var(--accent);--pc-btn-ink: var(--accent-contrast);--pc-accent: var(--success);--pc-accent-bg: var(--success-dim);--pc-accent-line: var(--success-border);--pc-danger: var(--danger);--pc-danger-bg: var(--danger-dim);--pc-danger-line: var(--danger-border);--pc-danger-ink: var(--page-bg);--pc-ok: var(--success);--pc-ok-bg: var(--success-dim);--pc-ok-line: var(--success-border);--pc-amber: var(--amber);--pc-amber-bg: var(--amber-dim);--pc-amber-line: var(--amber-border);--pc-blue: var(--info);--pc-shadow: none;--pc-shadow-float: 0 24px 64px rgba(0, 0, 0, .28);--pc-backdrop: rgba(0, 0, 0, .45);--pc-glow: 0 0 0 1px var(--accent-border);--pc-grid: transparent;--font-sans: var(--gc-font, inherit);--font-mono: var(--gc-mono, ui-monospace, Menlo, monospace);font-family:var(--font-sans);color:var(--pc-ink);font-size:14px;line-height:1.5}.ants-embed *,.ants-embed *:before,.ants-embed *:after{margin:0;padding:0;box-sizing:border-box}.ants-embed html,.ants-embed body{font-family:var(--font-sans);background:var(--pc-bg);color:var(--pc-ink);min-height:100vh;-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}.ants-embed body{background-image:linear-gradient(var(--pc-grid) 1px,transparent 1px),linear-gradient(90deg,var(--pc-grid) 1px,transparent 1px);background-size:40px 40px,40px 40px;background-attachment:fixed}.ants-embed a{color:var(--pc-ink);text-decoration:underline;text-decoration-color:var(--pc-line-strong);text-underline-offset:3px}.ants-embed a:hover{color:var(--pc-accent);text-decoration-color:currentColor}.ants-embed h1,.ants-embed h2,.ants-embed h3{font-weight:600;line-height:1.3}.ants-embed h1{font-size:24px;font-weight:600;line-height:30px;letter-spacing:-.02em}.ants-embed h2.section-title{font-size:11px;font-weight:600;color:var(--pc-sub);text-transform:uppercase;letter-spacing:.12em;margin:28px 0 12px}.ants-embed h2.section-title:first-child{margin-top:0}.ants-embed p{margin:0 0 8px}.ants-embed ul{margin:0;padding-left:18px}.ants-embed em{font-style:italic}.ants-embed code{font-family:var(--font-mono);font-size:12px;color:var(--pc-ink);background:var(--pc-panel-2);border:1px solid var(--pc-line);padding:1px 6px;border-radius:4px}.ants-embed input[type=checkbox]{accent-color:var(--pc-accent);margin:0;width:15px;height:15px;cursor:pointer}.ants-embed input[type=file]{font:inherit;font-size:13px;color:var(--pc-sub)}.ants-embed input[type=file]::file-selector-button{font:inherit;font-size:12px;font-weight:600;color:var(--pc-ink);background:var(--pc-panel);border:1px solid var(--pc-line-strong);border-radius:6px;padding:6px 12px;margin-right:10px;cursor:pointer}.ants-embed input[type=file]::file-selector-button:hover{background:var(--pc-panel-2)}.ants-embed .mono,.ants-embed .num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.ants-embed .num{text-align:right}.ants-embed .muted{color:var(--pc-sub)}.ants-embed .dim{color:var(--pc-faint)}.ants-embed .danger{color:var(--pc-danger)}.ants-embed .accent{color:var(--pc-accent)}.ants-embed .small{font-size:12px}.ants-embed .nowrap{white-space:nowrap}.ants-embed .break{word-break:break-all}.ants-embed .mt{margin-top:12px}.ants-embed .mb{margin-bottom:12px}.ants-embed .row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.ants-embed .row-between{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}.ants-embed .stack{display:flex;flex-direction:column;gap:10px}.ants-embed .grow{flex:1 1 320px}.ants-embed .row-nowrap{display:inline-flex;gap:6px;align-items:center;white-space:nowrap}.ants-embed .row-start{align-items:flex-start}.ants-embed .link-button{font:inherit;font-size:12px;font-weight:500;color:var(--pc-sub);background:transparent;border:0;padding:0;cursor:pointer;text-decoration:underline;text-decoration-color:var(--pc-line-strong);text-underline-offset:3px}.ants-embed .link-button:hover:not(:disabled){color:var(--pc-accent);text-decoration-color:currentColor}.ants-embed .link-button:disabled{opacity:.45;cursor:not-allowed}.ants-embed .btn-wrap{display:inline-block}.ants-embed .btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:7px 16px;border:1px solid transparent;border-radius:8px;font-family:inherit;font-size:13px;font-weight:600;line-height:18px;letter-spacing:.01em;white-space:nowrap;cursor:pointer;text-decoration:none;transition:background .12s ease,box-shadow .12s ease,transform .12s ease,border-color .12s ease,color .12s ease}.ants-embed .btn:hover{text-decoration:none}.ants-embed .btn:disabled{opacity:.4;cursor:default}.ants-embed .btn:focus-visible{outline:2px solid var(--pc-accent);outline-offset:2px}.ants-embed .btn__icon{display:inline-flex;align-items:center}.ants-embed .btn--primary,.ants-embed button.btn:not([class*=btn--]){background:var(--pc-btn);border-color:var(--pc-btn);color:var(--pc-btn-ink)}.ants-embed .btn--primary:hover:not(:disabled),.ants-embed button.btn:hover:not(:disabled):not([class*=btn--]){background:var(--pc-btn-hover);border-color:var(--pc-btn-hover);color:var(--pc-btn-ink);box-shadow:var(--pc-glow);transform:translateY(-1px)}.ants-embed .btn--danger{background:var(--pc-danger);border-color:var(--pc-danger);color:var(--pc-danger-ink)}.ants-embed .btn--danger:hover:not(:disabled){color:var(--pc-danger-ink);box-shadow:0 6px 20px #ff6b6b4d;transform:translateY(-1px)}.ants-embed .btn--outline{background:transparent;border-color:var(--pc-line-strong);color:var(--pc-ink)}.ants-embed .btn--outline:hover:not(:disabled){background:var(--pc-panel-2);border-color:var(--pc-accent-line);color:var(--pc-ink)}.ants-embed .btn--ghost{background:transparent;color:var(--pc-sub)}.ants-embed .btn--ghost:hover:not(:disabled){background:var(--pc-panel-2);color:var(--pc-ink)}.ants-embed .btn--sm{min-height:30px;padding:4px 12px;font-size:12px;border-radius:6px}.ants-embed .btn--full{width:100%}.ants-embed a.btn{text-decoration:none}.ants-embed .icon-button{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:1px solid var(--pc-line);background:transparent;color:var(--pc-sub);cursor:pointer;font:inherit;transition:color .12s,background .12s,border-color .12s}.ants-embed .icon-button:hover:not(:disabled){background:var(--pc-panel-2);border-color:var(--pc-line-strong);color:var(--pc-ink)}.ants-embed .card{background:var(--pc-panel);border:1px solid var(--pc-line);border-radius:12px;box-shadow:var(--pc-shadow)}.ants-embed .card--muted,.ants-embed .card--accent{background:var(--pc-panel-2);box-shadow:none}.ants-embed .card--accent{border-color:var(--pc-accent-line)}.ants-embed .card--danger{border-color:var(--pc-danger-line)}.ants-embed .app{min-height:100vh;display:flex;align-items:stretch}.ants-embed .content{flex:1;min-width:0;display:flex;flex-direction:column}.ants-embed .sidebar{position:sticky;top:0;align-self:flex-start;width:232px;height:100vh;height:100dvh;flex:0 0 232px;display:flex;flex-direction:column;gap:4px;padding:18px 14px 16px;border-right:1px solid var(--pc-line);background:color-mix(in srgb,var(--pc-panel) 88%,var(--pc-bg));z-index:20}.ants-embed .sidebar .wordmark{padding:4px 10px 18px}.ants-embed .wordmark{display:inline-flex;align-items:center;gap:9px;font-size:15px;font-weight:700;letter-spacing:.08em;color:var(--pc-ink);text-decoration:none;white-space:nowrap}.ants-embed .wordmark:before{content:"";width:10px;height:10px;border-radius:2px;background:var(--pc-accent);box-shadow:0 0 12px var(--pc-accent);transform:rotate(45deg)}.ants-embed .wordmark:hover{color:var(--pc-ink);text-decoration:none}.ants-embed .wordmark span{font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--pc-sub)}.ants-embed .sidenav{display:flex;flex-direction:column;gap:14px;flex:1;min-height:0;overflow-y:auto}.ants-embed .sidenav-group{display:flex;flex-direction:column;gap:2px}.ants-embed .sidenav-label{padding:0 10px 6px;font-family:var(--font-mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--pc-faint)}.ants-embed .sidenav-item{position:relative;display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:7px;color:var(--pc-sub);font-size:13px;font-weight:500;text-decoration:none;transition:background .12s,color .12s}.ants-embed .sidenav-item svg{flex:0 0 auto;opacity:.8}.ants-embed .sidenav-item:hover{background:var(--pc-panel-2);color:var(--pc-ink);text-decoration:none}.ants-embed .sidenav-item.active{background:var(--pc-accent-bg);color:var(--pc-ink);font-weight:600}.ants-embed .sidenav-item.active svg{opacity:1;color:var(--pc-accent)}.ants-embed .sidenav-item.active:before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:2px;border-radius:2px;background:var(--pc-accent);box-shadow:0 0 8px var(--pc-accent)}.ants-embed .sidebar-foot{display:flex;flex-direction:column;gap:10px;padding-top:14px;border-top:1px solid var(--pc-line)}.ants-embed .sidebar-foot .epoch-chip{justify-content:center}.ants-embed .sidebar-foot-row{display:flex;align-items:center;gap:8px;min-width:0}.ants-embed .sidebar-foot-row>:first-child{flex:1;min-width:0}.ants-embed .epoch-chip{display:inline-flex;align-items:center;gap:8px;min-height:30px;padding:0 11px;border:1px solid var(--pc-line);border-radius:999px;background:var(--pc-panel);font-family:var(--font-mono);font-size:11.5px;color:var(--pc-sub);white-space:nowrap}.ants-embed .epoch-chip strong{color:var(--pc-ink);font-weight:500}.ants-embed .epoch-chip i{width:6px;height:6px;border-radius:50%;background:var(--pc-accent);box-shadow:0 0 0 3px var(--pc-accent-bg);animation:pulse 2.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}@media(prefers-reduced-motion:reduce){.ants-embed .epoch-chip i{animation:none}}.ants-embed .theme-toggle{color:var(--pc-sub);flex:0 0 auto}.ants-embed .wallet-chip{display:inline-flex;align-items:center;gap:4px;padding:5px 11px;min-height:30px;border:1px solid var(--pc-line);border-radius:999px;background:var(--pc-panel);font-size:12px;max-width:100%;overflow:hidden}.ants-embed .wallet-chip-addr{color:var(--pc-ink);font-size:12px;font-weight:500;text-decoration:none}.ants-embed .main{flex:1;width:100%;max-width:1320px;margin:0 auto;padding:26px 28px 56px}.ants-embed .page-title{margin-bottom:18px}.ants-embed .pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;min-height:20px;border:1px solid var(--pc-line-strong);border-radius:4px;background:transparent;color:var(--pc-ink);font-family:var(--font-mono);font-size:10.5px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;line-height:16px;white-space:nowrap}.ants-embed .pill--accent{background:var(--pc-ok-bg);border-color:var(--pc-ok-line);color:var(--pc-ok)}.ants-embed .pill--danger{background:var(--pc-danger-bg);border-color:var(--pc-danger-line);color:var(--pc-danger)}.ants-embed .pill--amber{background:var(--pc-amber-bg);border-color:var(--pc-amber-line);color:var(--pc-amber)}.ants-embed .pill--muted{color:var(--pc-sub);border-color:var(--pc-line)}.ants-embed .pill--mono{font-family:var(--font-mono);font-weight:500}.ants-embed .panel{padding:20px 22px;margin-bottom:16px}.ants-embed .panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.ants-embed .panel-head h3{font-size:14px;font-weight:600;letter-spacing:.01em}.ants-embed .panel-head+.table-wrap{margin-top:0}.ants-embed .panel-inset{padding:18px 20px;margin-bottom:14px;border-radius:10px}.ants-embed .panel>.hint:last-child{margin-top:12px}.ants-embed .panel>.table-wrap+.hint{margin-top:0}.ants-embed .tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:18px}.ants-embed .tile{position:relative;padding:16px 18px;min-height:96px;display:flex;flex-direction:column;gap:6px;overflow:hidden}.ants-embed .tile:after{content:"";position:absolute;inset:auto auto 0 0;height:2px;width:100%;background:linear-gradient(90deg,var(--pc-accent-line),transparent 60%);opacity:.6}.ants-embed .tile--danger:after{background:linear-gradient(90deg,var(--pc-danger-line),transparent 60%)}.ants-embed .tile-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--pc-sub)}.ants-embed .tile-value{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 6px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:24px;font-weight:500;letter-spacing:-.02em;line-height:30px;color:var(--pc-ink);word-break:break-all}.ants-embed .tile-value .unit{font-family:var(--font-sans);font-size:12px;font-weight:600;letter-spacing:.06em;color:var(--pc-sub);white-space:nowrap}.ants-embed .tile-sub{font-size:12px;line-height:17px;color:var(--pc-faint);font-variant-numeric:tabular-nums}.ants-embed .ticker{display:flex;flex-wrap:wrap;gap:0;margin-bottom:18px;border:1px solid var(--pc-line);border-radius:10px;background:var(--pc-panel);overflow:hidden}.ants-embed .ticker-item{flex:1 1 160px;display:flex;flex-direction:column;gap:2px;padding:10px 16px;border-right:1px solid var(--pc-line);min-width:0}.ants-embed .ticker-item:last-child{border-right:0}.ants-embed .ticker-item .ticker-label{font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--pc-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ants-embed .ticker-item .ticker-value{font-family:var(--font-mono);font-size:13px;color:var(--pc-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ants-embed .ticker-item .ticker-value small{color:var(--pc-sub);font-size:11px;margin-left:4px}.ants-embed .facts{display:grid;margin:0;font-size:13px;line-height:18px;grid-template-columns:max-content minmax(0,1fr)}.ants-embed .facts dt,.ants-embed .facts dd{padding:8px 0;border-top:1px solid var(--pc-line)}.ants-embed .facts dt{color:var(--pc-sub);padding-right:24px;white-space:nowrap}.ants-embed .facts dd{margin:0;color:var(--pc-ink);font-weight:500;word-break:break-all;text-align:right;font-family:var(--font-mono);font-size:12.5px}.ants-embed .facts dd .mono,.ants-embed .facts dd code{font-size:12px}.ants-embed .facts dd .link-button{margin-left:8px!important}.ants-embed .facts dd .pill{vertical-align:-1px}.ants-embed .row>.facts{flex:1 1 280px}.ants-embed .empty-state{padding:26px 24px;margin-bottom:16px;text-align:center;color:var(--pc-sub);font-size:13px}.ants-embed .alert{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;margin-bottom:16px;border:1px solid var(--pc-line);border-left:3px solid var(--pc-line-strong);border-radius:10px;background:var(--pc-panel);color:var(--pc-ink);font-size:13px;line-height:18px}.ants-embed .alert__content{flex:1;min-width:0}.ants-embed .alert__title{font-weight:600;margin-bottom:2px}.ants-embed .alert__body{color:var(--pc-sub)}.ants-embed .alert__action{display:flex;align-items:center}.ants-embed .alert--warning{border-left-color:var(--pc-amber)}.ants-embed .alert--success{border-left-color:var(--pc-ok)}.ants-embed .alert--success .alert__title{color:var(--pc-ok)}.ants-embed .alert--danger{border-left-color:var(--pc-danger);background:var(--pc-danger-bg);border-color:var(--pc-danger-line);color:var(--pc-danger)}.ants-embed .alert--danger .alert__body{color:var(--pc-danger)}.ants-embed .notices-list{margin:0;padding-left:16px}.ants-embed .notices-list li{margin:2px 0}.ants-embed .status-line{font-size:13px;line-height:18px;color:var(--pc-danger);background:var(--pc-danger-bg);border:1px solid var(--pc-danger-line);border-radius:8px;padding:10px 14px;margin-bottom:14px;white-space:pre-wrap;word-break:break-word}.ants-embed .status-line--muted{color:var(--pc-sub);background:var(--pc-panel-2);border-color:var(--pc-line)}.ants-embed .form-row{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start}.ants-embed .form-row>.action,.ants-embed .form-row>.btn{margin-top:23px}.ants-embed .form-row>.link-button{margin-top:32px}.ants-embed .form-row .field__label{white-space:nowrap}.ants-embed .field{display:flex;flex-direction:column;gap:6px;flex:0 0 auto}.ants-embed .field__label{color:var(--pc-sub);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;line-height:17px}.ants-embed .field__input{width:100%;min-height:38px;border:1px solid var(--pc-line-strong);border-radius:8px;background:var(--pc-bg);color:var(--pc-ink);font:inherit;font-size:13px;padding:7px 12px;outline:none;transition:border-color .12s,box-shadow .12s}.ants-embed .field__input::placeholder{color:var(--pc-faint)}.ants-embed .field__input:hover:not(:disabled):not(:focus){border-color:var(--pc-sub)}.ants-embed .field__input:focus{border-color:var(--pc-accent);box-shadow:0 0 0 3px var(--pc-accent-bg)}.ants-embed .field__input:disabled{opacity:.55;cursor:not-allowed;background:var(--pc-panel-2)}.ants-embed .field__input.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.ants-embed .field__hint,.ants-embed .field__error{font-size:12px;line-height:16px}.ants-embed .field__hint{color:var(--pc-faint)}.ants-embed .field__error{color:var(--pc-danger)}.ants-embed select.field__input{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:34px}.ants-embed .select-wrap{position:relative;display:block;width:100%;color:var(--pc-sub)}.ants-embed .select-wrap:after{content:"";position:absolute;right:14px;top:50%;width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-70%) rotate(45deg);pointer-events:none}.ants-embed .field-w-sm{width:140px}.ants-embed .field-w-md{width:200px}.ants-embed .field-w-lg{width:360px;max-width:100%}.ants-embed .hint{color:var(--pc-faint);font-size:12px;line-height:17px}.ants-embed .hint a,.ants-embed .hint code{color:var(--pc-sub)}.ants-embed .error-text{color:var(--pc-danger);font-size:12px;line-height:17px;margin-top:6px;white-space:pre-wrap;word-break:break-word}.ants-embed .check{display:inline-flex;gap:8px;align-items:center;cursor:pointer;font-size:13px}.ants-embed .table-wrap:focus-visible{outline:2px solid var(--pc-accent);outline-offset:2px}.ants-embed .table-wrap{overflow-x:auto;background:var(--pc-panel);border:1px solid var(--pc-line);border-radius:10px;box-shadow:var(--pc-shadow);margin-bottom:16px}.ants-embed .panel .table-wrap,.ants-embed .confirm .table-wrap,.ants-embed .card .table-wrap{box-shadow:none;border-radius:8px;background:transparent}.ants-embed .panel .table-wrap:last-child{margin-bottom:0}.ants-embed table.table{border-collapse:collapse;width:100%;font-size:13px;line-height:18px}.ants-embed .table th{font-family:var(--font-sans);text-align:left;font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--pc-faint);padding:9px 14px;border-bottom:1px solid var(--pc-line);white-space:nowrap;background:var(--pc-panel-2)}.ants-embed .table td{padding:10px 14px;border-bottom:1px solid var(--pc-line);vertical-align:middle;white-space:nowrap;color:var(--pc-ink);transition:background .12s}.ants-embed .table tbody tr:last-child td{border-bottom:0}.ants-embed .table td.num,.ants-embed .table th.num{text-align:right}.ants-embed .table td.num,.ants-embed .table td.mono{font-size:12.5px}.ants-embed .table tbody tr:hover td{background:var(--pc-panel-2)}.ants-embed .table tr.clickable{cursor:pointer}.ants-embed .table tr.selected td{background:var(--pc-accent-bg)}.ants-embed .table tfoot td{border-top:1px solid var(--pc-line);border-bottom:0;font-weight:600}.ants-embed .table .empty{color:var(--pc-sub);text-align:center;padding:28px 16px;white-space:normal}.ants-embed .table .btn--sm{min-height:26px;padding:2px 10px}.ants-embed .table th.col-actions,.ants-embed .table td.col-actions{text-align:right;width:1%}.ants-embed .table th.col-select,.ants-embed .table td.col-select{width:1%;padding-right:4px}.ants-embed .table-sort{display:inline-flex;align-items:center;gap:6px;border:0;padding:0;background:transparent;color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer}.ants-embed .table-sort:hover{color:var(--pc-ink)}.ants-embed .table-sort:focus-visible{outline:2px solid currentColor;outline-offset:4px;border-radius:2px}.ants-embed .cell-stack{display:inline-flex;flex-direction:column;align-items:inherit;line-height:16px}.ants-embed .table td.num .cell-stack{align-items:flex-end}.ants-embed .cell-sub{font-size:11px;color:var(--pc-faint);font-family:var(--font-mono)}.ants-embed .seller-cell{display:flex;flex-direction:column;gap:2px;min-width:0}.ants-embed .seller-cell .pool-details-trigger{font-weight:600;font-size:13.5px}.ants-embed .seller-cell-meta{display:flex;gap:8px;align-items:center;font-family:var(--font-mono);font-size:11px;color:var(--pc-faint)}.ants-embed .seller-cell-meta .pill{font-size:9.5px;padding:0 5px;min-height:16px;line-height:14px}.ants-embed .pool-details-trigger{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.ants-embed .pool-details-trigger:hover{color:var(--pc-accent)}.ants-embed .pool-details-trigger:focus-visible{outline:2px solid var(--pc-accent);outline-offset:4px;border-radius:2px}.ants-embed .pools-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px}.ants-embed .pools-toolbar .field__label:empty{display:none}.ants-embed .pools-more{display:flex;align-items:center;gap:12px;padding:10px 2px 0}.ants-embed .yield-percent{display:inline-block;max-width:15rem;white-space:normal;overflow-wrap:anywhere}.ants-embed .yield-percent--hot{color:var(--pc-accent)}.ants-embed .sparkline{display:inline-block;vertical-align:middle;color:var(--pc-accent);overflow:visible}.ants-embed .sparkline--muted{color:var(--pc-sub)}.ants-embed .sparkline--empty{color:var(--pc-faint);font-family:var(--font-mono)}.ants-embed .bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 12px;margin-bottom:10px;border:1px solid var(--pc-accent-line);border-radius:8px;background:var(--pc-accent-bg);font-size:12.5px}.ants-embed .bulk-bar .bulk-bar-count{font-family:var(--font-mono);color:var(--pc-ink)}.ants-embed .bulk-bar .bulk-bar-actions{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto}.ants-embed .action{display:inline-block;vertical-align:top}.ants-embed .confirm{padding:18px 20px;margin-top:10px;min-width:320px;max-width:600px;white-space:normal;box-shadow:none}.ants-embed .confirm-title{font-weight:600;font-size:15px;margin-bottom:10px}.ants-embed .confirm .facts dd{font-family:var(--font-mono)}.ants-embed .confirm-actions{display:flex;gap:8px;margin-top:16px}.ants-embed .activity-pill{display:inline-flex;align-items:center;gap:7px;min-height:30px;padding:0 12px 0 10px;border:1px solid var(--pc-amber-line);border-radius:999px;background:var(--pc-amber-bg);color:var(--pc-amber);font:inherit;font-size:12px;font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;transition:border-color .15s ease,background .15s ease}.ants-embed .activity-pill:hover{border-color:var(--pc-amber)}.ants-embed .activity-pill:focus-visible{outline:2px solid var(--pc-accent);outline-offset:2px}.ants-embed .activity-pill .spinner{opacity:1}.ants-embed .activity-drawer .drawer-body{gap:0}.ants-embed .activity-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.ants-embed .activity-row{display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-top:1px solid var(--pc-line)}.ants-embed .activity-row:first-child{border-top:0;padding-top:0}.ants-embed .activity-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.ants-embed .activity-title{font-size:14px;font-weight:600;color:var(--pc-ink);line-height:20px}.ants-embed .activity-sub{font-size:12px;color:var(--pc-sub);line-height:17px}.ants-embed .activity-error{font-size:12px;color:var(--pc-danger);line-height:17px;white-space:pre-wrap;word-break:break-word}.ants-embed .activity-links{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:3px}.ants-embed .activity-link-wrap{display:inline-flex;align-items:baseline;gap:6px}.ants-embed .activity-link{font-size:12px;color:var(--pc-sub);text-decoration:underline;text-underline-offset:3px;text-decoration-color:currentColor}.ants-embed .activity-link:hover{color:var(--pc-accent)}.ants-embed .activity-hash{font-size:11px;color:var(--pc-sub)}.ants-embed .activity-side{display:flex;flex:0 0 auto;flex-direction:column;align-items:flex-end;gap:6px}.ants-embed .activity-time{font-size:11px;color:var(--pc-faint);font-variant-numeric:tabular-nums;white-space:nowrap}.ants-embed .activity-empty{color:var(--pc-sub);font-size:13px;padding:36px 0;text-align:center}.ants-embed .activity-poll-error{font-size:12px;color:var(--pc-faint);margin-top:14px}.ants-embed .status-icon{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:20px;height:20px;border:1px solid var(--pc-line-strong);border-radius:50%;background:var(--pc-panel-2);color:var(--pc-ink)}.ants-embed .status-icon svg{display:block}.ants-embed .status-icon .spinner{opacity:1}.ants-embed .status-icon--done{border-color:var(--pc-ok-line);background:var(--pc-ok-bg);color:var(--pc-ok)}.ants-embed .status-icon--failed{border-color:var(--pc-danger-line);background:var(--pc-danger-bg);color:var(--pc-danger)}.ants-embed .toasts{position:fixed;right:20px;bottom:20px;z-index:300;display:flex;flex-direction:column;gap:10px;width:340px;max-width:calc(100vw - 40px);pointer-events:none}.ants-embed .toast{pointer-events:auto;display:flex;gap:12px;align-items:flex-start;padding:14px 12px 14px 16px;border:1px solid var(--pc-line-strong);border-radius:10px;background:var(--pc-panel);color:var(--pc-ink);box-shadow:var(--pc-shadow-float);animation:toast-in .22s cubic-bezier(.2,.8,.2,1)}.ants-embed .toast--danger{border-color:var(--pc-danger-line);background:linear-gradient(var(--pc-danger-bg),var(--pc-danger-bg)) var(--pc-panel)}.ants-embed .toast-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;padding-top:1px}.ants-embed .toast-title{font-size:13px;font-weight:600;line-height:18px}.ants-embed .toast--danger .toast-title{color:var(--pc-danger)}.ants-embed .toast-text{font-size:12px;color:var(--pc-sub);line-height:17px;white-space:pre-wrap;word-break:break-word}.ants-embed .toast--danger .toast-text{color:var(--pc-danger)}.ants-embed .toast-link{font-size:12px;font-weight:600;color:var(--pc-accent);text-decoration:none}.ants-embed .toast-link:hover{text-decoration:underline}.ants-embed .toast-close{flex:0 0 auto;width:24px;height:24px;margin:-3px -2px -3px 0;border-color:transparent;background:transparent}.ants-embed .toast-close:hover:not(:disabled){border-color:transparent}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.ants-embed .toast{animation:none}}.ants-embed .spinner{display:inline-block;width:11px;height:11px;border:1.5px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-1px;opacity:.8}@keyframes spin{to{transform:rotate(360deg)}}.ants-embed .skeleton{position:relative;overflow:hidden;background:var(--pc-panel-2);border-radius:4px}.ants-embed .skeleton:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,rgba(128,128,128,.14),transparent);animation:shimmer 1.25s infinite}@keyframes shimmer{to{transform:translate(100%)}}.ants-embed .skel-list{display:flex;flex-direction:column;gap:10px;margin-bottom:16px}.ants-embed .full-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.ants-embed .full-page-inner{max-width:480px;width:100%;padding:26px 28px}.ants-embed .full-page-inner .wordmark{padding:0 0 14px}.ants-embed .full-page-inner p{color:var(--pc-sub);font-size:13px;line-height:18px}.ants-embed .full-page-inner p:first-of-type{color:var(--pc-ink);font-size:14px}.ants-embed .ants-stake-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:250;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--pc-backdrop);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ants-embed .ants-stake-overlay .as-modal__scroll-lock{display:flex;width:min(var(--as-modal-width),100%);max-height:calc(100dvh - 48px)}.ants-embed .ants-stake-overlay .as-modal__focus-lock{display:flex;width:100%;min-height:0}.ants-embed .ants-stake-overlay .as-modal{display:flex;flex-direction:column;width:100%;min-height:0;overflow:hidden;background:var(--pc-panel);border:1px solid var(--pc-line-strong);border-radius:14px;box-shadow:var(--pc-shadow-float);animation:modal-in .18s cubic-bezier(.2,.8,.2,1)}.ants-embed .ants-stake-overlay .as-modal__header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;border-bottom:1px solid var(--pc-line)}.ants-embed .ants-stake-overlay .as-modal__title{margin:0;font-size:18px;line-height:1.3;font-weight:600;letter-spacing:-.01em}.ants-embed .ants-stake-overlay .as-modal__close{display:grid;place-items:center;flex-shrink:0;width:34px;height:34px;border:1px solid var(--pc-line);border-radius:8px;background:transparent;color:var(--pc-sub);cursor:pointer}.ants-embed .ants-stake-overlay .as-modal__close:hover{background:var(--pc-panel-2);color:var(--pc-ink)}.ants-embed .ants-stake-overlay .as-modal__close:focus-visible{outline:2px solid var(--pc-accent);outline-offset:2px}.ants-embed .ants-stake-overlay .as-modal__body{min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:24px}.ants-embed .ants-stake-overlay .stake-form .form-row{flex-direction:column;align-items:stretch;gap:20px}.ants-embed .ants-stake-overlay .stake-form .field{width:100%;max-width:none}.ants-embed .ants-stake-overlay .stake-form-actions{display:flex;gap:12px;margin-top:24px}.ants-embed .ants-stake-overlay .stake-form-actions>.btn:first-child{flex:1}.ants-embed .ants-stake-overlay .confirm{margin:0;padding:0;border:0;box-shadow:none;background:transparent}.ants-embed .ants-stake-overlay .confirm-actions{margin-top:24px}.ants-embed .ants-stake-overlay .confirm-actions>.btn:first-child{flex:1}.ants-embed .ants-stake-overlay .facts dd{overflow-wrap:anywhere}@keyframes modal-in{0%{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.ants-embed .ants-stake-overlay .as-modal{animation:none}}@media(max-width:600px){.ants-embed .ants-stake-overlay{padding:12px}.ants-embed .ants-stake-overlay .as-modal__scroll-lock{max-height:calc(100dvh - 24px)}.ants-embed .ants-stake-overlay .as-modal__header{padding:16px 20px}.ants-embed .ants-stake-overlay .as-modal__body{padding:20px}}.ants-embed .ants-action-overlay .as-modal__scroll-lock{width:min(720px,100%)}.ants-embed .ants-action-overlay .form-row{flex-direction:column;align-items:stretch}.ants-embed .ants-action-overlay .field{max-width:100%}.ants-embed .ants-action-overlay .action{min-width:0}.ants-embed .ants-action-overlay .action>.confirm{margin-top:16px}.ants-embed .ants-action-overlay .action>.confirm:first-child{margin-top:0}.ants-embed .ants-action-overlay .confirm-actions{flex-wrap:wrap}.ants-embed .ants-action-overlay .confirm-actions .btn{height:auto;min-height:40px;white-space:normal}.ants-embed .ants-action-overlay .table-wrap{max-width:100%;overflow-x:auto}.ants-embed .ants-pool-overlay{align-items:stretch;justify-content:flex-end;padding:0}.ants-embed .ants-pool-overlay .as-modal__scroll-lock{width:min(1240px,100%);max-height:100dvh}.ants-embed .ants-pool-overlay .as-modal{border-radius:0;border-width:0 0 0 1px;animation:sheet-in .22s cubic-bezier(.2,.8,.2,1)}.ants-embed .ants-pool-overlay .as-modal__title{font-size:22px;letter-spacing:-.02em}.ants-embed .ants-pool-overlay .as-modal__body{padding:0 28px 32px}.ants-embed .ants-pool-overlay .as-modal__header{padding:22px 28px 18px}.ants-embed .ants-pool-overlay .as-modal__subtitle{overflow-wrap:anywhere;color:var(--pc-sub);font-size:12.5px}@keyframes sheet-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.ants-embed .ants-pool-overlay .as-modal{animation:none}}.ants-embed .vault{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:28px;align-items:start}.ants-embed .vault-main{min-width:0}.ants-embed .vault-side{position:sticky;top:0;display:flex;flex-direction:column;gap:14px}.ants-embed .vault-side .card{padding:18px 20px}.ants-embed .vault-side .stake-form .form-row{flex-direction:column;align-items:stretch;gap:16px}.ants-embed .vault-side .stake-form .field{width:100%;max-width:none}.ants-embed .vault-side .stake-form-actions{display:flex;gap:10px;margin-top:18px}.ants-embed .vault-side .stake-form-actions>.btn:first-child{flex:1}.ants-embed .vault-side h3{font-size:13px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--pc-sub);margin-bottom:12px}.ants-embed .vault-your{display:grid;grid-template-columns:1fr 1fr;gap:10px}.ants-embed .vault-your>div{display:flex;flex-direction:column;gap:2px}.ants-embed .vault-your strong{font-family:var(--font-mono);font-weight:500;font-size:15px}.ants-embed .pool-overview-status{display:flex;align-items:center;gap:12px;color:var(--pc-sub);font-size:12px;margin:14px 0 18px;flex-wrap:wrap}.ants-embed .pool-metrics,.ants-embed .pool-lifetime,.ants-embed .pool-apy-estimates{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:var(--pc-line);border:1px solid var(--pc-line);border-radius:10px;overflow:hidden}.ants-embed .pool-metrics{grid-template-columns:repeat(4,minmax(0,1fr))}.ants-embed .pool-metrics>div,.ants-embed .pool-lifetime>div,.ants-embed .pool-apy-estimates>div{display:flex;flex-direction:column;gap:8px;background:var(--pc-panel);padding:16px;min-width:0}.ants-embed .pool-metrics strong{font-family:var(--font-mono);font-size:20px;font-weight:500;letter-spacing:-.02em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.ants-embed .pool-metrics strong small{font-family:var(--font-sans);font-size:11px;color:var(--pc-sub);letter-spacing:.06em}.ants-embed .pool-apy-section{margin-top:24px}.ants-embed .pool-apy-section h3{font-size:14px;font-weight:600;margin:0}.ants-embed .pool-apy-estimates{margin:0}.ants-embed .pool-apy-estimates dt{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--pc-sub)}.ants-embed .pool-apy-estimates dd{margin:0;font-family:var(--font-mono);font-size:20px;font-weight:500;letter-spacing:-.02em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;color:var(--pc-accent)}.ants-embed .pool-apy-unavailable{font-family:var(--font-sans);font-size:12px;font-weight:400;letter-spacing:0;color:var(--pc-sub)}.ants-embed .pool-lifetime{margin-bottom:18px}.ants-embed .pool-lifetime strong{font-family:var(--font-mono);font-size:16px;font-weight:500;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.ants-embed .pool-section{margin-top:26px;padding-top:22px;border-top:1px solid var(--pc-line)}.ants-embed .pool-section-heading{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:14px}.ants-embed .pool-section h3{font-size:14px;font-weight:600;margin:0}.ants-embed .pool-subheading{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;font-size:13px;font-weight:600;margin:24px 0 10px}.ants-embed .pool-model-table td:first-child{min-width:150px;max-width:280px;overflow-wrap:anywhere}.ants-embed .pool-catalog{margin-top:24px;padding-top:24px;border-top:1px solid var(--pc-line)}.ants-embed .pool-catalog .pool-subheading{margin-top:0}.ants-embed .pool-model-tags{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:20px 0;padding:0}.ants-embed .pool-model-tags li{min-width:0;max-width:100%}.ants-embed .pool-model-tags .pill{padding:5px 9px;font-size:11px;white-space:normal;overflow-wrap:anywhere;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.ants-embed .chart-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.ants-embed .chart,.ants-embed .pool-chart{--chart-color: var(--pc-accent);border:1px solid var(--pc-line);border-radius:10px;padding:14px 10px 8px;min-width:0;background:var(--pc-panel)}.ants-embed .pool-chart--share{--chart-color: var(--pc-blue)}.ants-embed .chart-legend,.ants-embed .pool-chart-legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin:0 8px 10px}.ants-embed .chart-legend-item,.ants-embed .pool-chart h4{display:inline-flex;align-items:center;gap:7px;margin:0;font-size:11.5px;font-weight:500;color:var(--pc-sub)}.ants-embed .chart-legend-item i,.ants-embed .pool-chart-dot{width:8px;height:8px;border-radius:2px;background:var(--chart-color, var(--pc-accent))}.ants-embed .pool-chart-legend .pool-chart--share .pool-chart-dot{background:var(--pc-blue)}.ants-embed .chart-legend-item--line i{width:14px;height:2px;border-radius:1px;background:var(--pc-blue)}.ants-embed .pool-chart h4{margin:0 8px 10px}.ants-embed .pool-chart-legend h4{margin:0}.ants-embed .chart-plot,.ants-embed .pool-chart-plot{min-width:0}.ants-embed .chart svg,.ants-embed .pool-chart svg{width:100%;display:block;overflow:visible}.ants-embed .chart text,.ants-embed .pool-chart text{fill:var(--pc-faint);font-size:10.5px;font-family:var(--font-mono)}.ants-embed .chart-axis--bars,.ants-embed .pool-chart text.pool-chart-axis-volume{fill:var(--pc-sub)}.ants-embed .chart-axis--line,.ants-embed .pool-chart text.pool-chart-axis-share{fill:var(--pc-blue)}.ants-embed .chart-grid,.ants-embed .pool-chart-grid{stroke:var(--pc-line);stroke-dasharray:3 5}.ants-embed .chart-bar{fill:var(--pc-accent);opacity:.85;transition:opacity .12s}.ants-embed .chart-bar:hover,.ants-embed .chart-bar:focus{opacity:1;outline:none}.ants-embed .chart-bar--provisional{fill:transparent;stroke:var(--pc-accent);stroke-dasharray:3 3;stroke-width:1.2;opacity:.9}.ants-embed .chart-line,.ants-embed .pool-chart-line{fill:none;stroke:var(--chart-color);stroke-width:2;stroke-linejoin:round}.ants-embed .chart-line{stroke:var(--pc-blue)}.ants-embed .pool-chart--share .pool-chart-line{stroke-dasharray:6 5}.ants-embed .chart-dot{fill:var(--pc-panel);stroke:var(--pc-blue);stroke-width:2}.ants-embed .pool-chart circle{fill:var(--pc-panel);stroke:var(--chart-color);stroke-width:2}.ants-embed .chart-dot:focus,.ants-embed .pool-chart circle:focus{outline:2px solid var(--pc-blue);outline-offset:4px}.ants-embed .chart-empty,.ants-embed .pool-chart-empty{min-height:150px;display:grid;place-items:center;padding:20px;font-size:12px;color:var(--pc-sub);text-align:center}.ants-embed .chart svg,.ants-embed .pool-chart svg,.ants-embed .sparkline{touch-action:none}.ants-embed .chart-hover-band{fill:var(--pc-ink);opacity:.045}.ants-embed .chart-crosshair{stroke:var(--pc-ink);stroke-width:1;stroke-dasharray:2 3;opacity:.5;pointer-events:none}.ants-embed .chart-bar--hover{opacity:1;filter:drop-shadow(0 0 6px var(--pc-accent))}.ants-embed .chart-bar--provisional.chart-bar--hover{filter:none;stroke-width:1.8}.ants-embed .sparkline-wrap{position:relative;display:inline-block;vertical-align:middle;line-height:0}.ants-embed .sparkline-hover{fill:var(--pc-panel);stroke:currentColor;stroke-width:1.6}.ants-embed .chart-tip{position:fixed;z-index:60;min-width:150px;max-width:260px;padding:8px 10px 7px;transform:translate(-50%,calc(-100% - 10px));border:1px solid var(--pc-line-strong);border-radius:8px;background:color-mix(in srgb,var(--pc-panel) 94%,var(--pc-bg));box-shadow:0 10px 30px #00000059,0 0 0 1px var(--pc-glow);pointer-events:none;white-space:nowrap;animation:tip-in .1s ease-out}.ants-embed .chart-tip:after{content:"";position:absolute;left:50%;bottom:-5px;width:8px;height:8px;transform:translate(-50%) rotate(45deg);background:inherit;border-right:1px solid var(--pc-line-strong);border-bottom:1px solid var(--pc-line-strong)}.ants-embed .chart-tip--left{transform:translate(calc(-100% + 14px),calc(-100% - 10px))}.ants-embed .chart-tip--left:after{left:auto;right:10px;transform:rotate(45deg)}.ants-embed .chart-tip-title{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--pc-faint);margin-bottom:5px}.ants-embed .chart-tip-row{display:flex;align-items:center;gap:7px;font-size:12px;line-height:18px;color:var(--pc-sub)}.ants-embed .chart-tip-row i{width:8px;height:8px;border-radius:2px;background:var(--pc-accent);flex:0 0 auto}.ants-embed .chart-tip-name{flex:1}.ants-embed .chart-tip-value{font-family:var(--font-mono);color:var(--pc-ink);font-weight:500}.ants-embed .chart-tip-value small{color:var(--pc-amber);font-weight:400;font-size:10px}@keyframes tip-in{0%{opacity:0;transform:translate(-50%,calc(-100% - 4px))}}@media(prefers-reduced-motion:reduce){.ants-embed .chart-tip{animation:none}}.ants-embed .pending-amount{color:var(--pc-amber)}.ants-embed .pool-metrics .pending-amount{display:block;margin-top:2px;font-family:var(--font-mono)}@media(max-width:1000px){.ants-embed .vault{grid-template-columns:1fr}.ants-embed .vault-side{position:static}.ants-embed .chart-grid-2{grid-template-columns:1fr}}@media(max-width:760px){.ants-embed .ants-pool-overlay .as-modal__header{padding:18px 20px}.ants-embed .ants-pool-overlay .as-modal__body{padding:0 20px 20px}.ants-embed .pool-metrics,.ants-embed .pool-lifetime,.ants-embed .pool-apy-estimates{grid-template-columns:repeat(2,minmax(0,1fr))}.ants-embed .pool-apy-estimates dd,.ants-embed .pool-metrics strong{font-size:18px}}.ants-embed .drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;background:var(--pc-backdrop)}.ants-embed .drawer{position:fixed;top:0;right:0;z-index:100;display:flex;width:min(440px,92vw);height:100vh;flex-direction:column;overflow:hidden;background:var(--pc-panel);border-left:1px solid var(--pc-line-strong);box-shadow:var(--pc-shadow-float)}.ants-embed .drawer-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:22px 24px 18px;border-bottom:1px solid var(--pc-line)}.ants-embed .drawer-titles{display:flex;min-width:0;flex-direction:column;gap:4px}.ants-embed .drawer-title{margin:0;color:var(--pc-ink);font-size:16px;font-weight:600;line-height:1.25}.ants-embed .drawer-close{flex:0 0 auto}.ants-embed .drawer-body{display:flex;flex:1;flex-direction:column;gap:22px;overflow-y:auto;padding:22px 24px 32px}.ants-embed .drawer-section-title{font-size:11px;font-weight:600;color:var(--pc-sub);text-transform:uppercase;letter-spacing:.12em;margin-bottom:12px}.ants-embed .drawer-section .form-row .field{min-width:0}.ants-embed .drawer .table th,.ants-embed .drawer .table td{padding:8px 10px}.ants-embed .drawer-body .facts .nowrap,.ants-embed .confirm .facts .nowrap{white-space:normal;word-break:break-all}.ants-embed .hero{padding:24px 26px 22px;margin-bottom:16px;display:flex;flex-direction:column;gap:8px}.ants-embed .hero>.hint,.ants-embed .hero>.hero-sub{margin:0}.ants-embed .hero-value{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 8px;font-family:var(--font-mono);font-size:36px;font-weight:500;letter-spacing:-.03em;line-height:44px;font-variant-numeric:tabular-nums;word-break:break-all}.ants-embed .hero-value .unit{font-family:var(--font-sans);font-size:13px;font-weight:600;letter-spacing:.08em;color:var(--pc-sub)}.ants-embed .hero-sub{font-size:13px;color:var(--pc-sub)}.ants-embed .reward-refresh-state{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-sans);font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;color:var(--pc-amber);white-space:nowrap}.ants-embed .reward-amount-loading{display:inline-block;vertical-align:baseline}.ants-embed .reward-amount-loading>span{visibility:hidden}@media(prefers-reduced-motion:reduce){.ants-embed .reward-amount-loading:after{animation:none}}.ants-embed .hero-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start;margin-top:10px}.ants-embed .hero-actions .action{display:contents}.ants-embed .hero-actions .confirm,.ants-embed .hero-actions .error-text{flex:0 0 100%;order:10;margin-top:2px;max-width:100%}.ants-embed .hero-actions .confirm .facts,.ants-embed .hero-actions .confirm .stack{max-width:640px}.ants-embed .buckets{display:grid;grid-template-columns:minmax(0,1fr) max-content max-content max-content;column-gap:20px;margin-bottom:16px;padding:4px 24px}.ants-embed .hero .buckets{padding:0;margin:16px 0 0}.ants-embed .bucket{display:grid;grid-column:1/-1;grid-template-columns:subgrid;align-items:center;row-gap:12px;padding:18px 0;border-top:1px solid var(--pc-line)}.ants-embed .bucket:first-child{border-top:0}.ants-embed .bucket-main{grid-column:1;min-width:0}.ants-embed .bucket-name{font-size:14px;font-weight:600}.ants-embed .bucket-note{font-size:12px;line-height:1.6;color:var(--pc-sub);margin-top:4px;max-width:64ch;overflow-wrap:anywhere}.ants-embed .bucket-note .hint{margin:0;font:inherit}.ants-embed .bucket-amount{grid-column:2;justify-self:end;display:flex;align-items:baseline;gap:8px;font-size:15px;font-weight:500;font-variant-numeric:tabular-nums;white-space:nowrap}.ants-embed .bucket-amount .unit{font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.08em;color:var(--pc-sub)}.ants-embed .bucket-actions,.ants-embed .bucket-actions .action{display:contents}.ants-embed .bucket-amount--detailed{flex-direction:column;align-items:flex-end;gap:2px}.ants-embed .bucket-amount-detail{font-family:var(--font-sans);font-size:12px;font-weight:400;color:var(--pc-sub)}.ants-embed .bucket-actions>.btn,.ants-embed .bucket-actions>.btn-wrap,.ants-embed .bucket-actions .action>.btn-wrap{min-width:0;width:100%}.ants-embed .bucket-actions .btn-wrap>.btn{width:100%}.ants-embed .bucket-actions .confirm,.ants-embed .bucket-actions .error-text{grid-column:1/-1;order:1;min-width:0;max-width:100%}.ants-embed .bucket-actions .confirm .facts dd{word-break:normal;overflow-wrap:anywhere}@media(max-width:900px){.ants-embed .buckets{grid-template-columns:minmax(0,1fr) max-content max-content;column-gap:12px}.ants-embed .bucket-main{grid-column:1/-1}.ants-embed .bucket-amount{grid-column:1;justify-self:start}.ants-embed .bucket-amount--detailed{align-items:flex-start}}@media(max-width:600px){.ants-embed .buckets{grid-template-columns:repeat(2,minmax(0,1fr));padding-left:18px;padding-right:18px}.ants-embed .bucket-amount{grid-column:1/-1;max-width:100%;white-space:normal;overflow-wrap:anywhere}.ants-embed .bucket-actions .btn{white-space:normal;min-height:36px;height:100%}.ants-embed .bucket-actions>.btn-wrap,.ants-embed .bucket-actions .action>.btn-wrap{align-self:stretch}.ants-embed .bucket-actions .confirm .btn{height:auto}}.ants-embed .lock-slider{width:260px;max-width:100%}.ants-embed .lock-slider-readout{font-size:12px;color:var(--pc-ink);line-height:16px}.ants-embed .range{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:36px;margin:0;background:transparent;cursor:pointer}.ants-embed .range:disabled{opacity:.45;cursor:not-allowed}.ants-embed .range::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:var(--pc-line-strong)}.ants-embed .range::-moz-range-track{height:3px;border-radius:2px;background:var(--pc-line-strong)}.ants-embed .range::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;margin-top:-6.5px;border-radius:50%;background:var(--pc-accent);border:2px solid var(--pc-panel);box-shadow:0 0 0 1px var(--pc-accent-line),0 0 10px var(--pc-accent-bg)}.ants-embed .range::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--pc-accent);border:2px solid var(--pc-panel);box-shadow:0 0 0 1px var(--pc-accent-line)}.ants-embed .range:focus-visible{outline:none}.ants-embed .range:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px var(--pc-panel),0 0 0 5px var(--pc-accent)}.ants-embed .stake-lock-settings{flex:1 1 280px;min-width:0}.ants-embed .stake-lock-settings .lock-slider{width:100%}.ants-embed .stake-apy{display:grid;gap:4px;margin-top:12px}.ants-embed .stake-apy strong{margin-left:6px}.ants-embed .lock-presets{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.ants-embed .lock-preset{font:inherit;font-family:var(--font-mono);font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid var(--pc-line-strong);background:transparent;color:var(--pc-sub);cursor:pointer}.ants-embed .lock-preset:hover:not(:disabled){border-color:var(--pc-accent-line);color:var(--pc-ink)}.ants-embed .lock-preset[aria-pressed=true]{background:var(--pc-accent-bg);border-color:var(--pc-accent-line);color:var(--pc-accent)}.ants-embed .lock-preset:disabled{opacity:.4;cursor:not-allowed}.ants-embed .stake-empty{padding:22px 20px;border:1px dashed var(--pc-line-strong);border-radius:10px;text-align:center;color:var(--pc-sub);font-size:13px}.ants-embed .stake-empty strong{display:block;color:var(--pc-ink);font-weight:600;margin-bottom:4px}.ants-embed .split-preview{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}.ants-embed .split-part{padding:12px 14px;border:1px solid var(--pc-line);border-radius:8px;background:var(--pc-bg);display:flex;flex-direction:column;gap:3px}.ants-embed .split-part .tile-label{font-size:10px}.ants-embed .split-part strong{font-family:var(--font-mono);font-weight:500;font-size:15px}.ants-embed .split-part--new{border-color:var(--pc-accent-line)}.ants-embed .menu{position:relative;display:inline-block}.ants-embed .menu-trigger{display:inline-flex;align-items:center;justify-content:center;width:28px;height:26px;border-radius:6px;border:1px solid var(--pc-line-strong);background:transparent;color:var(--pc-sub);cursor:pointer;font:inherit}.ants-embed .menu-trigger:hover,.ants-embed .menu-trigger[aria-expanded=true]{background:var(--pc-panel-2);border-color:var(--pc-accent-line);color:var(--pc-ink)}.ants-embed .menu-trigger svg{display:block}.ants-embed .menu-list{position:fixed;z-index:30;min-width:170px;padding:4px;border:1px solid var(--pc-line-strong);border-radius:8px;background:var(--pc-panel);box-shadow:var(--pc-shadow-float);display:flex;flex-direction:column;text-align:left}.ants-embed .menu-item{display:block;width:100%;padding:7px 10px;border:0;border-radius:6px;background:transparent;color:var(--pc-ink);font:inherit;font-size:13px;text-align:left;cursor:pointer}.ants-embed .menu-item:hover:not(:disabled){background:var(--pc-panel-2)}.ants-embed .menu-item:disabled{opacity:.45;cursor:not-allowed}.ants-embed .details>summary{list-style:none;display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:13px;font-weight:600;color:var(--pc-sub);-webkit-user-select:none;user-select:none}.ants-embed .details>summary::-webkit-details-marker{display:none}.ants-embed .details>summary:before{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .12s;margin-right:2px}.ants-embed .details>summary:hover{color:var(--pc-ink)}.ants-embed .details[open]>summary{color:var(--pc-ink);margin-bottom:12px}.ants-embed .details[open]>summary:before{transform:rotate(45deg)}.ants-embed .panel-collapsible{padding:18px 22px}.ants-embed .panel-collapsible>.details>summary{font-size:14px;font-weight:600;color:var(--pc-ink)}.ants-embed .panel>.details{margin-top:14px}.ants-embed .panel>.details:first-child,.ants-embed .panel-collapsible>.details{margin-top:0}.ants-embed .section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--pc-sub);margin-bottom:10px}.ants-embed .stack-lg{display:flex;flex-direction:column;gap:22px}.ants-embed .stake-form .form-row{align-items:flex-start}@media(max-width:900px){.ants-embed .app{flex-direction:column}.ants-embed .sidebar{position:sticky;align-self:stretch;width:auto;max-width:100%;height:auto;flex:0 0 auto;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px 14px;padding:10px 14px;border-right:0;border-bottom:1px solid var(--pc-line);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.ants-embed .sidebar .wordmark{padding:0}.ants-embed .sidenav{order:3;width:100%;flex:0 0 100%;flex-direction:row;gap:4px;overflow-x:auto;overflow-y:hidden;padding-bottom:2px}.ants-embed .sidenav-group{flex-direction:row;gap:2px}.ants-embed .sidenav-group+.sidenav-group:before{content:"";width:1px;margin:6px;background:var(--pc-line)}.ants-embed .sidenav-label{display:none}.ants-embed .sidenav-item{padding:6px 10px;white-space:nowrap}.ants-embed .sidenav-item.active:before{display:none}.ants-embed .sidebar-foot{order:2;flex-direction:row;margin-left:auto;padding-top:0;border-top:0}.ants-embed .sidebar-foot .epoch-chip{display:none}.ants-embed .sidebar-foot-row>:first-child{flex:0 1 auto}.ants-embed .main{padding:20px 18px 40px}}@media(max-width:680px){.ants-embed .sidebar-foot .wallet-chip{display:none}.ants-embed .main{padding:16px 14px 40px}.ants-embed .hero{padding:20px}.ants-embed .field-w-lg{width:100%}.ants-embed .confirm{min-width:0}.ants-embed .hero-value{font-size:30px;line-height:36px}.ants-embed .facts{grid-template-columns:1fr}.ants-embed .facts dt{padding-bottom:0}.ants-embed .facts dd{border-top:0;padding-top:2px;text-align:left}.ants-embed .split-preview{grid-template-columns:1fr}}.ants-embed .browser-wallet{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ants-embed .volume-bars{display:grid;gap:10px;margin:16px 0}.ants-embed .volume-bar-row{display:grid;grid-template-columns:70px 1fr 120px;gap:10px;align-items:center;font-size:12px}.ants-embed .volume-bar-track{height:10px;background:var(--pc-panel-2);border-radius:4px;overflow:hidden}.ants-embed .volume-bar-track>div{height:100%;background:var(--pc-accent)}.ants-embed .early-exit-help{display:inline-flex;vertical-align:middle;margin-left:.35rem}.ants-embed .early-exit-help__trigger{display:inline-flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;border:1px solid currentColor;border-radius:50%;background:transparent;color:var(--pc-sub);font:600 .75rem/1 var(--font-sans);cursor:help}.ants-embed .early-exit-help__trigger:focus-visible{outline:2px solid var(--pc-accent);outline-offset:3px}.ants-embed .early-exit-help__tooltip{position:fixed;z-index:30000;width:min(320px,100vw - 16px);padding:12px 14px;border:1px solid var(--pc-line-strong);border-radius:8px;background:var(--pc-panel);color:var(--pc-ink);box-shadow:var(--pc-shadow-float);font:400 13px/1.5 var(--font-sans);text-align:left;white-space:normal;pointer-events:auto}.ants-embed .app--embedded{display:block;min-height:0}.ants-embed .app--embedded>.main{max-width:none;margin:0;padding:0}.embedded-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:18px}.embedded-toolbar__wallet{margin-left:auto;min-width:0}
|