1<!DOCTYPE html><html lang="en" data-rh-managed="lang"><head> 2 <meta charset="UTF-8"> 3 <!-- No maximum-scale / user-scalable here. Blocking pinch-zoom is a WCAG 4 1.4.4 failure, and this site's audience reads 10px labels on phones. --> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta name="theme-color" content="#0F172A"> 7 8 <!-- 9 No title/description/og tags here on purpose. components/Seo.tsx owns all of 10 them, and react-helmet-async can only replace tags it rendered itself - a 11 static copy in this template is not removed, it is duplicated. Every URL the 12 site serves is prerendered (see prerenderRoutes in 13 components/pages/data/routes.ts) and unmatched URLs are rewritten to the 14 prerendered `/`, so the no-JS fallback comes from the build, not from here. 15 --> 16 17 <link rel="icon" type="image/svg+xml" href="/favicon.svg"> 18 <link rel="apple-touch-icon" href="/favicon.svg"> 19 <!-- Tailwind is built, not loaded at runtime: see tailwind.config.js and index.css. --> 20 <link rel="preconnect" href="https://fonts.googleapis.com"> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> 22 <!-- Inter serves the pages still on the old design system. Archivo is the 23 2026 landing page and contact page; the wdth axis is not optional, the 24 display headings set font-stretch up to 115%. --> 25 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Archivo:wdth,[email protected],400..900&display=swap" rel="stylesheet"> 26 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/style.min.css" rel="stylesheet"> 27 28 29 <!-- 30 Open in Polish for Polish speakers. 31 32 Runs here, ahead of the module script, so a Polish visitor never sees a 33 frame of English. Firebase Hosting serves static files and cannot read 34 Accept-Language without its i18n feature, which negotiates content at the 35 *same* URL - that would collapse /pl/ back onto / and break hreflang. So 36 the detection is client-side, and every guard below is load-bearing: 37 38 - __PRERENDER_INJECTED: the build runs a headless Chrome over every route. 39 Without this it would bounce off / and bake Polish into dist/index.html. 40 RedactReveal.tsx opts out of the prerender on the same flag. 41 - the stored preference: once someone uses the EN/PL switcher their choice 42 wins for good. See localePreference.ts, which owns this key and writes 43 it; the literal is repeated here because a template
43<script> has no 44 import. 45 - the TWIN lookup: only the two English pages redirect. /services/ and the 46 case studies are English-only and untouched, and /pl/* never bounces back. 47 - replace(), not assign(): Back leaves the site instead of ping-ponging. 48 49 Crawlers advertise en and stay on the English tree; the hreflang set and 50 x-default=en are how they find /pl/. Both URLs serve their own prerendered 51 HTML to everyone, so there is no cloaking here. 52 --> 53
53<script> 54 (function () { 55 var TWIN = { '/': '/pl/', '/contact/': '/pl/contact/' }; 56 try { 57 if (window.__PRERENDER_INJECTED) return; 58 if (localStorage.getItem('bcnn_lang')) return; 59 var twin = TWIN[location.pathname]; 60 if (!twin) return; 61 // navigator.languages is in preference order, so read it in order and 62 // stop at the first language the site actually serves. Polish first 63 // means Polish; English first means English, even for someone who also 64 // lists pl further down - they have already stated a preference. 65 var langs = navigator.languages || [navigator.language || '']; 66 for (var i = 0; i < langs.length; i++) { 67 if (/^pl\b/i.test(langs[i])) { 68 location.replace(twin + location.search + location.hash); 69 return; 70 } 71 if (/^en\b/i.test(langs[i])) return; 72 } 73 } catch (e) { 74 /* no storage, no detection - the English page stands */ 75 } 76 })(); 77 </script>
77 78 79 <!-- Apollo website tracker --> 80
80<script>function initApollo(){var n=Math.random().toString(36).substring(7),o=document.createElement("script"); 81o.src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache="+n,o.async=!0,o.defer=!0, 82o.onload=function(){window.trackingFunctions.onLoad({appId:"6a2a8215a829bc0018d0861c"})}, 83document.head.appendChild(o)}initApollo();</script>
83<script src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=dgc8lc" async="" defer=""></script>
83 84 85 <!-- Google tag (gtag.js) - GA4 property G-F31EJ1RWBQ, see TRACKING.md -->
vendor: 69 bytes, lines 85-86
85 86 <script async="" src="https://www.googletagmanager.com/gtag/js?id=
86G-F31EJ1RWBQ
vendor: 14 bytes, lines 86-87
86"></script> 87
87<script> 88 window.dataLayer = window.dataLayer || []; 89 function gtag(){dataLayer.push(arguments);} 90 gtag('js', new Date()); 91 92 // send_page_view is off because this is an SPA: the automatic view fires on 93 // document load only, so route changes would go uncounted. analytics.ts 94 // sends every view instead, including the first. 95 gtag('config', 'G-F31EJ1RWBQ', { send_page_view: false }); 96 </script>
96 97
97<script type="importmap"> 98{ 99 "imports": { 100 "react-dom": "https://aistudiocdn.com/react-dom@^19.2.0", 101 "react-dom/": "https://aistudiocdn.com/react-dom@^19.2.0/", 102 "react": "https://aistudiocdn.com/react@^19.2.0", 103 "react/": "https://aistudiocdn.com/react@^19.2.0/", 104 "lucide-react": "https://aistudiocdn.com/lucide-react@^0.554.0", 105 "reactflow": "https://esm.sh/[email protected]?external=react,react-dom" 106 } 107} 108</script>
108 109
109<script type="module" crossorigin="" src="/assets/index-CwDQhT7t.js"></script>
109 110 <link rel="stylesheet" crossorigin="" href="/assets/index-BYHPM06n.css"> 111<title data-prerendered-seo>Start the investigation | BCNN</title><meta data-prerendered-seo name="description" content="Tell us what you are looking into. Investigations start at â¬10,000 and work on a real subset of your data. We reply within one working day."><meta data-prerendered-seo property="og:title" content="Start the investigation | BCNN"><meta data-prerendered-seo property="og:description" content="Tell us what you are looking into. Investigations start at â¬10,000 and work on a real subset of your data. We reply within one working day."><meta data-prerendered-seo property="og:url" content="https://bcnn.io/contact/"><meta data-prerendered-seo property="og:type" content="website"><meta data-prerendered-seo property="og:locale" content="en_US"><meta data-prerendered-seo property="og:site_name" content="BCNN"><link data-prerendered-seo rel="canonical" href="https://bcnn.io/contact/"><link data-prerendered-seo rel="alternate" hreflang="en" href="https://bcnn.io/contact/"><link data-prerendered-seo rel="alternate" hreflang="pl" href="https://bcnn.io/pl/contact/"><link data-prerendered-seo rel="alternate" hreflang="x-default" href="https://bcnn.io/contact/"></head> 112 113<body style="background-color: rgb(239, 231, 218);"> 114 <div id="root"><div class="min-h-screen w-full bg-bcnn-cream font-display text-bcnn-ink antialiased"><a href="#main" class="sr-only focus:not-sr-only focus:fixed focus:left-0 focus:top-0 focus:z-[100] focus:border-[3px] focus:border-bcnn-red focus:bg-bcnn-ink focus:px-[22px] focus:py-4 focus:text-[13px] focus:font-extrabold focus:uppercase focus:tracking-[0.08em] focus:text-bcnn-cream">Skip to content</a><header class="sticky top-0 z-40 border-b-[3px] border-bcnn-ink bg-bcnn-cream"><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] "><div class="flex items-center gap-[clamp(14px,2.4vw,36px)] py-3.5"><a aria-label="BCNN - home" class="flex flex-shrink-0 items-center gap-2.5 text-bcnn-ink hover:text-bcnn-red" href="/" data-discover="true"><svg viewBox="0 0 100 100" aria-hidden="true" class="h-[30px] w-[30px]"><path d="M20 67.5 L50 82.5 L80 67.5 L50 52.5 Z" fill="#141110"></path><path d="M20 47.5 L50 62.5 L80 47.5 L50 32.5 Z" fill="#C81E1E"></path><path d="M20 27.5 L50 42.5 L80 27.5 L50 12.5 Z" fill="#141110"></path></svg><span class="font-display text-[19px] font-black uppercase tracking-[0.04em] [font-stretch:112%]">BCNN</span></a><div class="ml-auto flex flex-shrink-0 items-center gap-[clamp(10px,1.2vw,16px)]"><div role="group" aria-label="Language" class="flex flex-shrink-0 border-2 border-bcnn-ink"><a lang="en" hreflang="en" aria-current="true" class="inline-flex min-h-[34px] min-w-[34px] items-center justify-center px-1 text-[11px] font-extrabold tracking-[0.06em] transition-colors bg-bcnn-ink text-bcnn-cream" href="/contact/" data-discover="true">EN</a><a lang="pl" hreflang="pl" class="inline-flex min-h-[34px] min-w-[34px] items-center justify-center px-1 text-[11px] font-extrabold tracking-[0.06em] transition-colors bg-transparent text-bcnn-ink hover:bg-bcnn-red hover:text-bcnn-cream" href="/pl/contact/" data-discover="true">PL</a></div><a class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-ink bg-bcnn-ink text-bcnn-cream hover:border-bcnn-red hover:bg-bcnn-red hover:text-bcnn-cream whitespace-nowrap px-[clamp(13px,1.6vw,22px)] py-3 text-[clamp(11px,1vw,12px)] tracking-[0.07em]" href="/contact/?topic=header" data-discover="true"><span class="hidden sm:inline">Start the investigation</span><span class="sm:hidden">Contact</span></a></div></div></div></header><main id="main"><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] pb-12 pt-14"><h1 class="max-w-[820px] font-display text-[clamp(32px,5.2vw,58px)] font-black uppercase leading-[1.02] tracking-[-0.015em] [font-stretch:106%]">Start the <span class="text-bcnn-red">investigation.</span></h1><div class="mt-11 flex flex-wrap gap-[clamp(28px,4vw,44px)]"><form class="flex min-w-0 max-w-[620px] flex-[1_1_420px] flex-col gap-[22px]"><input type="hidden" value="direct" name="source"><input tabindex="-1" autocomplete="off" aria-hidden="true" class="absolute -left-[9999px] h-px w-px opacity-0" type="text" name="website"><label class="flex flex-col gap-2"><span class="text-[11px] font-extrabold uppercase tracking-[0.09em]">Name</span><input required="" placeholder="Your full name" class="w-full min-h-[44px] border-[3px] border-bcnn-ink bg-white px-3.5 py-3 text-[15px] text-bcnn-ink placeholder:text-bcnn-faint outline-none focus:border-bcnn-red" type="text" name="name"></label><label class="flex flex-col gap-2"><span class="text-[11px] font-extrabold uppercase tracking-[0.09em]">Work email</span><input required="" placeholder="[email protected]" class="w-full min-h-[44px] border-[3px] border-bcnn-ink bg-white px-3.5 py-3 text-[15px] text-bcnn-ink placeholder:text-bcnn-faint outline-none focus:border-bcnn-red" type="email" name="email"></label><label class="flex flex-col gap-2"><span class="text-[11px] font-extrabold uppercase tracking-[0.09em]">What are you investigating?</span><textarea name="investigating" required="" rows="6" class="w-full min-h-[44px] border-[3px] border-bcnn-ink bg-white px-3.5 py-3 text-[15px] text-bcnn-ink placeholder:text-bcnn-faint outline-none focus:border-bcnn-red resize-y leading-[1.5]" placeholder="We think procurement fraud is running across our supplier base, but we can only see it one contract at a time. 115
116Contracts as scanned PDFs, an ERP export, three years of email. Roughly 40,000 documents."></textarea></label><button type="submit" class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-red bg-bcnn-red text-bcnn-cream hover:border-bcnn-red-deep hover:bg-bcnn-red-deep hover:text-bcnn-cream self-start px-[26px] py-[15px] disabled:cursor-not-allowed disabled:opacity-60">Send</button></form><aside class="flex min-w-0 flex-[1_1_250px] flex-col gap-[26px]"><div class="flex flex-wrap gap-[18px]"><div class="h-[84px] w-[84px] flex-none overflow-hidden border border-bcnn-line bg-bcnn-hatch"><img alt="MichaÅ DomaÅski" class="h-full w-full object-cover" src="/michal.jpg" style="object-position: center 20%;"></div><div class="flex-[1_1_130px]"><h2 class="text-[17px] font-extrabold">MichaÅ DomaÅski</h2><div class="mt-1 text-[11px] font-extrabold uppercase tracking-[0.05em] text-bcnn-red">Founder</div><a href="mailto:[email protected]" class="mt-2 inline-flex min-h-[34px] items-center border-b-2 border-bcnn-ink text-[13px] font-bold hover:border-bcnn-red">[email protected]</a></div></div><div class="border-t border-bcnn-line pt-[22px]"><div class="text-[11px] font-extrabold uppercase tracking-[0.09em] text-bcnn-muted">Prefer to talk first?</div><a class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-ink bg-bcnn-ink text-bcnn-cream hover:border-bcnn-red hover:bg-bcnn-red hover:text-bcnn-cream mt-3" href="https://calendar.app.google/1djPwzEwWeDLdLmRA" target="_blank" rel="noopener noreferrer">Book 30 minutes</a></div></aside></div></div><div aria-hidden="true" class="h-[3px] bg-bcnn-ink"></div><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] py-14"><h2 class="font-display text-[clamp(28px,4vw,44px)] font-black uppercase leading-[1.02] tracking-[-0.012em] [font-stretch:115%] max-w-[760px] !text-[clamp(26px,3.4vw,34px)] !leading-[1.05]">Four steps to a <span class="text-bcnn-red">scoped investigation.</span></h2><ol class="mt-10 flex list-none flex-wrap gap-px overflow-hidden"><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-red">Today</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">You send this form</h3></li><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-faint">Within 1 working day</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">We reply</h3></li><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-faint">This week</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">A 30-minute call</h3></li><li class="min-w-0 flex-[1_1_190px] bg-bcnn-cream px-5 pb-[26px] pt-[22px] shadow-[0_0_0_1px_#CFC4B2]"><div class="text-[11px] font-extrabold uppercase tracking-[0.07em] text-bcnn-faint">Before any work starts</div><h3 class="mt-3 text-[15px] font-extrabold uppercase leading-[1.25]">Investigation hypothesis and patterns identified</h3></li></ol></div></main><footer class="bg-bcnn-ink pb-[34px] pt-[clamp(48px,6vw,72px)] text-bcnn-cream"><div class="mx-auto w-full max-w-[1180px] px-[clamp(18px,4vw,32px)] "><h2 class="max-w-[820px] font-display text-[clamp(28px,4vw,44px)] font-black uppercase leading-[1.02] tracking-[-0.012em] [font-stretch:115%]">From fragmented data<br>to <span class="text-bcnn-red">decision-ready intelligence.</span></h2><div class="mt-9 flex flex-wrap gap-4"><a class="inline-flex min-h-[44px] items-center justify-center border-[3px] px-[22px] py-[14px] text-xs font-extrabold uppercase tracking-[0.08em] transition-colors border-bcnn-red bg-bcnn-red text-bcnn-cream hover:border-bcnn-red-deep hover:bg-bcnn-red-deep hover:text-bcnn-cream " href="/contact/?topic=footer" data-discover="true">Start the investigation</a></div><div class="mt-[clamp(40px,5vw,64px)] border-t-2 border-bcnn-ink-rule pt-6 text-[11px] font-bold uppercase tracking-[0.06em] text-bcnn-on-ink-faint">© 2026 BCNN. All rights reserved.</div></div></footer></div></div> 117 118 119</body></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.