[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-tres-tx-story":3,"mdc--8no1xb-key":37,"related-org-anthropic-tres-tx-story":2206,"related-repo-anthropic-tres-tx-story":2395},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"tres-tx-story","analyze blockchain transactions in TRES Finance","Analyze a blockchain transaction by its hash using TRES Finance MCP and generate a visual flow diagram showing all asset movements, followed by a plain-language explanation of what happened. Use this skill whenever the user provides a transaction hash and asks to \"analyze\", \"explain\", \"visualize\", \"diagram\", \"show me what happened in\", or \"tell the story of\" a transaction. Also trigger when the user pastes a tx hash (long hex string starting with 0x) and asks anything about it. Always use this skill for transaction hash analysis — do not attempt to answer from memory alone.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,23],{"name":14,"slug":15,"type":16},"Data Visualization","data-visualization","tag",{"name":18,"slug":19,"type":16},"Finance","finance",{"name":21,"slug":22,"type":16},"Web3","web3",{"name":24,"slug":25,"type":16},"Ethereum","ethereum",294,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community","2026-07-02T07:37:52.758329",null,69,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Community plugin marketplace for Claude Cowork and Claude Code. Read-only mirror — submit plugins at clau.de\u002Fplugin-directory-submission.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-plugins-community\u002Ftree\u002FHEAD\u002Ftres-finance-plugin\u002Fskills\u002Ftres-tx-story","---\nname: tres-tx-story\ndescription: >\n  Analyze a blockchain transaction by its hash using TRES Finance MCP and generate\n  a visual flow diagram showing all asset movements, followed by a plain-language\n  explanation of what happened. Use this skill whenever the user provides a\n  transaction hash and asks to \"analyze\", \"explain\", \"visualize\", \"diagram\",\n  \"show me what happened in\", or \"tell the story of\" a transaction. Also trigger\n  when the user pastes a tx hash (long hex string starting with 0x) and asks\n  anything about it. Always use this skill for transaction hash analysis — do not\n  attempt to answer from memory alone.\n---\n\n# TRES Transaction Story\n\nFetch a transaction by hash from TRES Finance, render a flow diagram of all asset\nmovements, and explain in plain English what happened.\n\n## MCP Server\nAll calls use the `TRES Finance MCP` server (URL: `https:\u002F\u002Fai.tres.finance\u002Fmcp`).\n\n---\n\n## Step 1 — Authenticate\nCall `get_viewer` (no arguments) to verify the session.\n\n---\n\n## Step 2 — Fetch the Transaction\n\nQuery the transaction using its hash as the `identifier`:\n\n```graphql\nquery GetTransactionByHash($hash: String!, $currency: String) {\n  transaction(identifier: $hash, currency: $currency, limit: 1) {\n    results {\n      id\n      identifier\n      platform\n      timestamp\n      success\n      decodedFunctionName\n      methodId\n      fromAddress { identifier displayName isInternal customAccountName }\n      toAddress   { identifier displayName isInternal customAccountName }\n      contract    { identifier contractName protocols applications }\n      classification { activity action functionName }\n      ledgerSummary\n      applications\n      protocols\n      internalAccounts { id name }\n      children {\n        id\n        amount\n        balanceFactor\n        platform\n        type\n        fiatValue\n        nonTaxableType\n        isInternalTransfer\n        financialActionGroup\n        belongsTo { id name identifier }\n        sender    { identifier displayName isInternal customAccountName }\n        recipient { identifier displayName isInternal customAccountName }\n        asset {\n          identifier\n          symbol: key\n          assetClass { id symbol verificationStatus }\n        }\n      }\n    }\n  }\n}\n```\n\nVariables: `{ \"hash\": \"\u003Cuser_provided_hash>\", \"currency\": \"usd\" }`\n\n> **Fallback**: If `identifier` returns 0 results, retry with `identifier_Contains`\n> using the last 20 characters of the hash. Hashes on some chains may be stored\n> without the `0x` prefix — strip it and retry if still empty.\n\n---\n\n## Step 3 — Parse the Data\n\nFrom the result, extract:\n\n| Field | Purpose |\n|---|---|\n| `identifier` | The tx hash |\n| `platform` | Blockchain (ETHEREUM, SOLANA, etc.) |\n| `timestamp` | Date\u002Ftime |\n| `success` | Did it succeed? |\n| `decodedFunctionName` | What smart-contract function was called |\n| `fromAddress` \u002F `toAddress` | Top-level sender → receiver |\n| `contract.contractName` | Smart contract involved (if any) |\n| `classification.activity` + `.action` | TRES classification label |\n| `children[]` | Each sub-transaction (individual token movement) |\n\nFor each child sub-transaction, extract:\n- `asset.assetClass.symbol` — the token symbol (e.g. ETH, USDC)\n- `amount` — quantity moved\n- `fiatValue` — USD equivalent\n- `balanceFactor` — `1` = inflow, `-1` = outflow\n- `belongsTo.name` — which internal wallet this belongs to\n- `sender.identifier` \u002F `recipient.identifier` — counterparties\n- `type` — GAS, TOKEN_TRANSFER, etc.\n\n---\n\n## Step 4 — Render the Diagram\n\nUse the `show_widget` tool (Visualizer) to render an HTML widget containing an inline SVG diagram.\n\n---\n\n### PRE-RENDER CHECKLIST — do this before writing a single SVG element\n\n**A. Prepare all label strings first**\n\nFor every arrow label (token amount + symbol), apply these formatting rules:\n1. Format the amount:\n   - amount ≥ 1,000,000 → `\"1.2M\"` style (1 decimal)\n   - amount ≥ 1,000 → `\"264K\"` or `\"12,233\"` (comma-separated integer)\n   - amount ≥ 1 → round to 2 decimal places max\n   - amount \u003C 1 → keep up to 4 significant figures (e.g. `\"0.033\"`)\n2. Truncate the symbol:\n   - symbol ≤ 6 chars → use as-is (ETH, USDC, DAI, CRV)\n   - symbol 7–10 chars → use as-is only if the full label fits (see step 3)\n   - symbol > 10 chars OR contains `+` OR is a compound LP token → replace with `\"LP tokens\"`\n3. Measure the full label: `label = amount + \" \" + symbol`. Count characters. Multiply by 7. That's the pixel width.\n4. The available space for a label = the arrow's x-span minus 20px safety margin.\n   - Left gap (wallet→contract): x goes from 136 to 248 → span = 112px → max label = 13 chars\n   - Right gap (contract→wallet): x goes from 408 to 504 → span = 96px → max label = 11 chars\n5. If `label_px_width > available_space`, shorten further: abbreviate amount to 1 sig fig, or use symbol-only if still too wide.\n\n**B. Count the arrows and calculate SVG height**\n\n- Count non-gas arrows (outflows + inflows). Call this `N`.\n- Each arrow row occupies 34px of vertical space.\n- Base node centre Y = 50 + (N × 34) \u002F 2 (so arrows fan symmetrically around the node centre).\n- Gas arrow hangs 60px below the bottom of the left wallet circle.\n- SVG height = node_centre_y + node_radius + 80 (gas arrow + label + padding).\n- Minimum SVG height = 230px.\n\n**C. Lay out arrow Y positions**\n\n- Space arrows evenly, 34px apart, centred on `node_centre_y`.\n- First arrow y = node_centre_y - ((N-1) × 34) \u002F 2\n- Each subsequent arrow y += 34\n- Outflow arrows (wallet → contract) use left half of diagram.\n- Inflow arrows (contract → wallet) use right half.\n- If there is exactly 1 inflow and multiple outflows, centre the inflow arrow at `node_centre_y`.\n\n---\n\n### Fixed node positions (do not change these)\n\n```\nViewBox width: 640\nLeft wallet circle:    cx=90,  cy=node_centre_y, r=46\nContract rect:         x=248,  y=node_centre_y-55, width=160, height=110, rx=12\nRight wallet circle:   cx=550, cy=node_centre_y, r=46\n\nArrow x coordinates:\n  Outflow (left→centre): x1=136, x2=246   midpoint_x=191\n  Inflow (centre→right): x1=410, x2=504   midpoint_x=457\n  Gas (downward):        x1=x2=90, y1=node_centre_y+46\n```\n\nThese x values are derived from the node edges and must not be adjusted. They guarantee labels always fall in the clear gap between nodes.\n\n---\n\n### Arrow label placement rules (no exceptions)\n\n```\nLabel x = midpoint_x of arrow (191 for outflows, 457 for inflows)\nLabel y = arrow_y - 12\ntext-anchor = \"middle\"\nfont-size = 10.5px\nfont-weight = 500\n```\n\n**Never** place a label at the same y as another label. If two arrows are only 34px apart, their labels (at y-12) are 34px apart — that is sufficient. Never stack two labels at the same y coordinate.\n\n**Never** use `text-anchor=\"start\"` for labels that fall near node edges — always `\"middle\"` anchored at the midpoint x.\n\n---\n\n### Node internal text rules\n\nWallet circle (r=46, so usable text band = ±36px from centre):\n```\nLine 1 (name):    y = cy - 8,  font-size=11, font-weight=500\nLine 2 (address): y = cy + 7,  font-size=9.5, font-family=monospace\nLine 3 (role):    y = cy + 21, font-size=9\n```\nThree lines maximum. Each line must fit within the circle width (chord at that y ≈ 80px = ~11 chars at 9px, ~9 chars at 10px). Truncate wallet names longer than 10 chars.\n\nContract rect (width=160, height=110):\n```\nLine 1 (name):     y = rect_top + 28, font-size=11, font-weight=500\nLine 2 (subname):  y = rect_top + 44, font-size=10\nLine 3 (function): y = rect_top + 60, font-size=9.5\nLine 4 (address):  y = rect_top + 76, font-size=9, font-family=monospace\nLine 5 (type):     y = rect_top + 92, font-size=9\n```\nMaximum 5 lines. Each line centred at x=328. Lines must fit within 152px (160 - 8px padding each side) → max ~21 chars at 9px. Truncate anything longer.\n\n---\n\n### Gas arrow rules\n\n- Always vertical, pointing down from the bottom of the left wallet circle.\n- x1 = x2 = 90 (same as wallet cx)\n- y1 = node_centre_y + 46 + 2 (2px gap below circle edge)\n- y2 = y1 + 55\n- Label: placed to the RIGHT of the line — `x=98, y=(y1+y2)\u002F2, text-anchor=\"start\"`\n- Below the arrow tip, add a small pill: rect with label \"network fee\", centred at x=90.\n- Gas label max length: `\"0.033 ETH gas\"` = 13 chars. Always fits.\n\n---\n\n### Color coding\n\n| Element | Fill | Stroke\u002FColor |\n|---|---|---|\n| Internal wallet (sender) | `#EAF3DE` | `#639922` |\n| Internal wallet (receiver) | `#dcfce7` | `#16a34a` |\n| Smart contract | `#EEEDFE` | `#7F77DD` |\n| Outflow arrow | — | `#dc2626` |\n| Inflow arrow | — | `#16a34a` |\n| Gas arrow | — | `#ea580c` |\n| Outflow label text | — | `#dc2626` |\n| Inflow label text | — | `#16a34a` |\n| Gas label text | — | `#ea580c` |\n\n---\n\n### Animation\n\n```css\n@keyframes flowDash { to { stroke-dashoffset: -40; } }\n@keyframes fadeUp   { from { opacity:0; transform:translateY(14px); } to { opacity:1; transform:translateY(0); } }\n\nOutflow arrows: stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nInflow arrows:  stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nGas arrow:      stroke-dasharray:4 4; animation: flowDash 1.7s linear infinite;\nCards\u002Fsections: opacity:0; animation: fadeUp .5s ease forwards; (staggered delays)\n```\n\n---\n\n### Header\n\nSingle line of plain text, no pill badges:\n```\n[hash-pill: 0xABCD...1234]   Chain · Date · function() · ✓ success\n```\nHash pill style: monospace, 11px, bg-secondary, border, border-radius 6px, padding 4px 10px.\nEverything else: 12px, color-text-secondary. Success mark: color-text-success, font-weight 500.\n\n---\n\n### Stat cards (below diagram)\n\n3-column grid, one card per: total sent (red), total received (green), gas paid (orange).\nFormat values as: `−$272,910` \u002F `264K LP` \u002F `0.127 ETH`. Keep under 12 chars.\nSublabel: 11px, muted, shows token breakdown if multiple assets.\n\n---\n\n### Footer route card\n\n`[function() badge]  via ContractName  · [protocol tag] [protocol tag]  [Explain X ↗ button]`\nFunction badge: yellow bg `#FEF9C3`, text `#854d0e`, border-radius 6px.\nProtocol tags: bg-secondary, border, border-radius 4px, 11px.\nButton: calls `sendPrompt('How does [ContractName\u002Fprotocol] work?')`\n\n---\n\n## Step 5 — Plain-Language Explanation\n\nAfter the diagram, write a short explanation (3–6 sentences) in simple, non-technical\nlanguage. Cover:\n\n1. **What happened**: The core action (swap, transfer, deposit, stake, etc.)\n2. **Who was involved**: Wallets and contracts in plain terms\n3. **What moved**: Which assets changed hands and in what direction\n4. **Net result**: What the org's wallets ended up with \u002F paid out\n\n**Tone**: Imagine explaining to someone who understands crypto but not accounting.\nAvoid jargon like \"balanceFactor\", \"sub-transaction\", \"FIFO\". Say \"sent\", \"received\",\n\"paid as gas\", \"swapped X for Y\", etc.\n\n**Example**:\n> This was a token swap on Uniswap. Your wallet (Main Treasury) sent 1,000 USDC to\n> the Uniswap V3 router contract, which in turn sent back 0.412 ETH (worth ~$1,020).\n> You also paid 0.003 ETH (~$7.40) in gas fees to the Ethereum network.\n> Net result: you traded stablecoins for ETH at roughly $2,476 per ETH.\n\n---\n\n## Error Handling\n\n| Situation | Action |\n|---|---|\n| Transaction not found | Tell user the hash wasn't found in TRES. Ask if they want to check the hash or try a different one. |\n| No children (empty sub-txs) | Show header only; note \"No asset movements recorded — the tx may be a failed or contract-only interaction.\" |\n| Missing fiat values | Show amounts without USD; note \"USD value unavailable for some assets.\" |\n| Auth failure | Tell user to check TRES connection and re-authenticate. |\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,57,64,86,90,96,109,112,118,131,504,515,553,556,562,567,763,768,873,876,882,895,898,905,913,918,1063,1071,1112,1120,1166,1169,1175,1185,1190,1193,1199,1208,1218,1243,1246,1252,1257,1266,1271,1276,1285,1290,1293,1299,1351,1354,1360,1588,1591,1597,1919,1922,1928,1933,1942,1947,1950,1956,1983,1986,1992,2025,2028,2034,2039,2082,2092,2101,2117,2120,2126,2200],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"tres-transaction-story",[48],{"type":49,"value":50},"text","TRES Transaction Story",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Fetch a transaction by hash from TRES Finance, render a flow diagram of all asset\nmovements, and explain in plain English what happened.",{"type":43,"tag":58,"props":59,"children":61},"h2",{"id":60},"mcp-server",[62],{"type":49,"value":63},"MCP Server",{"type":43,"tag":52,"props":65,"children":66},{},[67,69,76,78,84],{"type":49,"value":68},"All calls use the ",{"type":43,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":49,"value":75},"TRES Finance MCP",{"type":49,"value":77}," server (URL: ",{"type":43,"tag":70,"props":79,"children":81},{"className":80},[],[82],{"type":49,"value":83},"https:\u002F\u002Fai.tres.finance\u002Fmcp",{"type":49,"value":85},").",{"type":43,"tag":87,"props":88,"children":89},"hr",{},[],{"type":43,"tag":58,"props":91,"children":93},{"id":92},"step-1-authenticate",[94],{"type":49,"value":95},"Step 1 — Authenticate",{"type":43,"tag":52,"props":97,"children":98},{},[99,101,107],{"type":49,"value":100},"Call ",{"type":43,"tag":70,"props":102,"children":104},{"className":103},[],[105],{"type":49,"value":106},"get_viewer",{"type":49,"value":108}," (no arguments) to verify the session.",{"type":43,"tag":87,"props":110,"children":111},{},[],{"type":43,"tag":58,"props":113,"children":115},{"id":114},"step-2-fetch-the-transaction",[116],{"type":49,"value":117},"Step 2 — Fetch the Transaction",{"type":43,"tag":52,"props":119,"children":120},{},[121,123,129],{"type":49,"value":122},"Query the transaction using its hash as the ",{"type":43,"tag":70,"props":124,"children":126},{"className":125},[],[127],{"type":49,"value":128},"identifier",{"type":49,"value":130},":",{"type":43,"tag":132,"props":133,"children":138},"pre",{"className":134,"code":135,"language":136,"meta":137,"style":137},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","query GetTransactionByHash($hash: String!, $currency: String) {\n  transaction(identifier: $hash, currency: $currency, limit: 1) {\n    results {\n      id\n      identifier\n      platform\n      timestamp\n      success\n      decodedFunctionName\n      methodId\n      fromAddress { identifier displayName isInternal customAccountName }\n      toAddress   { identifier displayName isInternal customAccountName }\n      contract    { identifier contractName protocols applications }\n      classification { activity action functionName }\n      ledgerSummary\n      applications\n      protocols\n      internalAccounts { id name }\n      children {\n        id\n        amount\n        balanceFactor\n        platform\n        type\n        fiatValue\n        nonTaxableType\n        isInternalTransfer\n        financialActionGroup\n        belongsTo { id name identifier }\n        sender    { identifier displayName isInternal customAccountName }\n        recipient { identifier displayName isInternal customAccountName }\n        asset {\n          identifier\n          symbol: key\n          assetClass { id symbol verificationStatus }\n        }\n      }\n    }\n  }\n}\n","graphql","",[139],{"type":43,"tag":70,"props":140,"children":141},{"__ignoreMap":137},[142,153,162,171,180,189,198,207,216,225,234,243,252,261,270,279,288,297,306,315,324,333,342,351,360,369,378,387,396,405,414,423,432,441,450,459,468,477,486,495],{"type":43,"tag":143,"props":144,"children":147},"span",{"class":145,"line":146},"line",1,[148],{"type":43,"tag":143,"props":149,"children":150},{},[151],{"type":49,"value":152},"query GetTransactionByHash($hash: String!, $currency: String) {\n",{"type":43,"tag":143,"props":154,"children":156},{"class":145,"line":155},2,[157],{"type":43,"tag":143,"props":158,"children":159},{},[160],{"type":49,"value":161},"  transaction(identifier: $hash, currency: $currency, limit: 1) {\n",{"type":43,"tag":143,"props":163,"children":165},{"class":145,"line":164},3,[166],{"type":43,"tag":143,"props":167,"children":168},{},[169],{"type":49,"value":170},"    results {\n",{"type":43,"tag":143,"props":172,"children":174},{"class":145,"line":173},4,[175],{"type":43,"tag":143,"props":176,"children":177},{},[178],{"type":49,"value":179},"      id\n",{"type":43,"tag":143,"props":181,"children":183},{"class":145,"line":182},5,[184],{"type":43,"tag":143,"props":185,"children":186},{},[187],{"type":49,"value":188},"      identifier\n",{"type":43,"tag":143,"props":190,"children":192},{"class":145,"line":191},6,[193],{"type":43,"tag":143,"props":194,"children":195},{},[196],{"type":49,"value":197},"      platform\n",{"type":43,"tag":143,"props":199,"children":201},{"class":145,"line":200},7,[202],{"type":43,"tag":143,"props":203,"children":204},{},[205],{"type":49,"value":206},"      timestamp\n",{"type":43,"tag":143,"props":208,"children":210},{"class":145,"line":209},8,[211],{"type":43,"tag":143,"props":212,"children":213},{},[214],{"type":49,"value":215},"      success\n",{"type":43,"tag":143,"props":217,"children":219},{"class":145,"line":218},9,[220],{"type":43,"tag":143,"props":221,"children":222},{},[223],{"type":49,"value":224},"      decodedFunctionName\n",{"type":43,"tag":143,"props":226,"children":228},{"class":145,"line":227},10,[229],{"type":43,"tag":143,"props":230,"children":231},{},[232],{"type":49,"value":233},"      methodId\n",{"type":43,"tag":143,"props":235,"children":237},{"class":145,"line":236},11,[238],{"type":43,"tag":143,"props":239,"children":240},{},[241],{"type":49,"value":242},"      fromAddress { identifier displayName isInternal customAccountName }\n",{"type":43,"tag":143,"props":244,"children":246},{"class":145,"line":245},12,[247],{"type":43,"tag":143,"props":248,"children":249},{},[250],{"type":49,"value":251},"      toAddress   { identifier displayName isInternal customAccountName }\n",{"type":43,"tag":143,"props":253,"children":255},{"class":145,"line":254},13,[256],{"type":43,"tag":143,"props":257,"children":258},{},[259],{"type":49,"value":260},"      contract    { identifier contractName protocols applications }\n",{"type":43,"tag":143,"props":262,"children":264},{"class":145,"line":263},14,[265],{"type":43,"tag":143,"props":266,"children":267},{},[268],{"type":49,"value":269},"      classification { activity action functionName }\n",{"type":43,"tag":143,"props":271,"children":273},{"class":145,"line":272},15,[274],{"type":43,"tag":143,"props":275,"children":276},{},[277],{"type":49,"value":278},"      ledgerSummary\n",{"type":43,"tag":143,"props":280,"children":282},{"class":145,"line":281},16,[283],{"type":43,"tag":143,"props":284,"children":285},{},[286],{"type":49,"value":287},"      applications\n",{"type":43,"tag":143,"props":289,"children":291},{"class":145,"line":290},17,[292],{"type":43,"tag":143,"props":293,"children":294},{},[295],{"type":49,"value":296},"      protocols\n",{"type":43,"tag":143,"props":298,"children":300},{"class":145,"line":299},18,[301],{"type":43,"tag":143,"props":302,"children":303},{},[304],{"type":49,"value":305},"      internalAccounts { id name }\n",{"type":43,"tag":143,"props":307,"children":309},{"class":145,"line":308},19,[310],{"type":43,"tag":143,"props":311,"children":312},{},[313],{"type":49,"value":314},"      children {\n",{"type":43,"tag":143,"props":316,"children":318},{"class":145,"line":317},20,[319],{"type":43,"tag":143,"props":320,"children":321},{},[322],{"type":49,"value":323},"        id\n",{"type":43,"tag":143,"props":325,"children":327},{"class":145,"line":326},21,[328],{"type":43,"tag":143,"props":329,"children":330},{},[331],{"type":49,"value":332},"        amount\n",{"type":43,"tag":143,"props":334,"children":336},{"class":145,"line":335},22,[337],{"type":43,"tag":143,"props":338,"children":339},{},[340],{"type":49,"value":341},"        balanceFactor\n",{"type":43,"tag":143,"props":343,"children":345},{"class":145,"line":344},23,[346],{"type":43,"tag":143,"props":347,"children":348},{},[349],{"type":49,"value":350},"        platform\n",{"type":43,"tag":143,"props":352,"children":354},{"class":145,"line":353},24,[355],{"type":43,"tag":143,"props":356,"children":357},{},[358],{"type":49,"value":359},"        type\n",{"type":43,"tag":143,"props":361,"children":363},{"class":145,"line":362},25,[364],{"type":43,"tag":143,"props":365,"children":366},{},[367],{"type":49,"value":368},"        fiatValue\n",{"type":43,"tag":143,"props":370,"children":372},{"class":145,"line":371},26,[373],{"type":43,"tag":143,"props":374,"children":375},{},[376],{"type":49,"value":377},"        nonTaxableType\n",{"type":43,"tag":143,"props":379,"children":381},{"class":145,"line":380},27,[382],{"type":43,"tag":143,"props":383,"children":384},{},[385],{"type":49,"value":386},"        isInternalTransfer\n",{"type":43,"tag":143,"props":388,"children":390},{"class":145,"line":389},28,[391],{"type":43,"tag":143,"props":392,"children":393},{},[394],{"type":49,"value":395},"        financialActionGroup\n",{"type":43,"tag":143,"props":397,"children":399},{"class":145,"line":398},29,[400],{"type":43,"tag":143,"props":401,"children":402},{},[403],{"type":49,"value":404},"        belongsTo { id name identifier }\n",{"type":43,"tag":143,"props":406,"children":408},{"class":145,"line":407},30,[409],{"type":43,"tag":143,"props":410,"children":411},{},[412],{"type":49,"value":413},"        sender    { identifier displayName isInternal customAccountName }\n",{"type":43,"tag":143,"props":415,"children":417},{"class":145,"line":416},31,[418],{"type":43,"tag":143,"props":419,"children":420},{},[421],{"type":49,"value":422},"        recipient { identifier displayName isInternal customAccountName }\n",{"type":43,"tag":143,"props":424,"children":426},{"class":145,"line":425},32,[427],{"type":43,"tag":143,"props":428,"children":429},{},[430],{"type":49,"value":431},"        asset {\n",{"type":43,"tag":143,"props":433,"children":435},{"class":145,"line":434},33,[436],{"type":43,"tag":143,"props":437,"children":438},{},[439],{"type":49,"value":440},"          identifier\n",{"type":43,"tag":143,"props":442,"children":444},{"class":145,"line":443},34,[445],{"type":43,"tag":143,"props":446,"children":447},{},[448],{"type":49,"value":449},"          symbol: key\n",{"type":43,"tag":143,"props":451,"children":453},{"class":145,"line":452},35,[454],{"type":43,"tag":143,"props":455,"children":456},{},[457],{"type":49,"value":458},"          assetClass { id symbol verificationStatus }\n",{"type":43,"tag":143,"props":460,"children":462},{"class":145,"line":461},36,[463],{"type":43,"tag":143,"props":464,"children":465},{},[466],{"type":49,"value":467},"        }\n",{"type":43,"tag":143,"props":469,"children":471},{"class":145,"line":470},37,[472],{"type":43,"tag":143,"props":473,"children":474},{},[475],{"type":49,"value":476},"      }\n",{"type":43,"tag":143,"props":478,"children":480},{"class":145,"line":479},38,[481],{"type":43,"tag":143,"props":482,"children":483},{},[484],{"type":49,"value":485},"    }\n",{"type":43,"tag":143,"props":487,"children":489},{"class":145,"line":488},39,[490],{"type":43,"tag":143,"props":491,"children":492},{},[493],{"type":49,"value":494},"  }\n",{"type":43,"tag":143,"props":496,"children":498},{"class":145,"line":497},40,[499],{"type":43,"tag":143,"props":500,"children":501},{},[502],{"type":49,"value":503},"}\n",{"type":43,"tag":52,"props":505,"children":506},{},[507,509],{"type":49,"value":508},"Variables: ",{"type":43,"tag":70,"props":510,"children":512},{"className":511},[],[513],{"type":49,"value":514},"{ \"hash\": \"\u003Cuser_provided_hash>\", \"currency\": \"usd\" }",{"type":43,"tag":516,"props":517,"children":518},"blockquote",{},[519],{"type":43,"tag":52,"props":520,"children":521},{},[522,528,530,535,537,543,545,551],{"type":43,"tag":523,"props":524,"children":525},"strong",{},[526],{"type":49,"value":527},"Fallback",{"type":49,"value":529},": If ",{"type":43,"tag":70,"props":531,"children":533},{"className":532},[],[534],{"type":49,"value":128},{"type":49,"value":536}," returns 0 results, retry with ",{"type":43,"tag":70,"props":538,"children":540},{"className":539},[],[541],{"type":49,"value":542},"identifier_Contains",{"type":49,"value":544},"\nusing the last 20 characters of the hash. Hashes on some chains may be stored\nwithout the ",{"type":43,"tag":70,"props":546,"children":548},{"className":547},[],[549],{"type":49,"value":550},"0x",{"type":49,"value":552}," prefix — strip it and retry if still empty.",{"type":43,"tag":87,"props":554,"children":555},{},[],{"type":43,"tag":58,"props":557,"children":559},{"id":558},"step-3-parse-the-data",[560],{"type":49,"value":561},"Step 3 — Parse the Data",{"type":43,"tag":52,"props":563,"children":564},{},[565],{"type":49,"value":566},"From the result, extract:",{"type":43,"tag":568,"props":569,"children":570},"table",{},[571,590],{"type":43,"tag":572,"props":573,"children":574},"thead",{},[575],{"type":43,"tag":576,"props":577,"children":578},"tr",{},[579,585],{"type":43,"tag":580,"props":581,"children":582},"th",{},[583],{"type":49,"value":584},"Field",{"type":43,"tag":580,"props":586,"children":587},{},[588],{"type":49,"value":589},"Purpose",{"type":43,"tag":591,"props":592,"children":593},"tbody",{},[594,611,628,645,662,679,704,721,746],{"type":43,"tag":576,"props":595,"children":596},{},[597,606],{"type":43,"tag":598,"props":599,"children":600},"td",{},[601],{"type":43,"tag":70,"props":602,"children":604},{"className":603},[],[605],{"type":49,"value":128},{"type":43,"tag":598,"props":607,"children":608},{},[609],{"type":49,"value":610},"The tx hash",{"type":43,"tag":576,"props":612,"children":613},{},[614,623],{"type":43,"tag":598,"props":615,"children":616},{},[617],{"type":43,"tag":70,"props":618,"children":620},{"className":619},[],[621],{"type":49,"value":622},"platform",{"type":43,"tag":598,"props":624,"children":625},{},[626],{"type":49,"value":627},"Blockchain (ETHEREUM, SOLANA, etc.)",{"type":43,"tag":576,"props":629,"children":630},{},[631,640],{"type":43,"tag":598,"props":632,"children":633},{},[634],{"type":43,"tag":70,"props":635,"children":637},{"className":636},[],[638],{"type":49,"value":639},"timestamp",{"type":43,"tag":598,"props":641,"children":642},{},[643],{"type":49,"value":644},"Date\u002Ftime",{"type":43,"tag":576,"props":646,"children":647},{},[648,657],{"type":43,"tag":598,"props":649,"children":650},{},[651],{"type":43,"tag":70,"props":652,"children":654},{"className":653},[],[655],{"type":49,"value":656},"success",{"type":43,"tag":598,"props":658,"children":659},{},[660],{"type":49,"value":661},"Did it succeed?",{"type":43,"tag":576,"props":663,"children":664},{},[665,674],{"type":43,"tag":598,"props":666,"children":667},{},[668],{"type":43,"tag":70,"props":669,"children":671},{"className":670},[],[672],{"type":49,"value":673},"decodedFunctionName",{"type":43,"tag":598,"props":675,"children":676},{},[677],{"type":49,"value":678},"What smart-contract function was called",{"type":43,"tag":576,"props":680,"children":681},{},[682,699],{"type":43,"tag":598,"props":683,"children":684},{},[685,691,693],{"type":43,"tag":70,"props":686,"children":688},{"className":687},[],[689],{"type":49,"value":690},"fromAddress",{"type":49,"value":692}," \u002F ",{"type":43,"tag":70,"props":694,"children":696},{"className":695},[],[697],{"type":49,"value":698},"toAddress",{"type":43,"tag":598,"props":700,"children":701},{},[702],{"type":49,"value":703},"Top-level sender → receiver",{"type":43,"tag":576,"props":705,"children":706},{},[707,716],{"type":43,"tag":598,"props":708,"children":709},{},[710],{"type":43,"tag":70,"props":711,"children":713},{"className":712},[],[714],{"type":49,"value":715},"contract.contractName",{"type":43,"tag":598,"props":717,"children":718},{},[719],{"type":49,"value":720},"Smart contract involved (if any)",{"type":43,"tag":576,"props":722,"children":723},{},[724,741],{"type":43,"tag":598,"props":725,"children":726},{},[727,733,735],{"type":43,"tag":70,"props":728,"children":730},{"className":729},[],[731],{"type":49,"value":732},"classification.activity",{"type":49,"value":734}," + ",{"type":43,"tag":70,"props":736,"children":738},{"className":737},[],[739],{"type":49,"value":740},".action",{"type":43,"tag":598,"props":742,"children":743},{},[744],{"type":49,"value":745},"TRES classification label",{"type":43,"tag":576,"props":747,"children":748},{},[749,758],{"type":43,"tag":598,"props":750,"children":751},{},[752],{"type":43,"tag":70,"props":753,"children":755},{"className":754},[],[756],{"type":49,"value":757},"children[]",{"type":43,"tag":598,"props":759,"children":760},{},[761],{"type":49,"value":762},"Each sub-transaction (individual token movement)",{"type":43,"tag":52,"props":764,"children":765},{},[766],{"type":49,"value":767},"For each child sub-transaction, extract:",{"type":43,"tag":769,"props":770,"children":771},"ul",{},[772,784,795,806,833,844,862],{"type":43,"tag":773,"props":774,"children":775},"li",{},[776,782],{"type":43,"tag":70,"props":777,"children":779},{"className":778},[],[780],{"type":49,"value":781},"asset.assetClass.symbol",{"type":49,"value":783}," — the token symbol (e.g. ETH, USDC)",{"type":43,"tag":773,"props":785,"children":786},{},[787,793],{"type":43,"tag":70,"props":788,"children":790},{"className":789},[],[791],{"type":49,"value":792},"amount",{"type":49,"value":794}," — quantity moved",{"type":43,"tag":773,"props":796,"children":797},{},[798,804],{"type":43,"tag":70,"props":799,"children":801},{"className":800},[],[802],{"type":49,"value":803},"fiatValue",{"type":49,"value":805}," — USD equivalent",{"type":43,"tag":773,"props":807,"children":808},{},[809,815,817,823,825,831],{"type":43,"tag":70,"props":810,"children":812},{"className":811},[],[813],{"type":49,"value":814},"balanceFactor",{"type":49,"value":816}," — ",{"type":43,"tag":70,"props":818,"children":820},{"className":819},[],[821],{"type":49,"value":822},"1",{"type":49,"value":824}," = inflow, ",{"type":43,"tag":70,"props":826,"children":828},{"className":827},[],[829],{"type":49,"value":830},"-1",{"type":49,"value":832}," = outflow",{"type":43,"tag":773,"props":834,"children":835},{},[836,842],{"type":43,"tag":70,"props":837,"children":839},{"className":838},[],[840],{"type":49,"value":841},"belongsTo.name",{"type":49,"value":843}," — which internal wallet this belongs to",{"type":43,"tag":773,"props":845,"children":846},{},[847,853,854,860],{"type":43,"tag":70,"props":848,"children":850},{"className":849},[],[851],{"type":49,"value":852},"sender.identifier",{"type":49,"value":692},{"type":43,"tag":70,"props":855,"children":857},{"className":856},[],[858],{"type":49,"value":859},"recipient.identifier",{"type":49,"value":861}," — counterparties",{"type":43,"tag":773,"props":863,"children":864},{},[865,871],{"type":43,"tag":70,"props":866,"children":868},{"className":867},[],[869],{"type":49,"value":870},"type",{"type":49,"value":872}," — GAS, TOKEN_TRANSFER, etc.",{"type":43,"tag":87,"props":874,"children":875},{},[],{"type":43,"tag":58,"props":877,"children":879},{"id":878},"step-4-render-the-diagram",[880],{"type":49,"value":881},"Step 4 — Render the Diagram",{"type":43,"tag":52,"props":883,"children":884},{},[885,887,893],{"type":49,"value":886},"Use the ",{"type":43,"tag":70,"props":888,"children":890},{"className":889},[],[891],{"type":49,"value":892},"show_widget",{"type":49,"value":894}," tool (Visualizer) to render an HTML widget containing an inline SVG diagram.",{"type":43,"tag":87,"props":896,"children":897},{},[],{"type":43,"tag":899,"props":900,"children":902},"h3",{"id":901},"pre-render-checklist-do-this-before-writing-a-single-svg-element",[903],{"type":49,"value":904},"PRE-RENDER CHECKLIST — do this before writing a single SVG element",{"type":43,"tag":52,"props":906,"children":907},{},[908],{"type":43,"tag":523,"props":909,"children":910},{},[911],{"type":49,"value":912},"A. Prepare all label strings first",{"type":43,"tag":52,"props":914,"children":915},{},[916],{"type":49,"value":917},"For every arrow label (token amount + symbol), apply these formatting rules:",{"type":43,"tag":919,"props":920,"children":921},"ol",{},[922,982,1019,1032,1050],{"type":43,"tag":773,"props":923,"children":924},{},[925,927],{"type":49,"value":926},"Format the amount:\n",{"type":43,"tag":769,"props":928,"children":929},{},[930,943,964,969],{"type":43,"tag":773,"props":931,"children":932},{},[933,935,941],{"type":49,"value":934},"amount ≥ 1,000,000 → ",{"type":43,"tag":70,"props":936,"children":938},{"className":937},[],[939],{"type":49,"value":940},"\"1.2M\"",{"type":49,"value":942}," style (1 decimal)",{"type":43,"tag":773,"props":944,"children":945},{},[946,948,954,956,962],{"type":49,"value":947},"amount ≥ 1,000 → ",{"type":43,"tag":70,"props":949,"children":951},{"className":950},[],[952],{"type":49,"value":953},"\"264K\"",{"type":49,"value":955}," or ",{"type":43,"tag":70,"props":957,"children":959},{"className":958},[],[960],{"type":49,"value":961},"\"12,233\"",{"type":49,"value":963}," (comma-separated integer)",{"type":43,"tag":773,"props":965,"children":966},{},[967],{"type":49,"value":968},"amount ≥ 1 → round to 2 decimal places max",{"type":43,"tag":773,"props":970,"children":971},{},[972,974,980],{"type":49,"value":973},"amount \u003C 1 → keep up to 4 significant figures (e.g. ",{"type":43,"tag":70,"props":975,"children":977},{"className":976},[],[978],{"type":49,"value":979},"\"0.033\"",{"type":49,"value":981},")",{"type":43,"tag":773,"props":983,"children":984},{},[985,987],{"type":49,"value":986},"Truncate the symbol:\n",{"type":43,"tag":769,"props":988,"children":989},{},[990,995,1000],{"type":43,"tag":773,"props":991,"children":992},{},[993],{"type":49,"value":994},"symbol ≤ 6 chars → use as-is (ETH, USDC, DAI, CRV)",{"type":43,"tag":773,"props":996,"children":997},{},[998],{"type":49,"value":999},"symbol 7–10 chars → use as-is only if the full label fits (see step 3)",{"type":43,"tag":773,"props":1001,"children":1002},{},[1003,1005,1011,1013],{"type":49,"value":1004},"symbol > 10 chars OR contains ",{"type":43,"tag":70,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":49,"value":1010},"+",{"type":49,"value":1012}," OR is a compound LP token → replace with ",{"type":43,"tag":70,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":49,"value":1018},"\"LP tokens\"",{"type":43,"tag":773,"props":1020,"children":1021},{},[1022,1024,1030],{"type":49,"value":1023},"Measure the full label: ",{"type":43,"tag":70,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":49,"value":1029},"label = amount + \" \" + symbol",{"type":49,"value":1031},". Count characters. Multiply by 7. That's the pixel width.",{"type":43,"tag":773,"props":1033,"children":1034},{},[1035,1037],{"type":49,"value":1036},"The available space for a label = the arrow's x-span minus 20px safety margin.\n",{"type":43,"tag":769,"props":1038,"children":1039},{},[1040,1045],{"type":43,"tag":773,"props":1041,"children":1042},{},[1043],{"type":49,"value":1044},"Left gap (wallet→contract): x goes from 136 to 248 → span = 112px → max label = 13 chars",{"type":43,"tag":773,"props":1046,"children":1047},{},[1048],{"type":49,"value":1049},"Right gap (contract→wallet): x goes from 408 to 504 → span = 96px → max label = 11 chars",{"type":43,"tag":773,"props":1051,"children":1052},{},[1053,1055,1061],{"type":49,"value":1054},"If ",{"type":43,"tag":70,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":49,"value":1060},"label_px_width > available_space",{"type":49,"value":1062},", shorten further: abbreviate amount to 1 sig fig, or use symbol-only if still too wide.",{"type":43,"tag":52,"props":1064,"children":1065},{},[1066],{"type":43,"tag":523,"props":1067,"children":1068},{},[1069],{"type":49,"value":1070},"B. Count the arrows and calculate SVG height",{"type":43,"tag":769,"props":1072,"children":1073},{},[1074,1087,1092,1097,1102,1107],{"type":43,"tag":773,"props":1075,"children":1076},{},[1077,1079,1085],{"type":49,"value":1078},"Count non-gas arrows (outflows + inflows). Call this ",{"type":43,"tag":70,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":49,"value":1084},"N",{"type":49,"value":1086},".",{"type":43,"tag":773,"props":1088,"children":1089},{},[1090],{"type":49,"value":1091},"Each arrow row occupies 34px of vertical space.",{"type":43,"tag":773,"props":1093,"children":1094},{},[1095],{"type":49,"value":1096},"Base node centre Y = 50 + (N × 34) \u002F 2 (so arrows fan symmetrically around the node centre).",{"type":43,"tag":773,"props":1098,"children":1099},{},[1100],{"type":49,"value":1101},"Gas arrow hangs 60px below the bottom of the left wallet circle.",{"type":43,"tag":773,"props":1103,"children":1104},{},[1105],{"type":49,"value":1106},"SVG height = node_centre_y + node_radius + 80 (gas arrow + label + padding).",{"type":43,"tag":773,"props":1108,"children":1109},{},[1110],{"type":49,"value":1111},"Minimum SVG height = 230px.",{"type":43,"tag":52,"props":1113,"children":1114},{},[1115],{"type":43,"tag":523,"props":1116,"children":1117},{},[1118],{"type":49,"value":1119},"C. Lay out arrow Y positions",{"type":43,"tag":769,"props":1121,"children":1122},{},[1123,1135,1140,1145,1150,1155],{"type":43,"tag":773,"props":1124,"children":1125},{},[1126,1128,1134],{"type":49,"value":1127},"Space arrows evenly, 34px apart, centred on ",{"type":43,"tag":70,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":49,"value":1133},"node_centre_y",{"type":49,"value":1086},{"type":43,"tag":773,"props":1136,"children":1137},{},[1138],{"type":49,"value":1139},"First arrow y = node_centre_y - ((N-1) × 34) \u002F 2",{"type":43,"tag":773,"props":1141,"children":1142},{},[1143],{"type":49,"value":1144},"Each subsequent arrow y += 34",{"type":43,"tag":773,"props":1146,"children":1147},{},[1148],{"type":49,"value":1149},"Outflow arrows (wallet → contract) use left half of diagram.",{"type":43,"tag":773,"props":1151,"children":1152},{},[1153],{"type":49,"value":1154},"Inflow arrows (contract → wallet) use right half.",{"type":43,"tag":773,"props":1156,"children":1157},{},[1158,1160,1165],{"type":49,"value":1159},"If there is exactly 1 inflow and multiple outflows, centre the inflow arrow at ",{"type":43,"tag":70,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":49,"value":1133},{"type":49,"value":1086},{"type":43,"tag":87,"props":1167,"children":1168},{},[],{"type":43,"tag":899,"props":1170,"children":1172},{"id":1171},"fixed-node-positions-do-not-change-these",[1173],{"type":49,"value":1174},"Fixed node positions (do not change these)",{"type":43,"tag":132,"props":1176,"children":1180},{"className":1177,"code":1179,"language":49},[1178],"language-text","ViewBox width: 640\nLeft wallet circle:    cx=90,  cy=node_centre_y, r=46\nContract rect:         x=248,  y=node_centre_y-55, width=160, height=110, rx=12\nRight wallet circle:   cx=550, cy=node_centre_y, r=46\n\nArrow x coordinates:\n  Outflow (left→centre): x1=136, x2=246   midpoint_x=191\n  Inflow (centre→right): x1=410, x2=504   midpoint_x=457\n  Gas (downward):        x1=x2=90, y1=node_centre_y+46\n",[1181],{"type":43,"tag":70,"props":1182,"children":1183},{"__ignoreMap":137},[1184],{"type":49,"value":1179},{"type":43,"tag":52,"props":1186,"children":1187},{},[1188],{"type":49,"value":1189},"These x values are derived from the node edges and must not be adjusted. They guarantee labels always fall in the clear gap between nodes.",{"type":43,"tag":87,"props":1191,"children":1192},{},[],{"type":43,"tag":899,"props":1194,"children":1196},{"id":1195},"arrow-label-placement-rules-no-exceptions",[1197],{"type":49,"value":1198},"Arrow label placement rules (no exceptions)",{"type":43,"tag":132,"props":1200,"children":1203},{"className":1201,"code":1202,"language":49},[1178],"Label x = midpoint_x of arrow (191 for outflows, 457 for inflows)\nLabel y = arrow_y - 12\ntext-anchor = \"middle\"\nfont-size = 10.5px\nfont-weight = 500\n",[1204],{"type":43,"tag":70,"props":1205,"children":1206},{"__ignoreMap":137},[1207],{"type":49,"value":1202},{"type":43,"tag":52,"props":1209,"children":1210},{},[1211,1216],{"type":43,"tag":523,"props":1212,"children":1213},{},[1214],{"type":49,"value":1215},"Never",{"type":49,"value":1217}," place a label at the same y as another label. If two arrows are only 34px apart, their labels (at y-12) are 34px apart — that is sufficient. Never stack two labels at the same y coordinate.",{"type":43,"tag":52,"props":1219,"children":1220},{},[1221,1225,1227,1233,1235,1241],{"type":43,"tag":523,"props":1222,"children":1223},{},[1224],{"type":49,"value":1215},{"type":49,"value":1226}," use ",{"type":43,"tag":70,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":49,"value":1232},"text-anchor=\"start\"",{"type":49,"value":1234}," for labels that fall near node edges — always ",{"type":43,"tag":70,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":49,"value":1240},"\"middle\"",{"type":49,"value":1242}," anchored at the midpoint x.",{"type":43,"tag":87,"props":1244,"children":1245},{},[],{"type":43,"tag":899,"props":1247,"children":1249},{"id":1248},"node-internal-text-rules",[1250],{"type":49,"value":1251},"Node internal text rules",{"type":43,"tag":52,"props":1253,"children":1254},{},[1255],{"type":49,"value":1256},"Wallet circle (r=46, so usable text band = ±36px from centre):",{"type":43,"tag":132,"props":1258,"children":1261},{"className":1259,"code":1260,"language":49},[1178],"Line 1 (name):    y = cy - 8,  font-size=11, font-weight=500\nLine 2 (address): y = cy + 7,  font-size=9.5, font-family=monospace\nLine 3 (role):    y = cy + 21, font-size=9\n",[1262],{"type":43,"tag":70,"props":1263,"children":1264},{"__ignoreMap":137},[1265],{"type":49,"value":1260},{"type":43,"tag":52,"props":1267,"children":1268},{},[1269],{"type":49,"value":1270},"Three lines maximum. Each line must fit within the circle width (chord at that y ≈ 80px = ~11 chars at 9px, ~9 chars at 10px). Truncate wallet names longer than 10 chars.",{"type":43,"tag":52,"props":1272,"children":1273},{},[1274],{"type":49,"value":1275},"Contract rect (width=160, height=110):",{"type":43,"tag":132,"props":1277,"children":1280},{"className":1278,"code":1279,"language":49},[1178],"Line 1 (name):     y = rect_top + 28, font-size=11, font-weight=500\nLine 2 (subname):  y = rect_top + 44, font-size=10\nLine 3 (function): y = rect_top + 60, font-size=9.5\nLine 4 (address):  y = rect_top + 76, font-size=9, font-family=monospace\nLine 5 (type):     y = rect_top + 92, font-size=9\n",[1281],{"type":43,"tag":70,"props":1282,"children":1283},{"__ignoreMap":137},[1284],{"type":49,"value":1279},{"type":43,"tag":52,"props":1286,"children":1287},{},[1288],{"type":49,"value":1289},"Maximum 5 lines. Each line centred at x=328. Lines must fit within 152px (160 - 8px padding each side) → max ~21 chars at 9px. Truncate anything longer.",{"type":43,"tag":87,"props":1291,"children":1292},{},[],{"type":43,"tag":899,"props":1294,"children":1296},{"id":1295},"gas-arrow-rules",[1297],{"type":49,"value":1298},"Gas arrow rules",{"type":43,"tag":769,"props":1300,"children":1301},{},[1302,1307,1312,1317,1322,1333,1338],{"type":43,"tag":773,"props":1303,"children":1304},{},[1305],{"type":49,"value":1306},"Always vertical, pointing down from the bottom of the left wallet circle.",{"type":43,"tag":773,"props":1308,"children":1309},{},[1310],{"type":49,"value":1311},"x1 = x2 = 90 (same as wallet cx)",{"type":43,"tag":773,"props":1313,"children":1314},{},[1315],{"type":49,"value":1316},"y1 = node_centre_y + 46 + 2 (2px gap below circle edge)",{"type":43,"tag":773,"props":1318,"children":1319},{},[1320],{"type":49,"value":1321},"y2 = y1 + 55",{"type":43,"tag":773,"props":1323,"children":1324},{},[1325,1327],{"type":49,"value":1326},"Label: placed to the RIGHT of the line — ",{"type":43,"tag":70,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":49,"value":1332},"x=98, y=(y1+y2)\u002F2, text-anchor=\"start\"",{"type":43,"tag":773,"props":1334,"children":1335},{},[1336],{"type":49,"value":1337},"Below the arrow tip, add a small pill: rect with label \"network fee\", centred at x=90.",{"type":43,"tag":773,"props":1339,"children":1340},{},[1341,1343,1349],{"type":49,"value":1342},"Gas label max length: ",{"type":43,"tag":70,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":49,"value":1348},"\"0.033 ETH gas\"",{"type":49,"value":1350}," = 13 chars. Always fits.",{"type":43,"tag":87,"props":1352,"children":1353},{},[],{"type":43,"tag":899,"props":1355,"children":1357},{"id":1356},"color-coding",[1358],{"type":49,"value":1359},"Color coding",{"type":43,"tag":568,"props":1361,"children":1362},{},[1363,1384],{"type":43,"tag":572,"props":1364,"children":1365},{},[1366],{"type":43,"tag":576,"props":1367,"children":1368},{},[1369,1374,1379],{"type":43,"tag":580,"props":1370,"children":1371},{},[1372],{"type":49,"value":1373},"Element",{"type":43,"tag":580,"props":1375,"children":1376},{},[1377],{"type":49,"value":1378},"Fill",{"type":43,"tag":580,"props":1380,"children":1381},{},[1382],{"type":49,"value":1383},"Stroke\u002FColor",{"type":43,"tag":591,"props":1385,"children":1386},{},[1387,1413,1439,1465,1487,1507,1528,1548,1568],{"type":43,"tag":576,"props":1388,"children":1389},{},[1390,1395,1404],{"type":43,"tag":598,"props":1391,"children":1392},{},[1393],{"type":49,"value":1394},"Internal wallet (sender)",{"type":43,"tag":598,"props":1396,"children":1397},{},[1398],{"type":43,"tag":70,"props":1399,"children":1401},{"className":1400},[],[1402],{"type":49,"value":1403},"#EAF3DE",{"type":43,"tag":598,"props":1405,"children":1406},{},[1407],{"type":43,"tag":70,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":49,"value":1412},"#639922",{"type":43,"tag":576,"props":1414,"children":1415},{},[1416,1421,1430],{"type":43,"tag":598,"props":1417,"children":1418},{},[1419],{"type":49,"value":1420},"Internal wallet (receiver)",{"type":43,"tag":598,"props":1422,"children":1423},{},[1424],{"type":43,"tag":70,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":49,"value":1429},"#dcfce7",{"type":43,"tag":598,"props":1431,"children":1432},{},[1433],{"type":43,"tag":70,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":49,"value":1438},"#16a34a",{"type":43,"tag":576,"props":1440,"children":1441},{},[1442,1447,1456],{"type":43,"tag":598,"props":1443,"children":1444},{},[1445],{"type":49,"value":1446},"Smart contract",{"type":43,"tag":598,"props":1448,"children":1449},{},[1450],{"type":43,"tag":70,"props":1451,"children":1453},{"className":1452},[],[1454],{"type":49,"value":1455},"#EEEDFE",{"type":43,"tag":598,"props":1457,"children":1458},{},[1459],{"type":43,"tag":70,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":49,"value":1464},"#7F77DD",{"type":43,"tag":576,"props":1466,"children":1467},{},[1468,1473,1478],{"type":43,"tag":598,"props":1469,"children":1470},{},[1471],{"type":49,"value":1472},"Outflow arrow",{"type":43,"tag":598,"props":1474,"children":1475},{},[1476],{"type":49,"value":1477},"—",{"type":43,"tag":598,"props":1479,"children":1480},{},[1481],{"type":43,"tag":70,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":49,"value":1486},"#dc2626",{"type":43,"tag":576,"props":1488,"children":1489},{},[1490,1495,1499],{"type":43,"tag":598,"props":1491,"children":1492},{},[1493],{"type":49,"value":1494},"Inflow arrow",{"type":43,"tag":598,"props":1496,"children":1497},{},[1498],{"type":49,"value":1477},{"type":43,"tag":598,"props":1500,"children":1501},{},[1502],{"type":43,"tag":70,"props":1503,"children":1505},{"className":1504},[],[1506],{"type":49,"value":1438},{"type":43,"tag":576,"props":1508,"children":1509},{},[1510,1515,1519],{"type":43,"tag":598,"props":1511,"children":1512},{},[1513],{"type":49,"value":1514},"Gas arrow",{"type":43,"tag":598,"props":1516,"children":1517},{},[1518],{"type":49,"value":1477},{"type":43,"tag":598,"props":1520,"children":1521},{},[1522],{"type":43,"tag":70,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":49,"value":1527},"#ea580c",{"type":43,"tag":576,"props":1529,"children":1530},{},[1531,1536,1540],{"type":43,"tag":598,"props":1532,"children":1533},{},[1534],{"type":49,"value":1535},"Outflow label text",{"type":43,"tag":598,"props":1537,"children":1538},{},[1539],{"type":49,"value":1477},{"type":43,"tag":598,"props":1541,"children":1542},{},[1543],{"type":43,"tag":70,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":49,"value":1486},{"type":43,"tag":576,"props":1549,"children":1550},{},[1551,1556,1560],{"type":43,"tag":598,"props":1552,"children":1553},{},[1554],{"type":49,"value":1555},"Inflow label text",{"type":43,"tag":598,"props":1557,"children":1558},{},[1559],{"type":49,"value":1477},{"type":43,"tag":598,"props":1561,"children":1562},{},[1563],{"type":43,"tag":70,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":49,"value":1438},{"type":43,"tag":576,"props":1569,"children":1570},{},[1571,1576,1580],{"type":43,"tag":598,"props":1572,"children":1573},{},[1574],{"type":49,"value":1575},"Gas label text",{"type":43,"tag":598,"props":1577,"children":1578},{},[1579],{"type":49,"value":1477},{"type":43,"tag":598,"props":1581,"children":1582},{},[1583],{"type":43,"tag":70,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":49,"value":1527},{"type":43,"tag":87,"props":1589,"children":1590},{},[],{"type":43,"tag":899,"props":1592,"children":1594},{"id":1593},"animation",[1595],{"type":49,"value":1596},"Animation",{"type":43,"tag":132,"props":1598,"children":1602},{"className":1599,"code":1600,"language":1601,"meta":137,"style":137},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@keyframes flowDash { to { stroke-dashoffset: -40; } }\n@keyframes fadeUp   { from { opacity:0; transform:translateY(14px); } to { opacity:1; transform:translateY(0); } }\n\nOutflow arrows: stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nInflow arrows:  stroke-dasharray:8 5; animation: flowDash 1.1s linear infinite;\nGas arrow:      stroke-dasharray:4 4; animation: flowDash 1.7s linear infinite;\nCards\u002Fsections: opacity:0; animation: fadeUp .5s ease forwards; (staggered delays)\n","css",[1603],{"type":43,"tag":70,"props":1604,"children":1605},{"__ignoreMap":137},[1606,1668,1802,1811,1844,1872,1902],{"type":43,"tag":143,"props":1607,"children":1608},{"class":145,"line":146},[1609,1615,1621,1627,1633,1637,1643,1647,1653,1658,1663],{"type":43,"tag":143,"props":1610,"children":1612},{"style":1611},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1613],{"type":49,"value":1614},"@keyframes",{"type":43,"tag":143,"props":1616,"children":1618},{"style":1617},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[1619],{"type":49,"value":1620}," flowDash",{"type":43,"tag":143,"props":1622,"children":1624},{"style":1623},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1625],{"type":49,"value":1626}," {",{"type":43,"tag":143,"props":1628,"children":1630},{"style":1629},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1631],{"type":49,"value":1632}," to",{"type":43,"tag":143,"props":1634,"children":1635},{"style":1623},[1636],{"type":49,"value":1626},{"type":43,"tag":143,"props":1638,"children":1640},{"style":1639},"--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6",[1641],{"type":49,"value":1642}," stroke-dashoffset",{"type":43,"tag":143,"props":1644,"children":1645},{"style":1623},[1646],{"type":49,"value":130},{"type":43,"tag":143,"props":1648,"children":1650},{"style":1649},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1651],{"type":49,"value":1652}," -40",{"type":43,"tag":143,"props":1654,"children":1655},{"style":1623},[1656],{"type":49,"value":1657},";",{"type":43,"tag":143,"props":1659,"children":1660},{"style":1623},[1661],{"type":49,"value":1662}," }",{"type":43,"tag":143,"props":1664,"children":1665},{"style":1623},[1666],{"type":49,"value":1667}," }\n",{"type":43,"tag":143,"props":1669,"children":1670},{"class":145,"line":155},[1671,1675,1680,1685,1690,1694,1699,1703,1708,1712,1717,1721,1727,1732,1737,1742,1746,1750,1754,1758,1762,1766,1770,1774,1778,1782,1786,1790,1794,1798],{"type":43,"tag":143,"props":1672,"children":1673},{"style":1611},[1674],{"type":49,"value":1614},{"type":43,"tag":143,"props":1676,"children":1677},{"style":1617},[1678],{"type":49,"value":1679}," fadeUp",{"type":43,"tag":143,"props":1681,"children":1682},{"style":1623},[1683],{"type":49,"value":1684},"   {",{"type":43,"tag":143,"props":1686,"children":1687},{"style":1629},[1688],{"type":49,"value":1689}," from",{"type":43,"tag":143,"props":1691,"children":1692},{"style":1623},[1693],{"type":49,"value":1626},{"type":43,"tag":143,"props":1695,"children":1696},{"style":1639},[1697],{"type":49,"value":1698}," opacity",{"type":43,"tag":143,"props":1700,"children":1701},{"style":1623},[1702],{"type":49,"value":130},{"type":43,"tag":143,"props":1704,"children":1705},{"style":1649},[1706],{"type":49,"value":1707},"0",{"type":43,"tag":143,"props":1709,"children":1710},{"style":1623},[1711],{"type":49,"value":1657},{"type":43,"tag":143,"props":1713,"children":1714},{"style":1639},[1715],{"type":49,"value":1716}," transform",{"type":43,"tag":143,"props":1718,"children":1719},{"style":1623},[1720],{"type":49,"value":130},{"type":43,"tag":143,"props":1722,"children":1724},{"style":1723},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1725],{"type":49,"value":1726},"translateY",{"type":43,"tag":143,"props":1728,"children":1729},{"style":1623},[1730],{"type":49,"value":1731},"(",{"type":43,"tag":143,"props":1733,"children":1734},{"style":1649},[1735],{"type":49,"value":1736},"14px",{"type":43,"tag":143,"props":1738,"children":1739},{"style":1623},[1740],{"type":49,"value":1741},");",{"type":43,"tag":143,"props":1743,"children":1744},{"style":1623},[1745],{"type":49,"value":1662},{"type":43,"tag":143,"props":1747,"children":1748},{"style":1629},[1749],{"type":49,"value":1632},{"type":43,"tag":143,"props":1751,"children":1752},{"style":1623},[1753],{"type":49,"value":1626},{"type":43,"tag":143,"props":1755,"children":1756},{"style":1639},[1757],{"type":49,"value":1698},{"type":43,"tag":143,"props":1759,"children":1760},{"style":1623},[1761],{"type":49,"value":130},{"type":43,"tag":143,"props":1763,"children":1764},{"style":1649},[1765],{"type":49,"value":822},{"type":43,"tag":143,"props":1767,"children":1768},{"style":1623},[1769],{"type":49,"value":1657},{"type":43,"tag":143,"props":1771,"children":1772},{"style":1639},[1773],{"type":49,"value":1716},{"type":43,"tag":143,"props":1775,"children":1776},{"style":1623},[1777],{"type":49,"value":130},{"type":43,"tag":143,"props":1779,"children":1780},{"style":1723},[1781],{"type":49,"value":1726},{"type":43,"tag":143,"props":1783,"children":1784},{"style":1623},[1785],{"type":49,"value":1731},{"type":43,"tag":143,"props":1787,"children":1788},{"style":1649},[1789],{"type":49,"value":1707},{"type":43,"tag":143,"props":1791,"children":1792},{"style":1623},[1793],{"type":49,"value":1741},{"type":43,"tag":143,"props":1795,"children":1796},{"style":1623},[1797],{"type":49,"value":1662},{"type":43,"tag":143,"props":1799,"children":1800},{"style":1623},[1801],{"type":49,"value":1667},{"type":43,"tag":143,"props":1803,"children":1804},{"class":145,"line":164},[1805],{"type":43,"tag":143,"props":1806,"children":1808},{"emptyLinePlaceholder":1807},true,[1809],{"type":49,"value":1810},"\n",{"type":43,"tag":143,"props":1812,"children":1813},{"class":145,"line":173},[1814,1820,1825,1830,1834,1839],{"type":43,"tag":143,"props":1815,"children":1817},{"style":1816},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1818],{"type":49,"value":1819},"Outflow arrows: ",{"type":43,"tag":143,"props":1821,"children":1822},{"style":1629},[1823],{"type":49,"value":1824},"stroke-dasharray",{"type":43,"tag":143,"props":1826,"children":1827},{"style":1816},[1828],{"type":49,"value":1829},":8 5; animation: flowDash 1",{"type":43,"tag":143,"props":1831,"children":1832},{"style":1623},[1833],{"type":49,"value":1086},{"type":43,"tag":143,"props":1835,"children":1836},{"style":1629},[1837],{"type":49,"value":1838},"1s",{"type":43,"tag":143,"props":1840,"children":1841},{"style":1816},[1842],{"type":49,"value":1843}," linear infinite;\n",{"type":43,"tag":143,"props":1845,"children":1846},{"class":145,"line":182},[1847,1852,1856,1860,1864,1868],{"type":43,"tag":143,"props":1848,"children":1849},{"style":1816},[1850],{"type":49,"value":1851},"Inflow arrows:  ",{"type":43,"tag":143,"props":1853,"children":1854},{"style":1629},[1855],{"type":49,"value":1824},{"type":43,"tag":143,"props":1857,"children":1858},{"style":1816},[1859],{"type":49,"value":1829},{"type":43,"tag":143,"props":1861,"children":1862},{"style":1623},[1863],{"type":49,"value":1086},{"type":43,"tag":143,"props":1865,"children":1866},{"style":1629},[1867],{"type":49,"value":1838},{"type":43,"tag":143,"props":1869,"children":1870},{"style":1816},[1871],{"type":49,"value":1843},{"type":43,"tag":143,"props":1873,"children":1874},{"class":145,"line":191},[1875,1880,1884,1889,1893,1898],{"type":43,"tag":143,"props":1876,"children":1877},{"style":1816},[1878],{"type":49,"value":1879},"Gas arrow:      ",{"type":43,"tag":143,"props":1881,"children":1882},{"style":1629},[1883],{"type":49,"value":1824},{"type":43,"tag":143,"props":1885,"children":1886},{"style":1816},[1887],{"type":49,"value":1888},":4 4; animation: flowDash 1",{"type":43,"tag":143,"props":1890,"children":1891},{"style":1623},[1892],{"type":49,"value":1086},{"type":43,"tag":143,"props":1894,"children":1895},{"style":1629},[1896],{"type":49,"value":1897},"7s",{"type":43,"tag":143,"props":1899,"children":1900},{"style":1816},[1901],{"type":49,"value":1843},{"type":43,"tag":143,"props":1903,"children":1904},{"class":145,"line":200},[1905,1910,1914],{"type":43,"tag":143,"props":1906,"children":1907},{"style":1816},[1908],{"type":49,"value":1909},"Cards\u002Fsections: opacity:0; animation: fadeUp ",{"type":43,"tag":143,"props":1911,"children":1912},{"style":1623},[1913],{"type":49,"value":1086},{"type":43,"tag":143,"props":1915,"children":1916},{"style":1816},[1917],{"type":49,"value":1918},"5s ease forwards; (staggered delays)\n",{"type":43,"tag":87,"props":1920,"children":1921},{},[],{"type":43,"tag":899,"props":1923,"children":1925},{"id":1924},"header",[1926],{"type":49,"value":1927},"Header",{"type":43,"tag":52,"props":1929,"children":1930},{},[1931],{"type":49,"value":1932},"Single line of plain text, no pill badges:",{"type":43,"tag":132,"props":1934,"children":1937},{"className":1935,"code":1936,"language":49},[1178],"[hash-pill: 0xABCD...1234]   Chain · Date · function() · ✓ success\n",[1938],{"type":43,"tag":70,"props":1939,"children":1940},{"__ignoreMap":137},[1941],{"type":49,"value":1936},{"type":43,"tag":52,"props":1943,"children":1944},{},[1945],{"type":49,"value":1946},"Hash pill style: monospace, 11px, bg-secondary, border, border-radius 6px, padding 4px 10px.\nEverything else: 12px, color-text-secondary. Success mark: color-text-success, font-weight 500.",{"type":43,"tag":87,"props":1948,"children":1949},{},[],{"type":43,"tag":899,"props":1951,"children":1953},{"id":1952},"stat-cards-below-diagram",[1954],{"type":49,"value":1955},"Stat cards (below diagram)",{"type":43,"tag":52,"props":1957,"children":1958},{},[1959,1961,1967,1968,1974,1975,1981],{"type":49,"value":1960},"3-column grid, one card per: total sent (red), total received (green), gas paid (orange).\nFormat values as: ",{"type":43,"tag":70,"props":1962,"children":1964},{"className":1963},[],[1965],{"type":49,"value":1966},"−$272,910",{"type":49,"value":692},{"type":43,"tag":70,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":49,"value":1973},"264K LP",{"type":49,"value":692},{"type":43,"tag":70,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":49,"value":1980},"0.127 ETH",{"type":49,"value":1982},". Keep under 12 chars.\nSublabel: 11px, muted, shows token breakdown if multiple assets.",{"type":43,"tag":87,"props":1984,"children":1985},{},[],{"type":43,"tag":899,"props":1987,"children":1989},{"id":1988},"footer-route-card",[1990],{"type":49,"value":1991},"Footer route card",{"type":43,"tag":52,"props":1993,"children":1994},{},[1995,2001,2003,2009,2011,2017,2019],{"type":43,"tag":70,"props":1996,"children":1998},{"className":1997},[],[1999],{"type":49,"value":2000},"[function() badge]  via ContractName  · [protocol tag] [protocol tag]  [Explain X ↗ button]",{"type":49,"value":2002},"\nFunction badge: yellow bg ",{"type":43,"tag":70,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":49,"value":2008},"#FEF9C3",{"type":49,"value":2010},", text ",{"type":43,"tag":70,"props":2012,"children":2014},{"className":2013},[],[2015],{"type":49,"value":2016},"#854d0e",{"type":49,"value":2018},", border-radius 6px.\nProtocol tags: bg-secondary, border, border-radius 4px, 11px.\nButton: calls ",{"type":43,"tag":70,"props":2020,"children":2022},{"className":2021},[],[2023],{"type":49,"value":2024},"sendPrompt('How does [ContractName\u002Fprotocol] work?')",{"type":43,"tag":87,"props":2026,"children":2027},{},[],{"type":43,"tag":58,"props":2029,"children":2031},{"id":2030},"step-5-plain-language-explanation",[2032],{"type":49,"value":2033},"Step 5 — Plain-Language Explanation",{"type":43,"tag":52,"props":2035,"children":2036},{},[2037],{"type":49,"value":2038},"After the diagram, write a short explanation (3–6 sentences) in simple, non-technical\nlanguage. Cover:",{"type":43,"tag":919,"props":2040,"children":2041},{},[2042,2052,2062,2072],{"type":43,"tag":773,"props":2043,"children":2044},{},[2045,2050],{"type":43,"tag":523,"props":2046,"children":2047},{},[2048],{"type":49,"value":2049},"What happened",{"type":49,"value":2051},": The core action (swap, transfer, deposit, stake, etc.)",{"type":43,"tag":773,"props":2053,"children":2054},{},[2055,2060],{"type":43,"tag":523,"props":2056,"children":2057},{},[2058],{"type":49,"value":2059},"Who was involved",{"type":49,"value":2061},": Wallets and contracts in plain terms",{"type":43,"tag":773,"props":2063,"children":2064},{},[2065,2070],{"type":43,"tag":523,"props":2066,"children":2067},{},[2068],{"type":49,"value":2069},"What moved",{"type":49,"value":2071},": Which assets changed hands and in what direction",{"type":43,"tag":773,"props":2073,"children":2074},{},[2075,2080],{"type":43,"tag":523,"props":2076,"children":2077},{},[2078],{"type":49,"value":2079},"Net result",{"type":49,"value":2081},": What the org's wallets ended up with \u002F paid out",{"type":43,"tag":52,"props":2083,"children":2084},{},[2085,2090],{"type":43,"tag":523,"props":2086,"children":2087},{},[2088],{"type":49,"value":2089},"Tone",{"type":49,"value":2091},": Imagine explaining to someone who understands crypto but not accounting.\nAvoid jargon like \"balanceFactor\", \"sub-transaction\", \"FIFO\". Say \"sent\", \"received\",\n\"paid as gas\", \"swapped X for Y\", etc.",{"type":43,"tag":52,"props":2093,"children":2094},{},[2095,2100],{"type":43,"tag":523,"props":2096,"children":2097},{},[2098],{"type":49,"value":2099},"Example",{"type":49,"value":130},{"type":43,"tag":516,"props":2102,"children":2103},{},[2104],{"type":43,"tag":52,"props":2105,"children":2106},{},[2107,2109,2115],{"type":49,"value":2108},"This was a token swap on Uniswap. Your wallet (Main Treasury) sent 1,000 USDC to\nthe Uniswap V3 router contract, which in turn sent back 0.412 ETH (worth ",{"type":43,"tag":2110,"props":2111,"children":2112},"del",{},[2113],{"type":49,"value":2114},"$1,020).\nYou also paid 0.003 ETH (",{"type":49,"value":2116},"$7.40) in gas fees to the Ethereum network.\nNet result: you traded stablecoins for ETH at roughly $2,476 per ETH.",{"type":43,"tag":87,"props":2118,"children":2119},{},[],{"type":43,"tag":58,"props":2121,"children":2123},{"id":2122},"error-handling",[2124],{"type":49,"value":2125},"Error Handling",{"type":43,"tag":568,"props":2127,"children":2128},{},[2129,2145],{"type":43,"tag":572,"props":2130,"children":2131},{},[2132],{"type":43,"tag":576,"props":2133,"children":2134},{},[2135,2140],{"type":43,"tag":580,"props":2136,"children":2137},{},[2138],{"type":49,"value":2139},"Situation",{"type":43,"tag":580,"props":2141,"children":2142},{},[2143],{"type":49,"value":2144},"Action",{"type":43,"tag":591,"props":2146,"children":2147},{},[2148,2161,2174,2187],{"type":43,"tag":576,"props":2149,"children":2150},{},[2151,2156],{"type":43,"tag":598,"props":2152,"children":2153},{},[2154],{"type":49,"value":2155},"Transaction not found",{"type":43,"tag":598,"props":2157,"children":2158},{},[2159],{"type":49,"value":2160},"Tell user the hash wasn't found in TRES. Ask if they want to check the hash or try a different one.",{"type":43,"tag":576,"props":2162,"children":2163},{},[2164,2169],{"type":43,"tag":598,"props":2165,"children":2166},{},[2167],{"type":49,"value":2168},"No children (empty sub-txs)",{"type":43,"tag":598,"props":2170,"children":2171},{},[2172],{"type":49,"value":2173},"Show header only; note \"No asset movements recorded — the tx may be a failed or contract-only interaction.\"",{"type":43,"tag":576,"props":2175,"children":2176},{},[2177,2182],{"type":43,"tag":598,"props":2178,"children":2179},{},[2180],{"type":49,"value":2181},"Missing fiat values",{"type":43,"tag":598,"props":2183,"children":2184},{},[2185],{"type":49,"value":2186},"Show amounts without USD; note \"USD value unavailable for some assets.\"",{"type":43,"tag":576,"props":2188,"children":2189},{},[2190,2195],{"type":43,"tag":598,"props":2191,"children":2192},{},[2193],{"type":49,"value":2194},"Auth failure",{"type":43,"tag":598,"props":2196,"children":2197},{},[2198],{"type":49,"value":2199},"Tell user to check TRES connection and re-authenticate.",{"type":43,"tag":2201,"props":2202,"children":2203},"style",{},[2204],{"type":49,"value":2205},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2207,"total":2394},[2208,2229,2243,2255,2274,2287,2308,2328,2342,2357,2365,2378],{"slug":2209,"name":2209,"fn":2210,"description":2211,"org":2212,"tags":2213,"stars":2226,"repoUrl":2227,"updatedAt":2228},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2214,2217,2220,2223],{"name":2215,"slug":2216,"type":16},"Creative","creative",{"name":2218,"slug":2219,"type":16},"Design","design",{"name":2221,"slug":2222,"type":16},"Generative Art","generative-art",{"name":2224,"slug":2225,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":2230,"name":2230,"fn":2231,"description":2232,"org":2233,"tags":2234,"stars":2226,"repoUrl":2227,"updatedAt":2242},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2235,2238,2239],{"name":2236,"slug":2237,"type":16},"Branding","branding",{"name":2218,"slug":2219,"type":16},{"name":2240,"slug":2241,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":2244,"name":2244,"fn":2245,"description":2246,"org":2247,"tags":2248,"stars":2226,"repoUrl":2227,"updatedAt":2254},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2249,2250,2251],{"name":2215,"slug":2216,"type":16},{"name":2218,"slug":2219,"type":16},{"name":2252,"slug":2253,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":2256,"name":2256,"fn":2257,"description":2258,"org":2259,"tags":2260,"stars":2226,"repoUrl":2227,"updatedAt":2273},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2261,2264,2265,2268,2270],{"name":2262,"slug":2263,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":2266,"slug":2267,"type":16},"Anthropic SDK","anthropic-sdk",{"name":2269,"slug":2256,"type":16},"Claude API",{"name":2271,"slug":2272,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":2275,"name":2275,"fn":2276,"description":2277,"org":2278,"tags":2279,"stars":2226,"repoUrl":2227,"updatedAt":2286},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2280,2283],{"name":2281,"slug":2282,"type":16},"Documentation","documentation",{"name":2284,"slug":2285,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":2288,"name":2288,"fn":2289,"description":2290,"org":2291,"tags":2292,"stars":2226,"repoUrl":2227,"updatedAt":2307},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2293,2296,2298,2301,2304],{"name":2294,"slug":2295,"type":16},"Documents","documents",{"name":2297,"slug":2288,"type":16},"DOCX",{"name":2299,"slug":2300,"type":16},"Office","office",{"name":2302,"slug":2303,"type":16},"Templates","templates",{"name":2305,"slug":2306,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":2309,"name":2309,"fn":2310,"description":2311,"org":2312,"tags":2313,"stars":2226,"repoUrl":2227,"updatedAt":2327},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2314,2315,2318,2321,2324],{"name":2218,"slug":2219,"type":16},{"name":2316,"slug":2317,"type":16},"Frontend","frontend",{"name":2319,"slug":2320,"type":16},"React","react",{"name":2322,"slug":2323,"type":16},"Tailwind CSS","tailwind-css",{"name":2325,"slug":2326,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":2329,"name":2329,"fn":2330,"description":2331,"org":2332,"tags":2333,"stars":2226,"repoUrl":2227,"updatedAt":2341},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2334,2337,2338],{"name":2335,"slug":2336,"type":16},"Communications","communications",{"name":2302,"slug":2303,"type":16},{"name":2339,"slug":2340,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":2343,"name":2343,"fn":2344,"description":2345,"org":2346,"tags":2347,"stars":2226,"repoUrl":2227,"updatedAt":2356},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2348,2349,2352,2353],{"name":2262,"slug":2263,"type":16},{"name":2350,"slug":2351,"type":16},"API Development","api-development",{"name":2271,"slug":2272,"type":16},{"name":2354,"slug":2355,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":2253,"name":2253,"fn":2358,"description":2359,"org":2360,"tags":2361,"stars":2226,"repoUrl":2227,"updatedAt":2364},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2362,2363],{"name":2294,"slug":2295,"type":16},{"name":2252,"slug":2253,"type":16},"2026-04-06T17:56:02.483316",{"slug":2366,"name":2366,"fn":2367,"description":2368,"org":2369,"tags":2370,"stars":2226,"repoUrl":2227,"updatedAt":2377},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2371,2374],{"name":2372,"slug":2373,"type":16},"PowerPoint","powerpoint",{"name":2375,"slug":2376,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":2379,"name":2379,"fn":2380,"description":2381,"org":2382,"tags":2383,"stars":2226,"repoUrl":2227,"updatedAt":2393},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2384,2385,2386,2389,2392],{"name":2262,"slug":2263,"type":16},{"name":2281,"slug":2282,"type":16},{"name":2387,"slug":2388,"type":16},"Evals","evals",{"name":2390,"slug":2391,"type":16},"Performance","performance",{"name":2284,"slug":2285,"type":16},"2026-04-19T06:45:40.804",490,{"items":2396,"total":407},[2397,2414,2433,2447,2459,2469,2481],{"slug":2398,"name":2398,"fn":2399,"description":2400,"org":2401,"tags":2402,"stars":26,"repoUrl":27,"updatedAt":2413},"quickdesign","generate AI media assets","Use the `quickdesign` CLI to generate AI media — UGC promo videos, image edits, product creatives, video upscales — through Seedance, Kling, Sora2, Nano Banana, and GPT Image. Invoke this skill whenever the user asks for a talking-avatar video, multi-segment ad \u002F promo \u002F explainer, image edit (object swap, angle change, state change), product photoshoot, or video upscale via QuickDesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2403,2404,2407,2410],{"name":2215,"slug":2216,"type":16},{"name":2405,"slug":2406,"type":16},"Image Generation","image-generation",{"name":2408,"slug":2409,"type":16},"Marketing","marketing",{"name":2411,"slug":2412,"type":16},"Video","video","2026-07-01T08:09:32.316182",{"slug":2415,"name":2415,"fn":2416,"description":2417,"org":2418,"tags":2419,"stars":26,"repoUrl":27,"updatedAt":2432},"testdino-audit","audit Playwright test code","Use only when the user explicitly asks for a TestDino audit of Playwright automated test code. Routes through the audit tools the TestDino MCP server exposes (get_audit_report + submit_audit_report, or the legacy test_audit). For generic code review or non-Playwright targets, do a normal review instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2420,2423,2426,2429],{"name":2421,"slug":2422,"type":16},"Audit","audit",{"name":2424,"slug":2425,"type":16},"Code Analysis","code-analysis",{"name":2427,"slug":2428,"type":16},"Playwright","playwright",{"name":2430,"slug":2431,"type":16},"Testing","testing","2026-07-02T07:37:17.341081",{"slug":2434,"name":2434,"fn":2435,"description":2436,"org":2437,"tags":2438,"stars":26,"repoUrl":27,"updatedAt":2446},"testdino-health","manage TestDino connection status","Use when the user wants to check TestDino connection status, validate their PAT, discover available organizations and projects, or find the right projectId. Always call this first when the project context is ambiguous before any other TestDino tool.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2439,2442,2445],{"name":2440,"slug":2441,"type":16},"Monitoring","monitoring",{"name":2443,"slug":2444,"type":16},"QA","qa",{"name":2430,"slug":2431,"type":16},"2026-07-02T07:37:18.566504",{"slug":2448,"name":2448,"fn":2449,"description":2450,"org":2451,"tags":2452,"stars":26,"repoUrl":27,"updatedAt":2458},"testdino-manual-runs","manage manual QA execution runs in TestDino","Use when the user wants to manage a manual execution run or update case-level results inside a run — listing runs, creating runs for a release, inspecting a run, assigning cases, or marking case results (passed\u002Ffailed\u002Fblocked\u002Fskipped\u002Fretest\u002Funtested). Accepts counter-style IDs like RUN-12 and TC-156.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2453,2456,2457],{"name":2454,"slug":2455,"type":16},"Operations","operations",{"name":2443,"slug":2444,"type":16},{"name":2430,"slug":2431,"type":16},"2026-07-02T07:37:23.446065",{"slug":2460,"name":2460,"fn":2461,"description":2462,"org":2463,"tags":2464,"stars":26,"repoUrl":27,"updatedAt":2468},"testdino-manual-tests","manage manual QA test cases in TestDino","Use when the user wants to create, update, or browse manual QA test cases and suites in TestDino — not execution runs. Covers list_manual_test_suites, list_manual_test_cases, get_manual_test_case, create_manual_test_case, update_manual_test_case, create_manual_test_suite.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2465,2466,2467],{"name":2281,"slug":2282,"type":16},{"name":2443,"slug":2444,"type":16},{"name":2430,"slug":2431,"type":16},"2026-07-02T07:37:22.247052",{"slug":2470,"name":2470,"fn":2471,"description":2472,"org":2473,"tags":2474,"stars":26,"repoUrl":27,"updatedAt":2480},"testdino-releases","manage TestDino releases and milestones","Use when the user wants to browse, inspect, create, or update releases\u002Fmilestones in a TestDino project. Covers list_releases, get_release, create_release, and update_release. Accepts counter-style IDs like MS-12.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2475,2478,2479],{"name":2476,"slug":2477,"type":16},"Project Management","project-management",{"name":2443,"slug":2444,"type":16},{"name":2430,"slug":2431,"type":16},"2026-07-02T07:37:19.793846",{"slug":2482,"name":2482,"fn":2483,"description":2484,"org":2485,"tags":2486,"stars":26,"repoUrl":27,"updatedAt":2493},"testdino-runs","inspect automated test runs","Use when the user wants to inspect automated test runs, list failed or flaky tests, debug a failing testcase with historical context, or filter runs by branch, commit, author, environment, browser, status, or tags. Includes list_testruns, get_run_details, list_testcase, get_testcase_details, and debug_testcase.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2487,2490,2491,2492],{"name":2488,"slug":2489,"type":16},"Debugging","debugging",{"name":2427,"slug":2428,"type":16},{"name":2443,"slug":2444,"type":16},{"name":2430,"slug":2431,"type":16},"2026-07-02T07:37:16.07175"]