iftrace: remove satirical imagery; use neutral svg diagrams

This commit is contained in:
root 2025-12-31 08:55:15 +00:00
parent e70d1ead43
commit 52c5163fc2
48 changed files with 309 additions and 232 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

View file

@ -0,0 +1,73 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900" fill="none" role="img" aria-label="IF.Trace verification flow diagram">
<defs>
<linearGradient id="g" x1="240" y1="180" x2="1360" y2="720" gradientUnits="userSpaceOnUse">
<stop stop-color="#60A5FA" stop-opacity="0.95" />
<stop offset="0.5" stop-color="#34D399" stop-opacity="0.85" />
<stop offset="1" stop-color="#F472B6" stop-opacity="0.85" />
</linearGradient>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="10" result="b" />
<feColorMatrix
in="b"
type="matrix"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.35 0"
/>
<feMerge>
<feMergeNode />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<style>
.card { fill: rgba(2,6,23,0.35); stroke: rgba(255,255,255,0.10); }
.title { fill: rgba(255,255,255,0.92); font: 600 28px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji","Segoe UI Emoji"; }
.sub { fill: rgba(255,255,255,0.70); font: 500 18px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.mono { fill: rgba(255,255,255,0.75); font: 500 16px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
.stroke { stroke: rgba(226,232,240,0.70); stroke-width: 2.5; }
</style>
</defs>
<rect x="0" y="0" width="1600" height="900" rx="36" fill="rgba(2,6,23,0.08)" />
<path
d="M250 740 C 520 560, 740 600, 920 420 C 1080 260, 1240 260, 1360 180"
stroke="url(#g)"
stroke-width="10"
stroke-linecap="round"
stroke-opacity="0.35"
filter="url(#glow)"
/>
<g>
<rect class="card" x="190" y="160" width="360" height="170" rx="22" />
<text class="title" x="230" y="218">1) Keep it private</text>
<text class="sub" x="230" y="254">You hold the source.</text>
<text class="mono" x="230" y="292">source_sha256</text>
</g>
<g>
<rect class="card" x="620" y="220" width="360" height="170" rx="22" />
<text class="title" x="660" y="278">2) Hash the output</text>
<text class="sub" x="660" y="314">What you will share.</text>
<text class="mono" x="660" y="352">output_sha256</text>
</g>
<g>
<rect class="card" x="1040" y="160" width="390" height="170" rx="22" />
<text class="title" x="1080" y="218">3) Publish a receipt</text>
<text class="sub" x="1080" y="254">No login required.</text>
<text class="mono" x="1080" y="292">/trace/…</text>
</g>
<g>
<rect class="card" x="900" y="540" width="530" height="190" rx="22" />
<text class="title" x="940" y="602">4) Third party verifies</text>
<text class="sub" x="940" y="638">They download bytes and compare hashes.</text>
<text class="mono" x="940" y="676">verified == (hashes match)</text>
</g>
<path class="stroke" d="M550 245 C 610 245, 600 260, 620 270" />
<path class="stroke" d="M980 270 C 1025 260, 1005 245, 1040 245" />
<path class="stroke" d="M1235 330 C 1235 400, 1170 450, 1100 540" />
<path class="stroke" d="M800 390 C 800 460, 880 500, 980 540" />
<text class="sub" x="190" y="800">Integrity claims only: byte-level verification, not interpretation.</text>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,49 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630" fill="none" role="img" aria-label="IF.Trace — Open verification for confidential work">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="1200" y2="630" gradientUnits="userSpaceOnUse">
<stop stop-color="#0B1020" />
<stop offset="0.55" stop-color="#07122A" />
<stop offset="1" stop-color="#0B1020" />
</linearGradient>
<linearGradient id="g" x1="210" y1="110" x2="980" y2="520" gradientUnits="userSpaceOnUse">
<stop stop-color="#60A5FA" />
<stop offset="0.55" stop-color="#34D399" />
<stop offset="1" stop-color="#F472B6" />
</linearGradient>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="18" result="b" />
<feColorMatrix
in="b"
type="matrix"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.45 0"
/>
<feMerge>
<feMergeNode />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<style>
.h1 { fill: rgba(255,255,255,0.96); font: 800 88px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; letter-spacing: -0.02em; }
.sub { fill: rgba(255,255,255,0.78); font: 600 30px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.small { fill: rgba(255,255,255,0.68); font: 600 22px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.mono { fill: rgba(226,232,240,0.80); font: 600 18px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
</style>
</defs>
<rect x="0" y="0" width="1200" height="630" rx="44" fill="url(#bg)" />
<path
d="M165 505 C 380 335, 520 360, 670 250 C 800 155, 930 160, 1040 105"
stroke="url(#g)"
stroke-width="12"
stroke-linecap="round"
stroke-opacity="0.45"
filter="url(#glow)"
/>
<text class="small" x="110" y="140">IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</text>
<text class="h1" x="110" y="260">IF.Trace</text>
<text class="sub" x="110" y="320">Confidential documents → open verification</text>
<text class="mono" x="110" y="390">source_sha256 → output_sha256 → /trace/…</text>
<text class="small" x="110" y="460">3rd party audit trails, without publishing the source.</text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 KiB

View file

@ -11,7 +11,7 @@ type Props = {
const { title, description, ogImage, lang = "en" } = Astro.props;
const canonical = new URL(Astro.url.pathname, Astro.site ?? Astro.url).toString();
const og = ogImage ?? "https://infrafabric.io/assets/red-team-doc-1024-559.jpg";
const og = ogImage ?? "https://infrafabric.io/assets/iftrace-og.svg";
---
<!doctype html>

View file

@ -34,7 +34,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
},
{ text: "Developer surface", href: "/api/", icon: "code" },
]}
image={{ src: "/assets/red-team-doc-1024-559.jpg", alt: "Red Team dossier cover (example)" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Verification flow diagram (example)" }}
>
<p>Why this exists</p>
<h1>We built the skeleton first.</h1>
@ -200,4 +200,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
</SectionActions>
</Section>
</BaseLayout>

View file

@ -17,7 +17,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "See a live receipt", href: "https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n", target: "_blank", icon: "sparkles" },
{ text: "Browse sectors", href: "/verticals/", icon: "layers" },
]}
image={{ src: "/assets/red-team-stamp-600.png", alt: "EYES ONLY stamp" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Verification flow diagram (example)" }}
>
<p>Public receipt surface (no login)</p>
<h1>Stable URLs, predictable verification.</h1>
@ -174,4 +174,3 @@ python3 iftrace.py verify trace_bundle_&lt;id&gt;_standard.tar.gz --expected-sha
</SectionContent>
</Section>
</BaseLayout>

View file

@ -18,7 +18,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "Surface publique", href: "/api/", icon: "code" },
{ text: "Voir une trace", href: "https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n", target: "_blank", icon: "sparkles" },
]}
image={{ src: "/assets/red-team-stamp-600.png", alt: "EYES ONLY (exemple)" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Schéma de vérification (exemple)" }}
>
<p>Gouvernance ouverte</p>
<h1>Lisible par les gouvernés.</h1>
@ -62,4 +62,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<Button href="/fr/" variant="secondary"><Icon name="arrow-left" /> Retour (FR)</Button>
</div>
</BaseLayout>

View file

@ -16,7 +16,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "Voir une trace", href: "https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n", target: "_blank", icon: "sparkles" },
{ text: "Gouvernance", href: "/fr/governance/", icon: "shield-check" },
]}
image={{ src: "/assets/red-team-doc-1024-559.jpg", alt: "Couverture dossier (exemple)" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Schéma de vérification (exemple)" }}
>
<p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p>
<h1>Traçable. Transparent. Fiable.</h1>
@ -32,4 +32,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
</div>
</div>
</BaseLayout>

View file

@ -34,7 +34,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
},
{ text: "Public share surface", href: "/api/", icon: "code" },
]}
image={{ src: "/assets/red-team-stamp-600.png", alt: "EYES ONLY stamp (example)" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Verification flow diagram (example)" }}
>
<p>Open governance</p>
<h1>Legible to the governed.</h1>
@ -210,4 +210,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
</SectionContent>
</Section>
</BaseLayout>

View file

@ -21,8 +21,8 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "Read the paper", href: "/whitepaper/", icon: "file-text" },
]}
image={{
src: "/assets/red-team-doc-1024-559.jpg",
alt: "Red Team dossier cover (example source document)",
src: "/assets/iftrace-diagram.svg",
alt: "Verification flow diagram (example)",
}}
>
<p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p>
@ -101,8 +101,8 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "Browse sectors", href: "/verticals/", icon: "layers" },
]}
image={{
src: "/assets/red-team-stamp-600.png",
alt: "EYES ONLY stamp (example)",
src: "/assets/iftrace-diagram.svg",
alt: "Verification flow diagram (example)",
}}
>
<p>How it works</p>
@ -113,4 +113,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
</p>
</Content>
</BaseLayout>

View file

@ -11,7 +11,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "Email for pricing", href: "mailto:ds@infrafabric.io?subject=IF.Trace%20pricing", icon: "mail" },
{ text: "Browse sectors", href: "/verticals/", icon: "layers" },
]}
image={{ src: "/assets/red-team-doc-1024-559.jpg", alt: "Red Team dossier cover (example)" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Verification flow diagram (example)" }}
>
<p>A simple model, on purpose</p>
<h1>Pricing</h1>
@ -66,4 +66,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
</p>
</Pricings>
</BaseLayout>

View file

@ -45,8 +45,8 @@ const { vertical } = Astro.props as { vertical: Vertical };
{ text: "Developer surface", href: "/api/", icon: "code" },
]}
image={{
src: "/assets/red-team-doc-1024-559.jpg",
alt: "Red Team dossier cover (example source document)",
src: "/assets/iftrace-diagram.svg",
alt: "Verification flow diagram (example)",
}}
>
<p>{vertical.kicker}</p>
@ -125,4 +125,3 @@ const { vertical } = Astro.props as { vertical: Vertical };
)}
</Section>
</BaseLayout>

View file

@ -15,8 +15,8 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{ text: "Developer surface", href: "/api/", icon: "code" },
]}
image={{
src: "/assets/red-team-doc-1024-559.jpg",
alt: "Red Team dossier cover (example source document)",
src: "/assets/iftrace-diagram.svg",
alt: "Verification flow diagram (example)",
}}
>
<p>Same mechanism, different pressure</p>
@ -126,4 +126,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<p>Same mechanism, different stakes.</p>
</Features>
</BaseLayout>

View file

@ -31,7 +31,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
icon: "arrow-up-right",
},
]}
image={{ src: "/assets/eyes-only-dave.png", alt: "EYES ONLY // DAVE stamp" }}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Verification flow diagram (example)" }}
>
<p>Long-form spec + receipts</p>
<h1>The IF.Trace whitepaper.</h1>
@ -223,4 +223,3 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
</SectionGrid>
</Section>
</BaseLayout>

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/about/"><title>IF.Trace — About</title><meta name="description" content="IF.Trace is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."><meta property="og:title" content="IF.Trace — About"><meta property="og:description" content="IF.Trace is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/about/"><title>IF.Trace — About</title><meta name="description" content="IF.Trace is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."><meta property="og:title" content="IF.Trace — About"><meta property="og:description" content="IF.Trace is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/about/">Why this exists<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -19,7 +19,7 @@ Most systems produce answers and call that “governance”. IF.Trace starts
</svg>Try a live trace</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Who / Why / What / Where / When / How"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Who / Why / What / Where / When / How</p> <h2>A receipt-first protocol.</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-2 @5xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Who</h3> <p class="text-muted-foreground text-sm">
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Who / Why / What / Where / When / How"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Who / Why / What / Where / When / How</p> <h2>A receipt-first protocol.</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-2 @5xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Who</h3> <p class="text-muted-foreground text-sm">
InfraFabric operators shipping public, nologin verification artifacts.
</p> </div> </div> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Why</h3> <p class="text-muted-foreground text-sm">
Because “trust us” fails the moment a reviewer asks for proof.

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/api/"><title>IF.Trace — Developers / API</title><meta name="description" content="Developer-facing overview of the IF.Trace public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."><meta property="og:title" content="IF.Trace — Developers / API"><meta property="og:description" content="Developer-facing overview of the IF.Trace public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/api/"><title>IF.Trace — Developers / API</title><meta name="description" content="Developer-facing overview of the IF.Trace public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."><meta property="og:title" content="IF.Trace — Developers / API"><meta property="og:description" content="Developer-facing overview of the IF.Trace public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/">Public receipt surface (no login)<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -17,7 +17,7 @@ IF.Trace is intentionally boring from a developer perspective: compute
<path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" />
<path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" />
<path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" />
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="EYES ONLY stamp" src="/assets/red-team-stamp-600.png" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Verification meaning"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>What “VERIFIED” means (black/white)</p> <h2>Integrity, not interpretation.</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Verified</h3> <p class="text-muted-foreground text-sm">
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Verification meaning"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>What “VERIFIED” means (black/white)</p> <h2>Integrity, not interpretation.</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Verified</h3> <p class="text-muted-foreground text-sm">
The bytes you can download hash to the same values shown on the trace receipt.
</p> </div> </div> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Quantum ready</h3> <p class="text-muted-foreground text-sm">
A postquantum signature receipt can be added (integrity hashes still stand).

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

View file

@ -0,0 +1,73 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900" fill="none" role="img" aria-label="IF.Trace verification flow diagram">
<defs>
<linearGradient id="g" x1="240" y1="180" x2="1360" y2="720" gradientUnits="userSpaceOnUse">
<stop stop-color="#60A5FA" stop-opacity="0.95" />
<stop offset="0.5" stop-color="#34D399" stop-opacity="0.85" />
<stop offset="1" stop-color="#F472B6" stop-opacity="0.85" />
</linearGradient>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="10" result="b" />
<feColorMatrix
in="b"
type="matrix"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.35 0"
/>
<feMerge>
<feMergeNode />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<style>
.card { fill: rgba(2,6,23,0.35); stroke: rgba(255,255,255,0.10); }
.title { fill: rgba(255,255,255,0.92); font: 600 28px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji","Segoe UI Emoji"; }
.sub { fill: rgba(255,255,255,0.70); font: 500 18px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.mono { fill: rgba(255,255,255,0.75); font: 500 16px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
.stroke { stroke: rgba(226,232,240,0.70); stroke-width: 2.5; }
</style>
</defs>
<rect x="0" y="0" width="1600" height="900" rx="36" fill="rgba(2,6,23,0.08)" />
<path
d="M250 740 C 520 560, 740 600, 920 420 C 1080 260, 1240 260, 1360 180"
stroke="url(#g)"
stroke-width="10"
stroke-linecap="round"
stroke-opacity="0.35"
filter="url(#glow)"
/>
<g>
<rect class="card" x="190" y="160" width="360" height="170" rx="22" />
<text class="title" x="230" y="218">1) Keep it private</text>
<text class="sub" x="230" y="254">You hold the source.</text>
<text class="mono" x="230" y="292">source_sha256</text>
</g>
<g>
<rect class="card" x="620" y="220" width="360" height="170" rx="22" />
<text class="title" x="660" y="278">2) Hash the output</text>
<text class="sub" x="660" y="314">What you will share.</text>
<text class="mono" x="660" y="352">output_sha256</text>
</g>
<g>
<rect class="card" x="1040" y="160" width="390" height="170" rx="22" />
<text class="title" x="1080" y="218">3) Publish a receipt</text>
<text class="sub" x="1080" y="254">No login required.</text>
<text class="mono" x="1080" y="292">/trace/…</text>
</g>
<g>
<rect class="card" x="900" y="540" width="530" height="190" rx="22" />
<text class="title" x="940" y="602">4) Third party verifies</text>
<text class="sub" x="940" y="638">They download bytes and compare hashes.</text>
<text class="mono" x="940" y="676">verified == (hashes match)</text>
</g>
<path class="stroke" d="M550 245 C 610 245, 600 260, 620 270" />
<path class="stroke" d="M980 270 C 1025 260, 1005 245, 1040 245" />
<path class="stroke" d="M1235 330 C 1235 400, 1170 450, 1100 540" />
<path class="stroke" d="M800 390 C 800 460, 880 500, 980 540" />
<text class="sub" x="190" y="800">Integrity claims only: byte-level verification, not interpretation.</text>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,49 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630" fill="none" role="img" aria-label="IF.Trace — Open verification for confidential work">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="1200" y2="630" gradientUnits="userSpaceOnUse">
<stop stop-color="#0B1020" />
<stop offset="0.55" stop-color="#07122A" />
<stop offset="1" stop-color="#0B1020" />
</linearGradient>
<linearGradient id="g" x1="210" y1="110" x2="980" y2="520" gradientUnits="userSpaceOnUse">
<stop stop-color="#60A5FA" />
<stop offset="0.55" stop-color="#34D399" />
<stop offset="1" stop-color="#F472B6" />
</linearGradient>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="18" result="b" />
<feColorMatrix
in="b"
type="matrix"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.45 0"
/>
<feMerge>
<feMergeNode />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<style>
.h1 { fill: rgba(255,255,255,0.96); font: 800 88px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; letter-spacing: -0.02em; }
.sub { fill: rgba(255,255,255,0.78); font: 600 30px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.small { fill: rgba(255,255,255,0.68); font: 600 22px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial; }
.mono { fill: rgba(226,232,240,0.80); font: 600 18px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
</style>
</defs>
<rect x="0" y="0" width="1200" height="630" rx="44" fill="url(#bg)" />
<path
d="M165 505 C 380 335, 520 360, 670 250 C 800 155, 930 160, 1040 105"
stroke="url(#g)"
stroke-width="12"
stroke-linecap="round"
stroke-opacity="0.45"
filter="url(#glow)"
/>
<text class="small" x="110" y="140">IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</text>
<text class="h1" x="110" y="260">IF.Trace</text>
<text class="sub" x="110" y="320">Confidential documents → open verification</text>
<text class="mono" x="110" y="390">source_sha256 → output_sha256 → /trace/…</text>
<text class="small" x="110" y="460">3rd party audit trails, without publishing the source.</text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 KiB

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="fr" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/fr/governance/"><title>IF.Trace — Gouvernance ouverte</title><meta name="description" content="La gouvernance ouverte signifie quun tiers peut vérifier ce qui sest passé sans login. IF.Trace est lossature de reçus : trace, liens stables, bundles horsligne."><meta property="og:title" content="IF.Trace — Gouvernance ouverte"><meta property="og:description" content="La gouvernance ouverte signifie quun tiers peut vérifier ce qui sest passé sans login. IF.Trace est lossature de reçus : trace, liens stables, bundles horsligne."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="fr" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/fr/governance/"><title>IF.Trace — Gouvernance ouverte</title><meta name="description" content="La gouvernance ouverte signifie quun tiers peut vérifier ce qui sest passé sans login. IF.Trace est lossature de reçus : trace, liens stables, bundles horsligne."><meta property="og:title" content="IF.Trace — Gouvernance ouverte"><meta property="og:description" content="La gouvernance ouverte signifie quun tiers peut vérifier ce qui sest passé sans login. IF.Trace est lossature de reçus : trace, liens stables, bundles horsligne."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/fr/governance/">FR / Gouvernance<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" />
@ -15,7 +15,7 @@ Une “gouvernance” qui ne se lit quen interne nest pas une preuve.
<path d="M20 2v4" />
<path d="M22 4h-4" />
<circle cx="4" cy="20" r="2" />
</svg>Voir une trace</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="EYES ONLY (exemple)" src="/assets/red-team-stamp-600.png" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Stack de gouvernance (FR)"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>La stack</p> <h2>Où IF.Trace se place.</h2> </div> <div> <ul class="list-none space-y-2 p-0"> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
</svg>Voir une trace</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Schéma de vérification (exemple)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Stack de gouvernance (FR)"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>La stack</p> <h2>Où IF.Trace se place.</h2> </div> <div> <ul class="list-none space-y-2 p-0"> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 6 9 17l-5-5" />
</svg> <strong>IF.Trace (reçus)</strong> : source_sha256 ↔ output_sha256, trace_id, shareId.</li> <li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 6 9 17l-5-5" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="fr" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/fr/"><title>IF.Trace — Vérification ouverte</title><meta name="description" content="IF.Trace (Traceable, Transparent, Trustworthy) est une couche de gouvernance “receipt-first” : relier une source à un output via une trace vérifiable, des liens publics sans login et des bundles horsligne."><meta property="og:title" content="IF.Trace — Vérification ouverte"><meta property="og:description" content="IF.Trace (Traceable, Transparent, Trustworthy) est une couche de gouvernance “receipt-first” : relier une source à un output via une trace vérifiable, des liens publics sans login et des bundles horsligne."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="fr" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/fr/"><title>IF.Trace — Vérification ouverte</title><meta name="description" content="IF.Trace (Traceable, Transparent, Trustworthy) est une couche de gouvernance “receipt-first” : relier une source à un output via une trace vérifiable, des liens publics sans login et des bundles horsligne."><meta property="og:title" content="IF.Trace — Vérification ouverte"><meta property="og:description" content="IF.Trace (Traceable, Transparent, Trustworthy) est une couche de gouvernance “receipt-first” : relier une source à un output via une trace vérifiable, des liens publics sans login et des bundles horsligne."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/fr/">FR<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
@ -14,7 +14,7 @@
</svg>Voir une trace</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/fr/governance/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" />
<path d="m9 12 2 2 4-4" />
</svg>Gouvernance</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Couverture dossier (exemple)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <div class="mx-auto max-w-4xl px-6 pb-16 text-center text-sm text-white/60">
</svg>Gouvernance</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Schéma de vérification (exemple)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <div class="mx-auto max-w-4xl px-6 pb-16 text-center text-sm text-white/60">
Langue : FR (version courte). Langlais reste la version complète pour le moment.
<div class="mt-4 flex flex-wrap justify-center gap-3"> <a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-9 px-4 py-2 has-[>svg]:px-3" href="/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m12 19-7-7 7-7" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/governance/"><title>IF.Trace — Open Governance</title><meta name="description" content="Open governance means third parties can verify what happened without your login. IF.Trace is the receipt backbone: trace pages, stable no-login links, and offline bundles."><meta property="og:title" content="IF.Trace — Open Governance"><meta property="og:description" content="Open governance means third parties can verify what happened without your login. IF.Trace is the receipt backbone: trace pages, stable no-login links, and offline bundles."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/governance/"><title>IF.Trace — Open Governance</title><meta name="description" content="Open governance means third parties can verify what happened without your login. IF.Trace is the receipt backbone: trace pages, stable no-login links, and offline bundles."><meta property="og:title" content="IF.Trace — Open Governance"><meta property="og:description" content="Open governance means third parties can verify what happened without your login. IF.Trace is the receipt backbone: trace pages, stable no-login links, and offline bundles."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/governance/">Open governance<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -16,7 +16,7 @@
</svg>Try a live trace</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Public share surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="EYES ONLY stamp (example)" src="/assets/red-team-stamp-600.png" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="What this page is"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Black/white</p> <h2>What this page is (and is not).</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Goal</h3> <p class="text-muted-foreground text-sm">
</svg>Public share surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="What this page is"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Black/white</p> <h2>What this page is (and is not).</h2> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] @3xl:grid-cols-3"> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Goal</h3> <p class="text-muted-foreground text-sm">
Make thirdparty verification possible without credentials.
</p> </div> </div> <div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Mechanism</h3> <p class="text-muted-foreground text-sm">
Hashes + trace receipts + stable URLs + optional offline bundles.

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/"><title>IF.Trace — Open Verification</title><meta name="description" content="IF.Trace creates open verification for confidential work: thirdparty, unfalsifiable audit trails without publishing the source."><meta property="og:title" content="IF.Trace — Open Verification"><meta property="og:description" content="IF.Trace creates open verification for confidential work: thirdparty, unfalsifiable audit trails without publishing the source."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/"><title>IF.Trace — Open Verification</title><meta name="description" content="IF.Trace creates open verification for confidential work: thirdparty, unfalsifiable audit trails without publishing the source."><meta property="og:title" content="IF.Trace — Open Verification"><meta property="og:description" content="IF.Trace creates open verification for confidential work: thirdparty, unfalsifiable audit trails without publishing the source."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/api/">Nologin verification<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -15,7 +15,7 @@
<path d="M10 9H8" />
<path d="M16 13H8" />
<path d="M16 17H8" />
</svg>Read the paper</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>What IF.Trace is</p> <h2>A verification layer for thirdparty pressure.</h2> <p>
</svg>Read the paper</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>What IF.Trace is</p> <h2>A verification layer for thirdparty pressure.</h2> <p>
IF.Trace doesnt “solve compliance.” It solves the universal problem
underneath compliance: third parties demanding proof without joining your
internal world.
@ -71,4 +71,4 @@ The output can be public while the source stays confidential. The proof
<path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" />
<path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" />
<path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" />
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="EYES ONLY stamp (example)" src="/assets/red-team-stamp-600.png" sizes="(min-width: 1536px) 1536px, 100vw"> </div> </section> </main> <a href="mailto:ds@infrafabric.io?subject=IF.Trace%20contact" class="fixed bottom-6 right-6 inline-flex h-10 items-center justify-center rounded-full border border-white/10 bg-slate-950/50 px-4 text-xs font-medium text-white/80 backdrop-blur hover:bg-slate-950/70 hover:text-white">contact</a> </body></html>
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw"> </div> </section> </main> <a href="mailto:ds@infrafabric.io?subject=IF.Trace%20contact" class="fixed bottom-6 right-6 inline-flex h-10 items-center justify-center rounded-full border border-white/10 bg-slate-950/50 px-4 text-xs font-medium text-white/80 backdrop-blur hover:bg-slate-950/70 hover:text-white">contact</a> </body></html>

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/pricing/"><title>IF.Trace — Pricing</title><meta name="description" content="Simple pricing for IF.Trace (early access)."><meta property="og:title" content="IF.Trace — Pricing"><meta property="og:description" content="Simple pricing for IF.Trace (early access)."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/pricing/"><title>IF.Trace — Pricing</title><meta name="description" content="Simple pricing for IF.Trace (early access)."><meta property="og:title" content="IF.Trace — Pricing"><meta property="og:description" content="Simple pricing for IF.Trace (early access)."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="mailto:ds@infrafabric.io?subject=IF.Trace%20pricing">Early access<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -11,7 +11,7 @@
<path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" />
<path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" />
<path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" />
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Early access</p> <h2>We charge for setup, not for verification clicks.</h2> <p>
</svg>Browse sectors</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Early access</p> <h2>We charge for setup, not for verification clicks.</h2> <p>
Setup + governance configuration, integration support, and proof-surface
hardening. Third-party checking should stay cheap.
</p> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))]"><div data-slot="tile" data-variant="floating" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100 justify-between"> <div class="relative z-10 flex flex-col gap-3"> <h3 class="font-semibold text-xl">Starter</h3> <p class="text-muted-foreground text-sm">Proof surface for one workflow.</p> <div class="flex flex-wrap items-center gap-x-2"> <span class="leading-tight text-foreground">Talk to us</span> </div> <ul class="list-disc space-y-2 mt-4 text-sm"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em]"> <svg class="-mt-0.5" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/review/"><title>IF.Trace — External Review Packet</title><meta name="description" content="Single-file packet for external reviewers: context, links, and questions."><meta property="og:title" content="IF.Trace — External Review Packet"><meta property="og:description" content="Single-file packet for external reviewers: context, links, and questions."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/review/"><title>IF.Trace — External Review Packet</title><meta name="description" content="Single-file packet for external reviewers: context, links, and questions."><meta property="og:title" content="IF.Trace — External Review Packet"><meta property="og:description" content="Single-file packet for external reviewers: context, links, and questions."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="External review packet"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-4xl text-lg [&#38;_h1]:text-4xl @5xl:[&#38;_h1]:text-5xl [&#38;_h2]:text-4xl [&#38;_h3]:text-3xl [&#38;_h4]:text-2xl [&#38;_h5]:text-xl [&#38;_h6]:text-lg text-center"> <p>External review</p> <h1>IF.Trace review packet (single file)</h1> <p>
Raw markdown: <a class="text-primary hover:underline" href="/review/index.md">/review/index.md</a> </p> </div> <div class="mt-10 w-full max-w-5xl rounded-xl border bg-card p-6 text-card-foreground shadow-sm"> <pre class="whitespace-pre-wrap break-words text-sm leading-relaxed text-white/90"><code># IF.Trace Website — External Review Packet

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/ai/"><title>IF.Trace — AI Product Companies</title><meta name="description" content="When an output is contested (“why did it say that?”), you need provenance. IF.Trace supports verifiable linkage from inputs to outputs."><meta property="og:title" content="IF.Trace — AI Product Companies"><meta property="og:description" content="When an output is contested (“why did it say that?”), you need provenance. IF.Trace supports verifiable linkage from inputs to outputs."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/ai/"><title>IF.Trace — AI Product Companies</title><meta name="description" content="When an output is contested (“why did it say that?”), you need provenance. IF.Trace supports verifiable linkage from inputs to outputs."><meta property="og:title" content="IF.Trace — AI Product Companies"><meta property="og:description" content="When an output is contested (“why did it say that?”), you need provenance. IF.Trace supports verifiable linkage from inputs to outputs."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/enterprise/"><title>IF.Trace — Enterprise</title><meta name="description" content="In enterprise environments, audit friction becomes a tax on delivery. IF.Trace provides proof that third parties can verify without joining your internal world."><meta property="og:title" content="IF.Trace — Enterprise"><meta property="og:description" content="In enterprise environments, audit friction becomes a tax on delivery. IF.Trace provides proof that third parties can verify without joining your internal world."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/enterprise/"><title>IF.Trace — Enterprise</title><meta name="description" content="In enterprise environments, audit friction becomes a tax on delivery. IF.Trace provides proof that third parties can verify without joining your internal world."><meta property="og:title" content="IF.Trace — Enterprise"><meta property="og:description" content="In enterprise environments, audit friction becomes a tax on delivery. IF.Trace provides proof that third parties can verify without joining your internal world."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/finance/"><title>IF.Trace — Financial Services</title><meta name="description" content="Regulated environments need evidence that survives scrutiny. IF.Trace supports verifiable artifacts without fragile internal access dependencies."><meta property="og:title" content="IF.Trace — Financial Services"><meta property="og:description" content="Regulated environments need evidence that survives scrutiny. IF.Trace supports verifiable artifacts without fragile internal access dependencies."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/finance/"><title>IF.Trace — Financial Services</title><meta name="description" content="Regulated environments need evidence that survives scrutiny. IF.Trace supports verifiable artifacts without fragile internal access dependencies."><meta property="og:title" content="IF.Trace — Financial Services"><meta property="og:description" content="Regulated environments need evidence that survives scrutiny. IF.Trace supports verifiable artifacts without fragile internal access dependencies."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/government/"><title>IF.Trace — Government</title><meta name="description" content="When decisions are reviewed months later, the only thing that matters is what you can still prove. IF.Trace produces stable proof surfaces that survive staffing changes, vendors, and audits."><meta property="og:title" content="IF.Trace — Government"><meta property="og:description" content="When decisions are reviewed months later, the only thing that matters is what you can still prove. IF.Trace produces stable proof surfaces that survive staffing changes, vendors, and audits."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/government/"><title>IF.Trace — Government</title><meta name="description" content="When decisions are reviewed months later, the only thing that matters is what you can still prove. IF.Trace produces stable proof surfaces that survive staffing changes, vendors, and audits."><meta property="og:title" content="IF.Trace — Government"><meta property="og:description" content="When decisions are reviewed months later, the only thing that matters is what you can still prove. IF.Trace produces stable proof surfaces that survive staffing changes, vendors, and audits."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/healthcare/"><title>IF.Trace — Healthcare</title><meta name="description" content="Healthcare environments require strict boundaries: privacy, consent, and auditability. IF.Trace supports verification without broad data exposure."><meta property="og:title" content="IF.Trace — Healthcare"><meta property="og:description" content="Healthcare environments require strict boundaries: privacy, consent, and auditability. IF.Trace supports verification without broad data exposure."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/healthcare/"><title>IF.Trace — Healthcare</title><meta name="description" content="Healthcare environments require strict boundaries: privacy, consent, and auditability. IF.Trace supports verification without broad data exposure."><meta property="og:title" content="IF.Trace — Healthcare"><meta property="og:description" content="Healthcare environments require strict boundaries: privacy, consent, and auditability. IF.Trace supports verification without broad data exposure."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/"><title>IF.Trace — Sectors</title><meta name="description" content="Sector fit overview for IF.Trace: thirdparty trust pressure mapped to receipts, bundles, and verification."><meta property="og:title" content="IF.Trace — Sectors"><meta property="og:description" content="Sector fit overview for IF.Trace: thirdparty trust pressure mapped to receipts, bundles, and verification."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/"><title>IF.Trace — Sectors</title><meta name="description" content="Sector fit overview for IF.Trace: thirdparty trust pressure mapped to receipts, bundles, and verification."><meta property="og:title" content="IF.Trace — Sectors"><meta property="og:description" content="Sector fit overview for IF.Trace: thirdparty trust pressure mapped to receipts, bundles, and verification."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/">Same mechanism, different pressure<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -16,7 +16,7 @@ IF.Trace doesnt “solve compliance.” It solves the universal problem
</svg>Try a live trace</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Browse by sector</p> <h2>Who the buyer is.</h2> <p>The same receipts, different pressure.</p> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))]"><div data-slot="tile" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 relative flex flex-col gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all [a]:hover:ring-accent/50 [a]:hover:bg-accent/50 rounded-sm bg-transparent [a]:hover:ring-12 items-center"> <div data-slot="tile-media" data-variant="icon" class="flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=tile-description]]/tile:translate-y-0.5 group-has-[[data-slot=tile-description]]/tile:self-start [&#38;_svg]:pointer-events-none transition-opacity duration-100 [&#38;:is(a:hover>&#38;)]:opacity-75 relative overflow-hidden bg-muted size-8 rounded-sm border [&#38;_svg:not([class*='size-'])]:size-4"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base text-center"> <p>Browse by sector</p> <h2>Who the buyer is.</h2> <p>The same receipts, different pressure.</p> </div> </div> <div class="grid w-full gap-6 grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))]"><div data-slot="tile" class="group/tile focus-visible:border-ring focus-visible:ring-ring/50 relative flex flex-col gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all [a]:hover:ring-accent/50 [a]:hover:bg-accent/50 rounded-sm bg-transparent [a]:hover:ring-12 items-center"> <div data-slot="tile-media" data-variant="icon" class="flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=tile-description]]/tile:translate-y-0.5 group-has-[[data-slot=tile-description]]/tile:self-start [&#38;_svg]:pointer-events-none transition-opacity duration-100 [&#38;:is(a:hover>&#38;)]:opacity-75 relative overflow-hidden bg-muted size-8 rounded-sm border [&#38;_svg:not([class*='size-'])]:size-4"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M10 18v-7" />
<path d="M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" />
<path d="M14 18v-7" />

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/legal/"><title>IF.Trace — Legal</title><meta name="description" content="Legal work depends on what can be proven. IF.Trace provides a simple, verifiable custody layer for documents and derived outputs."><meta property="og:title" content="IF.Trace — Legal"><meta property="og:description" content="Legal work depends on what can be proven. IF.Trace provides a simple, verifiable custody layer for documents and derived outputs."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/legal/"><title>IF.Trace — Legal</title><meta name="description" content="Legal work depends on what can be proven. IF.Trace provides a simple, verifiable custody layer for documents and derived outputs."><meta property="og:title" content="IF.Trace — Legal"><meta property="og:description" content="Legal work depends on what can be proven. IF.Trace provides a simple, verifiable custody layer for documents and derived outputs."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/professional-services/"><title>IF.Trace — Professional Services</title><meta name="description" content="When advice, drafts, and deliverables become contested, you need custody that holds up. IF.Trace makes your outputs verifiable without exposing your internal process."><meta property="og:title" content="IF.Trace — Professional Services"><meta property="og:description" content="When advice, drafts, and deliverables become contested, you need custody that holds up. IF.Trace makes your outputs verifiable without exposing your internal process."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/professional-services/"><title>IF.Trace — Professional Services</title><meta name="description" content="When advice, drafts, and deliverables become contested, you need custody that holds up. IF.Trace makes your outputs verifiable without exposing your internal process."><meta property="og:title" content="IF.Trace — Professional Services"><meta property="og:description" content="When advice, drafts, and deliverables become contested, you need custody that holds up. IF.Trace makes your outputs verifiable without exposing your internal process."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/public-sector/"><title>IF.Trace — Public Sector</title><meta name="description" content="Public accountability is a thirdparty problem: reviewers need proof without getting access to your internal systems. IF.Trace turns “trust us” into receipts that a stranger can verify."><meta property="og:title" content="IF.Trace — Public Sector"><meta property="og:description" content="Public accountability is a thirdparty problem: reviewers need proof without getting access to your internal systems. IF.Trace turns “trust us” into receipts that a stranger can verify."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/public-sector/"><title>IF.Trace — Public Sector</title><meta name="description" content="Public accountability is a thirdparty problem: reviewers need proof without getting access to your internal systems. IF.Trace turns “trust us” into receipts that a stranger can verify."><meta property="og:title" content="IF.Trace — Public Sector"><meta property="og:description" content="Public accountability is a thirdparty problem: reviewers need proof without getting access to your internal systems. IF.Trace turns “trust us” into receipts that a stranger can verify."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/research/"><title>IF.Trace — Research</title><meta name="description" content="Research reviewers need proof, not your whole environment. IF.Trace makes it practical to share verifiable outputs while keeping raw data controlled."><meta property="og:title" content="IF.Trace — Research"><meta property="og:description" content="Research reviewers need proof, not your whole environment. IF.Trace makes it practical to share verifiable outputs while keeping raw data controlled."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/research/"><title>IF.Trace — Research</title><meta name="description" content="Research reviewers need proof, not your whole environment. IF.Trace makes it practical to share verifiable outputs while keeping raw data controlled."><meta property="og:title" content="IF.Trace — Research"><meta property="og:description" content="Research reviewers need proof, not your whole environment. IF.Trace makes it practical to share verifiable outputs while keeping raw data controlled."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/saas/"><title>IF.Trace — B2B SaaS (SOC 2 / ISO)</title><meta name="description" content="Compliance is often a third-party proof problem. IF.Trace makes it easier to show audit evidence without turning your internal systems into public surface area."><meta property="og:title" content="IF.Trace — B2B SaaS (SOC 2 / ISO)"><meta property="og:description" content="Compliance is often a third-party proof problem. IF.Trace makes it easier to show audit evidence without turning your internal systems into public surface area."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/saas/"><title>IF.Trace — B2B SaaS (SOC 2 / ISO)</title><meta name="description" content="Compliance is often a third-party proof problem. IF.Trace makes it easier to show audit evidence without turning your internal systems into public surface area."><meta property="og:title" content="IF.Trace — B2B SaaS (SOC 2 / ISO)"><meta property="og:description" content="Compliance is often a third-party proof problem. IF.Trace makes it easier to show audit evidence without turning your internal systems into public surface area."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/sciences/"><title>IF.Trace — Sciences</title><meta name="description" content="Science is adversarial in the best way: other people must be able to check your work. IF.Trace keeps the proof surface simple and stable."><meta property="og:title" content="IF.Trace — Sciences"><meta property="og:description" content="Science is adversarial in the best way: other people must be able to check your work. IF.Trace keeps the proof surface simple and stable."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/sciences/"><title>IF.Trace — Sciences</title><meta name="description" content="Science is adversarial in the best way: other people must be able to check your work. IF.Trace keeps the proof surface simple and stable."><meta property="og:title" content="IF.Trace — Sciences"><meta property="og:description" content="Science is adversarial in the best way: other people must be able to check your work. IF.Trace keeps the proof surface simple and stable."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/secops/"><title>IF.Trace — SecOps / SOC</title><meta name="description" content="Security teams summarize fast under pressure. IF.Trace keeps summaries tied to underlying evidence so post-incident review stays grounded."><meta property="og:title" content="IF.Trace — SecOps / SOC"><meta property="og:description" content="Security teams summarize fast under pressure. IF.Trace keeps summaries tied to underlying evidence so post-incident review stays grounded."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/secops/"><title>IF.Trace — SecOps / SOC</title><meta name="description" content="Security teams summarize fast under pressure. IF.Trace keeps summaries tied to underlying evidence so post-incident review stays grounded."><meta property="og:title" content="IF.Trace — SecOps / SOC"><meta property="og:description" content="Security teams summarize fast under pressure. IF.Trace keeps summaries tied to underlying evidence so post-incident review stays grounded."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/supply-chain/"><title>IF.Trace — Industrial / Supply Chain</title><meta name="description" content="In complex supply chains, custody breaks at handoff points. IF.Trace makes proof portable so verification survives contractor and vendor boundaries."><meta property="og:title" content="IF.Trace — Industrial / Supply Chain"><meta property="og:description" content="In complex supply chains, custody breaks at handoff points. IF.Trace makes proof portable so verification survives contractor and vendor boundaries."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/verticals/supply-chain/"><title>IF.Trace — Industrial / Supply Chain</title><meta name="description" content="In complex supply chains, custody breaks at handoff points. IF.Trace makes proof portable so verification survives contractor and vendor boundaries."><meta property="og:title" content="IF.Trace — Industrial / Supply Chain"><meta property="og:description" content="In complex supply chains, custody breaks at handoff points. IF.Trace makes proof portable so verification survives contractor and vendor boundaries."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
[data-slot=tile]{--tile-padding: 0px}[data-slot=tile][data-variant=floating]{--tile-padding: 24px}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <a data-slot="badge" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&#38;>svg]:pointer-events-none [&#38;>svg]:size-3 bg-secondary text-secondary-foreground [a&#38;]:hover:bg-secondary/90 border-transparent" href="/verticals/">Browse sectors<svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -12,7 +12,7 @@
</svg>See a live receipt</a><a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-secondary text-secondary-foreground hover:bg-secondary/80 h-10 rounded-md px-6 has-[>svg]:px-4" href="/api/"><svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m16 18 6-6-6-6" />
<path d="m8 6-6 6 6 6" />
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Red Team dossier cover (example source document)" src="/assets/red-team-doc-1024-559.jpg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
</svg>Developer surface</a></div> </div> <div data-slot="section-media" class="relative flex items-center justify-center overflow-hidden rounded-lg *:size-full *:object-cover"> <img class="h-auto w-full" alt="Verification flow diagram (example)" src="/assets/iftrace-diagram.svg" sizes="(min-width: 1536px) 1536px, 100vw" priority="true"> </div> </section> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background border shadow-md w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width) my-(--section-py) overflow-hidden rounded-xl" data-slot="section" data-variant="floating" aria-label="Third-party pressure"> <div class="relative z-10 flex flex-col gap-10 @5xl:grid @5xl:grid-cols-2 @5xl:items-start"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-3xl text-base [&#38;_h1]:text-4xl [&#38;_h2]:text-3xl [&#38;_h3]:text-2xl [&#38;_h4]:text-xl [&#38;_h5]:text-lg [&#38;_h6]:text-base"> <p>Thirdparty pressure</p> <h2>Why this gets hard in the real world</h2> <p>
The constraint is almost always the same: someone needs proof, but
cannot be onboarded into your internal systems.
</p> </div> <div> <ul class="list-none space-y-2 p-0"><li class="flex shrink-0 items-start gap-3 text-start not-first:mt-2 [&#38;_svg]:shrink-0 [&#38;_svg]:translate-y-[30%] [&#38;_svg:not([class*='size-'])]:size-[1em] text-sm"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/whitepaper/thanks/"><title>IF.Trace — Thanks</title><meta name="description" content="Whitepaper request received."><meta property="og:title" content="IF.Trace — Thanks"><meta property="og:description" content="Whitepaper request received."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/red-team-doc-1024-559.jpg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.DWbm5GeC.css">
<!DOCTYPE html><html lang="en" class="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#0b1020"><link rel="canonical" href="https://infrafabric.io/whitepaper/thanks/"><title>IF.Trace — Thanks</title><meta name="description" content="Whitepaper request received."><meta property="og:title" content="IF.Trace — Thanks"><meta property="og:description" content="Whitepaper request received."><meta property="og:type" content="website"><meta property="og:image" content="https://infrafabric.io/assets/iftrace-og.svg"><meta name="twitter:card" content="summary_large_image"><link rel="icon" href="/assets/if-logo-simple.svg" type="image/svg+xml"><link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<style>[data-slot=section]{--section-width: var(--container, var(--breakpoint-xl));--section-py: calc(var(--spacing) * 12);--section-px: max( var(--gutter, 24px), calc((100cqw - var(--section-width)) / 2) )}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 6)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 8)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 24)}@media(min-width:1024px){[data-slot=section]{--section-py: calc(var(--spacing) * 16)}[data-slot=section][data-variant=floating]{--section-px: calc(var(--spacing) * 16)}[data-slot=section][data-size=sm]{--section-py: calc(var(--spacing) * 12)}[data-slot=section][data-size=lg]{--section-py: calc(var(--spacing) * 32)}}
</style></head> <body class="min-h-screen bg-background text-foreground"> <div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10"> <div class="absolute inset-0 bg-[radial-gradient(1200px_circle_at_20%_0%,rgba(16,185,129,0.18),transparent_60%),radial-gradient(1200px_circle_at_90%_10%,rgba(59,130,246,0.14),transparent_55%),radial-gradient(900px_circle_at_30%_100%,rgba(244,63,94,0.10),transparent_55%)]"></div> <div class="absolute inset-0 bg-[linear-gradient(to_bottom,rgba(2,6,23,0.75),rgba(2,6,23,0.95))]"></div> <div class="absolute inset-0 opacity-[0.06] mix-blend-overlay [background-image:url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22300%22%20height=%22300%22%3E%3Cfilter%20id=%22n%22%3E%3CfeTurbulence%20type=%22fractalNoise%22%20baseFrequency=%220.8%22%20numOctaves=%224%22%20stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect%20width=%22300%22%20height=%22300%22%20filter=%22url(%23n)%22%20opacity=%220.5%22/%3E%3C/svg%3E')]"></div> </div> <header class="fixed left-0 right-0 top-0 z-50"> <div class="mx-auto max-w-6xl px-4 py-4 sm:px-6"> <div class="flex items-center justify-between rounded-2xl border border-white/10 bg-slate-950/40 px-4 py-3 backdrop-blur-md shadow-[0_20px_80px_rgba(0,0,0,0.35)] sm:px-6"> <a href="/" class="text-sm font-semibold tracking-tight text-white/90 hover:text-white">IF.Trace</a> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4"> <a class="hover:text-white" href="/verticals/">Sector</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/pricing/">Pricing</a> <span class="text-white/20" aria-hidden="true">|</span> <a class="hover:text-white" href="/api/">API</a> </nav> </div> </div> </header> <main class="pt-28 sm:pt-32"> <section class="relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py) bg-background w-full" data-slot="section" aria-label="Thanks"> <div class="relative z-10 flex flex-col gap-y-8 items-center"> <div class="text-foreground w-full space-y-4 text-pretty [&#38;_p]:leading-[1.8] [&#38;_p]:not-first:mt-4 [&#38;_ul]:ml-5 [&#38;_ul]:list-disc [&#38;_ul]:space-y-2 [&#38;_ul]:not-first:mt-4 [&#38;_ol]:ml-5 [&#38;_ol]:list-decimal [&#38;_ol]:space-y-2 [&#38;_ol]:not-first:mt-4 [&#38;_li_p]:inline [&#38;_a]:text-primary [&#38;_a]:hover:underline @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&#38;_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto [&#38;_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&#38;_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&#38;_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&#38;_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12 [&#38;_img]:rounded-lg [&#38;_img]:not-first:mt-12 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&#38;_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&#38;_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium [&#38;_pre]:bg-muted [&#38;_pre]:mt-6 [&#38;_pre]:rounded-md [&#38;_pre]:border [&#38;_pre]:p-4 [&#38;_pre]:text-sm max-w-4xl text-lg [&#38;_h1]:text-4xl @5xl:[&#38;_h1]:text-5xl [&#38;_h2]:text-4xl [&#38;_h3]:text-3xl [&#38;_h4]:text-2xl [&#38;_h5]:text-xl [&#38;_h6]:text-lg text-center"> <p>Thank you</p> <h1>Request received.</h1> <p>Well reply with the stable, nologin links.</p> </div> <div class="mt-6 flex flex-wrap justify-center gap-3"> <a data-slot="button" class="focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&#38;_svg]:pointer-events-none [&#38;_svg]:shrink-0 [&#38;_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground hover:bg-primary/90 h-9 px-4 py-2 has-[>svg]:px-3" href="/whitepaper/"> <svg class="size-[1em] text-base" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m12 19-7-7 7-7" />