{"id":151,"date":"2026-05-24T16:42:22","date_gmt":"2026-05-24T15:42:22","guid":{"rendered":"https:\/\/lukaskoren.tech\/?page_id=151"},"modified":"2026-05-24T22:18:25","modified_gmt":"2026-05-24T21:18:25","slug":"greenfield-debit-card-program","status":"publish","type":"page","link":"https:\/\/lukaskoren.tech\/?page_id=151","title":{"rendered":"Greenfield Debit Card Program"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Turning a CLV Thesis into Regulated Money Movement Infrastructure<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TL;DR<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A zero-to-one Visa debit card programme at Capital.com &#8211; a regulated CFD and investment broker &#8211; built not as a card product, but as a retained liquidity infrastructure layer. The hard problem was not card issuance: it was engineering the regulated internal fund movement architecture that allows value to travel between a live trading ledger, a card-spendable balance, and a CASS 7 safeguarded pool without breaching margin, settlement, or regulatory segregation constraints. Early cohort modelling projects cardholders generating 10\u201318% higher lifetime value than matched non-cardholders. In active build, targeting public beta Q2 2026.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>CONTEXT<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Capital.com is a regulated CFD and investment broker serving retail and professional traders globally, with active users holding leveraged positions in equities, FX, commodities, and indices. Revolut had launched stock trading, eToro had added a card product, and Interactive Brokers was deepening cash management &#8211; a card offering had become table stakes for defending the high-value segment. Capital.com holds a UK FCA investment firm authorisation, not an EMI licence. That regulatory fact shaped every architecture decision that followed: customer balances are trading balances subject to margin requirements, not e-money ledgers, and the path to card spend required a formally designed fund movement model &#8211; not a simple balance read.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>PROBLEM<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>User problem<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Capital.com traders &#8211; particularly the high-value segment &#8211; could not access gains or working capital without initiating a bank withdrawal and waiting 1\u20133 business days for settlement. Every purchase or bill required exiting the platform. For active traders managing leveraged positions, that friction compounded: withdrawing reduced available margin, interrupted portfolio exposure, and made the platform feel like a custody account rather than a financial operating layer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Business problem<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Withdrawal frequency was a measurable leading indicator of churn. Capital.com&#8217;s revenue &#8211; spread income, overnight financing, premium subscriptions &#8211; depends on funded, active positions. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Example: At \u00a35B AUM and a 0.5% annual revenue yield, every 1% of at-risk AUM retained is worth \u00a325M in preserved annual revenue. <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The card programme was not evaluated as a card product. It was evaluated as a retained liquidity mechanism: if idle balances gained real-world utility without leaving the platform, withdrawal leakage would fall and lifetime monetisation would increase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Technical and regulatory problem<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The core architecture problem is one no off-the-shelf card issuance product solves: moving funds from a live, leveraged trading environment into a card-spendable balance in real time, without breaching margin safety, settlement integrity, or regulatory segregation. Trading balances are not freely spendable &#8211; they may be affected by open positions, margin locks, pending settlement, or realised P&amp;L timing. Card balances must support real-time authorisation via ISO 8583, scheme settlement under a dual-message clearing model, chargebacks, refunds, and FX conversion. These two domains operate under different timing, liquidity, and reconciliation rules. Since the firm does not hold and EMI license on its own, it requires a licensed BIN sponsor, a designed CASS 7 safeguarding structure, and PCI DSS scope defined from zero.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>APPROACH<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The programme defined its sequence early and held to it: commercial and compliance architecture before engineering, ledger design before card experience, and the financial case framed at board level around lifetime value rather than card economics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Economic framing and financial model<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The programme was evaluated through a card-adjusted LTV formula rather than standalone card P&amp;L. The base model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Base LTV = (Average gross revenue \u00d7 customer tenure) \u2212 CAC \u2212 cost to serve<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The card programme was designed to improve each variable. The full card-adjusted model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Card-adjusted LTV =\n\n&nbsp;&nbsp;Base LTV\n\n&nbsp;&nbsp;+ retained balance value\n&nbsp;&nbsp;+ trickle-back trading revenue\n&nbsp;&nbsp;+ interchange revenue\n&nbsp;&nbsp;+ FX conversion revenue\n&nbsp;&nbsp;+ interest income on sitting balances\n&nbsp;&nbsp;+ payment cost savings\n&nbsp;&nbsp;\u2212 card operating cost\n&nbsp;&nbsp;\u2212 card risk cost<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Where:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Retained balance value = retained balance uplift \u00d7 revenue yield on retained funds<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Revenue yield on retained funds = gross trading revenue \u00f7 average funded balance<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Trickle-back revenue = trickle-back funds \u00d7 trading turnover multiplier \u00d7 gross revenue yield<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Trickle-back rate = funds moved back into trading \u00f7 funds moved from trading into card balance<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Direct card revenue =\n\n&nbsp;&nbsp;(card purchase volume \u00d7 interchange rate \u00d7 platform interchange share)\n&nbsp;&nbsp;+ (foreign spend volume \u00d7 FX markup \u00d7 platform FX share)\n&nbsp;&nbsp;+ (active cardholders \u00d7 average sitting balance \u00d7 net interest rate \u00d7 platform interest share)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Net interest rate = Bank of England base rate \u2212 1.5%<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Average sitting balance = daily card spend \u00d7 2.33<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;(assumption: ~30% of daily balance spent, ~70% retained as sitting liquidity)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Early modelling projected 10\u201318% higher LTV for active cardholders versus matched non-cardholders, with the majority of uplift driven by retained liquidity and trickle-back redeployment &#8211; not interchange. The AUM retention case &#8211; \u00a325M in preserved annual revenue if 5% of at-risk AUM is retained &#8211; was the metric that reached board level. Three scenarios were validated: conservative (50K monthly active cards), base (100K cards), and optimistic (250k cards). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Internal fund movement model<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first architectural principle was that funds could not move between domains automatically or implicitly. Every card-spendable balance had to be created through an explicit, controlled internal fund transfer &#8211; a ledger event with eligibility checks, reservation states, posting rules, and reconciliation outputs. The platform checks available withdrawable balance &#8211; excluding margin-locked, unsettled, restricted, or pending-settlement funds &#8211; before posting a debit to the trading ledger and a credit to the internal card ledger. The card account became a separate financial domain, not a view onto the trading account. The issuer processor&#8217;s ledger was treated as an external operational ledger reconciled daily against the internal card ledger, which remained the authoritative source of truth.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most technically demanding flow was cross-currency transfer: a trader moving funds from a GBP card balance into a EUR CFD trading account. Although the customer experienced this as a single transfer, the architecture decomposed it into two regulated operations. Operation 1 moved GBP from the card ledger to a GBP CFD account. Only after that completed did Operation 2 execute an internal FX conversion through the company&#8217;s FX infrastructure layer &#8211; an internal institutional-grade FX engine sourcing liquidity from multiple providers with rates cached in Redis for deterministic execution and quote locking. This separation preserved auditability, compensating transaction capability, FX transparency, and reconciliation correctness at every step.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Issuer selection and commercial negotiation<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three BIN sponsors were evaluated on a weighted scorecard: EMI licence jurisdiction, dual scheme membership, multi-currency programme support, delegated authorisation API maturity, settlement SLA flexibility, and interchange revenue sharing. The selection turned on a single integration risk: the delegated authorisation hook &#8211; the real-time API call into Capital.com&#8217;s portfolio ledger during card authorisation &#8211; had to execute within the ISO 8583 2-second timeout window. Contract terms &#8211; interchange splits, scheme fee pass-through, FX margin rights, settlement timing, and SLA penalty clauses &#8211; were negotiated and executed before engineering began.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Compliance and regulatory architecture<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Four regulatory domains required design decisions before a BIN could be allocated. PCI DSS scope was bounded by confirming that card PAN data would be vaulted inside the issuer&#8217;s tokenisation environment &#8211; never transiting Capital.com infrastructure in cleartext &#8211; reducing scope to SAQ D rather than a full QSA engagement. CASS 7 safeguarding was extended by designing a dedicated segregated client money pool at a sponsor bank for card programme float, legally distinct from the investment firm&#8217;s existing client money pools. Under the dual-message clearing model, authorisation holds do not trigger e-money redemption &#8211; funds remain relevant for safeguarding purposes until the CLEAR message settles. MCC restrictions, velocity controls, and geographic limits were designed as a product configuration layer rather than hard-coded blocks, so risk appetite could be adjusted operationally without engineering involvement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>ARCHITECTURE<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The programme&#8217;s architecture rests on four interconnected domains: the trading ledger, the internal card ledger, the issuer processor ledger, and the settlement and safeguarding banking layer. Two diagrams represent the core flows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cross-currency internal fund movement &#8211; card to CFD<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This sequence shows how a GBP card-to-EUR CFD transfer is decomposed into two regulated ledger operations, with an FX conversion executed through the FX engine only after the first leg completes. The design separates the card debit from the FX event to preserve compensating transaction capability and auditability. A single-operation approach would have made partial-failure recovery architecturally unresolvable and reconciliation opaque.<\/p>\n\n\n\n<!-- Google Fonts \u2014 only item outside .tds-root -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Share+Tech+Mono&#038;display=swap\" rel=\"stylesheet\">\n\n<div class=\"tds-root\">\n\n  <div class=\"tds-header\">\n    <div class=\"tds-title\"><span class=\"tds-dot\"><\/span>INTERNAL FUND MOVEMENT ENGINE \u2014 SEQUENCE DIAGRAM<\/div>\n    <div class=\"tds-meta\">SOLID = REQUEST &nbsp;|&nbsp; DASHED = RESPONSE &nbsp;|&nbsp; \u27f2 = INTERNAL OPERATION &nbsp;|&nbsp; ORANGE = OP 1 &nbsp;|&nbsp; AMBER = OP 2<\/div>\n  <\/div>\n\n  <div class=\"tds-svg-wrap\">\n<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1400 1084\" width=\"100%\" height=\"auto\" preserveAspectRatio=\"xMidYMid meet\" style=\"display:block;font-family:'Share Tech Mono','Courier New',monospace;\">\n<defs>\n  <pattern id=\"tds-scan\" width=\"1\" height=\"4\" patternUnits=\"userSpaceOnUse\"><rect width=\"1\" height=\"2\" fill=\"rgba(255,102,0,0.018)\"\/><\/pattern>\n  <marker id=\"tds-ah-orange\" markerWidth=\"7\" markerHeight=\"7\" refX=\"6\" refY=\"3.5\" orient=\"auto\"><polygon points=\"0 0,7 3.5,0 7\" fill=\"#FF6600\"\/><\/marker>\n  <marker id=\"tds-ah-amber\" markerWidth=\"7\" markerHeight=\"7\" refX=\"6\" refY=\"3.5\" orient=\"auto\"><polygon points=\"0 0,7 3.5,0 7\" fill=\"#FFB300\"\/><\/marker>\n  <marker id=\"tds-ah-dim\" markerWidth=\"7\" markerHeight=\"7\" refX=\"6\" refY=\"3.5\" orient=\"auto\"><polygon points=\"0 0,7 3.5,0 7\" fill=\"#993300\"\/><\/marker>\n  <marker id=\"tds-ah-amber-dim\" markerWidth=\"7\" markerHeight=\"7\" refX=\"6\" refY=\"3.5\" orient=\"auto\"><polygon points=\"0 0,7 3.5,0 7\" fill=\"#AA7700\"\/><\/marker>\n  <marker id=\"tds-ah-orange-l\" markerWidth=\"7\" markerHeight=\"7\" refX=\"1\" refY=\"3.5\" orient=\"auto\"><polygon points=\"7 0,0 3.5,7 7\" fill=\"#FF6600\"\/><\/marker>\n  <marker id=\"tds-ah-amber-l\" markerWidth=\"7\" markerHeight=\"7\" refX=\"1\" refY=\"3.5\" orient=\"auto\"><polygon points=\"7 0,0 3.5,7 7\" fill=\"#FFB300\"\/><\/marker>\n  <marker id=\"tds-ah-dim-l\" markerWidth=\"7\" markerHeight=\"7\" refX=\"1\" refY=\"3.5\" orient=\"auto\"><polygon points=\"7 0,0 3.5,7 7\" fill=\"#993300\"\/><\/marker>\n  <marker id=\"tds-ah-amber-dim-l\" markerWidth=\"7\" markerHeight=\"7\" refX=\"1\" refY=\"3.5\" orient=\"auto\"><polygon points=\"7 0,0 3.5,7 7\" fill=\"#AA7700\"\/><\/marker>\n<\/defs>\n<rect width=\"1400\" height=\"1084\" fill=\"#000000\"\/>\n<rect width=\"1400\" height=\"1084\" fill=\"url(#tds-scan)\"\/>\n<rect x=\"77.4\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"77.4\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"151.4\" y=\"42.0\" text-anchor=\"middle\" font-size=\"10\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">USER<\/text>\n<rect x=\"260.3\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"260.3\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"334.3\" y=\"42.0\" text-anchor=\"middle\" font-size=\"10\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">APP<\/text>\n<rect x=\"443.1\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"443.1\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"517.1\" y=\"33.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">LEDGER \/<\/text>\n<text x=\"517.1\" y=\"46.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">TRANSFER ENGINE<\/text>\n<rect x=\"626.0\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"626.0\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"700.0\" y=\"33.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">RISK<\/text>\n<text x=\"700.0\" y=\"46.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">ENGINE<\/text>\n<rect x=\"808.9\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"808.9\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"882.9\" y=\"33.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">FX<\/text>\n<text x=\"882.9\" y=\"46.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">ENGINE<\/text>\n<rect x=\"991.7\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"991.7\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"1065.7\" y=\"33.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">CARDS<\/text>\n<text x=\"1065.7\" y=\"46.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">SERVICE<\/text>\n<rect x=\"1174.6\" y=\"16\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"1174.6\" y=\"16\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"1248.6\" y=\"33.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">BIN<\/text>\n<text x=\"1248.6\" y=\"46.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">SPONSOR<\/text>\n<line x1=\"151.4\" y1=\"60\" x2=\"151.4\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<line x1=\"334.3\" y1=\"60\" x2=\"334.3\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<line x1=\"517.1\" y1=\"60\" x2=\"517.1\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<line x1=\"700.0\" y1=\"60\" x2=\"700.0\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<line x1=\"882.9\" y1=\"60\" x2=\"882.9\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<line x1=\"1065.7\" y1=\"60\" x2=\"1065.7\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<line x1=\"1248.6\" y1=\"60\" x2=\"1248.6\" y2=\"1004\" stroke=\"#4D1A00\" stroke-width=\"1\"\/>\n<rect x=\"0\" y=\"60\" width=\"1400\" height=\"26\" fill=\"#0D0500\"\/>\n<rect x=\"0\" y=\"60\" width=\"1400\" height=\"1\" fill=\"#FF6600\" opacity=\"0.6\"\/>\n<rect x=\"0\" y=\"85\" width=\"1400\" height=\"1\" fill=\"#993300\" opacity=\"0.4\"\/>\n<text x=\"24\" y=\"77.0\" font-size=\"9.5\" font-weight=\"bold\" fill=\"#FF6600\" letter-spacing=\"2\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u25b6 SCENARIO \u2014 GBP Card \u2192 EUR CFD Transfer<\/text>\n<line x1=\"155.4\" y1=\"103.0\" x2=\"330.3\" y2=\"103.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"122.9\" y=\"90.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"242.9\" y=\"100.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Select GBP card wallet \u2192 EUR CFD, enter \u00a3500<\/text>\n<line x1=\"338.3\" y1=\"137.0\" x2=\"513.1\" y2=\"137.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"305.7\" y=\"124.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"425.7\" y=\"134.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Fetch FX rate<\/text>\n<line x1=\"521.1\" y1=\"171.0\" x2=\"878.9\" y2=\"171.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"580.0\" y=\"158.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"700.0\" y=\"168.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Request mid-market rate<\/text>\n<line x1=\"878.9\" y1=\"205.0\" x2=\"521.1\" y2=\"205.0\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<rect x=\"580.0\" y=\"192.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"700.0\" y=\"202.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#664422\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Mid-market rate returned<\/text>\n<path d=\"M 517.1 227.0 L 549.1 227.0 L 549.1 249.0 L 517.1 249.0\" fill=\"none\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"4,3\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<text x=\"555.1\" y=\"242.0\" font-size=\"9\" fill=\"#664422\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Apply CFD FX markup<\/text>\n<line x1=\"513.1\" y1=\"271.0\" x2=\"338.3\" y2=\"271.0\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<rect x=\"305.7\" y=\"258.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"425.7\" y=\"268.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#664422\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Display converted amount + fee<\/text>\n<line x1=\"330.3\" y1=\"305.0\" x2=\"155.4\" y2=\"305.0\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<rect x=\"122.9\" y=\"292.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"242.9\" y=\"302.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#664422\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Show locked FX quote<\/text>\n<line x1=\"155.4\" y1=\"339.0\" x2=\"330.3\" y2=\"339.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"122.9\" y=\"326.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"242.9\" y=\"336.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Confirm transfer<\/text>\n<path d=\"M 517.1 361.0 L 549.1 361.0 L 549.1 383.0 L 517.1 383.0\" fill=\"none\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"4,3\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<text x=\"555.1\" y=\"376.0\" font-size=\"9\" fill=\"#664422\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Lock rate, create transfer record<\/text>\n<rect x=\"0\" y=\"388\" width=\"1400\" height=\"26\" fill=\"#0D0500\"\/>\n<rect x=\"0\" y=\"388\" width=\"1400\" height=\"1\" fill=\"#FF6600\" opacity=\"0.6\"\/>\n<rect x=\"0\" y=\"413\" width=\"1400\" height=\"1\" fill=\"#993300\" opacity=\"0.4\"\/>\n<text x=\"24\" y=\"405.0\" font-size=\"9.5\" font-weight=\"bold\" fill=\"#FF6600\" letter-spacing=\"2\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u25b6 OPERATION 1 \u2014 GBP Card \u2192 GBP CFD<\/text>\n<path d=\"M 517.1 419.0 L 549.1 419.0 L 549.1 441.0 L 517.1 441.0\" fill=\"none\" stroke=\"#FF6600\" stroke-width=\"1\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange-l)\"\/>\n<text x=\"555.1\" y=\"434.0\" font-size=\"9\" fill=\"#FFDDAA\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Reserve \u00a3500 on card ledger (eligibility check)<\/text>\n<line x1=\"521.1\" y1=\"463.0\" x2=\"696.0\" y2=\"463.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"488.6\" y=\"450.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"608.6\" y=\"460.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Notify trading risk service<\/text>\n<line x1=\"696.0\" y1=\"497.0\" x2=\"521.1\" y2=\"497.0\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<rect x=\"488.6\" y=\"484.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"608.6\" y=\"494.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#664422\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Approved (no margin conflict)<\/text>\n<line x1=\"521.1\" y1=\"531.0\" x2=\"1061.7\" y2=\"531.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"671.4\" y=\"518.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"791.4\" y=\"528.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Debit internal card ledger<\/text>\n<line x1=\"1069.7\" y1=\"565.0\" x2=\"1244.6\" y2=\"565.0\" stroke=\"#FF6600\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange)\"\/>\n<rect x=\"1037.1\" y=\"552.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"1157.1\" y=\"562.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFDDAA\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Debit user card ledger at processor<\/text>\n<line x1=\"1244.6\" y1=\"599.0\" x2=\"1069.7\" y2=\"599.0\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<rect x=\"1037.1\" y=\"586.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"1157.1\" y=\"596.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#664422\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Debit confirmed<\/text>\n<path d=\"M 1065.7 621.0 L 1097.7 621.0 L 1097.7 643.0 L 1065.7 643.0\" fill=\"none\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"4,3\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<text x=\"1103.7\" y=\"636.0\" font-size=\"9\" fill=\"#664422\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Update shadow ledger<\/text>\n<line x1=\"1061.7\" y1=\"665.0\" x2=\"521.1\" y2=\"665.0\" stroke=\"#993300\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-dim-l)\"\/>\n<rect x=\"671.4\" y=\"652.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"791.4\" y=\"662.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#664422\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Card leg complete<\/text>\n<path d=\"M 517.1 687.0 L 549.1 687.0 L 549.1 709.0 L 517.1 709.0\" fill=\"none\" stroke=\"#FF6600\" stroke-width=\"1\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-orange-l)\"\/>\n<text x=\"555.1\" y=\"702.0\" font-size=\"9\" fill=\"#FFDDAA\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Credit GBP CFD account<\/text>\n<rect x=\"0\" y=\"714\" width=\"1400\" height=\"26\" fill=\"#0D0800\"\/>\n<rect x=\"0\" y=\"714\" width=\"1400\" height=\"1\" fill=\"#FFB300\" opacity=\"0.6\"\/>\n<rect x=\"0\" y=\"739\" width=\"1400\" height=\"1\" fill=\"#AA7700\" opacity=\"0.4\"\/>\n<text x=\"24\" y=\"731.0\" font-size=\"9.5\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"2\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u25b6 OPERATION 2 \u2014 GBP CFD \u2192 EUR CFD (FX Conversion)<\/text>\n<path d=\"M 517.1 745.0 L 549.1 745.0 L 549.1 767.0 L 517.1 767.0\" fill=\"none\" stroke=\"#FFB300\" stroke-width=\"1\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-amber-l)\"\/>\n<text x=\"555.1\" y=\"760.0\" font-size=\"9\" fill=\"#FFB300\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Reserve \u00a3500 in GBP CFD account<\/text>\n<line x1=\"521.1\" y1=\"789.0\" x2=\"696.0\" y2=\"789.0\" stroke=\"#FFB300\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-amber)\"\/>\n<rect x=\"488.6\" y=\"776.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"608.6\" y=\"786.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFB300\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Margin and withdrawal risk check<\/text>\n<line x1=\"696.0\" y1=\"823.0\" x2=\"521.1\" y2=\"823.0\" stroke=\"#AA7700\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-amber-dim-l)\"\/>\n<rect x=\"488.6\" y=\"810.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"608.6\" y=\"820.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#AA7700\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Approved<\/text>\n<line x1=\"521.1\" y1=\"857.0\" x2=\"878.9\" y2=\"857.0\" stroke=\"#FFB300\" stroke-width=\"1.5\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-amber)\"\/>\n<rect x=\"580.0\" y=\"844.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"700.0\" y=\"854.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#FFB300\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Execute FX conversion at locked rate<\/text>\n<path d=\"M 882.9 879.0 L 914.9 879.0 L 914.9 901.0 L 882.9 901.0\" fill=\"none\" stroke=\"#FFB300\" stroke-width=\"1\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-amber-l)\"\/>\n<text x=\"920.9\" y=\"894.0\" font-size=\"9\" fill=\"#FFB300\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Apply markup, source ECN liquidity<\/text>\n<line x1=\"878.9\" y1=\"923.0\" x2=\"521.1\" y2=\"923.0\" stroke=\"#AA7700\" stroke-width=\"1\" stroke-dasharray=\"5,4\" marker-end=\"url(#tds-ah-amber-dim-l)\"\/>\n<rect x=\"580.0\" y=\"910.0\" width=\"240\" height=\"11\" fill=\"#000000\" opacity=\"0.85\"\/>\n<text x=\"700.0\" y=\"920.0\" text-anchor=\"middle\" font-size=\"9\" fill=\"#AA7700\" letter-spacing=\"0.3\" font-family=\"'Share Tech Mono','Courier New',monospace\">Conversion complete<\/text>\n<path d=\"M 517.1 945.0 L 549.1 945.0 L 549.1 967.0 L 517.1 967.0\" fill=\"none\" stroke=\"#FFB300\" stroke-width=\"1\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-amber-l)\"\/>\n<text x=\"555.1\" y=\"960.0\" font-size=\"9\" fill=\"#FFB300\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Debit GBP CFD account<\/text>\n<path d=\"M 517.1 977.0 L 549.1 977.0 L 549.1 999.0 L 517.1 999.0\" fill=\"none\" stroke=\"#FFB300\" stroke-width=\"1\" stroke-dasharray=\"none\" marker-end=\"url(#tds-ah-amber-l)\"\/>\n<text x=\"555.1\" y=\"992.0\" font-size=\"9\" fill=\"#FFB300\" font-family=\"'Share Tech Mono','Courier New',monospace\">\u27f2 Credit EUR CFD account<\/text>\n<rect x=\"77.4\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"77.4\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"151.4\" y=\"1030.0\" text-anchor=\"middle\" font-size=\"10\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">USER<\/text>\n<rect x=\"260.3\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"260.3\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"334.3\" y=\"1030.0\" text-anchor=\"middle\" font-size=\"10\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">APP<\/text>\n<rect x=\"443.1\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"443.1\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"517.1\" y=\"1021.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">LEDGER \/<\/text>\n<text x=\"517.1\" y=\"1034.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">TRANSFER ENGINE<\/text>\n<rect x=\"626.0\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"626.0\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"700.0\" y=\"1021.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">RISK<\/text>\n<text x=\"700.0\" y=\"1034.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">ENGINE<\/text>\n<rect x=\"808.9\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"808.9\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"882.9\" y=\"1021.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">FX<\/text>\n<text x=\"882.9\" y=\"1034.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">ENGINE<\/text>\n<rect x=\"991.7\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"991.7\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"1065.7\" y=\"1021.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">CARDS<\/text>\n<text x=\"1065.7\" y=\"1034.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">SERVICE<\/text>\n<rect x=\"1174.6\" y=\"1004\" width=\"148\" height=\"44\" fill=\"#0a0300\" stroke=\"#CC4400\" stroke-width=\"1\" rx=\"1\"\/>\n<rect x=\"1174.6\" y=\"1046\" width=\"148\" height=\"2\" fill=\"#FF6600\" opacity=\"0.8\"\/>\n<text x=\"1248.6\" y=\"1021.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">BIN<\/text>\n<text x=\"1248.6\" y=\"1034.0\" text-anchor=\"middle\" font-size=\"9\" font-weight=\"bold\" fill=\"#FFB300\" letter-spacing=\"1\" font-family=\"'Share Tech Mono','Courier New',monospace\">SPONSOR<\/text>\n<\/svg>  <\/div>\n\n  <div class=\"tds-footer\">\n    <span>INTERNAL TRANSFERS \u00b7 GBP CARD \u2192 EUR CFD \u00b7 TWO-OPERATION DECOMPOSITION<\/span>\n    <span>OP 1: CARD DEBIT + CFD CREDIT &nbsp;|&nbsp; OP 2: GBP\u2192EUR FX CONVERSION VIA MDFX ENGINE<\/span>\n  <\/div>\n\n<\/div>\n\n<style>\n  \/* \u2500\u2500 Scoped reset \u2014 never touches anything outside .tds-root \u2500\u2500 *\/\n  .tds-root *, .tds-root *::before, .tds-root *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\n  \/* \u2500\u2500 Root container \u2500\u2500 *\/\n  .tds-root {\n    width: 100%;\n    background: #000000;\n    background-image: repeating-linear-gradient(\n      0deg,\n      transparent, transparent 2px,\n      rgba(255,102,0,0.018) 2px, rgba(255,102,0,0.018) 4px\n    );\n    font-family: 'Share Tech Mono', 'Courier New', monospace;\n    padding: 24px;\n  }\n\n  \/* \u2500\u2500 Header \u2500\u2500 *\/\n  .tds-root .tds-header {\n    border: 1px solid #CC4400;\n    background: #080200;\n    padding: 9px 18px;\n    margin-bottom: 16px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    box-shadow: 0 0 16px rgba(255,102,0,0.12);\n  }\n  .tds-root .tds-title {\n    font-size: 13px;\n    font-weight: 700;\n    letter-spacing: 0.14em;\n    color: #FFB300;\n    text-transform: uppercase;\n  }\n  .tds-root .tds-meta {\n    font-size: 9.5px;\n    color: #553311;\n    letter-spacing: 0.08em;\n  }\n  .tds-root .tds-dot {\n    display: inline-block;\n    width: 7px;\n    height: 7px;\n    border-radius: 50%;\n    background: #FF6600;\n    margin-right: 10px;\n    box-shadow: 0 0 8px #FF6600;\n    animation: tds-blink 2s step-end infinite;\n  }\n  @keyframes tds-blink { 0%,100% { opacity: 1; } 50% { opacity: 0.15; } }\n\n  \/* \u2500\u2500 SVG wrapper \u2500\u2500 *\/\n  .tds-root .tds-svg-wrap {\n    width: 100%;\n    overflow-x: auto;\n  }\n  .tds-root .tds-svg-wrap svg {\n    display: block;\n  }\n\n  \/* \u2500\u2500 Footer \u2500\u2500 *\/\n  .tds-root .tds-footer {\n    margin-top: 16px;\n    border-top: 1px solid #331100;\n    padding-top: 8px;\n    display: flex;\n    justify-content: space-between;\n    font-size: 8.5px;\n    color: #553311;\n    letter-spacing: 0.08em;\n  }\n<\/style>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dual-message authorisation and settlement &#8211; card spend flow<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This diagram shows how a card spend event travels from merchant terminal through the card network to Capital.com&#8217;s delegated authorisation gateway, how an authorisation hold is placed on the internal card ledger without redeeming e-money, and how the subsequent CLEAR message triggers settlement against the CASS 7 safeguarding pool. The dual-message model was chosen over a single-message model because authorisation holds under a dual-message system do not constitute spent funds &#8211; safeguarding obligations remain intact until clearing &#8211; which is the correct treatment under CASS 7 for a regulated investment firm. The 2-second ISO 8583 timeout window was the hard performance constraint driving the delegated authorisation architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[[HTML SEQUENCE DIAGRAM]]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>OUTCOMES<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The programme is in active build. The following have been validated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Validated programme milestones<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BIN sponsor contracted &#8211; interchange economics, settlement SLA, and delegated authorisation API specification agreed and executed before engineering began<\/li>\n\n\n\n<li>PCI DSS scope confirmed as SAQ D &#8211; PAN data vaulted at issuer, not transiting Capital.com infrastructure<\/li>\n\n\n\n<li>CASS 7 safeguarding structure designed &#8211; segregated client money pool at RBS, legally distinct from the investment firm&#8217;s existing pools, with dual-message clearing model confirmed as the correct safeguarding treatment<\/li>\n\n\n\n<li>Internal fund movement model defined &#8211; trading-to-card transfers are explicit ledger events with eligibility checks, multi-operation decomposition for cross-currency flows, and daily reconciliation against processor ledger<\/li>\n\n\n\n<li>Financial model validated across three scenarios with AUM retention as primary board metric; early cohort modelling projects 10\u201318% LTV uplift for active cardholders versus matched non-cardholders<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Turning a CLV Thesis into Regulated Money Movement Infrastructure TL;DR A zero-to-one Visa debit card programme at Capital.com &#8211; a regulated CFD and investment broker &#8211; built not as a card product, but as a retained liquidity infrastructure layer. The hard problem was not card issuance: it was engineering the regulated internal fund movement architecture [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":44,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-151","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/pages\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=151"}],"version-history":[{"count":4,"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/pages\/151\/revisions"}],"predecessor-version":[{"id":174,"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/pages\/151\/revisions\/174"}],"up":[{"embeddable":true,"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=\/wp\/v2\/pages\/44"}],"wp:attachment":[{"href":"https:\/\/lukaskoren.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}