iftrace: add FR/EN switch; simplify buyer-facing copy

This commit is contained in:
root 2025-12-31 09:34:47 +00:00
parent 52c5163fc2
commit 5c496129c5
32 changed files with 251 additions and 125 deletions

View file

@ -12,6 +12,10 @@ 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/iftrace-og.svg";
const langSwitch =
lang === "fr"
? { href: "/", label: "EN" }
: { href: "/fr/", label: "FR" };
---
<!doctype html>
@ -42,13 +46,21 @@ const og = ogImage ?? "https://infrafabric.io/assets/iftrace-og.svg";
<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 class="flex items-center gap-3 sm:gap-4">
<nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary">
<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>
<a
class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white"
href={langSwitch.href}
aria-label={lang === "fr" ? "Switch to English" : "Passer en français"}
>{langSwitch.label}</a
>
</div>
</div>
</div>
</header>

View file

@ -21,7 +21,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<BaseLayout
title="IF.Trace — About"
description="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."
description="IF.Trace is a simple proof protocol: stable links, no logins, and clear yes/no integrity checks. This page explains who it helps, why it exists, and what it does (and doesnt) prove."
>
<Hero
link={{ text: "Why this exists", href: "/about/", icon: "file-text" }}
@ -49,7 +49,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<SectionContent class="items-center">
<SectionProse class="text-center">
<p>Who / Why / What / Where / When / How</p>
<h2>A receipt-first protocol.</h2>
<h2>A proof protocol you can show a stranger.</h2>
</SectionProse>
</SectionContent>
@ -58,7 +58,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<TileContent>
<TileTitle class="text-xl">Who</TileTitle>
<TileDescription>
InfraFabric operators shipping public, nologin verification artifacts.
Teams who need to show proof to someone outside their network.
</TileDescription>
</TileContent>
</Tile>
@ -66,7 +66,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<TileContent>
<TileTitle class="text-xl">Why</TileTitle>
<TileDescription>
Because “trust us” fails the moment a reviewer asks for proof.
Because “trust us” fails the moment a reviewer asks for receipts.
</TileDescription>
</TileContent>
</Tile>
@ -74,7 +74,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<TileContent>
<TileTitle class="text-xl">What</TileTitle>
<TileDescription>
Bind <code>source_sha256</code> ↔ <code>output_sha256</code> under a trace receipt.
Bind <code>source_sha256</code> ↔ <code>output_sha256</code> under a stable trace receipt.
</TileDescription>
</TileContent>
</Tile>

View file

@ -1,34 +1,105 @@
---
import Hero from "@/components/blocks/hero-1.astro";
import { Button } from "@/components/ui/button";
import { Icon } from "@/components/ui/icon";
import Features from "@/components/blocks/features-2.astro";
import Content from "@/components/blocks/content-1.astro";
import BaseLayout from "@/layouts/BaseLayout.astro";
---
<BaseLayout
title="IF.Trace — Vérification ouverte"
description="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."
description="IF.Trace permet à des tiers de vérifier un travail confidentiel sans login : liens stables, vérification oui/non, et bundles horsligne si besoin."
lang="fr"
>
<Hero
link={{ text: "FR", href: "/fr/", icon: "file-text" }}
link={{ text: "Sans login", href: "/api/", icon: "arrow-right" }}
links={[
{ 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" },
{
text: "Voir une trace",
href: "https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n",
target: "_blank",
icon: "sparkles",
},
{ text: "Lire le livre blanc", href: "/whitepaper/", icon: "file-text" },
]}
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>
<p>Vérification ouverte pour des documents confidentiels.</p>
<p>Des reçus que des tiers peuvent vérifier sans login.</p>
<h1>IF.Trace</h1>
<p>Travail confidentiel &gt; vérification ouverte.</p>
<p>Permettre à un tiers de vérifier lintégrité plus tard, sans rejoindre vos outils.</p>
</Hero>
<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">
<Button href="/" variant="secondary"><Icon name="arrow-left" /> English</Button>
<Button href="/whitepaper/"><Icon name="file-text" /> Livre blanc</Button>
</div>
</div>
<Features
links={[
{ text: "Secteurs", href: "/verticals/", icon: "layers" },
{ text: "Espace dev", href: "/api/", icon: "code" },
]}
items={[
{
title: "Reçus sans login",
description: "Des liens stables quun tiers peut vérifier sans compte.",
icon: "shield-check",
},
{
title: "Bundles horsligne",
description: "Pour les environnements de revue qui ne peuvent pas dépendre du site.",
icon: "package",
},
{
title: "Oui / non",
description: "Si les hashes correspondent, cest vérifié.",
icon: "badge-check",
},
{
title: "Fallback HTML",
description: "Certains reviewers chargent du HTML mais refusent les téléchargements : on publie les deux.",
icon: "file-text",
},
{
title: "Source → output",
description: "Relier une source confidentielle à son output, sans fuite.",
icon: "link-2",
},
{
title: "Conçu pour la revue",
description: "Une preuve qui survit aux handoffs, aux fournisseurs et au temps.",
icon: "scale",
},
]}
>
<p>Ce que cest</p>
<h2>Une couche de vérification pour la pression externe.</h2>
<p>
Quand quelquun demande une preuve, le problème est souvent le même :
il ne peut pas être onboardé dans vos systèmes. IF.Trace garde la preuve à lextérieur :
des liens stables que lon peut vérifier sans compte.
</p>
</Features>
<Content
list={[
"Gardez la source privée. Hashez-la localement.",
"Hashez loutput que vous allez partager.",
"Publiez un reçu qui relie source → output.",
"Partagez les liens. Un tiers vérifie sans login.",
]}
links={[
{
text: "Essayer la surface de reçus",
href: "https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n",
target: "_blank",
icon: "arrow-up-right",
},
{ text: "Secteurs", href: "/verticals/", icon: "layers" },
]}
image={{ src: "/assets/iftrace-diagram.svg", alt: "Schéma de vérification (exemple)" }}
>
<p>Comment ça marche</p>
<h2>Une preuve sans permission.</h2>
<p>
Loutput peut être public pendant que la source reste confidentielle.
La preuve reste simple et stable.
</p>
</Content>
</BaseLayout>

View file

@ -7,7 +7,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<BaseLayout
title="IF.Trace — Open Verification"
description="IF.Trace creates open verification for confidential work: thirdparty, unfalsifiable audit trails without publishing the source."
description="IF.Trace lets third parties verify confidential work without logins: stable proof links, clear yes/no checks, and optional offline bundles."
>
<Hero
link={{ text: "Nologin verification", href: "/api/", icon: "arrow-right" }}
@ -27,8 +27,8 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
>
<p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p>
<h1>IF.Trace</h1>
<p>Confidential documents &gt; open verification.</p>
<p>3rd party unfalsifiable audit trails — without publishing the source.</p>
<p>Confidential work &gt; open verification.</p>
<p>Let a third party check integrity later, without joining your tools.</p>
</Hero>
<Features
@ -52,7 +52,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
{
title: "Black/white integrity claims",
description:
"If bytes hash to the receipt values, its verified. We dont over-claim correctness.",
"Clear yes/no checks: if the hashes match, its verified.",
icon: "badge-check",
},
{
@ -78,9 +78,9 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<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.
When someone needs proof, the bottleneck is almost always the same:
they cant be onboarded into your internal systems. IF.Trace keeps the proof
outside: stable links they can verify without accounts.
</p>
</Features>
@ -108,8 +108,8 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<p>How it works</p>
<h2>Proof without permission.</h2>
<p>
The output can be public while the source stays confidential. The proof
surface stays boring and stable.
The output can be public while the source stays confidential.
The proof surface stays boring and stable.
</p>
</Content>
</BaseLayout>

View file

@ -26,7 +26,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
price: "Talk to us",
unit: "",
list: [
"Receipt-first share surface",
"Public proof links (no login)",
"Offline bundle pattern",
"Verification scope (black/white)",
],

View file

@ -6,7 +6,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<BaseLayout
title="IF.Trace — Sectors"
description="Sector fit overview for IF.Trace: thirdparty trust pressure mapped to receipts, bundles, and verification."
description="Where IF.Trace fits: the same proof mechanism, different buyer pressure."
>
<Hero
link={{ text: "Same mechanism, different pressure", href: "/", icon: "arrow-left" }}
@ -22,9 +22,8 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<p>Same mechanism, different pressure</p>
<h1>Two axes: who is buying, what is at stake.</h1>
<p>
IF.Trace doesnt “solve compliance.” It solves the universal problem
underneath compliance: third parties demanding proof without joining your
internal world.
Different buyers have different pressure, but the need is the same:
a third party wants proof, without being added to your systems.
</p>
</Hero>

View file

@ -13,7 +13,7 @@ import BaseLayout from "@/layouts/BaseLayout.astro";
<BaseLayout
title="IF.Trace — Whitepaper"
description="Download the IF.Trace whitepaper and proof bundle. IF.Trace is a receipt-first governance layer: trace pages, stable no-login links, and optional offline bundles."
description="Download the IF.Trace whitepaper and proof bundle. IF.Trace is a verification layer: stable trace pages, no-login links, and optional offline bundles."
>
<Hero
link={{ text: "Long-form spec + receipts", href: "/whitepaper/", icon: "file-text" }}

View file

@ -1,7 +1,7 @@
<!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">
<!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 simple proof protocol: stable links, no logins, and clear yes/no integrity checks. This page explains who it helps, why it exists, and what it does (and doesnt) prove."><meta property="og:title" content="IF.Trace — About"><meta property="og:description" content="IF.Trace is a simple proof protocol: stable links, no logins, and clear yes/no integrity checks. This page explains who it helps, why it exists, and what it does (and doesnt) prove."><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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />
@ -19,12 +19,12 @@ 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="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.
</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 proof protocol you can show a stranger.</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">
Teams who need to show proof to someone outside their network.
</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.
Because “trust us” fails the moment a reviewer asks for receipts.
</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">What</h3> <p class="text-muted-foreground text-sm">
Bind <code>source_sha256</code><code>output_sha256</code> under a trace receipt.
Bind <code>source_sha256</code><code>output_sha256</code> under a stable 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">Where</h3> <p class="text-muted-foreground text-sm">
On a stable public share surface (no login): trace, dossier, packs, and source.
</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">When</h3> <p class="text-muted-foreground text-sm">

View file

@ -1,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Public receipt surface (no login)</p> <h1>Stable URLs, predictable verification.</h1> <p>

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/" aria-label="Switch to English">EN</a> </div> </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" />
<path d="m9 12 2 2 4-4" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Gouvernance ouverte</p> <h1>Lisible par les gouvernés.</h1> <p>

View file

@ -1,28 +1,74 @@
<!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" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />
<path d="M16 13H8" />
<path d="M16 17H8" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p> <h1>Traçable. Transparent. Fiable.</h1> <p>Vérification ouverte pour des documents confidentiels.</p> <p>Des reçus que des tiers peuvent vérifier sans login.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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">
<!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 permet à des tiers de vérifier un travail confidentiel sans login : liens stables, vérification oui/non, et bundles horsligne si besoin."><meta property="og:title" content="IF.Trace — Vérification ouverte"><meta property="og:description" content="IF.Trace permet à des tiers de vérifier un travail confidentiel sans login : liens stables, vérification oui/non, et bundles horsligne si besoin."><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.DjS-2tUw.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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/" aria-label="Switch to English">EN</a> </div> </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/">Sans 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">
<path d="M5 12h14" />
<path d="m12 5 7 7-7 7" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p> <h1>IF.Trace</h1> <p>Travail confidentiel &gt; vérification ouverte.</p> <p>Permettre à un tiers de vérifier lintégrité plus tard, sans rejoindre vos outils.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" />
<path d="M20 2v4" />
<path d="M22 4h-4" />
<circle cx="4" cy="20" r="2" />
</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="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" />
<path d="M19 12H5" />
</svg> English</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 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">
</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="/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="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />
<path d="M16 13H8" />
<path d="M16 17H8" />
</svg> Livre blanc</a> </div> </div> </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>Lire le livre blanc</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 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>Ce que cest</p> <h2>Une couche de vérification pour la pression externe.</h2> <p>
Quand quelquun demande une preuve, le problème est souvent le même :
il ne peut pas être onboardé dans vos systèmes. IF.Trace garde la preuve à lextérieur :
des liens stables que lon peut vérifier sans compte.
</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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="/verticals/"><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.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>Secteurs</a><a data-slot="button" class="focus-visible:border-ring text-foreground 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-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs h-9 px-4 py-2 has-[>svg]:px-3" 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>Espace dev</a></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="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> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Reçus sans login</h3> <p class="text-muted-foreground text-sm">Des liens stables quun tiers peut vérifier sans compte.</p> </div> </div><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="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z" />
<path d="M12 22V12" />
<polyline points="3.29 7 12 12 20.71 7" />
<path d="m7.5 4.27 9 5.15" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Bundles horsligne</h3> <p class="text-muted-foreground text-sm">Pour les environnements de revue qui ne peuvent pas dépendre du site.</p> </div> </div><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="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" />
<path d="m9 12 2 2 4-4" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Oui / non</h3> <p class="text-muted-foreground text-sm">Si les hashes correspondent, cest vérifié.</p> </div> </div><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="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />
<path d="M16 13H8" />
<path d="M16 17H8" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Fallback HTML</h3> <p class="text-muted-foreground text-sm">Certains reviewers chargent du HTML mais refusent les téléchargements : on publie les deux.</p> </div> </div><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="M9 17H7A5 5 0 0 1 7 7h2" />
<path d="M15 7h2a5 5 0 1 1 0 10h-2" />
<line x1="8" x2="16" y1="12" y2="12" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Source → output</h3> <p class="text-muted-foreground text-sm">Relier une source confidentielle à son output, sans fuite.</p> </div> </div><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="m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z" />
<path d="m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z" />
<path d="M7 21h10" />
<path d="M12 3v18" />
<path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Conçu pour la revue</h3> <p class="text-muted-foreground text-sm">Une preuve qui survit aux handoffs, aux fournisseurs et au temps.</p> </div> </div></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"> <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>Comment ça marche</p> <h2>Une preuve sans permission.</h2> <p>
Loutput peut être public pendant que la source reste confidentielle.
La preuve reste simple et stable.
</p> </div> <ul class="list-disc space-y-2"><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="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> Gardez la source privée. Hashez-la localement.</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]"> <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> Hashez loutput que vous allez partager.</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]"> <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> Publiez un reçu qui relie source → output.</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]"> <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> Partagez les liens. Un tiers vérifie sans login.</li></ul> <div class="relative z-10 flex flex-wrap gap-2"><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="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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="M7 7h10v10" />
<path d="M7 17 17 7" />
</svg>Essayer la surface de reçus</a><a data-slot="button" class="focus-visible:border-ring text-foreground 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-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs h-9 px-4 py-2 has-[>svg]:px-3" href="/verticals/"><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.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>Secteurs</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"> </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>

View file

@ -1,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<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></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Open governance</p> <h1>Legible to the governed.</h1> <p>

View file

@ -1,10 +1,10 @@
<!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">
<!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 lets third parties verify confidential work without logins: stable proof links, clear yes/no checks, and optional offline bundles."><meta property="og:title" content="IF.Trace — Open Verification"><meta property="og:description" content="IF.Trace lets third parties verify confidential work without logins: stable proof links, clear yes/no checks, and optional 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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="M5 12h14" />
<path d="m12 5 7 7-7 7" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p> <h1>IF.Trace</h1> <p>Confidential documents &gt; open verification.</p> <p>3rd party unfalsifiable audit trails — without publishing the source.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>IF.Transparent &gt; IF.Traceable &gt; IF.Trustworthy</p> <h1>IF.Trace</h1> <p>Confidential work &gt; open verification.</p> <p>Let a third party check integrity later, without joining your tools.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" />
<path d="M20 2v4" />
<path d="M22 4h-4" />
@ -16,9 +16,9 @@
<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="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.
When someone needs proof, the bottleneck is almost always the same:
they cant be onboarded into your internal systems. IF.Trace keeps the proof
outside: stable links they can verify without accounts.
</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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="/verticals/"><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.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" />
@ -37,7 +37,7 @@ IF.Trace doesnt “solve compliance.” It solves the universal problem
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Offline verification bundles</h3> <p class="text-muted-foreground text-sm">Triage bundles (light/standard/full) for review environments that cannot rely on the live site.</p> </div> </div><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="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" />
<path d="m9 12 2 2 4-4" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Black/white integrity claims</h3> <p class="text-muted-foreground text-sm">If bytes hash to the receipt values, its verified. We dont over-claim correctness.</p> </div> </div><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> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Black/white integrity claims</h3> <p class="text-muted-foreground text-sm">Clear yes/no checks: if the hashes match, its verified.</p> </div> </div><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="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />
@ -54,8 +54,8 @@ IF.Trace doesnt “solve compliance.” It solves the universal problem
<path d="M12 3v18" />
<path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2" />
</svg> </div> <div class="relative z-10 flex flex-col gap-3 items-center text-center text-balance"> <h3 class="leading-none font-semibold">Designed for audits</h3> <p class="text-muted-foreground text-sm">Proof that survives vendors, contractors, handoffs, and time.</p> </div> </div></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"> <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>How it works</p> <h2>Proof without permission.</h2> <p>
The output can be public while the source stays confidential. The proof
surface stays boring and stable.
The output can be public while the source stays confidential.
The proof surface stays boring and stable.
</p> </div> <ul class="list-disc space-y-2"><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="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> Keep the source private. Hash it locally.</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]"> <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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" />
<rect x="2" y="4" width="20" height="16" rx="2" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>A simple model, on purpose</p> <h1>Pricing</h1> <p>If you need auditready verification, we price by risk and responsibility.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="mailto:ds@infrafabric.io?subject=IF.Trace%20pricing"><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 @@ 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">
<path d="M20 6 9 17l-5-5" />
</svg> Receipt-first share surface</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]"> <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">
</svg> Public proof links (no login)</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]"> <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">
<path d="M20 6 9 17l-5-5" />
</svg> Offline bundle pattern</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]"> <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">
<path d="M20 6 9 17l-5-5" />

View file

@ -1,6 +1,6 @@
<!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">
<!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.DjS-2tUw.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>
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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
- Generated: `2025-12-30`

View file

@ -1,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>AI trust pressure</p> <h1>Make outputs provable, not persuasive.</h1> <p>When an output is contested (“why did it say that?”), you need provenance. IF.Trace supports verifiable linkage from inputs to outputs.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Enterprise pressure</p> <h1>Audit throughput without credential sprawl.</h1> <p>In enterprise environments, audit friction becomes a tax on delivery. IF.Trace provides proof that third parties can verify without joining your internal world.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Financial pressure</p> <h1>Non-repudiation for decisions and outputs.</h1> <p>Regulated environments need evidence that survives scrutiny. IF.Trace supports verifiable artifacts without fragile internal access dependencies.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Government review reality</p> <h1>Evidence must outlive people.</h1> <p>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.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Healthcare constraints</p> <h1>Proof that respects boundaries.</h1> <p>Healthcare environments require strict boundaries: privacy, consent, and auditability. IF.Trace supports verification without broad data exposure.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,13 +1,12 @@
<!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">
<!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="Where IF.Trace fits: the same proof mechanism, different buyer pressure."><meta property="og:title" content="IF.Trace — Sectors"><meta property="og:description" content="Where IF.Trace fits: the same proof mechanism, different buyer pressure."><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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Same mechanism, different pressure</p> <h1>Two axes: who is buying, what is at stake.</h1> <p>
IF.Trace doesnt “solve compliance.” It solves the universal problem
underneath compliance: third parties demanding proof without joining your
internal world.
Different buyers have different pressure, but the need is the same:
a third party wants proof, without being added to your systems.
</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" />
<path d="M20 2v4" />

View file

@ -1,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Legal reality</p> <h1>Chain-of-custody for drafts and evidence.</h1> <p>Legal work depends on what can be proven. IF.Trace provides a simple, verifiable custody layer for documents and derived outputs.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Client handoff reality</p> <h1>Receipts that survive disputes.</h1> <p>When advice, drafts, and deliverables become contested, you need custody that holds up. IF.Trace makes your outputs verifiable without exposing your internal process.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Public sector reality</p> <h1>Proof must survive procurement.</h1> <p>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.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>External review reality</p> <h1>Reproducibility without leaking the lab.</h1> <p>Research reviewers need proof, not your whole environment. IF.Trace makes it practical to share verifiable outputs while keeping raw data controlled.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Audit readiness</p> <h1>Prove what existed, when it existed.</h1> <p>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.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Scientific review reality</p> <h1>Make claims checkable later.</h1> <p>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.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Security operations</p> <h1>Bind summaries to evidence.</h1> <p>Security teams summarize fast under pressure. IF.Trace keeps summaries tied to underlying evidence so post-incident review stays grounded.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,7 +1,7 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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">
<path d="m12 19-7-7 7-7" />
<path d="M19 12H5" />
</svg></a> <div class="text-foreground w-full space-y-4 [&#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 text-balance"> <p>Supply chain reality</p> <h1>Traceability across vendor handoffs.</h1> <p>In complex supply chains, custody breaks at handoff points. IF.Trace makes proof portable so verification survives contractor and vendor boundaries.</p> </div> <div class="relative z-10 flex flex-wrap gap-2 justify-center"><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-primary text-primary-foreground hover:bg-primary/90 h-10 rounded-md px-6 has-[>svg]:px-4" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank"><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,8 +1,8 @@
<!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/"><title>IF.Trace — Whitepaper</title><meta name="description" content="Download the IF.Trace whitepaper and proof bundle. IF.Trace is a receipt-first governance layer: trace pages, stable no-login links, and optional offline bundles."><meta property="og:title" content="IF.Trace — Whitepaper"><meta property="og:description" content="Download the IF.Trace whitepaper and proof bundle. IF.Trace is a receipt-first governance layer: trace pages, stable no-login links, and optional 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"><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)}}
<!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/"><title>IF.Trace — Whitepaper</title><meta name="description" content="Download the IF.Trace whitepaper and proof bundle. IF.Trace is a verification layer: stable trace pages, no-login links, and optional offline bundles."><meta property="og:title" content="IF.Trace — Whitepaper"><meta property="og:description" content="Download the IF.Trace whitepaper and proof bundle. IF.Trace is a verification layer: stable trace pages, no-login links, and optional 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"><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>
<link rel="stylesheet" href="/assets/_astro/index.BM2f01Os.css">
<link rel="stylesheet" href="/assets/_astro/index.DjS-2tUw.css">
<style>[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="/whitepaper/">Long-form spec + receipts<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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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="/whitepaper/">Long-form spec + receipts<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" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
<path d="M10 9H8" />

View file

@ -1,6 +1,6 @@
<!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">
<!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.DjS-2tUw.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">
</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> <div class="flex items-center gap-3 sm:gap-4"> <nav class="flex items-center gap-3 text-xs text-white/70 sm:gap-4" aria-label="Primary"> <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> <a class="inline-flex h-7 items-center justify-center rounded-md border border-white/10 bg-white/5 px-2 text-[11px] font-semibold text-white/70 hover:bg-white/10 hover:text-white" href="/fr/" aria-label="Passer en français">FR</a> </div> </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" />
<path d="M19 12H5" />
</svg>