1<!DOCTYPE html> 2<html lang="en"> 3<head>
4<script>var _rollbarConfig = {"accessToken":"295d6d2e8f934257b0f4ddb304115b52","autoInstrument":true,"captureUncaught":true,"captureUnhandledRejections":true,"hostSafeList":[],"hostBlockList":[],"ignoredMessages":[],"payload":{"environment":"production"}};</script>
vendor: 1 bytes, line 4
4
5<script>!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.26.1/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||function(r){return!("object"!=typeof r||void 0!==r.page&&!r.page)}(a))&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDB
5Request,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);</script>
vendor: 1 bytes, line 5
5
6<script type="importmap" data-turbo-track="reload">{ 7 "imports": { 8 "application": "https://d32hgpjj5y625p.cloudfront.net/assets/application-f207b082d340e2d7ef1faf6a3963b9409fa3147fb7e312868adaa67e76083f68.js", 9 "turbo_stream_actions": "https://d32hgpjj5y625p.cloudfront.net/assets/turbo_stream_actions-ff801f8567a3558f4a5e50a81da697f29e835e2fa46cc6bf769179d5831663dc.js", 10 "@hotwired/turbo-rails": "https://d32hgpjj5y625p.cloudfront.net/assets/turbo.min-ddd8b828c747ffd95dbdfaa87b2414d120a316eed8407f19f78e777d074e5e96.js", 11 "trix": "https://cdn.jsdelivr.net/npm/[email protected]/dist/trix.umd.min.js", 12 "js-cookie": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js.cookie.min.js", 13 "sortablejs": "https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js", 14 "jquery-sortablejs": "https://cdn.jsdelivr.net/npm/jquery-sortablejs@latest/jquery-sortable.js", 15 "@hotwired/stimulus": "https://d32hgpjj5y625p.cloudfront.net/assets/stimulus.min-976b4e166c7f712397cad15409e0b976dfd9f2373f5e04d9f4520f0d5a7597f5.js", 16 "@hotwired/stimulus-loading": "https://d32hgpjj5y625p.cloudfront.net/assets/stimulus-loading-39227295c8a6d71e10ca2a94dede18522ced047f6ccbf8788e926f8be14aff1b.js", 17 "controllers/add_subscriber_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/add_subscriber_controller-fd9fe8936dd464dc1cbae3d31c3bc986e5e2114ee003fab4e5418f3efdaa46be.js", 18 "controllers/application": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/application-44e5edd38372876617b8ba873a82d48737d4c089e5180f706bdea0bb7b6370be.js", 19 "controllers/arrow_sortable_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/arrow_sortable_controller-d4e97af69712b31f7f40abf5e96bde45ecbc3f2bf3f69ae9850ffe07abe45f75.js", 20 "controllers/character_count_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/character_count_controller-200d3b65cd98910eec0805f1a854071637f3f6275e6ebce72a77ecabec00bb78.js", 21 "controllers/copyright_name_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/copyright_name_modal_controller-9b79fc4f3904af9193f900429852493bf6dc9ae658ac2fcf9326121ad7ed267e.js", 22 "controllers/design_nav_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/design_nav_controller-2f712f7500c82845450b65dec862659df22dea1d2d39a17b9469d7070bb1d233.js", 23 "controllers/design_page_section_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/design_page_section_controller-f1a457031a27726cd23bb568294b137349e91d691cdbe35758af8b0e4cce37f4.js", 24 "controllers/footer_text_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/footer_text_modal_controller-088ed4df170fba2521f21d6c570874fa21ba097fd46f6551b778af61f00bb8ed.js", 25 "controllers/header_footer_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/header_footer_controller-83c45efc3461993a8d8ba5cc57773bd471848e279f196a2c340f486a1297802b.js", 26 "controllers": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/index-d92597c94be3b5a5adba9c0f17fb1601585e59e54ed1e242cd99ce6f935198e5.js", 27 "controllers/manage_subscribers_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/manage_subscribers_controller-93a288f637c86f52c4661a1427e3ffb7c2bf46f425ce2a36ff995c948bcf7c89.js", 28 "controllers/modal_form_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/modal_form_controller-ed45881813baad0b886a257c8389b563a3f232cbc408f66cf4da53daa38bc4c1.js", 29 "controllers/newsletter_builder_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_controller-f2f1e3b58c8d4436bcdd8eea1d3b71a276a963c5e87549fffa49bab275bc9580.js", 30 "controllers/newsletter_builder_image_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_image_controller-13937df8f37d686d07b0834fdc8e977b71cc4e700adfc069d1c499f0cbb6b6b6.js", 31 "controllers/newsletter_builder_image_form_fields_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_image_form_fields_controller-5fb397c6153ab53d8aec1e3027c32a699349fbdbf1ebee1143215f8bd6eee05a.js", 32 "controllers/newsletter_builder_modal_form_fields_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_modal_form_fields_controller-9e5fb79d742394fa9eaeeddb437123dd78ed2f87d4cea5d220a404e294795000.js", 33 "controllers/newsletter_builder_replaceable_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_replaceable_controller-2
331efea64bf8648e6883566d7b7be4c37654a24e08b2367dfeed4e44956097ee8.js", 34 "controllers/newsletter_builder_tags_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_tags_controller-0eb8d1f271977faa68a92a53741979bf58ffc86c075f84f2d25deafbd3a60e47.js", 35 "controllers/newsletter_message_schedule_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_message_schedule_modal_controller-c70893dd83a505fe506ad4430a1f8439966c9f4d9c8392d85895e73869ca3122.js", 36 "controllers/search_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/search_modal_controller-35710a5ac2b54272c5c23a69e0adb29820848de5844d613f73d58a2ea27a61f3.js", 37 "controllers/section_card_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/section_card_controller-6e39fd28ad51d887ed0c7a10d2c51b3ff3a1bd36621fdcf810dbc908a2f82624.js" 38 } 39}</script>
39 40<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/application-f207b082d340e2d7ef1faf6a3963b9409fa3147fb7e312868adaa67e76083f68.js"> 41<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/turbo_stream_actions-ff801f8567a3558f4a5e50a81da697f29e835e2fa46cc6bf769179d5831663dc.js"> 42<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/turbo.min-ddd8b828c747ffd95dbdfaa87b2414d120a316eed8407f19f78e777d074e5e96.js">
43<script type="esms-options">{"nonce":null}</script>
vendor: 1 bytes, line 43
43
44<script src="https://d32hgpjj5y625p.cloudfront.net/assets/es-module-shims.min-a0e02f0f37eb67badf69f69d30f3d3ef921c0ba3d076579d03a937c6b1c29d2d.js" async="async" data-turbo-track="reload"></script>
vendor: 1 bytes, line 44
44
45<script type="module">import "application"</script>
45 46<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> 47<title>Paris Reckoning (Sandi Brennan Book 1) | John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series</title> 48<meta name="csrf-param" content="authenticity_token" /> 49<meta name="csrf-token" content="MAuVKJH_SCSK5W5pW0xVsQrCMh9KPdMJiA0vN_LrqzLK1wNLD_qt_KtwLJ3GdUvj9TAwnFAOd2usvUMcaLxxcQ" /> 50<meta name="csp-nonce" /> 51<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"> 52
52<script> 53 window.renderTurnstile = function () { 54 $('.cloudflare-turnstile-widget').each((i, widget) => { 55 turnstile.render(widget, { 56 sitekey: '0x4AAAAAABCVYQo6ZyG97FYI', 57 callback: function (token) { 58 $(widget).parents('form').find("input[type='submit']").prop("disabled", false); 59 }, 60 }); 61 }); 62 }; 63 window.turnstileLoaded = function() { 64 if (document.readyState === "loading") { 65 document.addEventListener('DOMContentLoaded', renderTurnstile); 66 } else { 67 renderTurnstile(); 68 } 69 }; 70 document.addEventListener("turbo:frame-load", renderTurnstile); 71 </script>
71 72 73
73<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?onload=turnstileLoaded" async defer></script>
73 74 75<meta content="She survived Africa. Paris may finish the job.Sandrine Brennan spent two decades earning ever-bigger jobs in the U.S. Army â and turned down a near-certain promotion to full colonel to take on the biggest of all: CEO of a well-funded new security firm with deep ties to the CIA, headquartered in Paris. Sheâs even persuaded Eddie Grant â the billionaire Franco-American businessman who was a decorated Special Forces commander during the First Gulf War â to run her European operations.Her last assignment before making the leap had taken her deep into the Sahel, the arid belt across central Africa where Russiaâs Wagner Group was buying governments and moving drugs. She survived it. Now sheâs in Paris, finally, and for the first time in years sheâs letting herself want something beyond the next mission.Then Steve disappears.He was a fellow student at GranâLangue, Eddieâs language school on the Left Bank. Charming, private, obviously connected to the intelligence world he wouldnât quite admit. She convinced herself he was the love of her life, but now heâs gone â leaving behind a photograph, a transferred account she didnât ask for, and no explanation at all.Sandiâs search takes her from the polished salons of the 7th arrondissement to Luxembourg and back to the stone passages below Paris â toward a conspiracy that connects the drug pipeline she tracked in Africa to a corruption operation reaching into the highest levels of West African governments. Someone is making a great deal of money. Someone is also very interested in stopping her.Paris Reckoning is the first book in the Sandi Brennan series, set within the world of John Pearceâs acclaimed Eddie Grant Saga. If youâre meeting Sandi for the first time, you wonât need Eddie to follow her â but Eddieâs readers will feel right at home." name="description"> 76<meta content="Paris Reckoning (Sandi Brennan Book 1) | John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series" property="og:title"> 77<meta content="She survived Africa. Paris may finish the job.Sandrine Brennan spent two decades earning ever-bigger jobs in the U.S. Army â and turned down a near-certain promotion to full colonel to take on the biggest of all: CEO of a well-funded new security firm with deep ties to the CIA, headquartered in Paris. Sheâs even persuaded Eddie Grant â the billionaire Franco-American businessman who was a decorated Special Forces commander during the First Gulf War â to run her European operations.Her last assignment before making the leap had taken her deep into the Sahel, the arid belt across central Africa where Russiaâs Wagner Group was buying governments and moving drugs. She survived it. Now sheâs in Paris, finally, and for the first time in years sheâs letting herself want something beyond the next mission.Then Steve disappears.He was a fellow student at GranâLangue, Eddieâs language school on the Left Bank. Charming, private, obviously connected to the intelligence world he wouldnât quite admit. She convinced herself he was the love of her life, but now heâs gone â leaving behind a photograph, a transferred account she didnât ask for, and no explanation at all.Sandiâs search takes her from the polished salons of the 7th arrondissement to Luxembourg and back to the stone passages below Paris â toward a conspiracy that connects the drug pipeline she tracked in Africa to a corruption operation reaching into the highest levels of West African governments. Someone is making a great deal of money. Someone is also very interested in stopping her.Paris Reckoning is the first book in the Sandi Brennan series, set within the world of John Pearceâs acclaimed Eddie Grant Saga. If youâre meeting Sandi for the first time, you wonât need Eddie to follow her â but Eddieâs readers will feel right at home." property="og:description"> 78<meta content="https://johnpearcebooks.com/books/paris-reckoning-sandi-brennan-book-1" property="og:url"> 79<meta content="book" property="og:type"> 80<meta content="https://res.cloudinary.com/wellfleet/image/upload/b_auto,c_pad,h_630,q_auto,w_1200/g0vmujgmlz9qyjjahgo3kmuor6d7.jpg" property="og:image">
81<meta content="1200" property="og:image:width"> 82<meta content="630" property="og:image:height"> 83<meta content="image/jpeg" property="og:image:type"> 84<meta content="John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series" property="book:author"> 85<meta content="2026-07-01" property="book:release_date"> 86<meta content="summary" property="twitter:card"> 87<link rel="icon" type="image/x-icon" href="https://res.cloudinary.com/wellfleet/image/upload/c_lpad,b_rgb:FFFFFF,w_32,h_32/c_lpad,w_28,h_28,co_rgb:000000,l_text:Prata_24_bold:JPA/v1701462860/favicon.png" /> 88<style type="text/css"> 89body { 90 --background-color: #FFFFFF; 91 --accent-color: #C83B2C; 92 --text-color: #000000; 93 --accent-contrast-color: #FFFFFF; 94 --logo-font: "DM Serif Display", serif; 95 --logo-font-weight: 400; 96 --logo-font-case: none; 97 --header-font: "Oswald", sans-serif; 98 --header-font-weight: 400; 99 --body-font: "DM Sans", sans-serif; 100 --background-image-url: url(); 101 --mailing-list-background-image-url: url(); 102} 103 104 105</style> 106<link href="https://johnpearcebooks.com/books/paris-reckoning-sandi-brennan-book-1" rel="canonical"> 107<link href="//fonts.googleapis.com" rel="preconnect"> 108<link crossorigin="true" href="//fonts.gstatic.com" rel="preconnect"> 109<link as="style" crossorigin="anonymous" href="https://fonts.googleapis.com/css2?display=swap&family=DM Serif Display:wght@400&family=Oswald:wght@400&family=DM Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400;1,9..40,700" rel="preload" type="text/css"> 110<link crossorigin="anonymous" href="https://fonts.googleapis.com/css2?display=swap&family=DM Serif Display:wght@400&family=Oswald:wght@400&family=DM Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400;1,9..40,700" rel="stylesheet" type="text/css"> 111<link rel="stylesheet" href="https://d32hgpjj5y625p.cloudfront.net/assets/website-0a9b9d72719691cda924f1126c93f112b2e32c7f844e1da307dba457029ac800.css" media="all" />
112<script src="https://d32hgpjj5y625p.cloudfront.net/assets/website-51048669aa058af730a2050187f188c2dff273ff3c464e46b7b3f7ddaf6ad92b.js"></script>
112 113<turbo-frame data-turbo="true" id="analytic_tags"> 114
115<script src="https://d32hgpjj5y625p.cloudfront.net/assets/custom_tracking-31af88ace985edb56eb121c6755d1a01a338931beedac126e877338b80684370.js"></script>
115 116</turbo-frame> 117</head> 118<body class="book_modules_controller show_action " data-turbo="false"> 119<main role="main"> 120<div class="standalone-book d-flex flex-column min-vh-100" itemscope="" itemtype="https://schema.org/Book"> 121<div class="header my-lg-2"> 122 123<nav class="navbar navbar-expand-lg py-1 d-flex justify-content-between flex-wrap container"> 124<div class="author-name text-wrap mb-0 left-aligned"> 125<a class="text-reset text-decoration-none m-0 p-0" href="/">John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series 126</a></div> 127<button class="d-block d-lg-none btn p-0" data-bs-target=".navbar-collapse" data-bs-toggle="collapse"> 128<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> 129<path d="M1 2H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 130<path d="M1 9H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 131<path d="M1 16H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 132<path d="M1 2H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 133<path d="M1 9H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 134<path d="M1 16H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 135</svg> 136 137</button> 138<div class="collapse navbar-collapse navbar-nav-scroll flex-grow-0 flex-wrap mh-100"> 139<div class="mobile-menu-header d-flex d-lg-none align-items-center justify-content-between px-2 px-md-6 pt-3"> 140<a class="author-name text-reset text-decoration-none mb-0" href="/">John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series</a> 141<button class="btn p-0" data-bs-target=".navbar-collapse" data-bs-toggle="collapse"> 142<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg"> 143<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 144<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 145<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 146<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 147</svg> 148 149</button> 150</div> 151<ul class="navbar-nav mt-1 mt-lg-0 px-2 px-md-6 n"> 152<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/about">About</a></li> 153 154<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/books">Books</a></li> 155 156<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/series">Series</a></li> 157 158<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" target="_blank" rel="noopener" href="https://parttimeparisian.substack.com/?subscribe=true&utm_source=johnpearcebooks&utm_medium=author_site&utm_campaign=primary_subscribe">Free Updates</a></li> 159 160<li class="nav-item d-flex pt-2 pt-lg-0 gap-2 gap-lg-0 justify-content-center"> 161<a target="_blank" name="BookBub" class="nav-link d-flex align-items-center" href="https://www.bookbub.com/authors/john-pearce"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 162 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px"> 163<path d="M34.2,20.9c0.7-0.5,1-1.3,1-2.3c0-1.8-1.3-2.7-3.8-2.7h-2.2v5.8h2.3C32.7,21.8,33.6,21.5,34.2,20.9z"/> 164<path d="M14.6,25.1h-2.8v6.5h3c1.3,0,2.3-0.3,3-0.9c0.7-0.6,1.1-1.4,1.1-2.4C18.8,26.1,17.4,25.1,14.6,25.1z"/> 165<path d="M16.9,20.9c0.7-0.5,1-1.3,1-2.3c0-1.8-1.3-2.7-3.8-2.7h-2.2v5.8h2.3C15.3,21.8,16.2,21.5,16.9,20.9z"/> 166<path d="M24.1,0.3C11.2,0.3,0.7,10.8,0.7,23.8c0,12.9,10.5,23.4,23.4,23.4s23.4-10.5,23.4-23.4C47.5,10.8,37,0.3,24.1,0.3z 167 M21.2,33.1c-1.4,1.2-3.3,1.8-5.7,1.8H7.5V12.6h7.6c2.3,0,4.1,0.5,5.4,1.4c1.3,0.9,1.9,2.2,1.9,3.8c0,1.2-0.4,2.2-1.1,3.2 168 c-0.8,0.9-1.8,1.6-3.1,2v0c1.6,0.2,2.8,0.8,3.7,1.8c0.9,1,1.4,2.2,1.4,3.6C23.3,30.3,22.6,31.9,21.2,33.1z M38.5,33.1 169 c-1.4,1.2-3.3,1.8-5.7,1.8h-7.9V12.6h7.6c2.3,0,4.1,0.5,5.4,1.4c1.3,0.9,1.9,2.2,1.9,3.8c0,1.2-0.4,2.2-1.1,3.2 170 c-0.8,0.9-1.8,1.6-3.1,2v0c1.6,0.2,2.8,0.8,3.7,1.8c0.9,1,1.4,2.2,1.4,3.6C40.7,30.3,40,31.9,38.5,33.1z"/> 171<path d="M32,25.1h-2.8v6.5h3c1.3,0,2.3-0.3,3-0.9c0.7-0.6,1.1-1.4,1.1-2.4C36.1,26.1,34.7,25.1,32,25.1z"/> 172</svg> 173 174</a><a target="_blank" name="Facebook" class="nav-link d-flex align-items-center" href="https://www.facebook.com/JohnPearceFL"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 175 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px"> 176<g> 177 <path class="st0" d="M24,0C10.7,0,0,10.7,0,24c0,11.3,7.7,20.7,18.2,23.3v-16h-4.9V24h4.9v-3.2c0-8.2,3.7-12,11.7-12 178 c1.5,0,4.1,0.3,5.2,0.6v6.6c-0.6-0.1-1.6-0.1-2.8-0.1c-3.9,0-5.5,1.5-5.5,5.4V24h7.8l-1.3,7.3h-6.5v16.5C38.8,46.4,48,36.3,48,24 179 C48,10.7,37.3,0,24,0z"/> 180</g> 181</svg> 182 183</a><a target="_blank" name="X" class="nav-link d-flex align-items-center" href="https://www.X.com/JohnPearceFL"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 184 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px"> 185<path class="st0" d="M36.7,3.8h6.7L28.7,20.7L46,43.6H32.4L21.8,29.7L9.6,43.6H2.9l15.8-18L2,3.8h13.9l9.6,12.7L36.7,3.8z 186 M34.3,39.5H38L13.9,7.6h-4L34.3,39.5z"/> 187</svg> 188 189 190 191</a></li> 192 193</ul> 194</div> 195</nav> 196</div> 197 198 199<div class="website-content container"> 200<div class="book-module row my-4 my-lg-8 gx-md-10"> 201<div class="col-md-4 text-center text-md-start"> 202<div class="cover-image-wrapper book-cover-237901"> 203<a title="Paris Reckoning (Sandi Brennan Book 1)" class="d-flex justify-content-center text-reset text-decoration-none h-100" href="/books/paris-reckoning-sandi-brennan-book-1"><img class="cover-image img-fluid" alt="Paris Reckoning (Sandi Brennan Book 1)" itemprop="image" width="638" height="957" loading="lazy" src="https://res.cloudinary.com/wellfleet/image/upload/c_fill,f_auto,q_auto,w_638/g0vmujgmlz9qyjjahgo3kmuor6d7" /> 204</a></div> 205 206</div> 207<div class="col-md-8 pt-3 pt-md-0"> 208<div class="mb-1"> 209<div class="font-body-large"> 210Book #1 from the series: 211<a itemprop="isPartOf" href="/series/sandi-brennan-series">Sandi Brennan Series</a> 212</div> 213 214</div> 215<h1 class="text-break font-logo-large" itemprop="name">Paris Reckoning (Sandi Brennan Book 1)</h1> 216<div class="font-body-large"></div> 217<div itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 218<meta content="Amazon" itemprop="seller"> 219<meta content="https://www.amazon.com/dp/B0H2KZ5P6M" itemprop="url"> 220</div> 221<div itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 222<meta content="Amazon UK" itemprop="seller"> 223<meta content="https://www.amazon.co.uk/dp/B0H2KZ5P6M" itemprop="url"> 224</div> 225<div itemprop="offers" itemscope="" itemtype="https://schema.org/Offer"> 226<meta content="Amazon CA" itemprop="seller"> 227<meta content="https://www.amazon.ca/dp/B0H2KZ5P6M" itemprop="url"> 228</div> 229<div itemprop="author" itemscope="" itemtype="https://schema.org/Person"> 230<meta content="John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series" itemprop="name"> 231<div class="mt-4 retailer-btn-container"> 232<div class="d-flex align-items-center flex-wrap gap-2"> 233<button class="btn btn-primary retailer-cta-btn retailer-link-btn" data-bs-target="#retailer-links-modal-237901" data-bs-toggle="modal" type="button">Buy Now</button> 234</div>
235<div aria-hidden="true" aria-label="Choose your retailer" class="modal retailer-links-modal website-content" id="retailer-links-modal-237901" role="dialog" tabindex="-1"> 236<div class="modal-dialog" role="document"> 237<div class="modal-content px-2 px-md-5 py-2 py-md-4 bg-blend-95 border-blend-90"> 238<div class="modal-header border-0"> 239<button class="bg-transparent border-0 text-reset ms-auto" data-bs-dismiss="modal" title="Close" type="button"> 240<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg"> 241<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 242<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 243<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 244<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 245</svg> 246 247</button> 248</div> 249<div class="modal-body font-body-large"> 250<h3 class="font-logo-medium mb-3">Choose Your Retailer</h3> 251<ul class="list-unstyled d-flex flex-wrap mx-n1"> 252<li class="col-12 col-md-4"> 253<div class="p-1"> 254<a target="_blank" data-book-title="Paris Reckoning (Sandi Brennan Book 1)" rel="noopener" class="track-retailer-link btn btn-primary retailer-link-btn px-4" href="https://www.amazon.com/dp/B0H2KZ5P6M">Amazon</a> 255 256</div> 257</li> 258<li class="col-12 col-md-4"> 259<div class="p-1"> 260<a target="_blank" data-book-title="Paris Reckoning (Sandi Brennan Book 1)" rel="noopener" class="track-retailer-link btn btn-primary retailer-link-btn px-4" href="https://www.amazon.co.uk/dp/B0H2KZ5P6M">Amazon UK</a> 261 262</div> 263</li> 264<li class="col-12 col-md-4"> 265<div class="p-1"> 266<a target="_blank" data-book-title="Paris Reckoning (Sandi Brennan Book 1)" rel="noopener" class="track-retailer-link btn btn-primary retailer-link-btn px-4" href="https://www.amazon.ca/dp/B0H2KZ5P6M">Amazon CA</a> 267 268</div> 269</li> 270</ul> 271</div> 272</div> 273</div> 274</div> 275 276 277</div> 278</div> 279<h2 class="font-header-medium text-uppercase my-3">About</h2> 280<div class="font-body-large text-break rich-text" itemprop="description"> 281<p><strong>She survived Africa. Paris may finish the job.</strong></p><p>Sandrine Brennan spent two decades earning ever-bigger jobs in the U.S. Army â and turned down a near-certain promotion to full colonel to take on the biggest of all: CEO of a well-funded new security firm with deep ties to the CIA, headquartered in Paris. Sheâs even persuaded Eddie Grant â the billionaire Franco-American businessman who was a decorated Special Forces commander during the First Gulf War â to run her European operations.</p><p>Her last assignment before making the leap had taken her deep into the Sahel, the arid belt across central Africa where Russiaâs Wagner Group was buying governments and moving drugs. She survived it. Now sheâs in Paris, finally, and for the first time in years sheâs letting herself want something beyond the next mission.</p><p>Then Steve disappears.</p><p>He was a fellow student at GranâLangue, Eddieâs language school on the Left Bank. Charming, private, obviously connected to the intelligence world he wouldnât quite admit. She convinced herself he was the love of her life, but now heâs gone â leaving behind a photograph, a transferred account she didnât ask for, and no explanation at all.</p><p>Sandiâs search takes her from the polished salons of the 7th arrondissement to Luxembourg and back to the stone passages below Paris â toward a conspiracy that connects the drug pipeline she tracked in Africa to a corruption operation reaching into the highest levels of West African governments. Someone is making a great deal of money. Someone is also very interested in stopping her.</p><p><em>Paris Reckoning</em> is the first book in the Sandi Brennan series, set within the world of John Pearceâs acclaimed Eddie Grant Saga. If youâre meeting Sandi for the first time, you wonât need Eddie to follow her â but Eddieâs readers will feel right at home.</p> 282</div> 283<h2 class="font-header-medium text-uppercase my-3">Trailer</h2> 284<iframe allow="encrypted-media; picture-in-picture" allowfullscreen="" class="trailer-iframe" frameborder="0" height="315" src="https://www.youtube.com/embed/v6IYF26cEyk" width="560"></iframe> 285<div class="mt-3"><div class="book-reviews"> 286<h4 class="reviews-header text-uppercase font-header-medium">Praise for this book</h4> 287<figure class="book-review mt-4 px-4 py-2"> 288<blockquote class="blockquote font-body-large mb-2"> 289<p>"John Pearce's new novel Paris Reckoning introduces us to one of crime fiction's most compelling new protagonists. The threat she uncovers connects corrupt West African networks to lethal Russian expansionism. It could not be more contemporary or more chilling. Pearce brings to this latest novel the same sure hand and deep knowledge of Paris that set the Eddie Grant novels apart. Sandi Brennan shines bright in the City of Light." </p> 290</blockquote> 291<figcaption class="blockquote-footer header-font text-reset text-uppercase">David Downie, author of Clear, Cool, Sweet Water and Paris, Paris</figcaption> 292</figure> 293</div> 294</div> 295</div> 296</div> 297</div> 298<div class="mt-auto container"><div class="footer position-relative border-top border-blend-80 mt-8 mb-2 pt-2" id="footer-module"> 299<div class="d-flex flex-wrap font-body-small"> 300<div class="mb-1 mb-md-0"> 301<strong> 302Copyright 3032026 304</strong> 305 <a class="text-reset text-decoration-none amp-link" href="https://johnpearcebooks.com">John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series</a> 306</div> 307<div class="mb-2 mb-md-0 me-auto"> 308<div class="d-inline opacity-75"> 309<div class="d-none d-md-inline"> 310| 311</div> 312Built with 313<a target="_blank" class="text-reset text-decoration-none amp-link" href="https://authorwebsites.bookbub.com?source=ausite_ref">Author Websites by BookBub</a> 314</div> 315</div> 316<div class="ms-md-1 d-flex gap-2"> 317 318</div> 319<div class="footer-icons d-flex align-items-center gap-2 mt-2 mt-md-0 ms-md-3"> 320<a title="rss" class="opacity-50 text-reset d-flex align-items-start" href="/feed.xml"><svg width="16px" height="16px" style="fill: none; stroke: none; vertical-align: middle; margin-top:3px;" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 321<path fill-rule="evenodd" clip-rule="evenodd" d="M5 17C5 18.104 4.104 19 3 19C1.896 19 1 18.104 1 17C1 15.896 1.896 15 3 15C4.104 15 5 15.896 5 17Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 322<path d="M1 7C7.627 7 13 12.373 13 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 323<path d="M1 1C10.941 1 19 9.059 19 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 324</svg> 325 326</a></div> 327</div> 328</div> 329</div> 330</div> 331 332 333 334</main> 335</body> 336</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.