diff --git a/CLAUDE.md b/CLAUDE.md index 144859bb..e1fe543b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -59,6 +59,17 @@ bun run lint:d2 # Format D2 diagram files **Styling:** Tailwind CSS 3.4 compiled via PostCSS. All styles (including former SCSS) are in `_assets/css/tailwind.css`. Output goes to `assets/css/styles.css`. +**Design tokens:** The brand (sbomify Brand Guidelines v2.0: Navy, White, Mist, Signal Orange, the semantic palette, Figtree and the system mono stack) lives in `_assets/css/tokens.css`, imported at the top of `tailwind.css` via `postcss-import`. It has two tiers: primitives (`--color-navy-80`, `--color-orange-700`, ...) and roles (`--color-ink`, `--color-canvas`, `--color-accent-strong`, ...). `tailwind.config.js` replaces Tailwind's default palette with these tokens, so `indigo-500`-style classes no longer exist; use the role names (`text-ink`, `text-ink-muted`, `bg-surface`, `border-line`, `bg-inverse`, `bg-accent-strong`) or a primitive scale (`navy-*`, `orange-*`). Never hard-code a hex in templates or CSS; component styles use `rgb(var(--color-*))`. `_d2/theme.d2` and `assets/css/native.css` (code highlighting) mirror the tokens, since D2 cannot read CSS variables. + +Brand rules the tokens encode: + +- Layouts are predominantly white with navy type. Dark sections use `bg-inverse` (white on navy). +- Signal Orange gets one moment per layout, normally the primary call to action (`btn-primary`). Section-level actions use `btn-navy` or `btn-secondary`. +- Type on orange is always white, on an Orange 700 fill (`bg-accent-strong`); orange text on white is `text-accent-strong`, never `text-accent`. +- Body text is `text-ink-muted` (Navy 80) or darker. `text-ink-subtle` (Navy 60) is for large type and icons only. +- Success/danger/warning/info signal status only, never decoration: full colour for the dot or border, `-tint` for the fill, navy type. +- Shared components in `tailwind.css`: `btn-primary`, `btn-navy`, `btn-secondary` (sizes `btn-md`, `btn-lg`), `link`, `eyebrow`, `eyebrow-chip`, `tag`, `card`, `hero`. + **Diagrams:** D2 source files in `_d2/` compile to SVG in both `assets/images/d2/` (image refs) and `layouts/partials/d2/` (inline SVG). All diagrams share a theme from `_d2/theme.d2`. **Hugo features replacing former Jekyll plugins:** @@ -88,6 +99,8 @@ bun run lint:d2 # Format D2 diagram files **Meta tags:** Set `description` and `keywords` in page frontmatter. They fall back to site-level values in `hugo.toml`. +**Table of contents:** Pages with at least five h2/h3 headings and 1000 words get an "On this page" list automatically (sticky sidebar at `xl`, collapsible block below). Set `toc: false` in frontmatter to turn it off. Logic is in `layouts/partials/toc-enabled.html` and `layouts/partials/toc.html`. + ## CI/CD - **Lint workflow** (`.github/workflows/lint.yml`): Triggers on PRs affecting `.md`, `.d2`, `Dockerfile`, `hugo.toml`, `layouts/`, `content/`, or `package.json`. Runs `bun run lint`, Hugo build, and lychee link checker. diff --git a/_assets/css/tailwind.css b/_assets/css/tailwind.css index 0ca7150f..75e76abf 100644 --- a/_assets/css/tailwind.css +++ b/_assets/css/tailwind.css @@ -1,25 +1,34 @@ -/* Inter Variable Font - self-hosted from @fontsource-variable/inter */ +/* Design tokens (colour, type, shape). Everything below reads from these. */ +@import "./tokens.css"; + +/* Figtree Variable, self-hosted from @fontsource-variable/figtree */ @font-face { - font-family: 'Inter Variable'; + font-family: 'Figtree Variable'; font-style: normal; font-display: swap; - font-weight: 100 900; - src: url('/assets/fonts/inter-latin-ext-wght-normal.woff2') format('woff2-variations'); + font-weight: 300 900; + src: url('/assets/fonts/figtree-latin-ext-wght-normal.woff2') format('woff2-variations'); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; } @font-face { - font-family: 'Inter Variable'; + font-family: 'Figtree Variable'; font-style: normal; font-display: swap; - font-weight: 100 900; - src: url('/assets/fonts/inter-latin-wght-normal.woff2') format('woff2-variations'); + font-weight: 300 900; + src: url('/assets/fonts/figtree-latin-wght-normal.woff2') format('woff2-variations'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; } @tailwind base; @layer base { + /* Tailwind cannot resolve a CSS-variable ringColor.DEFAULT at build time + and falls back to blue; point the bare `ring` utility at the focus token. */ + *, ::before, ::after, ::backdrop { + --tw-ring-color: rgb(var(--color-focus) / 0.5); + } + html { /* Offset anchors so they clear the sticky pill header */ scroll-padding-top: 6rem; @@ -32,33 +41,39 @@ } body { - color: #141035; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + background-color: rgb(var(--color-canvas)); + color: rgb(var(--color-ink)); + font-family: var(--font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; - /* Inter Variable stylistic alternates: better i/l/g, single-storey a, etc. */ - font-feature-settings: "cv02", "cv03", "cv04", "cv11", "ss01"; } /* Firefox legacy alias, autoprefixer also emits this from ::selection, but we declare both explicitly so source ↔ compiled CSS stay 1:1. */ ::-moz-selection { - background-color: rgba(138, 125, 255, 0.28); - color: inherit; + background-color: rgb(var(--color-orange-100)); + color: rgb(var(--color-ink)); } ::selection { - background-color: rgba(138, 125, 255, 0.28); - color: inherit; + background-color: rgb(var(--color-orange-100)); + color: rgb(var(--color-ink)); } :focus-visible { - outline: 2px solid #8A7DFF; + outline: 2px solid rgb(var(--color-focus)); outline-offset: 3px; border-radius: 2px; } + /* Orange 700 drops below 3:1 on navy; dark surfaces use Signal Orange. */ + [class*="bg-inverse"] :focus-visible, + .pricing-card.featured :focus-visible, + .cta-box :focus-visible { + outline-color: rgb(var(--color-focus-inverse)); + } + /* Avoid double rings on already-rounded targets */ a:focus-visible, button:focus-visible, @@ -67,25 +82,26 @@ outline-offset: 2px; } + /* Type scale, from the guide: + display 800/700 tight · section 600 slightly tight · body 400 at 1.6 */ h1, h2, h3, h4, h5, h6 { - color: #141035; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + color: rgb(var(--color-ink)); + font-family: var(--font-sans); text-wrap: balance; } h1 { font-size: 4.25rem; /* 68px */ - font-weight: 500; - line-height: 4.875rem; /* 78px */ - letter-spacing: -0.025em; + font-weight: var(--font-weight-extrabold); + line-height: var(--leading-display); + letter-spacing: var(--tracking-display); } h2 { font-size: 2rem; /* 32px */ - font-style: normal; - font-weight: 400; - line-height: 120%; - letter-spacing: -0.018em; + font-weight: var(--font-weight-semibold); + line-height: var(--leading-heading); + letter-spacing: var(--tracking-heading); } @media (min-width: 768px) { @@ -95,15 +111,15 @@ } h3 { - letter-spacing: -0.012em; + font-weight: var(--font-weight-semibold); + letter-spacing: var(--tracking-heading); } p { - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + font-family: var(--font-sans); font-size: 0.875rem; /* 14px */ - font-style: normal; - font-weight: 400; - line-height: 1.5; + font-weight: var(--font-weight-regular); + line-height: var(--leading-body); text-wrap: pretty; } @@ -113,125 +129,142 @@ } } + /* Anything a developer would type, paste or search for is set in mono. */ + code, kbd, samp, pre { + font-family: var(--font-mono); + } + + code, kbd, samp { + font-size: var(--font-mono-scale); + } + button { - background-color: #0242E5; - color: #FFF; - border-radius: 4px; + background-color: rgb(var(--color-accent-strong)); + color: rgb(var(--color-on-accent)); + border-radius: var(--radius-pill); display: inline-block; font-size: 1.125rem; /* 18px */ - font-style: normal; - font-weight: 400; + font-weight: var(--font-weight-semibold); padding: 14px 16px 12px; text-align: center; - transition: opacity 0.3s; + transition: background-color 0.2s; } - button:hover { - opacity: 0.8; + /* Zero specificity, so a button's own bg-* utility still wins on hover */ + :where(button:hover) { + background-color: rgb(var(--color-accent-hover)); } } @tailwind components; @layer components { - /* Buttons */ + /* Buttons. Orange is the one call to action; secondary is navy outline, + and type on orange is always white (Orange 700 fill, 5.2:1). */ .btn { - @apply inline-flex items-center justify-center px-6 py-3 rounded-lg font-medium transition-all duration-200; + @apply inline-flex items-center justify-center gap-2 px-6 py-3 rounded-full font-semibold transition-[background-color,border-color,color,box-shadow] duration-200; } .btn-primary { - @apply btn bg-purple hover:bg-purple-700 text-white; + @apply btn bg-accent-strong hover:bg-accent-hover text-on-accent; } - .btn-secondary { - background: #F6F9FA; - color: #141035; - border-radius: 4px; - display: inline-block; - font-size: 1.125rem; - font-weight: 400; - padding: 14px 16px 12px; - text-align: center; - transition: opacity 0.3s; + /* Navy fill: section-level actions, so orange stays the page's one moment */ + .btn-navy { + @apply btn bg-ink text-on-inverse hover:bg-navy-80; } - .btn-secondary:hover { - opacity: 0.8; + .btn-secondary { + @apply btn bg-canvas text-ink border border-line-strong hover:border-ink; } + /* For navy surfaces */ .btn-md { - font-size: 0.875rem; /* 14px */ + @apply px-5 py-2.5 text-sm; + } + + .btn-lg { + @apply px-8 py-4 text-lg; } .btn-icon { border: none; background: none; + padding: 0; } - a.button { - background-color: #0242E5; - color: #FFF; - border-radius: 4px; - display: inline-block; - font-size: 1.125rem; - font-weight: 400; - padding: 14px 16px 12px; - text-align: center; - transition: opacity 0.3s; + .btn-icon:hover { + background: none; } - a.button:hover { - opacity: 0.8; + /* Inline text link: navy type, orange underline, the accent stays small. */ + .link { + @apply text-ink underline underline-offset-4 decoration-accent decoration-2 hover:text-accent-strong transition-colors; } - /* Cards */ - .feature-card { - @apply flex flex-col h-auto justify-center items-center border px-6 lg:px-10 py-4 rounded-lg border-solid border-primary-700 bg-primary-light; + .bg-inverse .link, + .bg-inverse-raised .link { + @apply text-on-inverse hover:text-accent; } - .feature-card-header { - @apply text-purple mb-4; + /* Eyebrow, caption and meta: 600, wide track, caps. */ + .eyebrow { + @apply text-xs font-semibold uppercase tracking-eyebrow text-ink-muted; } - /* Typography */ - .heading-1 { - @apply text-4xl lg:text-[68px] leading-tight font-medium; + /* Eyebrow chip: the section label above a heading, with the orange dot + the guide uses in its own running footer. */ + .eyebrow-chip { + @apply eyebrow inline-flex w-fit items-center gap-2 px-3.5 py-1.5 rounded-full bg-surface border border-line; } - .heading-2 { - @apply text-3xl lg:text-5xl leading-tight font-medium mb-4; + .eyebrow-chip::before { + content: ""; + @apply w-1.5 h-1.5 rounded-full bg-accent; } - .section-title { - @apply uppercase text-sm mb-4 text-purple; + /* Neutral tag / badge. Orange is a brand accent, not a status, so it is + kept out of badges; status badges use the semantic palette. */ + .tag { + @apply inline-block px-3 py-1 rounded-full text-sm font-medium bg-surface-strong text-ink; } - /* Layout */ - .section-container { - @apply container py-12 lg:py-24; + /* Cards */ + .card { + @apply bg-canvas border border-line rounded-2xl shadow-card; } - .section-grid { - @apply grid grid-cols-1 md:grid-cols-2 gap-8 lg:gap-[230px] items-center; + .feature-card { + @apply flex flex-col h-auto justify-center items-center border px-6 lg:px-10 py-4 rounded-lg border-solid border-white/10 bg-inverse-raised; } - /* Images */ - .logo-container { - @apply flex items-center justify-center h-full; + .feature-card-header { + @apply text-accent mb-4; } - .logo { - @apply w-[135px] max-h-[30px] object-contain; + /* Page hero: white canvas with the soft Signal Orange haze from the + guide's cover. Static, so it costs no compositor layer. */ + .hero { + @apply relative overflow-hidden bg-canvas; } - /* Links */ - .link-hover { - @apply transition-all duration-200 hover:text-purple; + .hero::before { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background: radial-gradient(48rem 32rem at 100% 0%, rgb(var(--color-orange-500) / 0.16), rgb(var(--color-orange-500) / 0) 70%); } - /* Press logos */ - .press-logo { - @apply grayscale hover:grayscale-0 transition-all; + /* On phones the same haze covers the whole viewport; keep it a corner glow */ + @media (max-width: 639px) { + .hero::before { + background: radial-gradient(24rem 18rem at 100% 0%, rgb(var(--color-orange-500) / 0.12), rgb(var(--color-orange-500) / 0) 70%); + } + } + + .hero > * { + position: relative; } } @@ -246,53 +279,6 @@ display: none; } - .text-gradient { - background: var(--Gradient, linear-gradient(94deg, #4059D0 8.79%, #CC58BB 56.82%, #F4B57F 100%)); - background-clip: text; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - } - - /* Hero aurora, animated radial gradients drifting behind the hero text. - Animation + GPU-promotion are gated behind prefers-reduced-motion: no-preference, - so reduced-motion users get static orbs without an idle compositor layer. */ - .aurora { - position: absolute; - border-radius: 9999px; - filter: blur(80px); - pointer-events: none; - } - .aurora-1 { - width: 32rem; - height: 32rem; - top: 2rem; - left: -4rem; - background: radial-gradient(circle at center, rgba(138, 125, 255, 0.55), rgba(138, 125, 255, 0) 70%); - } - .aurora-2 { - width: 38rem; - height: 38rem; - bottom: -8rem; - right: -6rem; - background: radial-gradient(circle at center, rgba(204, 88, 187, 0.4), rgba(204, 88, 187, 0) 70%); - } - .aurora-3 { - width: 28rem; - height: 28rem; - top: 30%; - left: 50%; - transform: translateX(-50%); - background: radial-gradient(circle at center, rgba(64, 89, 208, 0.3), rgba(64, 89, 208, 0) 70%); - } - @media (prefers-reduced-motion: no-preference) { - .aurora { - will-change: transform; - } - .aurora-1 { animation: aurora-drift-1 20s ease-in-out infinite alternate; } - .aurora-2 { animation: aurora-drift-2 26s ease-in-out infinite alternate; } - .aurora-3 { animation: aurora-drift-3 24s ease-in-out infinite alternate; } - } - /* Globally respect prefers-reduced-motion for Tailwind's built-in keyframe utilities. Tailwind doesn't auto-gate these, and our motion-safe: prefix isn't picked up by purge inside JS string literals. */ @@ -304,48 +290,6 @@ animation: none; } } - @keyframes aurora-drift-1 { - 0% { transform: translate3d(0, 0, 0) scale(1); } - 100% { transform: translate3d(8rem, 5rem, 0) scale(1.15); } - } - @keyframes aurora-drift-2 { - 0% { transform: translate3d(0, 0, 0) scale(1.1); } - 100% { transform: translate3d(-6rem, -8rem, 0) scale(1); } - } - @keyframes aurora-drift-3 { - 0% { transform: translate3d(-50%, 0, 0) scale(1); } - 100% { transform: translate3d(-50%, 4rem, 0) scale(1.2); } - } - - /* Eyebrow chip, refined section-label component. */ - .eyebrow-chip { - display: inline-flex; - align-items: center; - gap: 0.5rem; - padding: 0.375rem 0.875rem; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 600; - letter-spacing: 0.08em; - text-transform: uppercase; - color: #8A7DFF; - background: rgba(138, 125, 255, 0.08); - border: 1px solid rgba(138, 125, 255, 0.2); - } - .eyebrow-chip::before { - content: ""; - width: 0.375rem; - height: 0.375rem; - border-radius: 9999px; - background: #8A7DFF; - box-shadow: 0 0 0 3px rgba(138, 125, 255, 0.18); - } - - .divider { - border: 0; - height: 1px; - background-image: linear-gradient(to right, rgb(0 0 0 / 0%), rgb(157 157 157 / 75%), rgb(0 0 0 / 0%)); - } .max-container { width: 100%; @@ -361,24 +305,26 @@ /* Blog Post, Page & FAQ Styles */ .blog-post, .page, .faq-content { - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + font-family: var(--font-sans); } /* Headings */ .blog-post h1, .blog-post h2, .blog-post h3, .blog-post h4, .blog-post h5, .blog-post h6, .page h1, .page h2, .page h3, .page h4, .page h5, .page h6, .faq-content h1, .faq-content h2, .faq-content h3, .faq-content h4, .faq-content h5, .faq-content h6 { - color: #141035; - font-weight: 600; + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); line-height: 1.3; + letter-spacing: var(--tracking-heading); margin-top: 2rem; /* 32px */ margin-bottom: 1rem; /* 16px */ } .blog-post h1, .page h1, .faq-content h1 { font-size: 2.25rem; /* 36px */ - font-weight: 700; - line-height: 1.2; + font-weight: var(--font-weight-bold); + line-height: var(--leading-heading); + letter-spacing: var(--tracking-display); margin-top: 0; margin-bottom: 1.5rem; /* 24px */ } @@ -452,7 +398,7 @@ /* Paragraphs */ .blog-post p, .page p, .faq-content p { - color: #5E5E5E; + color: rgb(var(--color-ink-muted)); font-size: 1.125rem; /* 18px */ line-height: 1.7; margin-bottom: 1.5rem; /* 24px */ @@ -469,7 +415,7 @@ /* First paragraph styling */ .blog-post > p:first-of-type, .page > p:first-of-type, .faq-content > p:first-of-type { font-size: 1.25rem; /* 20px */ - color: #141035; + color: rgb(var(--color-ink)); } @media (min-width: 768px) { @@ -479,24 +425,26 @@ } } -/* Links */ +/* Links: navy type with an orange underline */ .blog-post a, .page a, .faq-content a { - color: #8A7DFF; + color: rgb(var(--color-ink)); text-decoration: underline; + text-decoration-color: rgb(var(--color-accent)); + text-decoration-thickness: 1px; text-underline-offset: 3px; - transition: all 0.2s ease; + transition: color 0.2s ease, text-decoration-thickness 0.2s ease; } .blog-post a:hover, .page a:hover, .faq-content a:hover { - color: #7A6DE5; + color: rgb(var(--color-accent-strong)); text-decoration-thickness: 2px; } .blog-post strong, .blog-post b, .page strong, .page b, .faq-content strong, .faq-content b { - color: #141035; - font-weight: 600; + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); } .blog-post em, .blog-post i, @@ -513,7 +461,7 @@ line-height: 1.7; margin-bottom: 1.5rem; /* 24px */ padding-left: 1.75rem; /* 28px */ - color: #5E5E5E; + color: rgb(var(--color-ink-muted)); } @media (min-width: 768px) { @@ -539,7 +487,7 @@ } .blog-post ul li::marker, .page ul li::marker, .faq-content ul li::marker { - color: #8A7DFF; + color: rgb(var(--color-ink-subtle)); } .blog-post ol, .page ol, .faq-content ol { @@ -547,8 +495,8 @@ } .blog-post ol li::marker, .page ol li::marker, .faq-content ol li::marker { - color: #8A7DFF; - font-weight: 600; + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); } /* Task lists */ @@ -567,8 +515,8 @@ height: auto; display: block; margin: 2rem auto; /* 32px */ - border-radius: 12px; - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-card); } /* Override for images in grid/flex layouts */ @@ -582,7 +530,7 @@ .blog-post img + em, .page img + em { display: block; font-size: 0.875rem; /* 14px */ - color: #6b7280; + color: rgb(var(--color-ink-muted)); text-align: center; font-style: italic; margin-top: -1.5rem; /* -24px */ @@ -593,9 +541,9 @@ .blog-post iframe, .page iframe { max-width: 100%; margin: 2rem auto; /* 32px */ - border-radius: 12px; + border-radius: var(--radius-lg); border: none; - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + box-shadow: var(--shadow-card); } /* Blockquotes */ @@ -603,12 +551,12 @@ position: relative; margin: 2rem 0; /* 32px */ padding: 1.5rem 1.5rem 1.5rem 3rem; /* 24px 24px 24px 48px */ - background: linear-gradient(135deg, rgba(138, 125, 255, 0.05) 0%, rgba(138, 125, 255, 0.02) 100%); - border-left: 4px solid #8A7DFF; - border-radius: 0 8px 8px 0; + background: rgb(var(--color-surface)); + border-left: 4px solid rgb(var(--color-ink)); + border-radius: 0 var(--radius-md) var(--radius-md) 0; font-style: italic; font-size: 1.125rem; /* 18px */ - color: #141035; + color: rgb(var(--color-ink)); } @media (min-width: 768px) { @@ -621,20 +569,20 @@ .blog-post blockquote p, .page blockquote p, .faq-content blockquote p { margin: 0; - color: #141035; + color: rgb(var(--color-ink)); } .blog-post blockquote p:not(:last-child), .page blockquote p:not(:last-child), .faq-content blockquote p:not(:last-child) { margin-bottom: 1rem; /* 16px */ } -/* TL;DR blocks */ +/* TL;DR blocks: the page's orange moment */ .blog-post .tldr, .page .tldr, .faq-content .tldr { margin: 0 0 2rem 0; /* 32px */ padding: 1.25rem 1.5rem; /* 20px 24px */ - background: linear-gradient(135deg, rgba(138, 125, 255, 0.08) 0%, rgba(138, 125, 255, 0.03) 100%); - border-left: 4px solid #8A7DFF; - border-radius: 0 8px 8px 0; + background: rgb(var(--color-accent-soft)); + border-left: 4px solid rgb(var(--color-accent)); + border-radius: 0 var(--radius-md) var(--radius-md) 0; } @media (min-width: 768px) { @@ -646,10 +594,10 @@ .blog-post .tldr .tldr-label, .page .tldr .tldr-label, .faq-content .tldr .tldr-label { display: block; font-size: 0.75rem; /* 12px */ - font-weight: 700; + font-weight: var(--font-weight-semibold); text-transform: uppercase; - letter-spacing: 0.05em; - color: #8A7DFF; + letter-spacing: var(--tracking-eyebrow); + color: rgb(var(--color-accent-strong)); margin-bottom: 0.5rem; /* 8px */ } @@ -657,7 +605,7 @@ margin: 0; font-size: 1rem; /* 16px */ line-height: 1.7; - color: #141035; + color: rgb(var(--color-ink)); } @media (min-width: 768px) { @@ -666,26 +614,26 @@ } } -/* Code */ +/* Code: identifiers inline in mono; blocks are Regular on navy */ .blog-post code, .page code, .faq-content code { - background: #f1f5f9; - color: #334155; + background: rgb(var(--color-code-inline-bg)); + color: rgb(var(--color-ink)); padding: 0.1875rem 0.5rem; /* 3px 8px */ - font-size: 0.9em; - font-family: 'Monaco', 'Menlo', 'Consolas', monospace; - border-radius: 6px; - border: 1px solid #e2e8f0; + font-size: var(--font-mono-scale); + font-family: var(--font-mono); + border-radius: var(--radius-sm); + border: 1px solid rgb(var(--color-line)); } .blog-post pre, .page pre, .faq-content pre { - background: #1e293b; - color: #e2e8f0; + background: rgb(var(--color-code-bg)); + color: rgb(var(--color-code-text)); padding: 1.5rem; /* 24px */ overflow-x: auto; - border-radius: 12px; + border-radius: var(--radius-lg); margin: 2rem 0; /* 32px */ line-height: 1.6; - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + box-shadow: var(--shadow-card); } .blog-post pre code, .page pre code, .faq-content pre code { @@ -698,7 +646,7 @@ @media (min-width: 768px) { .blog-post pre code, .page pre code, .faq-content pre code { - font-size: 1rem; /* 16px */ + font-size: 0.9375rem; /* 15px, mono at ~90% of the 17-18px body */ } } @@ -722,39 +670,39 @@ .blog-post th, .blog-post td, .page th, .page td, .faq-content th, .faq-content td { - border: 1px solid #e5e7eb; + border: 1px solid rgb(var(--color-line)); padding: 0.75rem 1rem; /* 12px 16px */ text-align: left; } .blog-post th, .page th, .faq-content th { - background-color: #f9fafb; - color: #141035; - font-weight: 600; + background-color: rgb(var(--color-surface)); + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); text-transform: uppercase; font-size: 0.875rem; /* 14px */ letter-spacing: 0.05em; } .blog-post tbody tr, .page tbody tr, .faq-content tbody tr { - background: #FFF; + background: rgb(var(--color-canvas)); transition: background-color 0.2s ease; } .blog-post tbody tr:hover, .page tbody tr:hover, .faq-content tbody tr:hover { - background: #f9fafb; + background: rgb(var(--color-surface)); } .blog-post td, .page td, .faq-content td { - color: #5E5E5E; + color: rgb(var(--color-ink-muted)); } /* Horizontal rules */ .blog-post hr, .page hr, .faq-content hr { margin: 3rem 0; /* 48px */ border: none; - height: 2px; - background: linear-gradient(to right, transparent, #e5e7eb 20%, #e5e7eb 80%, transparent); + height: 1px; + background: rgb(var(--color-line)); } @media (min-width: 768px) { @@ -772,28 +720,18 @@ padding: 0.25rem 1rem; /* 4px 16px */ } -.blog-post .tags a, .page .tags a { - color: #FFF; -} - -.blog-post .tags a:hover, .page .tags a:hover { - opacity: 0.8; -} - -/* CTA Box */ +/* CTA Box: white on navy, one orange button */ .blog-post .cta-box, .page .cta-box { - background-color: #201B4C; - border: 1px solid #37306B; - border-radius: 12px; + background-color: rgb(var(--color-inverse)); + border-radius: var(--radius-lg); padding: 1.5rem; /* 24px */ margin: 2rem 0; /* 32px */ } .blog-post .cta-box p, .page .cta-box p { - color: #ffffff; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + color: rgb(var(--color-on-inverse)); font-size: 1.125rem; /* 18px */ - font-weight: 400; + font-weight: var(--font-weight-regular); line-height: 1.7; margin-bottom: 1rem; /* 16px */ } @@ -805,164 +743,83 @@ } .blog-post .cta-box strong, .page .cta-box strong { - color: #ffffff; - font-weight: 600; + color: rgb(var(--color-on-inverse)); + font-weight: var(--font-weight-semibold); +} + +.blog-post .cta-box a, .page .cta-box a { + color: rgb(var(--color-on-inverse)); +} + +.blog-post .cta-box a:hover, .page .cta-box a:hover { + color: rgb(var(--color-accent)); } .blog-post .cta-box a.cta-button, .page .cta-box a.cta-button { display: inline-block; padding: 0.75rem 1.5rem; /* 12px 24px */ - background-color: #8A7DFF; - color: #ffffff; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + background-color: rgb(var(--color-accent-strong)); + color: rgb(var(--color-on-accent)); font-size: 1rem; /* 16px */ - border-radius: 9999px; - font-weight: 500; + border-radius: var(--radius-pill); + font-weight: var(--font-weight-semibold); text-decoration: none; transition: background-color 0.2s ease; } .blog-post .cta-box a.cta-button:hover, .page .cta-box a.cta-button:hover { - background-color: #7A6DE5; - color: #ffffff; + background-color: rgb(var(--color-accent-hover)); + color: rgb(var(--color-on-accent)); text-decoration: none; } -/* Contact section */ -.contact { - position: relative; -} - -.contact::before { - content: ""; - display: block; - position: absolute; - left: 0; - right: 0; - bottom: 0; - margin: 0 auto; - height: 10rem; - width: 80%; - border-radius: 15rem 15rem 0 0; - background: linear-gradient(94deg, #4059D0 8.79%, #CC58BB 56.82%, #F4B57F 100%); - filter: blur(60px); - opacity: 0.4; -} - -@media (min-width: 1024px) { - .contact::before { - width: 40rem; - } -} - -/* Podcast page */ -.podcast-page .author-img { - border-radius: 100%; - width: 162px; - height: 162px; -} - -/* Search results */ -.search-results .search-item { - margin: 1rem 0; /* 16px */ - display: flex; - flex-direction: column; - gap: 0.75rem; /* 12px */ -} - -.search-results .search-item h3 { - font-size: 1.25rem; /* 20px */ -} - -.search-results .search-content-type { - text-transform: capitalize; - font-size: 0.875rem; /* 14px */ -} - -.search-results hr { - border-color: #d3d3d366; -} - -/* Header search */ -.header-search { - position: relative; - display: inline-block; - margin: 4px 2px; - height: 50px; - width: 50px; - vertical-align: bottom; -} - -.header-search .button { - display: inline-block; - margin: 4px 2px; - background-color: #444; - font-size: 14px; - padding-left: 32px; - padding-right: 32px; - height: 50px; - line-height: 50px; - text-align: center; - color: white; - text-decoration: none; - cursor: pointer; - user-select: none; +/* "On this page" table of contents (layouts/partials/toc.html) */ +.toc ul { + list-style: none; + margin: 0; + padding: 0; } -.header-search .button:hover { - transition-duration: 0.4s; - background-color: white; - color: black; +.toc ul ul { + margin-top: 0.5rem; + padding-left: 0.875rem; + border-left: 1px solid rgb(var(--color-line)); } -.header-search .searchbutton { - background-color: transparent; - position: absolute; - font-size: 30px; - width: 100%; - margin: 0; +.toc li { + margin: 0 0 0.5rem; padding: 0; + font-size: 0.875rem; + line-height: 1.4; } -.header-search .search:focus + .searchbutton { - transition-duration: 0.4s; - background-color: #FFF; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; - color: black; +.toc a { + color: rgb(var(--color-ink-muted)); + text-decoration: none; + transition: color 0.2s ease; } -.header-search .search { - position: absolute; - left: 49px; - background-color: #FFF; - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; - outline: none; - border: none; - padding: 0; - width: 0; - height: 100%; - z-index: 10; - transition-duration: 0.4s; +.toc a:hover { + color: rgb(var(--color-ink)); } -.header-search .search:focus { - width: 200px; - padding: 0 16px 0 0; +/* The inline copy sits inside .page/.blog-post, whose list and link rules + would otherwise restyle it as body copy. */ +.page .toc ul, .blog-post .toc ul, .page .toc li, .blog-post .toc li { + font-size: 0.9375rem; + color: rgb(var(--color-ink-muted)); + list-style: none; } -@media (min-width: 1280px) { - .header-search .search:focus { - width: 363px; - } +.page .toc a, .blog-post .toc a { + color: rgb(var(--color-ink-muted)); + text-decoration: none; } -.header-search .expandright { - left: auto; - right: 49px; +.page .toc a:hover, .blog-post .toc a:hover { + color: rgb(var(--color-ink)); } -.header-search .expandright:focus { - padding: 0 0 0 16px; +.toc-inline summary::marker { + color: rgb(var(--color-ink-subtle)); } diff --git a/_assets/css/tokens.css b/_assets/css/tokens.css new file mode 100644 index 00000000..a112d62e --- /dev/null +++ b/_assets/css/tokens.css @@ -0,0 +1,124 @@ +/* + * sbomify design tokens, from the sbomify Brand Guidelines v2.0 (2026). + * + * Two tiers: + * 1. Primitives: the palette exactly as the guide publishes it. Nothing + * outside this file should name a hex value. + * 2. Roles: what a colour is for (ink, canvas, accent, ...). Templates and + * component CSS use these, through the Tailwind theme in + * tailwind.config.js or as rgb(var(--color-*)) in CSS. + * + * Colours are stored as space-separated RGB channels so Tailwind's opacity + * modifiers (bg-navy/80, border-white/10) keep working. + * + * Off-guide values are marked "derived". They extend a published scale in the + * same way the guide builds it, never introduce a new hue. + * + * D2 diagrams cannot read CSS variables; _d2/theme.d2 copies the hex values + * and must be kept in step with this file. + */ + +:root { + /* ===== Primitives: primary palette ===== */ + --color-navy-100: 37 41 63; /* #25293F Navy, primary · text · brand */ + --color-navy-80: 81 84 107; /* #51546B */ + --color-navy-60: 124 127 140; /* #7C7F8C */ + --color-navy-40: 168 169 178; /* #A8A9B2 */ + --color-navy-20: 211 212 217; /* #D3D4D9 */ + --color-navy-10: 233 234 236; /* #E9EAEC */ + --color-navy-5: 244 244 245; /* #F4F4F5 derived: Navy at 5% on white */ + --color-white: 255 255 255; /* #FFFFFF White, primary · canvas */ + --color-mist: 225 227 234; /* #E1E3EA Mist, secondary · surfaces */ + --color-mist-50: 240 241 245; /* #F0F1F5 derived: Mist at 50% on white */ + + /* Signal Orange: reserved for emphasis, one moment per layout. */ + --color-orange-800: 170 61 20; /* #AA3D14 derived: Orange 700 + 15% Navy, pressed/hover only */ + --color-orange-700: 194 65 12; /* #C2410C orange text on white, fills behind buttons and small text */ + --color-orange-600: 232 90 12; /* #E85A0C */ + --color-orange-500: 255 106 19; /* #FF6A13 Signal Orange: large shapes and the logo */ + --color-orange-300: 255 166 113; /* #FFA671 strings in code blocks */ + --color-orange-100: 255 210 184; /* #FFD2B8 */ + --color-orange-50: 255 243 236; /* #FFF3EC */ + + /* ===== Primitives: semantic palette (status only, never decoration) ===== */ + --color-success-full: 31 169 113; /* #1FA971 */ + --color-success-tint: 231 246 239; /* #E7F6EF */ + --color-danger-full: 229 72 77; /* #E5484D */ + --color-danger-tint: 252 234 235; /* #FCEAEB */ + --color-warning-full: 244 164 37; /* #F4A425 */ + --color-warning-tint: 253 243 225; /* #FDF3E1 */ + --color-info-full: 66 99 235; /* #4263EB */ + --color-info-tint: 234 238 253; /* #EAEEFD */ + + /* ===== Roles: light surfaces (the default) ===== */ + --color-canvas: var(--color-white); + --color-surface: var(--color-mist-50); /* alternating sections, cards on canvas */ + --color-surface-strong: var(--color-mist); /* chips, tags, wells */ + --color-line: var(--color-navy-10); /* hairlines, card borders */ + --color-line-strong: var(--color-navy-20); /* inputs, emphasised borders */ + + --color-ink: var(--color-navy-100); /* headings, primary text */ + --color-ink-muted: var(--color-navy-80); /* body copy: Navy 80 or darker */ + /* Navy 60 measures 4.0:1 on white: large type, icons and placeholders only. + Small eyebrows, captions and meta use ink-muted so they stay AA. */ + --color-ink-subtle: var(--color-navy-60); + + /* ===== Roles: dark surfaces (white on navy) ===== */ + --color-inverse: var(--color-navy-100); + --color-inverse-raised: 48 52 73; /* #303449 derived: Navy 100 + 5% white, cards on navy */ + --color-on-inverse: var(--color-white); + --color-on-inverse-muted: var(--color-navy-20); + --color-on-inverse-subtle: var(--color-navy-40); + + /* ===== Roles: accent ===== */ + --color-accent: var(--color-orange-500); /* large shapes, dots, chart highlight */ + --color-accent-strong: var(--color-orange-700); /* buttons, small orange text on white */ + --color-accent-hover: var(--color-orange-800); + --color-accent-soft: var(--color-orange-50); /* faint wash behind an accent moment */ + --color-on-accent: var(--color-white); /* type on orange is always white */ + + /* Focus ring, 3:1 or better against its surface: Orange 700 on white + (5.2:1), Signal Orange on navy (5.1:1). */ + --color-focus: var(--color-orange-700); + --color-focus-inverse: var(--color-orange-500); + + /* ===== Roles: code ===== */ + --color-code-bg: var(--color-navy-100); + --color-code-text: var(--color-navy-10); + --color-code-string: var(--color-orange-300); + --color-code-muted: var(--color-navy-40); + --color-code-inline-bg: var(--color-navy-5); + + /* ===== Typography ===== */ + /* Figtree everywhere; system sans fallback per the guide. */ + --font-sans: "Figtree Variable", "Figtree", "Helvetica Neue", Helvetica, Arial, sans-serif; + /* Same stack as the product: SF Mono on Apple, Consolas on Windows. */ + --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace; + /* Mono runs large: set it at about 90% of the Figtree beside it. */ + --font-mono-scale: 0.9em; + + --font-weight-light: 300; + --font-weight-regular: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + + --leading-display: 1.05; + --leading-heading: 1.2; + --leading-body: 1.6; + + --tracking-display: -0.03em; /* display headings: tight */ + --tracking-heading: -0.015em; /* section headings: slightly tight */ + --tracking-eyebrow: 0.12em; /* eyebrows, captions, meta: wide, caps */ + + /* ===== Shape and depth ===== */ + --radius-sm: 0.375rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; + --radius-pill: 9999px; + + --shadow-card: 0 1px 2px 0 rgb(var(--color-navy-100) / 0.04), 0 1px 3px 0 rgb(var(--color-navy-100) / 0.06); + --shadow-raised: 0 10px 30px -12px rgb(var(--color-navy-100) / 0.18); +} diff --git a/_d2/theme.d2 b/_d2/theme.d2 index 2d57554b..3fcd6c0f 100644 --- a/_d2/theme.d2 +++ b/_d2/theme.d2 @@ -1,11 +1,14 @@ -# Sbomify D2 Theme - Clean & Modern +# sbomify D2 theme, from the Brand Guidelines v2.0 # -# Brand colors: -# - Dark Blue: #201B4C -# - Purple: #8A7DFF -# - Pink: #d874a9 -# - Light Pink: #FCDDEC -# - Background: #F8F9FC +# D2 cannot read CSS variables, so these are copies of the tokens in +# _assets/css/tokens.css. Keep the two in step. +# - Navy 100 (ink): #25293F +# - Navy 80 (ink-muted): #51546B +# - Navy 20 (line-strong): #D3D4D9 +# - Navy 10 (line): #E9EAEC +# - Mist 50 (surface): #F0F1F5 +# - Signal Orange (accent): #FF6A13 +# - Orange 700 (fill behind small white type): #C2410C # Global Defaults style: { @@ -17,12 +20,12 @@ style: { } classes: { - # Primary - Purple border, light fill + # Primary - Navy border, white fill primary: { style: { fill: "#FFFFFF" - stroke: "#8A7DFF" - font-color: "#201B4C" + stroke: "#25293F" + font-color: "#25293F" stroke-width: 2 shadow: false border-radius: 8 @@ -30,12 +33,12 @@ classes: { } } - # Accent - Pink border, light fill + # Accent - Signal Orange border, white fill accent: { style: { fill: "#FFFFFF" - stroke: "#d874a9" - font-color: "#201B4C" + stroke: "#FF6A13" + font-color: "#25293F" stroke-width: 2 shadow: false border-radius: 8 @@ -43,12 +46,12 @@ classes: { } } - # Secondary - Light pink border, light fill (for less emphasis) + # Secondary - Navy 20 dashed border (for less emphasis) secondary: { style: { fill: "#FFFFFF" - stroke: "#CCCCCC" - font-color: "#666666" + stroke: "#D3D4D9" + font-color: "#51546B" stroke-width: 2 shadow: false border-radius: 8 @@ -57,11 +60,11 @@ classes: { } } - # Highlight - Filled purple (for key items) + # Highlight - Orange fill, white type (for the one key item) highlight: { style: { - fill: "#8A7DFF" - stroke: "#8A7DFF" + fill: "#C2410C" + stroke: "#C2410C" font-color: "#FFFFFF" stroke-width: 2 shadow: false @@ -74,9 +77,9 @@ classes: { # Group Container group: { style: { - fill: "#F8F9FC" - stroke: "#E2E4E9" - font-color: "#201B4C" + fill: "#F0F1F5" + stroke: "#E9EAEC" + font-color: "#25293F" stroke-width: 1 border-radius: 12 font-size: 13 @@ -90,23 +93,23 @@ classes: { } } - # Flow - Purple animated connection + # Flow - Navy animated connection flow: { style: { animated: true - stroke: "#8A7DFF" - font-color: "#666666" + stroke: "#51546B" + font-color: "#51546B" stroke-width: 2 font-size: 12 } } - # Flow Pink - Pink animated connection + # Flow Pink - Signal Orange animated connection (name kept for existing diagrams) flow-pink: { style: { animated: true - stroke: "#d874a9" - font-color: "#666666" + stroke: "#FF6A13" + font-color: "#51546B" stroke-width: 2 font-size: 12 } diff --git a/assets/css/native.css b/assets/css/native.css index d6b39611..7ea2f6d1 100644 --- a/assets/css/native.css +++ b/assets/css/native.css @@ -1,88 +1,38 @@ -/* Generated using: hugo gen chromastyles --style=monokai */ +/* Syntax highlighting for Hugo's Chroma (markup.highlight noClasses = false). + Brand guide: code blocks are Regular on navy, strings in Orange 300. + The palette is kept to navy tints and orange so code reads as part of the + brand; colours resolve to the tokens in _assets/css/tokens.css. */ -/* Background */ .bg { color:#f8f8f2;background-color:#272822; } -/* PreWrapper */ .chroma { color:#f8f8f2;background-color:#272822; } -/* Other */ .chroma .x { } -/* Error */ .chroma .err { color:#960050;background-color:#1e0010 } -/* CodeLine */ .chroma .cl { } -/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit } -/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; } -/* LineTable */ .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; } -/* LineHighlight */ .chroma .hl { background-color:#3c3d38 } -/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f } -/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f } -/* Line */ .chroma .line { display:flex; } -/* Keyword */ .chroma .k { color:#66d9ef } -/* KeywordConstant */ .chroma .kc { color:#66d9ef } -/* KeywordDeclaration */ .chroma .kd { color:#66d9ef } -/* KeywordNamespace */ .chroma .kn { color:#f92672 } -/* KeywordPseudo */ .chroma .kp { color:#66d9ef } -/* KeywordReserved */ .chroma .kr { color:#66d9ef } -/* KeywordType */ .chroma .kt { color:#66d9ef } -/* Name */ .chroma .n { } -/* NameAttribute */ .chroma .na { color:#a6e22e } -/* NameBuiltin */ .chroma .nb { } -/* NameBuiltinPseudo */ .chroma .bp { } -/* NameClass */ .chroma .nc { color:#a6e22e } -/* NameConstant */ .chroma .no { color:#66d9ef } -/* NameDecorator */ .chroma .nd { color:#a6e22e } -/* NameEntity */ .chroma .ni { } -/* NameException */ .chroma .ne { color:#a6e22e } -/* NameFunction */ .chroma .nf { color:#a6e22e } -/* NameFunctionMagic */ .chroma .fm { } -/* NameLabel */ .chroma .nl { } -/* NameNamespace */ .chroma .nn { } -/* NameOther */ .chroma .nx { color:#a6e22e } -/* NameProperty */ .chroma .py { } -/* NameTag */ .chroma .nt { color:#f92672 } -/* NameVariable */ .chroma .nv { } -/* NameVariableClass */ .chroma .vc { } -/* NameVariableGlobal */ .chroma .vg { } -/* NameVariableInstance */ .chroma .vi { } -/* NameVariableMagic */ .chroma .vm { } -/* Literal */ .chroma .l { color:#ae81ff } -/* LiteralDate */ .chroma .ld { color:#e6db74 } -/* LiteralString */ .chroma .s { color:#e6db74 } -/* LiteralStringAffix */ .chroma .sa { color:#e6db74 } -/* LiteralStringBacktick */ .chroma .sb { color:#e6db74 } -/* LiteralStringChar */ .chroma .sc { color:#e6db74 } -/* LiteralStringDelimiter */ .chroma .dl { color:#e6db74 } -/* LiteralStringDoc */ .chroma .sd { color:#e6db74 } -/* LiteralStringDouble */ .chroma .s2 { color:#e6db74 } -/* LiteralStringEscape */ .chroma .se { color:#ae81ff } -/* LiteralStringHeredoc */ .chroma .sh { color:#e6db74 } -/* LiteralStringInterpol */ .chroma .si { color:#e6db74 } -/* LiteralStringOther */ .chroma .sx { color:#e6db74 } -/* LiteralStringRegex */ .chroma .sr { color:#e6db74 } -/* LiteralStringSingle */ .chroma .s1 { color:#e6db74 } -/* LiteralStringSymbol */ .chroma .ss { color:#e6db74 } -/* LiteralNumber */ .chroma .m { color:#ae81ff } -/* LiteralNumberBin */ .chroma .mb { color:#ae81ff } -/* LiteralNumberFloat */ .chroma .mf { color:#ae81ff } -/* LiteralNumberHex */ .chroma .mh { color:#ae81ff } -/* LiteralNumberInteger */ .chroma .mi { color:#ae81ff } -/* LiteralNumberIntegerLong */ .chroma .il { color:#ae81ff } -/* LiteralNumberOct */ .chroma .mo { color:#ae81ff } -/* Operator */ .chroma .o { color:#f92672 } -/* OperatorWord */ .chroma .ow { color:#f92672 } -/* Punctuation */ .chroma .p { } -/* Comment */ .chroma .c { color:#75715e } -/* CommentHashbang */ .chroma .ch { color:#75715e } -/* CommentMultiline */ .chroma .cm { color:#75715e } -/* CommentSingle */ .chroma .c1 { color:#75715e } -/* CommentSpecial */ .chroma .cs { color:#75715e } -/* CommentPreproc */ .chroma .cp { color:#75715e } -/* CommentPreprocFile */ .chroma .cpf { color:#75715e } -/* Generic */ .chroma .g { } -/* GenericDeleted */ .chroma .gd { color:#f92672 } -/* GenericEmph */ .chroma .ge { font-style:italic } -/* GenericError */ .chroma .gr { } -/* GenericHeading */ .chroma .gh { } -/* GenericInserted */ .chroma .gi { color:#a6e22e } -/* GenericOutput */ .chroma .go { } -/* GenericPrompt */ .chroma .gp { } -/* GenericStrong */ .chroma .gs { font-weight:bold } -/* GenericSubheading */ .chroma .gu { color:#75715e } -/* GenericTraceback */ .chroma .gt { } -/* GenericUnderline */ .chroma .gl { } -/* TextWhitespace */ .chroma .w { } +/* Background */ .bg { color: rgb(var(--color-code-text)); background-color: rgb(var(--color-code-bg)); } +/* PreWrapper */ .chroma { color: rgb(var(--color-code-text)); background-color: rgb(var(--color-code-bg)); } +/* Error */ .chroma .err { color: rgb(var(--color-danger-full)); } +/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit; } +/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } +/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } +/* LineHighlight */ .chroma .hl { background-color: rgb(var(--color-inverse-raised)); } +/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: rgb(var(--color-code-muted)); } +/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: rgb(var(--color-code-muted)); } +/* Line */ .chroma .line { display: flex; } + +/* Keywords, operators and tags: white, a step brighter than plain code */ +.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .kt, +.chroma .nt, .chroma .o, .chroma .ow { color: rgb(var(--color-white)); font-weight: var(--font-weight-semibold); } + +/* Names: attributes, classes, functions, keys */ +.chroma .na, .chroma .nc, .chroma .no, .chroma .nd, .chroma .ne, .chroma .nf, .chroma .nx { color: rgb(var(--color-orange-100)); } + +/* Strings: Orange 300 */ +.chroma .s, .chroma .sa, .chroma .sb, .chroma .sc, .chroma .dl, .chroma .sd, .chroma .s2, +.chroma .sh, .chroma .si, .chroma .sx, .chroma .sr, .chroma .s1, .chroma .ss, .chroma .ld { color: rgb(var(--color-code-string)); } + +/* Numbers, literals and escapes */ +.chroma .l, .chroma .se, .chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo { color: rgb(var(--color-orange-100)); } + +/* Comments */ +.chroma .c, .chroma .ch, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .cp, .chroma .cpf, .chroma .gu { color: rgb(var(--color-code-muted)); font-style: italic; } + +/* Diffs */ +.chroma .gd { color: rgb(var(--color-danger-full)); } +.chroma .gi { color: rgb(var(--color-success-full)); } +.chroma .ge { font-style: italic; } +.chroma .gs { font-weight: bold; } diff --git a/assets/css/styles.css b/assets/css/styles.css index 956eca12..dc020b81 100644 --- a/assets/css/styles.css +++ b/assets/css/styles.css @@ -1,22 +1,142 @@ -/* Inter Variable Font - self-hosted from @fontsource-variable/inter */ +/* Design tokens (colour, type, shape). Everything below reads from these. *//* + * sbomify design tokens, from the sbomify Brand Guidelines v2.0 (2026). + * + * Two tiers: + * 1. Primitives: the palette exactly as the guide publishes it. Nothing + * outside this file should name a hex value. + * 2. Roles: what a colour is for (ink, canvas, accent, ...). Templates and + * component CSS use these, through the Tailwind theme in + * tailwind.config.js or as rgb(var(--color-*)) in CSS. + * + * Colours are stored as space-separated RGB channels so Tailwind's opacity + * modifiers (bg-navy/80, border-white/10) keep working. + * + * Off-guide values are marked "derived". They extend a published scale in the + * same way the guide builds it, never introduce a new hue. + * + * D2 diagrams cannot read CSS variables; _d2/theme.d2 copies the hex values + * and must be kept in step with this file. + */ +:root { + /* ===== Primitives: primary palette ===== */ + --color-navy-100: 37 41 63; /* #25293F Navy, primary · text · brand */ + --color-navy-80: 81 84 107; /* #51546B */ + --color-navy-60: 124 127 140; /* #7C7F8C */ + --color-navy-40: 168 169 178; /* #A8A9B2 */ + --color-navy-20: 211 212 217; /* #D3D4D9 */ + --color-navy-10: 233 234 236; /* #E9EAEC */ + --color-navy-5: 244 244 245; /* #F4F4F5 derived: Navy at 5% on white */ + --color-white: 255 255 255; /* #FFFFFF White, primary · canvas */ + --color-mist: 225 227 234; /* #E1E3EA Mist, secondary · surfaces */ + --color-mist-50: 240 241 245; /* #F0F1F5 derived: Mist at 50% on white */ + + /* Signal Orange: reserved for emphasis, one moment per layout. */ + --color-orange-800: 170 61 20; /* #AA3D14 derived: Orange 700 + 15% Navy, pressed/hover only */ + --color-orange-700: 194 65 12; /* #C2410C orange text on white, fills behind buttons and small text */ + --color-orange-600: 232 90 12; /* #E85A0C */ + --color-orange-500: 255 106 19; /* #FF6A13 Signal Orange: large shapes and the logo */ + --color-orange-300: 255 166 113; /* #FFA671 strings in code blocks */ + --color-orange-100: 255 210 184; /* #FFD2B8 */ + --color-orange-50: 255 243 236; /* #FFF3EC */ + + /* ===== Primitives: semantic palette (status only, never decoration) ===== */ + --color-success-full: 31 169 113; /* #1FA971 */ + --color-success-tint: 231 246 239; /* #E7F6EF */ + --color-danger-full: 229 72 77; /* #E5484D */ + --color-danger-tint: 252 234 235; /* #FCEAEB */ + --color-warning-full: 244 164 37; /* #F4A425 */ + --color-warning-tint: 253 243 225; /* #FDF3E1 */ + --color-info-full: 66 99 235; /* #4263EB */ + --color-info-tint: 234 238 253; /* #EAEEFD */ + + /* ===== Roles: light surfaces (the default) ===== */ + --color-canvas: var(--color-white); + --color-surface: var(--color-mist-50); /* alternating sections, cards on canvas */ + --color-surface-strong: var(--color-mist); /* chips, tags, wells */ + --color-line: var(--color-navy-10); /* hairlines, card borders */ + --color-line-strong: var(--color-navy-20); /* inputs, emphasised borders */ + + --color-ink: var(--color-navy-100); /* headings, primary text */ + --color-ink-muted: var(--color-navy-80); /* body copy: Navy 80 or darker */ + /* Navy 60 measures 4.0:1 on white: large type, icons and placeholders only. + Small eyebrows, captions and meta use ink-muted so they stay AA. */ + --color-ink-subtle: var(--color-navy-60); + + /* ===== Roles: dark surfaces (white on navy) ===== */ + --color-inverse: var(--color-navy-100); + --color-inverse-raised: 48 52 73; /* #303449 derived: Navy 100 + 5% white, cards on navy */ + --color-on-inverse: var(--color-white); + --color-on-inverse-muted: var(--color-navy-20); + --color-on-inverse-subtle: var(--color-navy-40); + + /* ===== Roles: accent ===== */ + --color-accent: var(--color-orange-500); /* large shapes, dots, chart highlight */ + --color-accent-strong: var(--color-orange-700); /* buttons, small orange text on white */ + --color-accent-hover: var(--color-orange-800); + --color-accent-soft: var(--color-orange-50); /* faint wash behind an accent moment */ + --color-on-accent: var(--color-white); /* type on orange is always white */ + + /* Focus ring, 3:1 or better against its surface: Orange 700 on white + (5.2:1), Signal Orange on navy (5.1:1). */ + --color-focus: var(--color-orange-700); + --color-focus-inverse: var(--color-orange-500); + + /* ===== Roles: code ===== */ + --color-code-bg: var(--color-navy-100); + --color-code-text: var(--color-navy-10); + --color-code-string: var(--color-orange-300); + --color-code-muted: var(--color-navy-40); + --color-code-inline-bg: var(--color-navy-5); + + /* ===== Typography ===== */ + /* Figtree everywhere; system sans fallback per the guide. */ + --font-sans: "Figtree Variable", "Figtree", "Helvetica Neue", Helvetica, Arial, sans-serif; + /* Same stack as the product: SF Mono on Apple, Consolas on Windows. */ + --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace; + /* Mono runs large: set it at about 90% of the Figtree beside it. */ + --font-mono-scale: 0.9em; + + --font-weight-light: 300; + --font-weight-regular: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + + --leading-display: 1.05; + --leading-heading: 1.2; + --leading-body: 1.6; + + --tracking-display: -0.03em; /* display headings: tight */ + --tracking-heading: -0.015em; /* section headings: slightly tight */ + --tracking-eyebrow: 0.12em; /* eyebrows, captions, meta: wide, caps */ + + /* ===== Shape and depth ===== */ + --radius-sm: 0.375rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; + --radius-pill: 9999px; + + --shadow-card: 0 1px 2px 0 rgb(var(--color-navy-100) / 0.04), 0 1px 3px 0 rgb(var(--color-navy-100) / 0.06); + --shadow-raised: 0 10px 30px -12px rgb(var(--color-navy-100) / 0.18); +}/* Figtree Variable, self-hosted from @fontsource-variable/figtree */ @font-face { - font-family: 'Inter Variable'; + font-family: 'Figtree Variable'; font-style: normal; font-display: swap; - font-weight: 100 900; - src: url('/assets/fonts/inter-latin-ext-wght-normal.woff2') format('woff2-variations'); + font-weight: 300 900; + src: url('/assets/fonts/figtree-latin-ext-wght-normal.woff2') format('woff2-variations'); unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; } - @font-face { - font-family: 'Inter Variable'; + font-family: 'Figtree Variable'; font-style: normal; font-display: swap; - font-weight: 100 900; - src: url('/assets/fonts/inter-latin-wght-normal.woff2') format('woff2-variations'); + font-weight: 300 900; + src: url('/assets/fonts/figtree-latin-wght-normal.woff2') format('woff2-variations'); unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; } - *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; @@ -70,7 +190,6 @@ --tw-contain-paint: ; --tw-contain-style: ; } - ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; @@ -123,30 +242,22 @@ --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; -} - -/* ! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com */ - -/* +}/* ! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com *//* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ - *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ - border-color: #e5e7eb; /* 2 */ + border-color: rgb(var(--color-line) / 1); /* 2 */ } - ::before, ::after { --tw-content: ''; -} - -/* +}/* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. @@ -155,7 +266,6 @@ 6. Use the user's configured `sans` font-variation-settings by default. 7. Disable tap highlights on iOS */ - html, :host { line-height: 1.5; /* 1 */ @@ -163,47 +273,35 @@ html, -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ - font-family: "Inter Variable", Inter, ui-sans-serif, system-ui, sans-serif; /* 4 */ + font-family: var(--font-sans); /* 4 */ font-feature-settings: normal; /* 5 */ font-variation-settings: normal; /* 6 */ -webkit-tap-highlight-color: transparent; /* 7 */ -} - -/* +}/* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ - body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ -} - -/* +}/* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ - hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ -} - -/* +}/* Add the correct text decoration in Chrome, Edge, and Safari. */ - abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; -} - -/* +}/* Remove the default font size and weight for headings. */ - h1, h2, h3, @@ -212,55 +310,40 @@ h5, h6 { font-size: inherit; font-weight: inherit; -} - -/* +}/* Reset links to optimize for opt-in styling instead of opt-out. */ - a { color: inherit; text-decoration: inherit; -} - -/* +}/* Add the correct font weight in Edge and Safari. */ - b, strong { font-weight: bolder; -} - -/* +}/* 1. Use the user's configured `mono` font-family by default. 2. Use the user's configured `mono` font-feature-settings by default. 3. Use the user's configured `mono` font-variation-settings by default. 4. Correct the odd `em` font sizing in all browsers. */ - code, kbd, samp, pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ + font-family: var(--font-mono); /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ -} - -/* +}/* Add the correct font size in all browsers. */ - small { font-size: 80%; -} - -/* +}/* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ - sub, sup { font-size: 75%; @@ -268,33 +351,25 @@ sup { position: relative; vertical-align: baseline; } - sub { bottom: -0.25em; } - sup { top: -0.5em; -} - -/* +}/* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ - table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ -} - -/* +}/* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ - button, input, optgroup, @@ -310,22 +385,16 @@ textarea { color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ -} - -/* +}/* Remove the inheritance of text transform in Edge and Firefox. */ - button, select { text-transform: none; -} - -/* +}/* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ - button, input:where([type='button']), input:where([type='reset']), @@ -333,81 +402,54 @@ input:where([type='submit']) { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ -} - -/* +}/* Use the modern Firefox focus style for all focusable elements. */ - :-moz-focusring { outline: auto; -} - -/* +}/* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ - :-moz-ui-invalid { box-shadow: none; -} - -/* +}/* Add the correct vertical alignment in Chrome and Firefox. */ - progress { vertical-align: baseline; -} - -/* +}/* Correct the cursor style of increment and decrement buttons in Safari. */ - ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; -} - -/* +}/* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ - [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ -} - -/* +}/* Remove the inner padding in Chrome and Safari on macOS. */ - ::-webkit-search-decoration { -webkit-appearance: none; -} - -/* +}/* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ - ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ -} - -/* +}/* Add the correct display in Chrome and Safari. */ - summary { display: list-item; -} - -/* +}/* Removes the default spacing and border for appropriate elements. */ - blockquote, dl, dd, @@ -423,79 +465,57 @@ p, pre { margin: 0; } - fieldset { margin: 0; padding: 0; } - legend { padding: 0; } - ol, ul, menu { list-style: none; margin: 0; padding: 0; -} - -/* +}/* Reset default styling for dialogs. */ - dialog { padding: 0; -} - -/* +}/* Prevent resizing textareas horizontally by default. */ - textarea { resize: vertical; -} - -/* +}/* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ - input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } - input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ -} - -/* +}/* Set the default cursor for buttons. */ - button, [role="button"] { cursor: pointer; -} - -/* +}/* Make sure disabled buttons don't get the pointer cursor. */ - :disabled { cursor: default; -} - -/* +}/* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ - img, svg, video, @@ -506,2203 +526,1643 @@ embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ -} - -/* +}/* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ - img, video { max-width: 100%; height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ - +}/* Make elements with the HTML hidden attribute stay hidden by default */ [hidden]:where(:not([hidden="until-found"])) { display: none; -} - +}/* Tailwind cannot resolve a CSS-variable ringColor.DEFAULT at build time + and falls back to blue; point the bare `ring` utility at the focus token. */ +*, ::before, ::after, ::backdrop { + --tw-ring-color: rgb(var(--color-focus) / 0.5); + } html { /* Offset anchors so they clear the sticky pill header */ scroll-padding-top: 6rem; } - @media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } } - body { - color: #141035; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + background-color: rgb(var(--color-canvas)); + color: rgb(var(--color-ink)); + font-family: var(--font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; - /* Inter Variable stylistic alternates: better i/l/g, single-storey a, etc. */ - font-feature-settings: "cv02", "cv03", "cv04", "cv11", "ss01"; - } - -/* Firefox legacy alias, autoprefixer also emits this from ::selection, + }/* Firefox legacy alias, autoprefixer also emits this from ::selection, but we declare both explicitly so source ↔ compiled CSS stay 1:1. */ - ::-moz-selection { - background-color: rgba(138, 125, 255, 0.28); - color: inherit; + background-color: rgb(var(--color-orange-100)); + color: rgb(var(--color-ink)); } - ::selection { - background-color: rgba(138, 125, 255, 0.28); - color: inherit; + background-color: rgb(var(--color-orange-100)); + color: rgb(var(--color-ink)); } - :focus-visible { - outline: 2px solid #8A7DFF; + outline: 2px solid rgb(var(--color-focus)); outline-offset: 3px; border-radius: 2px; - } - -/* Avoid double rings on already-rounded targets */ - + }/* Orange 700 drops below 3:1 on navy; dark surfaces use Signal Orange. */ +[class*="bg-inverse"] :focus-visible, + .pricing-card.featured :focus-visible, + .cta-box :focus-visible { + outline-color: rgb(var(--color-focus-inverse)); + }/* Avoid double rings on already-rounded targets */ a:focus-visible, button:focus-visible, input:focus-visible, [role="switch"]:focus-visible { outline-offset: 2px; - } - + }/* Type scale, from the guide: + display 800/700 tight · section 600 slightly tight · body 400 at 1.6 */ h1, h2, h3, h4, h5, h6 { - color: #141035; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + color: rgb(var(--color-ink)); + font-family: var(--font-sans); text-wrap: balance; } - h1 { font-size: 4.25rem; /* 68px */ - font-weight: 500; - line-height: 4.875rem; /* 78px */ - letter-spacing: -0.025em; + font-weight: var(--font-weight-extrabold); + line-height: var(--leading-display); + letter-spacing: var(--tracking-display); } - h2 { font-size: 2rem; /* 32px */ - font-style: normal; - font-weight: 400; - line-height: 120%; - letter-spacing: -0.018em; + font-weight: var(--font-weight-semibold); + line-height: var(--leading-heading); + letter-spacing: var(--tracking-heading); } - @media (min-width: 768px) { h2 { font-size: 3rem; /* 48px */ } } - h3 { - letter-spacing: -0.012em; + font-weight: var(--font-weight-semibold); + letter-spacing: var(--tracking-heading); } - p { - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + font-family: var(--font-sans); font-size: 0.875rem; /* 14px */ - font-style: normal; - font-weight: 400; - line-height: 1.5; + font-weight: var(--font-weight-regular); + line-height: var(--leading-body); text-wrap: pretty; } - @media (min-width: 768px) { p { font-size: 1.125rem; /* 18px */ } + }/* Anything a developer would type, paste or search for is set in mono. */ +code, kbd, samp, pre { + font-family: var(--font-mono); + } +code, kbd, samp { + font-size: var(--font-mono-scale); } - button { - background-color: #0242E5; - color: #FFF; - border-radius: 4px; + background-color: rgb(var(--color-accent-strong)); + color: rgb(var(--color-on-accent)); + border-radius: var(--radius-pill); display: inline-block; font-size: 1.125rem; /* 18px */ - font-style: normal; - font-weight: 400; + font-weight: var(--font-weight-semibold); padding: 14px 16px 12px; text-align: center; - transition: opacity 0.3s; - } - -button:hover { - opacity: 0.8; + transition: background-color 0.2s; + }/* Zero specificity, so a button's own bg-* utility still wins on hover */ +:where(button:hover) { + background-color: rgb(var(--color-accent-hover)); } - .container { width: 100%; } - @media (min-width: 640px) { .container { max-width: 640px; } } - @media (min-width: 768px) { .container { max-width: 768px; } } - @media (min-width: 1024px) { .container { max-width: 1024px; } } - @media (min-width: 1280px) { .container { max-width: 1280px; } } - @media (min-width: 1536px) { .container { max-width: 1536px; } +}/* Buttons. Orange is the one call to action; secondary is navy outline, + and type on orange is always white (Orange 700 fill, 5.2:1). */ +.btn-primary { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + border-radius: 9999px; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 600; + transition-property: background-color,border-color,color,box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; + --tw-bg-opacity: 1; + background-color: rgb(var(--color-accent-strong) / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(var(--color-on-accent) / var(--tw-text-opacity, 1)); +} +.btn-primary:hover { + --tw-bg-opacity: 1; + background-color: rgb(var(--color-accent-hover) / var(--tw-bg-opacity, 1)); +}/* Navy fill: section-level actions, so orange stays the page's one moment */ +.btn-navy { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + border-radius: 9999px; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 600; + transition-property: background-color,border-color,color,box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; + --tw-bg-opacity: 1; + background-color: rgb(var(--color-ink) / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(var(--color-on-inverse) / var(--tw-text-opacity, 1)); +} +.btn-navy:hover { + --tw-bg-opacity: 1; + background-color: rgb(var(--color-navy-80) / var(--tw-bg-opacity, 1)); } - -/* Buttons */ - .btn-secondary { - background: #F6F9FA; - color: #141035; - border-radius: 4px; - display: inline-block; - font-size: 1.125rem; - font-weight: 400; - padding: 14px 16px 12px; - text-align: center; - transition: opacity 0.3s; - } - -.btn-secondary:hover { - opacity: 0.8; - } - -.btn-md { - font-size: 0.875rem; /* 14px */ - } - -.btn-icon { - border: none; - background: none; - } - -a.button { - background-color: #0242E5; - color: #FFF; - border-radius: 4px; - display: inline-block; - font-size: 1.125rem; - font-weight: 400; - padding: 14px 16px 12px; - text-align: center; - transition: opacity 0.3s; - } - -a.button:hover { - opacity: 0.8; - } - -/* Cards */ - -.feature-card { - display: flex; - height: auto; - flex-direction: column; + display: inline-flex; align-items: center; justify-content: center; - border-radius: 0.5rem; + gap: 0.5rem; + border-radius: 9999px; + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + font-weight: 600; + transition-property: background-color,border-color,color,box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; border-width: 1px; - border-style: solid; --tw-border-opacity: 1; - border-color: rgb(74 66 118 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-line-strong) / var(--tw-border-opacity, 1)); --tw-bg-opacity: 1; - background-color: rgb(32 27 76 / var(--tw-bg-opacity, 1)); - padding-left: 1.5rem; - padding-right: 1.5rem; + background-color: rgb(var(--color-canvas) / var(--tw-bg-opacity, 1)); + --tw-text-opacity: 1; + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)); +} +.btn-secondary:hover { + --tw-border-opacity: 1; + border-color: rgb(var(--color-ink) / var(--tw-border-opacity, 1)); +}/* For navy surfaces */ +.btn-md { + padding-left: 1.25rem; + padding-right: 1.25rem; + padding-top: 0.625rem; + padding-bottom: 0.625rem; + font-size: 0.875rem; + line-height: 1.25rem; +} +.btn-lg { + padding-left: 2rem; + padding-right: 2rem; padding-top: 1rem; padding-bottom: 1rem; + font-size: 1.125rem; + line-height: 1.75rem; } - - .blog-post .feature-card img, .page .feature-card img { - margin-top: 0; - margin-bottom: 0; -} - -@media (min-width: 1024px) { - .feature-card { - padding-left: 2.5rem; - padding-right: 2.5rem; +.btn-icon { + border: none; + background: none; + padding: 0; } +.btn-icon:hover { + background: none; + }/* Inline text link: navy type, orange underline, the accent stays small. */ +.link { + --tw-text-opacity: 1; + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)); + text-decoration-line: underline; + text-decoration-color: rgb(var(--color-accent) / 1); + text-decoration-thickness: 2px; + text-underline-offset: 4px; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; } - -/* Typography */ - -/* Layout */ - -/* Images */ - -.logo { - max-height: 30px; - width: 135px; - -o-object-fit: contain; - object-fit: contain; +.link:hover { + --tw-text-opacity: 1; + color: rgb(var(--color-accent-strong) / var(--tw-text-opacity, 1)); } - -/* Links */ - -/* Press logos */ - +.bg-inverse .link, + .bg-inverse-raised .link { + --tw-text-opacity: 1; + color: rgb(var(--color-on-inverse) / var(--tw-text-opacity, 1)); +} +.bg-inverse .link:hover, + .bg-inverse-raised .link:hover { + --tw-text-opacity: 1; + color: rgb(var(--color-accent) / var(--tw-text-opacity, 1)); +}/* Eyebrow, caption and meta: 600, wide track, caps. */ +.eyebrow { + font-size: 0.75rem; + line-height: 1rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: var(--tracking-eyebrow); + --tw-text-opacity: 1; + color: rgb(var(--color-ink-muted) / var(--tw-text-opacity, 1)); +}/* Eyebrow chip: the section label above a heading, with the orange dot + the guide uses in its own running footer. */ +.eyebrow-chip { + font-size: 0.75rem; + line-height: 1rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: var(--tracking-eyebrow); + --tw-text-opacity: 1; + color: rgb(var(--color-ink-muted) / var(--tw-text-opacity, 1)); + display: inline-flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + gap: 0.5rem; + border-radius: 9999px; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(var(--color-line) / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(var(--color-surface) / var(--tw-bg-opacity, 1)); + padding-left: 0.875rem; + padding-right: 0.875rem; + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} +.eyebrow-chip::before { + content: ""; + height: 0.375rem; + width: 0.375rem; + border-radius: 9999px; + --tw-bg-opacity: 1; + background-color: rgb(var(--color-accent) / var(--tw-bg-opacity, 1)); + }/* Neutral tag / badge. Orange is a brand accent, not a status, so it is + kept out of badges; status badges use the semantic palette. */ +.tag { + display: inline-block; + border-radius: 9999px; + --tw-bg-opacity: 1; + background-color: rgb(var(--color-surface-strong) / var(--tw-bg-opacity, 1)); + padding-left: 0.75rem; + padding-right: 0.75rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 500; + --tw-text-opacity: 1; + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)); +}/* Cards */ +.card { + border-radius: 1rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(var(--color-line) / var(--tw-border-opacity, 1)); + --tw-bg-opacity: 1; + background-color: rgb(var(--color-canvas) / var(--tw-bg-opacity, 1)); + --tw-shadow: var(--shadow-card); + --tw-shadow-colored: var(--shadow-card); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.feature-card .link { + --tw-text-opacity: 1; + color: rgb(var(--color-on-inverse) / var(--tw-text-opacity, 1)); +} +.feature-card .link:hover { + --tw-text-opacity: 1; + color: rgb(var(--color-accent) / var(--tw-text-opacity, 1)); +} +.feature-card { + display: flex; + height: auto; + flex-direction: column; + align-items: center; + justify-content: center; + border-radius: 0.5rem; + border-width: 1px; + border-style: solid; + border-color: rgb(var(--color-white) / 0.1); + --tw-bg-opacity: 1; + background-color: rgb(var(--color-inverse-raised) / var(--tw-bg-opacity, 1)); + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 1rem; + padding-bottom: 1rem; +} + .blog-post .feature-card img, .page .feature-card img { + margin-top: 0; + margin-bottom: 0; +} +@media (min-width: 1024px) { + .feature-card { + padding-left: 2.5rem; + padding-right: 2.5rem; + } +}/* Page hero: white canvas with the soft Signal Orange haze from the + guide's cover. Static, so it costs no compositor layer. */ +.hero { + position: relative; + overflow: hidden; + --tw-bg-opacity: 1; + background-color: rgb(var(--color-canvas) / var(--tw-bg-opacity, 1)); +} +.hero::before { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background: radial-gradient(48rem 32rem at 100% 0%, rgb(var(--color-orange-500) / 0.16), rgb(var(--color-orange-500) / 0) 70%); + }/* On phones the same haze covers the whole viewport; keep it a corner glow */ +@media (max-width: 639px) { + .hero::before { + background: radial-gradient(24rem 18rem at 100% 0%, rgb(var(--color-orange-500) / 0.12), rgb(var(--color-orange-500) / 0) 70%); + } + } +.hero > * { + position: relative; + } .pointer-events-none { pointer-events: none; } - .visible { visibility: visible; } - .invisible { visibility: hidden; } - .static { position: static; } - .fixed { position: fixed; } - .absolute { position: absolute; } - .relative { position: relative; } - .sticky { position: sticky; } - .inset-0 { inset: 0px; } - .inset-x-0 { left: 0px; right: 0px; } - -.-right-20 { - right: -5rem; -} - -.-top-20 { - top: -5rem; -} - .bottom-0 { bottom: 0px; } - .left-0 { left: 0px; } - -.left-\[12\%\] { - left: 12%; -} - -.right-0 { - right: 0px; -} - .top-0 { top: 0px; } - -.top-1\/2 { - top: 50%; +.top-28 { + top: 7rem; } - .z-10 { z-index: 10; } - .z-50 { z-index: 50; } - .z-\[60\] { z-index: 60; } - +.col-span-2 { + grid-column: span 2 / span 2; +} .\!m-0 { margin: 0px !important; } - .m-0 { margin: 0px; } - .mx-2 { margin-left: 0.5rem; margin-right: 0.5rem; } - .mx-auto { margin-left: auto; margin-right: auto; } - .my-12 { margin-top: 3rem; margin-bottom: 3rem; } - .my-6 { margin-top: 1.5rem; margin-bottom: 1.5rem; } - .my-8 { margin-top: 2rem; margin-bottom: 2rem; } - .\!mb-0 { margin-bottom: 0px !important; } - .\!mb-2 { margin-bottom: 0.5rem !important; } - .\!mb-4 { margin-bottom: 1rem !important; } - .\!mt-0 { margin-top: 0px !important; } - .mb-0 { margin-bottom: 0px; } - .mb-1 { margin-bottom: 0.25rem; } - .mb-10 { margin-bottom: 2.5rem; } - .mb-12 { margin-bottom: 3rem; } - .mb-16 { margin-bottom: 4rem; } - .mb-2 { margin-bottom: 0.5rem; } - .mb-20 { margin-bottom: 5rem; } - .mb-24 { margin-bottom: 6rem; } - .mb-3 { margin-bottom: 0.75rem; } - .mb-4 { margin-bottom: 1rem; } - .mb-5 { margin-bottom: 1.25rem; } - .mb-6 { margin-bottom: 1.5rem; } - .mb-8 { margin-bottom: 2rem; } - .ml-1 { margin-left: 0.25rem; } - .ml-2 { margin-left: 0.5rem; } - .ml-4 { margin-left: 1rem; } - .mt-0 { margin-top: 0px; } - .mt-0\.5 { margin-top: 0.125rem; } - .mt-1 { margin-top: 0.25rem; } - .mt-10 { margin-top: 2.5rem; } - .mt-12 { margin-top: 3rem; } - .mt-16 { margin-top: 4rem; } - .mt-2 { margin-top: 0.5rem; } - .mt-2\.5 { margin-top: 0.625rem; } - .mt-24 { margin-top: 6rem; } - .mt-3 { margin-top: 0.75rem; } - .mt-4 { margin-top: 1rem; } - .mt-6 { margin-top: 1.5rem; } - .mt-8 { margin-top: 2rem; } - .mt-auto { margin-top: auto; } - .line-clamp-3 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } - .block { display: block; } - .inline-block { display: inline-block; } - .inline { display: inline; } - .flex { display: flex; } - .inline-flex { display: inline-flex; } - .table { display: table; } - .flow-root { display: flow-root; } - .grid { display: grid; } - .contents { display: contents; } - .hidden { display: none; } - +.h-1\.5 { + height: 0.375rem; +} .h-10 { height: 2.5rem; } - .h-12 { height: 3rem; } - .h-14 { height: 3.5rem; } - .h-16 { height: 4rem; } - .h-2 { height: 0.5rem; } - .h-32 { height: 8rem; } - .h-4 { height: 1rem; } - .h-40 { height: 10rem; } - .h-48 { height: 12rem; } - .h-5 { height: 1.25rem; } - .h-6 { height: 1.5rem; } - -.h-64 { - height: 16rem; -} - .h-7 { height: 1.75rem; } - .h-8 { height: 2rem; } - -.h-\[1px\] { - height: 1px; +.h-9 { + height: 2.25rem; +} +.h-\[18px\] { + height: 18px; } - .h-\[30px\] { height: 30px; } - -.h-\[460px\] { - height: 460px; -} - -.h-\[500px\] { - height: 500px; -} - .h-auto { height: auto; } - .h-full { height: 100%; } - .h-px { height: 1px; } - .max-h-12 { max-height: 3rem; } - +.max-h-\[calc\(100vh-8rem\)\] { + max-height: calc(100vh - 8rem); +} +.w-1\.5 { + width: 0.375rem; +} .w-10 { width: 2.5rem; } - .w-12 { width: 3rem; } - .w-14 { width: 3.5rem; } - .w-2 { width: 0.5rem; } - .w-32 { width: 8rem; } - .w-4 { width: 1rem; } - .w-40 { width: 10rem; } - .w-48 { width: 12rem; } - .w-5 { width: 1.25rem; } - .w-6 { width: 1.5rem; } - .w-64 { width: 16rem; } - .w-7 { width: 1.75rem; } - .w-8 { width: 2rem; } - -.w-\[460px\] { - width: 460px; +.w-9 { + width: 2.25rem; } - -.w-\[500px\] { - width: 500px; +.w-\[18px\] { + width: 18px; } - .w-auto { width: auto; } - .w-full { width: 100%; } - .min-w-0 { min-width: 0px; } - .max-w-2xl { max-width: 42rem; } - .max-w-3xl { max-width: 48rem; } - .max-w-4xl { max-width: 56rem; } - +.max-w-6xl { + max-width: 72rem; +} .max-w-7xl { max-width: 80rem; } - .max-w-\[150px\] { max-width: 150px; } - .max-w-\[200px\] { max-width: 200px; } - .max-w-lg { max-width: 32rem; } - .max-w-md { max-width: 28rem; } - .max-w-xs { max-width: 20rem; } - .flex-1 { flex: 1 1 0%; } - -.flex-\[2\] { - flex: 2; -} - .flex-shrink-0 { flex-shrink: 0; } - .shrink-0 { flex-shrink: 0; } - .flex-grow { flex-grow: 1; } - .grow { flex-grow: 1; } - -.-translate-x-1\/3 { - --tw-translate-x: -33.333333%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.-translate-y-1\/2 { - --tw-translate-y: -50%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.-translate-y-1\/3 { - --tw-translate-y: -33.333333%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-x-1\/3 { - --tw-translate-x: 33.333333%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-y-1\/3 { - --tw-translate-y: 33.333333%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } - @keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } } - .animate-ping { animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; } - .cursor-not-allowed { cursor: not-allowed; } - -.list-disc { +.cursor-pointer { + cursor: pointer; +} +.select-none { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.list-disc { list-style-type: disc; } - .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } - .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .flex-col { flex-direction: column; } - +.flex-col-reverse { + flex-direction: column-reverse; +} .flex-wrap { flex-wrap: wrap; } - .items-start { align-items: flex-start; } - .items-center { align-items: center; } - .justify-start { justify-content: flex-start; } - .justify-end { justify-content: flex-end; } - .justify-center { justify-content: center; } - .justify-between { justify-content: space-between; } - .gap-1 { gap: 0.25rem; } - +.gap-1\.5 { + gap: 0.375rem; +} .gap-10 { gap: 2.5rem; } - +.gap-12 { + gap: 3rem; +} .gap-16 { gap: 4rem; } - .gap-2 { gap: 0.5rem; } - -.gap-2\.5 { - gap: 0.625rem; -} - .gap-3 { gap: 0.75rem; } - .gap-4 { gap: 1rem; } - .gap-6 { gap: 1.5rem; } - .gap-8 { gap: 2rem; } - .gap-\[13px\] { gap: 13px; } - -.gap-x-6 { - -moz-column-gap: 1.5rem; - column-gap: 1.5rem; +.gap-x-2 { + -moz-column-gap: 0.5rem; + column-gap: 0.5rem; } - -.gap-y-3 { - row-gap: 0.75rem; +.gap-x-8 { + -moz-column-gap: 2rem; + column-gap: 2rem; +} +.gap-y-1 { + row-gap: 0.25rem; +} +.gap-y-10 { + row-gap: 2.5rem; } - .gap-y-6 { row-gap: 1.5rem; } - .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } - .space-y-24 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(6rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(6rem * var(--tw-space-y-reverse)); } - .space-y-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } - .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } - .space-y-6 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } - +.divide-y > :not([hidden]) ~ :not([hidden]) { + --tw-divide-y-reverse: 0; + border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); +} +.divide-line > :not([hidden]) ~ :not([hidden]) { + --tw-divide-opacity: 1; + border-color: rgb(var(--color-line) / var(--tw-divide-opacity, 1)); +} .self-start { align-self: flex-start; } - .overflow-hidden { overflow: hidden; } - .overflow-x-auto { overflow-x: auto; } - .overflow-y-auto { overflow-y: auto; } - .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .whitespace-nowrap { white-space: nowrap; } - .text-pretty { text-wrap: pretty; } - .\!rounded-none { border-radius: 0px !important; } - .rounded { border-radius: 0.25rem; } - .rounded-2xl { border-radius: 1rem; } - .rounded-3xl { border-radius: 1.5rem; } - .rounded-\[40px\] { border-radius: 40px; } - .rounded-full { border-radius: 9999px; } - .rounded-lg { border-radius: 0.5rem; } - .rounded-none { border-radius: 0px; } - .rounded-xl { border-radius: 0.75rem; } - .rounded-r-lg { border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; } - .border { border-width: 1px; } - .border-0 { border-width: 0px; } - .border-2 { border-width: 2px; } - .border-b { border-bottom-width: 1px; } - .border-l { border-left-width: 1px; } - .border-l-4 { border-left-width: 4px; } - .border-t { border-top-width: 1px; } - -.border-\[\#201B4C\]\/10 { - border-color: rgb(32 27 76 / 0.1); -} - -.border-\[\#37306B\] { - --tw-border-opacity: 1; - border-color: rgb(55 48 107 / var(--tw-border-opacity, 1)); -} - -.border-\[\#8A7DFF\] { - --tw-border-opacity: 1; - border-color: rgb(138 125 255 / var(--tw-border-opacity, 1)); -} - -.border-\[\#8A7DFF\]\/20 { - border-color: rgb(138 125 255 / 0.2); -} - -.border-blue-500 { - --tw-border-opacity: 1; - border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); -} - -.border-gray-100 { - --tw-border-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); -} - -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); -} - -.border-gray-200\/70 { - border-color: rgb(229 231 235 / 0.7); -} - -.border-gray-50 { - --tw-border-opacity: 1; - border-color: rgb(249 250 251 / var(--tw-border-opacity, 1)); -} - -.border-gray-700 { +.border-accent { --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-accent) / var(--tw-border-opacity, 1)); } - -.border-green-100 { +.border-info { --tw-border-opacity: 1; - border-color: rgb(220 252 231 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-info-full) / var(--tw-border-opacity, 1)); } - -.border-primary-600 { +.border-ink { --tw-border-opacity: 1; - border-color: rgb(55 48 107 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-ink) / var(--tw-border-opacity, 1)); } - -.border-purple { +.border-line { --tw-border-opacity: 1; - border-color: rgb(138 125 255 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-line) / var(--tw-border-opacity, 1)); } - -.border-purple-100 { +.border-line-strong { --tw-border-opacity: 1; - border-color: rgb(243 232 255 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-line-strong) / var(--tw-border-opacity, 1)); } - -.border-purple\/20 { - border-color: rgb(138 125 255 / 0.2); -} - -.border-purple\/30 { - border-color: rgb(138 125 255 / 0.3); -} - -.border-white { +.border-navy-5 { --tw-border-opacity: 1; - border-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-navy-5) / var(--tw-border-opacity, 1)); } - .border-white\/10 { - border-color: rgb(255 255 255 / 0.1); + border-color: rgb(var(--color-white) / 0.1); } - .border-white\/15 { - border-color: rgb(255 255 255 / 0.15); -} - -.border-white\/25 { - border-color: rgb(255 255 255 / 0.25); -} - -.bg-\[\#141035\] { - --tw-bg-opacity: 1; - background-color: rgb(20 16 53 / var(--tw-bg-opacity, 1)); -} - -.bg-\[\#201B4C\] { - --tw-bg-opacity: 1; - background-color: rgb(32 27 76 / var(--tw-bg-opacity, 1)); + border-color: rgb(var(--color-white) / 0.15); } - -.bg-\[\#201B4C\]\/5 { - background-color: rgb(32 27 76 / 0.05); -} - -.bg-\[\#8A7DFF\] { - --tw-bg-opacity: 1; - background-color: rgb(138 125 255 / var(--tw-bg-opacity, 1)); -} - -.bg-\[\#8A7DFF\]\/10 { - background-color: rgb(138 125 255 / 0.1); -} - -.bg-\[\#8A7DFF\]\/20 { - background-color: rgb(138 125 255 / 0.2); +.border-white\/20 { + border-color: rgb(var(--color-white) / 0.2); } - -.bg-\[\#F6F9FA\] { - --tw-bg-opacity: 1; - background-color: rgb(246 249 250 / var(--tw-bg-opacity, 1)); +.border-white\/25 { + border-color: rgb(var(--color-white) / 0.25); } - -.bg-\[\#d874a9\] { - --tw-bg-opacity: 1; - background-color: rgb(216 116 169 / var(--tw-bg-opacity, 1)); +.border-white\/40 { + border-color: rgb(var(--color-white) / 0.4); } - -.bg-amber-50 { +.bg-accent { --tw-bg-opacity: 1; - background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-accent) / var(--tw-bg-opacity, 1)); } - .bg-black { --tw-bg-opacity: 1; background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); } - -.bg-blue-50 { - --tw-bg-opacity: 1; - background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); -} - -.bg-gray-50 { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); -} - -.bg-gray-900 { +.bg-canvas { --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-canvas) / var(--tw-bg-opacity, 1)); } - -.bg-green-100 { +.bg-info { --tw-bg-opacity: 1; - background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-info-full) / var(--tw-bg-opacity, 1)); } - -.bg-green-400 { +.bg-info-tint { --tw-bg-opacity: 1; - background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-info-tint) / var(--tw-bg-opacity, 1)); } - -.bg-green-50 { +.bg-inverse { --tw-bg-opacity: 1; - background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-inverse) / var(--tw-bg-opacity, 1)); } - -.bg-green-500 { +.bg-inverse-raised { --tw-bg-opacity: 1; - background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); -} - -.bg-green-500\/10 { - background-color: rgb(34 197 94 / 0.1); + background-color: rgb(var(--color-inverse-raised) / var(--tw-bg-opacity, 1)); } - -.bg-pink-50 { - --tw-bg-opacity: 1; - background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); +.bg-inverse\/95 { + background-color: rgb(var(--color-inverse) / 0.95); } - -.bg-primary-light { +.bg-navy { --tw-bg-opacity: 1; - background-color: rgb(32 27 76 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-navy-100) / var(--tw-bg-opacity, 1)); } - -.bg-primaryBG { +.bg-navy-5 { --tw-bg-opacity: 1; - background-color: rgb(20 16 53 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-navy-5) / var(--tw-bg-opacity, 1)); } - -.bg-purple { +.bg-success { --tw-bg-opacity: 1; - background-color: rgb(138 125 255 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-success-full) / var(--tw-bg-opacity, 1)); } - -.bg-purple-100 { +.bg-success-tint { --tw-bg-opacity: 1; - background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-success-tint) / var(--tw-bg-opacity, 1)); } - -.bg-purple-50 { +.bg-surface { --tw-bg-opacity: 1; - background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1)); -} - -.bg-purple\/10 { - background-color: rgb(138 125 255 / 0.1); + background-color: rgb(var(--color-surface) / var(--tw-bg-opacity, 1)); } - -.bg-purple\/20 { - background-color: rgb(138 125 255 / 0.2); -} - -.bg-red-50 { +.bg-surface-strong { --tw-bg-opacity: 1; - background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); -} - -.bg-secondaryBG\/95 { - background-color: rgb(26 27 42 / 0.95); + background-color: rgb(var(--color-surface-strong) / var(--tw-bg-opacity, 1)); } - .bg-transparent { background-color: transparent; } - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); -} - .bg-white\/10 { - background-color: rgb(255 255 255 / 0.1); -} - -.bg-white\/5 { - background-color: rgb(255 255 255 / 0.05); -} - -.bg-opacity-20 { - --tw-bg-opacity: 0.2; -} - -.bg-gradient-to-b { - background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); + background-color: rgb(var(--color-white) / 0.1); } - -.bg-gradient-to-br { - background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); +.bg-white\/20 { + background-color: rgb(var(--color-white) / 0.2); } - .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)); } - -.from-\[\#201B4C\] { - --tw-gradient-from: #201B4C var(--tw-gradient-from-position); - --tw-gradient-to: rgb(32 27 76 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-\[\#8A7DFF\]\/10 { - --tw-gradient-from: rgb(138 125 255 / 0.1) var(--tw-gradient-from-position); - --tw-gradient-to: rgb(138 125 255 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-\[\#F6F9FA\] { - --tw-gradient-from: #F6F9FA var(--tw-gradient-from-position); - --tw-gradient-to: rgb(246 249 250 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-gray-50 { - --tw-gradient-from: #f9fafb var(--tw-gradient-from-position); - --tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-primaryBG\/0 { - --tw-gradient-from: rgb(20 16 53 / 0) var(--tw-gradient-from-position); - --tw-gradient-to: rgb(20 16 53 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-purple-700 { - --tw-gradient-from: #7A6DE5 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(122 109 229 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - .from-transparent { --tw-gradient-from: transparent var(--tw-gradient-from-position); --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } - -.from-white { - --tw-gradient-from: #FFFFFF var(--tw-gradient-from-position); - --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.via-primary-600 { - --tw-gradient-to: rgb(55 48 107 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), #37306B var(--tw-gradient-via-position), var(--tw-gradient-to); -} - -.via-primaryBG\/0 { - --tw-gradient-to: rgb(20 16 53 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), rgb(20 16 53 / 0) var(--tw-gradient-via-position), var(--tw-gradient-to); -} - -.via-transparent { - --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to); -} - -.to-\[\#151236\] { - --tw-gradient-to: #151236 var(--tw-gradient-to-position); -} - -.to-gray-50 { - --tw-gradient-to: #f9fafb var(--tw-gradient-to-position); -} - -.to-primaryBG\/40 { - --tw-gradient-to: rgb(20 16 53 / 0.4) var(--tw-gradient-to-position); -} - -.to-purple { - --tw-gradient-to: #8A7DFF var(--tw-gradient-to-position); +.via-white\/10 { + --tw-gradient-to: rgb(var(--color-white) / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), rgb(var(--color-white) / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to); } - .to-transparent { --tw-gradient-to: transparent var(--tw-gradient-to-position); } - -.to-white { - --tw-gradient-to: #FFFFFF var(--tw-gradient-to-position); -} - .fill-current { fill: currentColor; } - .object-contain { -o-object-fit: contain; object-fit: contain; } - .object-cover { -o-object-fit: cover; object-fit: cover; } - .p-0 { padding: 0px; } - .p-10 { padding: 2.5rem; } - .p-12 { padding: 3rem; } - .p-3 { padding: 0.75rem; } - .p-4 { padding: 1rem; } - .p-5 { padding: 1.25rem; } - .p-6 { padding: 1.5rem; } - .p-8 { padding: 2rem; } - .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; } - .px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; } - .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; } - .px-4 { padding-left: 1rem; padding-right: 1rem; } - .px-5 { padding-left: 1.25rem; padding-right: 1.25rem; } - .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } - .px-8 { padding-left: 2rem; padding-right: 2rem; } - .py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; } - .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; } - .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; } - .py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; } - .py-12 { padding-top: 3rem; padding-bottom: 3rem; } - .py-16 { padding-top: 4rem; padding-bottom: 4rem; } - .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } - .py-2\.5 { padding-top: 0.625rem; padding-bottom: 0.625rem; } - .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; } - +.py-3\.5 { + padding-top: 0.875rem; + padding-bottom: 0.875rem; +} .py-4 { padding-top: 1rem; padding-bottom: 1rem; } - .py-8 { padding-top: 2rem; padding-bottom: 2rem; } - .py-\[18px\] { padding-top: 18px; padding-bottom: 18px; } - .pb-16 { padding-bottom: 4rem; } - +.pb-2 { + padding-bottom: 0.5rem; +} .pb-4 { padding-bottom: 1rem; } - +.pb-5 { + padding-bottom: 1.25rem; +} +.pb-8 { + padding-bottom: 2rem; +} .pl-2 { padding-left: 0.5rem; } - .pl-5 { padding-left: 1.25rem; } - .pt-12 { padding-top: 3rem; } - .pt-16 { padding-top: 4rem; } - .pt-4 { padding-top: 1rem; } - .pt-6 { padding-top: 1.5rem; } - .pt-8 { padding-top: 2rem; } - .text-left { text-align: left; } - .text-center { text-align: center; } - .text-right { text-align: right; } - .align-middle { vertical-align: middle; } - .font-mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-family: var(--font-mono); } - .text-2xl { font-size: 1.5rem; line-height: 2rem; } - .text-3xl { font-size: 1.875rem; line-height: 2.25rem; } - .text-4xl { font-size: 2.25rem; line-height: 2.5rem; } - .text-5xl { font-size: 3rem; line-height: 1; } - +.text-\[11px\] { + font-size: 11px; +} .text-\[40px\] { font-size: 40px; } - .text-base { font-size: 1rem; line-height: 1.5rem; } - .text-lg { font-size: 1.125rem; line-height: 1.75rem; } - .text-sm { font-size: 0.875rem; line-height: 1.25rem; } - .text-xl { font-size: 1.25rem; line-height: 1.75rem; } - .text-xs { font-size: 0.75rem; line-height: 1rem; } - .font-bold { font-weight: 700; } - +.font-extrabold { + font-weight: 800; +} +.font-light { + font-weight: 300; +} .font-medium { font-weight: 500; } - .font-normal { font-weight: 400; } - .font-semibold { font-weight: 600; } - .uppercase { text-transform: uppercase; } - .lowercase { text-transform: lowercase; } - .capitalize { text-transform: capitalize; } - .italic { font-style: italic; } - -.leading-\[1\.05\] { - line-height: 1.05; -} - .leading-\[27px\] { line-height: 27px; } - .leading-\[44px\] { line-height: 44px; } - .leading-\[48px\] { line-height: 48px; } - +.leading-display { + line-height: var(--leading-display); +} .leading-relaxed { line-height: 1.625; } - .leading-tight { line-height: 1.25; } - -.tracking-\[0\.25em\] { - letter-spacing: 0.25em; -} - -.tracking-\[1\.8px\] { - letter-spacing: 1.8px; -} - -.tracking-tight { - letter-spacing: -0.025em; +.tracking-display { + letter-spacing: var(--tracking-display); } - -.tracking-wide { - letter-spacing: 0.025em; +.tracking-eyebrow { + letter-spacing: var(--tracking-eyebrow); } - -.tracking-wider { - letter-spacing: 0.05em; +.\!text-ink { + --tw-text-opacity: 1 !important; + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)) !important; } - -.\!text-\[\#201B4C\] { +.\!text-ink-muted { --tw-text-opacity: 1 !important; - color: rgb(32 27 76 / var(--tw-text-opacity, 1)) !important; + color: rgb(var(--color-ink-muted) / var(--tw-text-opacity, 1)) !important; } - -.\!text-gray-200 { +.\!text-on-accent { --tw-text-opacity: 1 !important; - color: rgb(229 231 235 / var(--tw-text-opacity, 1)) !important; + color: rgb(var(--color-on-accent) / var(--tw-text-opacity, 1)) !important; } - -.\!text-gray-300 { +.\!text-on-inverse-muted { --tw-text-opacity: 1 !important; - color: rgb(209 213 219 / var(--tw-text-opacity, 1)) !important; + color: rgb(var(--color-on-inverse-muted) / var(--tw-text-opacity, 1)) !important; } - -.\!text-gray-500 { +.\!text-on-inverse-subtle { --tw-text-opacity: 1 !important; - color: rgb(107 114 128 / var(--tw-text-opacity, 1)) !important; + color: rgb(var(--color-on-inverse-subtle) / var(--tw-text-opacity, 1)) !important; } - .\!text-white { --tw-text-opacity: 1 !important; - color: rgb(255 255 255 / var(--tw-text-opacity, 1)) !important; + color: rgb(var(--color-white) / var(--tw-text-opacity, 1)) !important; } - .text-\[\#0077b5\] { --tw-text-opacity: 1; color: rgb(0 119 181 / var(--tw-text-opacity, 1)); } - -.text-\[\#201B4C\] { +.text-accent { --tw-text-opacity: 1; - color: rgb(32 27 76 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-accent) / var(--tw-text-opacity, 1)); } - -.text-\[\#6C5CE7\] { +.text-accent-strong { --tw-text-opacity: 1; - color: rgb(108 92 231 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-accent-strong) / var(--tw-text-opacity, 1)); } - -.text-\[\#8A7DFF\] { +.text-info { --tw-text-opacity: 1; - color: rgb(138 125 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-info-full) / var(--tw-text-opacity, 1)); } - -.text-\[\#d874a9\] { - --tw-text-opacity: 1; - color: rgb(216 116 169 / var(--tw-text-opacity, 1)); -} - -.text-amber-500 { - --tw-text-opacity: 1; - color: rgb(245 158 11 / var(--tw-text-opacity, 1)); -} - -.text-blue-500 { - --tw-text-opacity: 1; - color: rgb(59 130 246 / var(--tw-text-opacity, 1)); -} - -.text-blue-700 { - --tw-text-opacity: 1; - color: rgb(29 78 216 / var(--tw-text-opacity, 1)); -} - -.text-blue-800 { - --tw-text-opacity: 1; - color: rgb(30 64 175 / var(--tw-text-opacity, 1)); +.text-inherit { + color: inherit; } - -.text-fuschia60 { +.text-ink { --tw-text-opacity: 1; - color: rgb(252 221 236 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)); } - -.text-gray-300 { +.text-ink-muted { --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-ink-muted) / var(--tw-text-opacity, 1)); } - -.text-gray-400 { +.text-ink-subtle { --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-ink-subtle) / var(--tw-text-opacity, 1)); } - -.text-gray-500 { +.text-navy { --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-navy-100) / var(--tw-text-opacity, 1)); } - -.text-gray-600 { +.text-navy-10 { --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-navy-10) / var(--tw-text-opacity, 1)); } - -.text-gray-700 { +.text-navy-20 { --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-navy-20) / var(--tw-text-opacity, 1)); } - -.text-gray-800 { +.text-navy-40 { --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-navy-40) / var(--tw-text-opacity, 1)); } - -.text-green-400 { +.text-navy-60 { --tw-text-opacity: 1; - color: rgb(74 222 128 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-navy-60) / var(--tw-text-opacity, 1)); } - -.text-green-600 { +.text-navy-80 { --tw-text-opacity: 1; - color: rgb(22 163 74 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-navy-80) / var(--tw-text-opacity, 1)); } - -.text-inherit { - color: inherit; -} - -.text-primary-light { +.text-on-inverse { --tw-text-opacity: 1; - color: rgb(32 27 76 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-on-inverse) / var(--tw-text-opacity, 1)); } - -.text-primaryText { +.text-on-inverse-muted { --tw-text-opacity: 1; - color: rgb(20 16 53 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-on-inverse-muted) / var(--tw-text-opacity, 1)); } - -.text-purple { +.text-on-inverse-subtle { --tw-text-opacity: 1; - color: rgb(138 125 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-on-inverse-subtle) / var(--tw-text-opacity, 1)); } - -.text-red-500 { +.text-orange-300 { --tw-text-opacity: 1; - color: rgb(239 68 68 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-orange-300) / var(--tw-text-opacity, 1)); } - -.text-secondaryText { +.text-success { --tw-text-opacity: 1; - color: rgb(94 94 94 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-success-full) / var(--tw-text-opacity, 1)); } - -.text-tertiaryText { +.text-warning { --tw-text-opacity: 1; - color: rgb(203 204 206 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-warning-full) / var(--tw-text-opacity, 1)); } - -.text-tertiaryText\/60 { - color: rgb(203 204 206 / 0.6); -} - .text-white { --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-white) / var(--tw-text-opacity, 1)); } - -.text-white\/90 { - color: rgb(255 255 255 / 0.9); -} - -.text-yellow-400 { - --tw-text-opacity: 1; - color: rgb(250 204 21 / var(--tw-text-opacity, 1)); -} - .underline { text-decoration-line: underline; } - .\!no-underline { text-decoration-line: none !important; } - .no-underline { text-decoration-line: none; } - -.decoration-gray-500 { - text-decoration-color: #6b7280; +.decoration-accent { + text-decoration-color: rgb(var(--color-accent) / 1); } - -.decoration-purple\/40 { - text-decoration-color: rgb(138 125 255 / 0.4); +.decoration-line-strong { + text-decoration-color: rgb(var(--color-line-strong) / 1); +} +.decoration-navy-60 { + text-decoration-color: rgb(var(--color-navy-60) / 1); } - .underline-offset-2 { text-underline-offset: 2px; } - .underline-offset-4 { text-underline-offset: 4px; } - -.placeholder-gray-400::-moz-placeholder { +.placeholder-navy-40::-moz-placeholder { --tw-placeholder-opacity: 1; - color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1)); + color: rgb(var(--color-navy-40) / var(--tw-placeholder-opacity, 1)); } - -.placeholder-gray-400::placeholder { +.placeholder-navy-40::placeholder { --tw-placeholder-opacity: 1; - color: rgb(156 163 175 / var(--tw-placeholder-opacity, 1)); + color: rgb(var(--color-navy-40) / var(--tw-placeholder-opacity, 1)); } - .opacity-0 { opacity: 0; } - -.opacity-10 { - opacity: 0.1; -} - -.opacity-50 { - opacity: 0.5; -} - .opacity-70 { opacity: 0.7; } - .opacity-75 { opacity: 0.75; } - +.opacity-80 { + opacity: 0.8; +} .\!shadow-none { --tw-shadow: 0 0 #0000 !important; --tw-shadow-colored: 0 0 #0000 !important; box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; } - -.shadow-2xl { - --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); - --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-\[0_0_80px_-20px_rgba\(138\2c 125\2c 255\2c 0\.6\)\] { - --tw-shadow: 0 0 80px -20px rgba(138,125,255,0.6); - --tw-shadow-colored: 0 0 80px -20px var(--tw-shadow-color); +.shadow-card { + --tw-shadow: var(--shadow-card); + --tw-shadow-colored: var(--shadow-card); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } - -.shadow-\[0_1px_3px_rgba\(20\2c 16\2c 53\2c 0\.04\)\2c 0_8px_24px_-12px_rgba\(20\2c 16\2c 53\2c 0\.08\)\] { - --tw-shadow: 0 1px 3px rgba(20,16,53,0.04),0 8px 24px -12px rgba(20,16,53,0.08); - --tw-shadow-colored: 0 1px 3px var(--tw-shadow-color), 0 8px 24px -12px var(--tw-shadow-color); +.shadow-raised { + --tw-shadow: var(--shadow-raised); + --tw-shadow-colored: var(--shadow-raised); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } - -.shadow-lg { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +.outline { + outline-style: solid; } - -.shadow-md { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-sm { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-purple\/20 { - --tw-shadow-color: rgb(138 125 255 / 0.2); - --tw-shadow: var(--tw-shadow-colored); -} - -.shadow-purple\/25 { - --tw-shadow-color: rgb(138 125 255 / 0.25); - --tw-shadow: var(--tw-shadow-colored); -} - .ring-1 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } - -.ring-2 { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.ring-\[\#8A7DFF\]\/40 { - --tw-ring-color: rgb(138 125 255 / 0.4); +.ring-line { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(var(--color-line) / var(--tw-ring-opacity, 1)); } - -.ring-black\/\[0\.02\] { - --tw-ring-color: rgb(0 0 0 / 0.02); -} - -.blur-3xl { - --tw-blur: blur(64px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.blur-\[120px\] { - --tw-blur: blur(120px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.blur-\[140px\] { - --tw-blur: blur(140px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - .grayscale { --tw-grayscale: grayscale(100%); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } - .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } - -.backdrop-blur-md { - --tw-backdrop-blur: blur(12px); - backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); -} - .backdrop-blur-sm { --tw-backdrop-blur: blur(4px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } - .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - -.transition-\[background-color\2c border-color\2c transform\] { - transition-property: background-color,border-color,transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-\[background-color\2c box-shadow\2c transform\] { - transition-property: background-color,box-shadow,transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - .transition-\[border-color\2c box-shadow\] { transition-property: border-color,box-shadow; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - -.transition-\[border-color\2c transform\] { - transition-property: border-color,transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - .transition-\[box-shadow\2c border-color\] { transition-property: box-shadow,border-color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - .transition-\[box-shadow\2c transform\2c border-color\] { transition-property: box-shadow,transform,border-color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - +.transition-\[filter\2c opacity\] { + transition-property: filter,opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} .transition-\[filter\] { transition-property: filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - +.transition-\[opacity\2c background-color\] { + transition-property: opacity,background-color; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} .transition-\[transform\2c border-color\2c box-shadow\] { transition-property: transform,border-color,box-shadow; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - .transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } - .duration-200 { transition-duration: 200ms; } - .duration-300 { transition-duration: 300ms; } - .duration-500 { transition-duration: 500ms; -} - -.text-gradient { - background: var(--Gradient, linear-gradient(94deg, #4059D0 8.79%, #CC58BB 56.82%, #F4B57F 100%)); - background-clip: text; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - } - -/* Hero aurora, animated radial gradients drifting behind the hero text. - Animation + GPU-promotion are gated behind prefers-reduced-motion: no-preference, - so reduced-motion users get static orbs without an idle compositor layer. */ - -.aurora { - position: absolute; - border-radius: 9999px; - filter: blur(80px); - pointer-events: none; - } - -.aurora-1 { - width: 32rem; - height: 32rem; - top: 2rem; - left: -4rem; - background: radial-gradient(circle at center, rgba(138, 125, 255, 0.55), rgba(138, 125, 255, 0) 70%); - } - -.aurora-2 { - width: 38rem; - height: 38rem; - bottom: -8rem; - right: -6rem; - background: radial-gradient(circle at center, rgba(204, 88, 187, 0.4), rgba(204, 88, 187, 0) 70%); - } - -.aurora-3 { - width: 28rem; - height: 28rem; - top: 30%; - left: 50%; - transform: translateX(-50%); - background: radial-gradient(circle at center, rgba(64, 89, 208, 0.3), rgba(64, 89, 208, 0) 70%); - } - -@media (prefers-reduced-motion: no-preference) { - .aurora { - will-change: transform; - } - .aurora-1 { animation: aurora-drift-1 20s ease-in-out infinite alternate; } - .aurora-2 { animation: aurora-drift-2 26s ease-in-out infinite alternate; } - .aurora-3 { animation: aurora-drift-3 24s ease-in-out infinite alternate; } - } - -/* Globally respect prefers-reduced-motion for Tailwind's built-in keyframe +}/* Globally respect prefers-reduced-motion for Tailwind's built-in keyframe utilities. Tailwind doesn't auto-gate these, and our motion-safe: prefix isn't picked up by purge inside JS string literals. */ - @media (prefers-reduced-motion: reduce) { .animate-ping, .animate-pulse, @@ -2711,206 +2171,137 @@ a.button:hover { animation: none; } } - -@keyframes aurora-drift-1 { - 0% { transform: translate3d(0, 0, 0) scale(1); } - 100% { transform: translate3d(8rem, 5rem, 0) scale(1.15); } - } - -@keyframes aurora-drift-2 { - 0% { transform: translate3d(0, 0, 0) scale(1.1); } - 100% { transform: translate3d(-6rem, -8rem, 0) scale(1); } - } - -@keyframes aurora-drift-3 { - 0% { transform: translate3d(-50%, 0, 0) scale(1); } - 100% { transform: translate3d(-50%, 4rem, 0) scale(1.2); } - } - -/* Eyebrow chip, refined section-label component. */ - -.eyebrow-chip { - display: inline-flex; - align-items: center; - gap: 0.5rem; - padding: 0.375rem 0.875rem; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 600; - letter-spacing: 0.08em; - text-transform: uppercase; - color: #8A7DFF; - background: rgba(138, 125, 255, 0.08); - border: 1px solid rgba(138, 125, 255, 0.2); - } - -.eyebrow-chip::before { - content: ""; - width: 0.375rem; - height: 0.375rem; - border-radius: 9999px; - background: #8A7DFF; - box-shadow: 0 0 0 3px rgba(138, 125, 255, 0.18); - } - .max-container { width: 100%; margin: auto; } - @media (min-width: 1536px) { .max-container { max-width: 1920px; } - } - -/* Blog Post, Page & FAQ Styles */ + }/* Blog Post, Page & FAQ Styles */ .blog-post, .page, .faq-content { - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; -} - -/* Headings */ + font-family: var(--font-sans); +}/* Headings */ .blog-post h1, .blog-post h2, .blog-post h3, .blog-post h4, .blog-post h5, .blog-post h6, .page h1, .page h2, .page h3, .page h4, .page h5, .page h6, .faq-content h1, .faq-content h2, .faq-content h3, .faq-content h4, .faq-content h5, .faq-content h6 { - color: #141035; - font-weight: 600; + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); line-height: 1.3; + letter-spacing: var(--tracking-heading); margin-top: 2rem; /* 32px */ margin-bottom: 1rem; /* 16px */ } - .blog-post h1, .page h1, .faq-content h1 { font-size: 2.25rem; /* 36px */ - font-weight: 700; - line-height: 1.2; + font-weight: var(--font-weight-bold); + line-height: var(--leading-heading); + letter-spacing: var(--tracking-display); margin-top: 0; margin-bottom: 1.5rem; /* 24px */ } - @media (min-width: 768px) { .blog-post h1, .page h1, .faq-content h1 { font-size: 3rem; /* 48px */ } } - @media (min-width: 1024px) { .blog-post h1, .page h1, .faq-content h1 { font-size: 3.5rem; /* 56px */ } } - .blog-post h2, .page h2, .faq-content h2 { font-size: 1.75rem; /* 28px */ margin-top: 3rem; /* 48px */ } - @media (min-width: 768px) { .blog-post h2, .page h2, .faq-content h2 { font-size: 2.25rem; /* 36px */ } } - .blog-post h3, .page h3, .faq-content h3 { font-size: 1.5rem; /* 24px */ margin-top: 2.5rem; /* 40px */ } - @media (min-width: 768px) { .blog-post h3, .page h3, .faq-content h3 { font-size: 1.75rem; /* 28px */ } } - .blog-post h4, .page h4, .faq-content h4 { font-size: 1.25rem; /* 20px */ margin-top: 2rem; /* 32px */ } - @media (min-width: 768px) { .blog-post h4, .page h4, .faq-content h4 { font-size: 1.375rem; /* 22px */ } } - .blog-post h5, .page h5, .faq-content h5 { font-size: 1.125rem; /* 18px */ margin-top: 1.5rem; /* 24px */ } - @media (min-width: 768px) { .blog-post h5, .page h5, .faq-content h5 { font-size: 1.25rem; /* 20px */ } } - .blog-post h6, .page h6, .faq-content h6 { font-size: 1rem; /* 16px */ margin-top: 1.25rem; /* 20px */ } - @media (min-width: 768px) { .blog-post h6, .page h6, .faq-content h6 { font-size: 1.125rem; /* 18px */ } -} - -/* Paragraphs */ +}/* Paragraphs */ .blog-post p, .page p, .faq-content p { - color: #5E5E5E; + color: rgb(var(--color-ink-muted)); font-size: 1.125rem; /* 18px */ line-height: 1.7; margin-bottom: 1.5rem; /* 24px */ text-wrap: pretty; } - @media (min-width: 768px) { .blog-post p, .page p, .faq-content p { font-size: 1.25rem; /* 20px */ line-height: 1.8; } -} - -/* First paragraph styling */ +}/* First paragraph styling */ .blog-post > p:first-of-type, .page > p:first-of-type, .faq-content > p:first-of-type { font-size: 1.25rem; /* 20px */ - color: #141035; + color: rgb(var(--color-ink)); } - @media (min-width: 768px) { .blog-post > p:first-of-type, .page > p:first-of-type, .faq-content > p:first-of-type { font-size: 1.375rem; /* 22px */ line-height: 1.8; } -} - -/* Links */ +}/* Links: navy type with an orange underline */ .blog-post a, .page a, .faq-content a { - color: #8A7DFF; + color: rgb(var(--color-ink)); text-decoration: underline; + text-decoration-color: rgb(var(--color-accent)); + text-decoration-thickness: 1px; text-underline-offset: 3px; - transition: all 0.2s ease; + transition: color 0.2s ease, text-decoration-thickness 0.2s ease; } - .blog-post a:hover, .page a:hover, .faq-content a:hover { - color: #7A6DE5; + color: rgb(var(--color-accent-strong)); text-decoration-thickness: 2px; } - .blog-post strong, .blog-post b, .page strong, .page b, .faq-content strong, .faq-content b { - color: #141035; - font-weight: 600; + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); } - .blog-post em, .blog-post i, .page em, .page i, .faq-content em, .faq-content i { font-style: italic; -} - -/* Lists */ +}/* Lists */ .blog-post ul, .blog-post ol, .page ul, .page ol, .faq-content ul, .faq-content ol { @@ -2918,9 +2309,8 @@ a.button:hover { line-height: 1.7; margin-bottom: 1.5rem; /* 24px */ padding-left: 1.75rem; /* 28px */ - color: #5E5E5E; + color: rgb(var(--color-ink-muted)); } - @media (min-width: 768px) { .blog-post ul, .blog-post ol, .page ul, .page ol, @@ -2929,93 +2319,73 @@ a.button:hover { line-height: 1.8; } } - .blog-post li, .page li, .faq-content li { margin-bottom: 0.75rem; /* 12px */ padding-left: 0.5rem; /* 8px */ } - .blog-post li:last-child, .page li:last-child, .faq-content li:last-child { margin-bottom: 0; } - .blog-post ul, .page ul, .faq-content ul { list-style: disc; } - .blog-post ul li::marker, .page ul li::marker, .faq-content ul li::marker { - color: #8A7DFF; + color: rgb(var(--color-ink-subtle)); } - .blog-post ol, .page ol, .faq-content ol { list-style: decimal; } - .blog-post ol li::marker, .page ol li::marker, .faq-content ol li::marker { - color: #8A7DFF; - font-weight: 600; -} - -/* Task lists */ + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); +}/* Task lists */ .blog-post .task-list, .page .task-list { list-style: none; padding-left: 0; } - .blog-post .task-list li, .page .task-list li { padding-left: 1.75rem; /* 28px */ -} - -/* Images */ +}/* Images */ .blog-post img, .page img { max-width: 100%; height: auto; display: block; margin: 2rem auto; /* 32px */ - border-radius: 12px; - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); -} - -/* Override for images in grid/flex layouts */ + border-radius: var(--radius-lg); + box-shadow: var(--shadow-card); +}/* Override for images in grid/flex layouts */ .blog-post .grid img, .blog-post .flex img, .page .grid img, .page .flex img { margin-top: 0; margin-bottom: 0; -} - -/* Image captions */ +}/* Image captions */ .blog-post img + em, .page img + em { display: block; font-size: 0.875rem; /* 14px */ - color: #6b7280; + color: rgb(var(--color-ink-muted)); text-align: center; font-style: italic; margin-top: -1.5rem; /* -24px */ - margin-bottom: 2rem; /* 32px */ -} - -/* Videos */ + margin-bottom: 2rem; /* 32px */ +}/* Videos */ .blog-post iframe, .page iframe { max-width: 100%; margin: 2rem auto; /* 32px */ - border-radius: 12px; + border-radius: var(--radius-lg); border: none; - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); -} - -/* Blockquotes */ + box-shadow: var(--shadow-card); +}/* Blockquotes */ .blog-post blockquote, .page blockquote, .faq-content blockquote { position: relative; margin: 2rem 0; /* 32px */ padding: 1.5rem 1.5rem 1.5rem 3rem; /* 24px 24px 24px 48px */ - background: linear-gradient(135deg, rgba(138, 125, 255, 0.05) 0%, rgba(138, 125, 255, 0.02) 100%); - border-left: 4px solid #8A7DFF; - border-radius: 0 8px 8px 0; + background: rgb(var(--color-surface)); + border-left: 4px solid rgb(var(--color-ink)); + border-radius: 0 var(--radius-md) var(--radius-md) 0; font-style: italic; font-size: 1.125rem; /* 18px */ - color: #141035; + color: rgb(var(--color-ink)); } - @media (min-width: 768px) { .blog-post blockquote, .page blockquote, .faq-content blockquote { margin: 2.5rem 0; /* 40px */ @@ -3023,76 +2393,64 @@ a.button:hover { font-size: 1.25rem; /* 20px */ } } - .blog-post blockquote p, .page blockquote p, .faq-content blockquote p { margin: 0; - color: #141035; + color: rgb(var(--color-ink)); } - .blog-post blockquote p:not(:last-child), .page blockquote p:not(:last-child), .faq-content blockquote p:not(:last-child) { margin-bottom: 1rem; /* 16px */ -} - -/* TL;DR blocks */ +}/* TL;DR blocks: the page's orange moment */ .blog-post .tldr, .page .tldr, .faq-content .tldr { margin: 0 0 2rem 0; /* 32px */ padding: 1.25rem 1.5rem; /* 20px 24px */ - background: linear-gradient(135deg, rgba(138, 125, 255, 0.08) 0%, rgba(138, 125, 255, 0.03) 100%); - border-left: 4px solid #8A7DFF; - border-radius: 0 8px 8px 0; + background: rgb(var(--color-accent-soft)); + border-left: 4px solid rgb(var(--color-accent)); + border-radius: 0 var(--radius-md) var(--radius-md) 0; } - @media (min-width: 768px) { .blog-post .tldr, .page .tldr, .faq-content .tldr { padding: 1.5rem 2rem; /* 24px 32px */ } } - .blog-post .tldr .tldr-label, .page .tldr .tldr-label, .faq-content .tldr .tldr-label { display: block; font-size: 0.75rem; /* 12px */ - font-weight: 700; + font-weight: var(--font-weight-semibold); text-transform: uppercase; - letter-spacing: 0.05em; - color: #8A7DFF; + letter-spacing: var(--tracking-eyebrow); + color: rgb(var(--color-accent-strong)); margin-bottom: 0.5rem; /* 8px */ } - .blog-post .tldr p, .page .tldr p, .faq-content .tldr p { margin: 0; font-size: 1rem; /* 16px */ line-height: 1.7; - color: #141035; + color: rgb(var(--color-ink)); } - @media (min-width: 768px) { .blog-post .tldr p, .page .tldr p, .faq-content .tldr p { font-size: 1.125rem; /* 18px */ } -} - -/* Code */ +}/* Code: identifiers inline in mono; blocks are Regular on navy */ .blog-post code, .page code, .faq-content code { - background: #f1f5f9; - color: #334155; + background: rgb(var(--color-code-inline-bg)); + color: rgb(var(--color-ink)); padding: 0.1875rem 0.5rem; /* 3px 8px */ - font-size: 0.9em; - font-family: 'Monaco', 'Menlo', 'Consolas', monospace; - border-radius: 6px; - border: 1px solid #e2e8f0; + font-size: var(--font-mono-scale); + font-family: var(--font-mono); + border-radius: var(--radius-sm); + border: 1px solid rgb(var(--color-line)); } - .blog-post pre, .page pre, .faq-content pre { - background: #1e293b; - color: #e2e8f0; + background: rgb(var(--color-code-bg)); + color: rgb(var(--color-code-text)); padding: 1.5rem; /* 24px */ overflow-x: auto; - border-radius: 12px; + border-radius: var(--radius-lg); margin: 2rem 0; /* 32px */ line-height: 1.6; - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + box-shadow: var(--shadow-card); } - .blog-post pre code, .page pre code, .faq-content pre code { background: transparent; padding: 0; @@ -3100,14 +2458,11 @@ a.button:hover { color: inherit; font-size: 0.875rem; /* 14px */ } - @media (min-width: 768px) { .blog-post pre code, .page pre code, .faq-content pre code { - font-size: 1rem; /* 16px */ + font-size: 0.9375rem; /* 15px, mono at ~90% of the 17-18px body */ } -} - -/* Tables */ +}/* Tables */ .blog-post table, .page table, .faq-content table { display: block; width: 100%; @@ -3117,532 +2472,264 @@ a.button:hover { margin: 2rem 0; /* 32px */ font-size: 1rem; /* 16px */ } - @media (min-width: 768px) { .blog-post table, .page table, .faq-content table { font-size: 1.125rem; /* 18px */ } } - .blog-post th, .blog-post td, .page th, .page td, .faq-content th, .faq-content td { - border: 1px solid #e5e7eb; + border: 1px solid rgb(var(--color-line)); padding: 0.75rem 1rem; /* 12px 16px */ text-align: left; } - .blog-post th, .page th, .faq-content th { - background-color: #f9fafb; - color: #141035; - font-weight: 600; + background-color: rgb(var(--color-surface)); + color: rgb(var(--color-ink)); + font-weight: var(--font-weight-semibold); text-transform: uppercase; font-size: 0.875rem; /* 14px */ letter-spacing: 0.05em; } - .blog-post tbody tr, .page tbody tr, .faq-content tbody tr { - background: #FFF; + background: rgb(var(--color-canvas)); transition: background-color 0.2s ease; } - .blog-post tbody tr:hover, .page tbody tr:hover, .faq-content tbody tr:hover { - background: #f9fafb; + background: rgb(var(--color-surface)); } - .blog-post td, .page td, .faq-content td { - color: #5E5E5E; -} - -/* Horizontal rules */ + color: rgb(var(--color-ink-muted)); +}/* Horizontal rules */ .blog-post hr, .page hr, .faq-content hr { margin: 3rem 0; /* 48px */ border: none; - height: 2px; - background: linear-gradient(to right, transparent, #e5e7eb 20%, #e5e7eb 80%, transparent); + height: 1px; + background: rgb(var(--color-line)); } - @media (min-width: 768px) { .blog-post hr, .page hr, .faq-content hr { margin: 4rem 0; /* 64px */ } -} - -/* Tags */ +}/* Tags */ .blog-post .tags, .page .tags { list-style: none; } - .blog-post .tags li, .page .tags li { padding: 0.25rem 1rem; /* 4px 16px */ -} - -.blog-post .tags a, .page .tags a { - color: #FFF; -} - -.blog-post .tags a:hover, .page .tags a:hover { - opacity: 0.8; -} - -/* CTA Box */ +}/* CTA Box: white on navy, one orange button */ .blog-post .cta-box, .page .cta-box { - background-color: #201B4C; - border: 1px solid #37306B; - border-radius: 12px; + background-color: rgb(var(--color-inverse)); + border-radius: var(--radius-lg); padding: 1.5rem; /* 24px */ margin: 2rem 0; /* 32px */ } - .blog-post .cta-box p, .page .cta-box p { - color: #ffffff; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + color: rgb(var(--color-on-inverse)); font-size: 1.125rem; /* 18px */ - font-weight: 400; + font-weight: var(--font-weight-regular); line-height: 1.7; margin-bottom: 1rem; /* 16px */ } - @media (min-width: 768px) { .blog-post .cta-box p, .page .cta-box p { font-size: 1.25rem; /* 20px */ } } - .blog-post .cta-box strong, .page .cta-box strong { - color: #ffffff; - font-weight: 600; + color: rgb(var(--color-on-inverse)); + font-weight: var(--font-weight-semibold); +} +.blog-post .cta-box a, .page .cta-box a { + color: rgb(var(--color-on-inverse)); +} +.blog-post .cta-box a:hover, .page .cta-box a:hover { + color: rgb(var(--color-accent)); } - .blog-post .cta-box a.cta-button, .page .cta-box a.cta-button { display: inline-block; padding: 0.75rem 1.5rem; /* 12px 24px */ - background-color: #8A7DFF; - color: #ffffff; - font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; + background-color: rgb(var(--color-accent-strong)); + color: rgb(var(--color-on-accent)); font-size: 1rem; /* 16px */ - border-radius: 9999px; - font-weight: 500; + border-radius: var(--radius-pill); + font-weight: var(--font-weight-semibold); text-decoration: none; transition: background-color 0.2s ease; } - .blog-post .cta-box a.cta-button:hover, .page .cta-box a.cta-button:hover { - background-color: #7A6DE5; - color: #ffffff; - text-decoration: none; -} - -/* Contact section */ -.contact { - position: relative; -} - -.contact::before { - content: ""; - display: block; - position: absolute; - left: 0; - right: 0; - bottom: 0; - margin: 0 auto; - height: 10rem; - width: 80%; - border-radius: 15rem 15rem 0 0; - background: linear-gradient(94deg, #4059D0 8.79%, #CC58BB 56.82%, #F4B57F 100%); - filter: blur(60px); - opacity: 0.4; -} - -@media (min-width: 1024px) { - .contact::before { - width: 40rem; - } -} - -/* Podcast page */ -.podcast-page .author-img { - border-radius: 100%; - width: 162px; - height: 162px; -} - -/* Search results */ -.search-results .search-item { - margin: 1rem 0; /* 16px */ - display: flex; - flex-direction: column; - gap: 0.75rem; /* 12px */ -} - -.search-results .search-item h3 { - font-size: 1.25rem; /* 20px */ -} - -.search-results .search-content-type { - text-transform: capitalize; - font-size: 0.875rem; /* 14px */ -} - -.search-results hr { - border-color: #d3d3d366; -} - -/* Header search */ -.header-search { - position: relative; - display: inline-block; - margin: 4px 2px; - height: 50px; - width: 50px; - vertical-align: bottom; -} - -.header-search .button { - display: inline-block; - margin: 4px 2px; - background-color: #444; - font-size: 14px; - padding-left: 32px; - padding-right: 32px; - height: 50px; - line-height: 50px; - text-align: center; - color: white; + background-color: rgb(var(--color-accent-hover)); + color: rgb(var(--color-on-accent)); text-decoration: none; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.header-search .button:hover { - transition-duration: 0.4s; - background-color: white; - color: black; -} - -.header-search .searchbutton { - background-color: transparent; - position: absolute; - font-size: 30px; - width: 100%; +}/* "On this page" table of contents (layouts/partials/toc.html) */ +.toc ul { + list-style: none; margin: 0; padding: 0; } - -.header-search .search:focus + .searchbutton { - transition-duration: 0.4s; - background-color: #FFF; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; - color: black; +.toc ul ul { + margin-top: 0.5rem; + padding-left: 0.875rem; + border-left: 1px solid rgb(var(--color-line)); } - -.header-search .search { - position: absolute; - left: 49px; - background-color: #FFF; - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; - outline: none; - border: none; +.toc li { + margin: 0 0 0.5rem; padding: 0; - width: 0; - height: 100%; - z-index: 10; - transition-duration: 0.4s; + font-size: 0.875rem; + line-height: 1.4; } - -.header-search .search:focus { - width: 200px; - padding: 0 16px 0 0; +.toc a { + color: rgb(var(--color-ink-muted)); + text-decoration: none; + transition: color 0.2s ease; +} +.toc a:hover { + color: rgb(var(--color-ink)); +}/* The inline copy sits inside .page/.blog-post, whose list and link rules + would otherwise restyle it as body copy. */ +.page .toc ul, .blog-post .toc ul, .page .toc li, .blog-post .toc li { + font-size: 0.9375rem; + color: rgb(var(--color-ink-muted)); + list-style: none; } - -@media (min-width: 1280px) { - .header-search .search:focus { - width: 363px; - } +.page .toc a, .blog-post .toc a { + color: rgb(var(--color-ink-muted)); + text-decoration: none; } - -.header-search .expandright { - left: auto; - right: 49px; +.page .toc a:hover, .blog-post .toc a:hover { + color: rgb(var(--color-ink)); } - -.header-search .expandright:focus { - padding: 0 0 0 16px; +.toc-inline summary::marker { + color: rgb(var(--color-ink-subtle)); } - .hover\:-translate-y-0\.5:hover { --tw-translate-y: -0.125rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } - -.hover\:-translate-y-1:hover { - --tw-translate-y: -0.25rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.hover\:scale-\[1\.02\]:hover { - --tw-scale-x: 1.02; - --tw-scale-y: 1.02; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.hover\:border-\[\#8A7DFF\]:hover { +.hover\:border-ink:hover { --tw-border-opacity: 1; - border-color: rgb(138 125 255 / var(--tw-border-opacity, 1)); -} - -.hover\:border-\[\#8A7DFF\]\/30:hover { - border-color: rgb(138 125 255 / 0.3); + border-color: rgb(var(--color-ink) / var(--tw-border-opacity, 1)); } - -.hover\:border-\[\#8A7DFF\]\/60:hover { - border-color: rgb(138 125 255 / 0.6); -} - -.hover\:border-purple:hover { +.hover\:border-line-strong:hover { --tw-border-opacity: 1; - border-color: rgb(138 125 255 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-line-strong) / var(--tw-border-opacity, 1)); } - -.hover\:border-purple-700:hover { +.hover\:border-white:hover { --tw-border-opacity: 1; - border-color: rgb(122 109 229 / var(--tw-border-opacity, 1)); -} - -.hover\:border-purple\/20:hover { - border-color: rgb(138 125 255 / 0.2); -} - -.hover\:border-purple\/30:hover { - border-color: rgb(138 125 255 / 0.3); + border-color: rgb(var(--color-white) / var(--tw-border-opacity, 1)); } - .hover\:border-white\/25:hover { - border-color: rgb(255 255 255 / 0.25); + border-color: rgb(var(--color-white) / 0.25); } - -.hover\:bg-\[\#7A6DE5\]:hover { +.hover\:bg-mist:hover { --tw-bg-opacity: 1; - background-color: rgb(122 109 229 / var(--tw-bg-opacity, 1)); -} - -.hover\:bg-\[\#8A7DFF\]\/20:hover { - background-color: rgb(138 125 255 / 0.2); + background-color: rgb(var(--color-mist) / var(--tw-bg-opacity, 1)); } - -.hover\:bg-gray-800:hover { +.hover\:bg-navy-80:hover { --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); + background-color: rgb(var(--color-navy-80) / var(--tw-bg-opacity, 1)); } - -.hover\:bg-purple-700:hover { +.hover\:bg-surface:hover { --tw-bg-opacity: 1; - background-color: rgb(122 109 229 / var(--tw-bg-opacity, 1)); -} - -.hover\:bg-purple\/20:hover { - background-color: rgb(138 125 255 / 0.2); + background-color: rgb(var(--color-surface) / var(--tw-bg-opacity, 1)); } - -.hover\:bg-purple\/30:hover { - background-color: rgb(138 125 255 / 0.3); +.hover\:bg-surface-strong:hover { + --tw-bg-opacity: 1; + background-color: rgb(var(--color-surface-strong) / var(--tw-bg-opacity, 1)); } - .hover\:bg-white\/10:hover { - background-color: rgb(255 255 255 / 0.1); + background-color: rgb(var(--color-white) / 0.1); } - .hover\:bg-white\/20:hover { - background-color: rgb(255 255 255 / 0.2); + background-color: rgb(var(--color-white) / 0.2); } - -.hover\:bg-white\/5:hover { - background-color: rgb(255 255 255 / 0.05); -} - -.hover\:\!text-gray-900:hover { +.hover\:\!text-ink:hover { --tw-text-opacity: 1 !important; - color: rgb(17 24 39 / var(--tw-text-opacity, 1)) !important; + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)) !important; } - .hover\:text-\[\#006097\]:hover { --tw-text-opacity: 1; color: rgb(0 96 151 / var(--tw-text-opacity, 1)); } - -.hover\:text-\[\#8A7DFF\]:hover { - --tw-text-opacity: 1; - color: rgb(138 125 255 / var(--tw-text-opacity, 1)); -} - -.hover\:text-\[\#9A8DFF\]:hover { +.hover\:text-accent:hover { --tw-text-opacity: 1; - color: rgb(154 141 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-accent) / var(--tw-text-opacity, 1)); } - -.hover\:text-blue-900:hover { - --tw-text-opacity: 1; - color: rgb(30 58 138 / var(--tw-text-opacity, 1)); -} - -.hover\:text-purple:hover { +.hover\:text-accent-strong:hover { --tw-text-opacity: 1; - color: rgb(138 125 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-accent-strong) / var(--tw-text-opacity, 1)); } - -.hover\:text-purple-700:hover { +.hover\:text-ink:hover { --tw-text-opacity: 1; - color: rgb(122 109 229 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-ink) / var(--tw-text-opacity, 1)); } - .hover\:text-white:hover { --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-white) / var(--tw-text-opacity, 1)); } - .hover\:underline:hover { text-decoration-line: underline; } - -.hover\:decoration-purple-700:hover { - text-decoration-color: #7A6DE5; +.hover\:decoration-ink:hover { + text-decoration-color: rgb(var(--color-ink) / 1); } - .hover\:decoration-white:hover { - text-decoration-color: #FFFFFF; + text-decoration-color: rgb(var(--color-white) / 1); } - .hover\:opacity-100:hover { opacity: 1; } - .hover\:opacity-80:hover { opacity: 0.8; } - .hover\:opacity-90:hover { opacity: 0.9; } - -.hover\:shadow-\[0_1px_3px_rgba\(20\2c 16\2c 53\2c 0\.04\)\2c 0_24px_48px_-16px_rgba\(138\2c 125\2c 255\2c 0\.18\)\]:hover { - --tw-shadow: 0 1px 3px rgba(20,16,53,0.04),0 24px 48px -16px rgba(138,125,255,0.18); - --tw-shadow-colored: 0 1px 3px var(--tw-shadow-color), 0 24px 48px -16px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.hover\:shadow-\[0_8px_24px_-12px_rgba\(138\2c 125\2c 255\2c 0\.18\)\]:hover { - --tw-shadow: 0 8px 24px -12px rgba(138,125,255,0.18); - --tw-shadow-colored: 0 8px 24px -12px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.hover\:shadow-lg:hover { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.hover\:shadow-md:hover { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.hover\:shadow-xl:hover { - --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); +.hover\:shadow-raised:hover { + --tw-shadow: var(--shadow-raised); + --tw-shadow-colored: var(--shadow-raised); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } - -.hover\:shadow-\[\#8A7DFF\]\/25:hover { - --tw-shadow-color: rgb(138 125 255 / 0.25); - --tw-shadow: var(--tw-shadow-colored); -} - -.hover\:shadow-purple\/10:hover { - --tw-shadow-color: rgb(138 125 255 / 0.1); - --tw-shadow: var(--tw-shadow-colored); -} - -.hover\:shadow-purple\/20:hover { - --tw-shadow-color: rgb(138 125 255 / 0.2); - --tw-shadow: var(--tw-shadow-colored); -} - -.hover\:shadow-purple\/30:hover { - --tw-shadow-color: rgb(138 125 255 / 0.3); - --tw-shadow: var(--tw-shadow-colored); -} - -.hover\:shadow-purple\/40:hover { - --tw-shadow-color: rgb(138 125 255 / 0.4); - --tw-shadow: var(--tw-shadow-colored); -} - .hover\:grayscale-0:hover { --tw-grayscale: grayscale(0); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } - -.focus\:border-purple:focus { +.focus\:border-ink:focus { --tw-border-opacity: 1; - border-color: rgb(138 125 255 / var(--tw-border-opacity, 1)); + border-color: rgb(var(--color-ink) / var(--tw-border-opacity, 1)); } - .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; } - .focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } - -.focus\:ring-purple\/20:focus { - --tw-ring-color: rgb(138 125 255 / 0.2); +.focus\:ring-focus\/20:focus { + --tw-ring-color: rgb(var(--color-focus) / 0.2); } - .group:hover .group-hover\:translate-x-1 { --tw-translate-x: 0.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } - -.group:hover .group-hover\:scale-110 { - --tw-scale-x: 1.1; - --tw-scale-y: 1.1; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.group:hover .group-hover\:text-\[\#8A7DFF\] { - --tw-text-opacity: 1; - color: rgb(138 125 255 / var(--tw-text-opacity, 1)); -} - -.group:hover .group-hover\:text-purple { +.group:hover .group-hover\:text-accent { --tw-text-opacity: 1; - color: rgb(138 125 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-accent) / var(--tw-text-opacity, 1)); } - -.group:hover .group-hover\:text-purple-700 { +.group:hover .group-hover\:text-accent-strong { --tw-text-opacity: 1; - color: rgb(122 109 229 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-accent-strong) / var(--tw-text-opacity, 1)); } - .group:hover .group-hover\:text-white { --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + color: rgb(var(--color-white) / var(--tw-text-opacity, 1)); } - .group:hover .group-hover\:opacity-100 { opacity: 1; } - @media (prefers-reduced-motion: no-preference) { .motion-safe\:hover\:-translate-y-0\.5:hover { --tw-translate-y: -0.125rem; @@ -3656,26 +2743,41 @@ a.button:hover { --tw-translate-x: 0.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } - .group:hover .motion-safe\:group-hover\:scale-110 { - --tw-scale-x: 1.1; - --tw-scale-y: 1.1; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } } - @media (min-width: 640px) { + .sm\:inline { + display: inline; + } + .sm\:w-auto { + width: auto; + } + .sm\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } .sm\:flex-row { flex-direction: row; } + .sm\:flex-wrap { + flex-wrap: wrap; + } .sm\:items-center { align-items: center; } .sm\:justify-between { justify-content: space-between; } + .sm\:gap-4 { + gap: 1rem; + } .sm\:rounded-2xl { border-radius: 1rem; } + .sm\:p-10 { + padding: 2.5rem; + } + .sm\:p-12 { + padding: 3rem; + } .sm\:p-6 { padding: 1.5rem; } @@ -3687,8 +2789,13 @@ a.button:hover { padding-bottom: 1.5rem; } } - @media (min-width: 768px) { + .md\:col-span-1 { + grid-column: span 1 / span 1; + } + .md\:col-span-3 { + grid-column: span 3 / span 3; + } .md\:float-left { float: left; } @@ -3719,6 +2826,9 @@ a.button:hover { .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } + .md\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } .md\:flex-row { flex-direction: row; } @@ -3728,6 +2838,9 @@ a.button:hover { .md\:items-center { align-items: center; } + .md\:justify-between { + justify-content: space-between; + } .md\:gap-12 { gap: 3rem; } @@ -3765,7 +2878,6 @@ a.button:hover { line-height: 2.25rem; } } - @media (min-width: 1024px) { .lg\:mx-0 { margin-left: 0px; @@ -3789,33 +2901,27 @@ a.button:hover { .lg\:w-56 { width: 14rem; } + .lg\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:flex-row { flex-direction: row; } - .lg\:items-start { - align-items: flex-start; - } - .lg\:items-end { - align-items: flex-end; - } .lg\:justify-start { justify-content: flex-start; } - .lg\:justify-end { - justify-content: flex-end; - } .lg\:gap-16 { gap: 4rem; } - .lg\:gap-8 { - gap: 2rem; - } .lg\:p-12 { padding: 3rem; } + .lg\:p-14 { + padding: 3.5rem; + } .lg\:px-24 { padding-left: 6rem; padding-right: 6rem; @@ -3824,10 +2930,6 @@ a.button:hover { padding-left: 2rem; padding-right: 2rem; } - .lg\:py-16 { - padding-top: 4rem; - padding-bottom: 4rem; - } .lg\:py-20 { padding-top: 5rem; padding-bottom: 5rem; @@ -3839,15 +2941,15 @@ a.button:hover { .lg\:pb-20 { padding-bottom: 5rem; } + .lg\:pt-16 { + padding-top: 4rem; + } .lg\:pt-24 { padding-top: 6rem; } .lg\:text-left { text-align: left; } - .lg\:text-right { - text-align: right; - } .lg\:text-2xl { font-size: 1.5rem; line-height: 2rem; @@ -3885,9 +2987,32 @@ a.button:hover { line-height: 78px; } } - @media (min-width: 1280px) { + .xl\:block { + display: block; + } + .xl\:flex { + display: flex; + } + .xl\:hidden { + display: none; + } + .xl\:min-w-0 { + min-width: 0px; + } + .xl\:max-w-6xl { + max-width: 72rem; + } + .xl\:flex-1 { + flex: 1 1 0%; + } .xl\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } + .xl\:items-start { + align-items: flex-start; + } + .xl\:gap-10 { + gap: 2.5rem; + } } diff --git a/assets/fonts/figtree-latin-ext-wght-normal.woff2 b/assets/fonts/figtree-latin-ext-wght-normal.woff2 new file mode 100644 index 00000000..a8a11238 Binary files /dev/null and b/assets/fonts/figtree-latin-ext-wght-normal.woff2 differ diff --git a/assets/fonts/figtree-latin-wght-normal.woff2 b/assets/fonts/figtree-latin-wght-normal.woff2 new file mode 100644 index 00000000..05ce657d Binary files /dev/null and b/assets/fonts/figtree-latin-wght-normal.woff2 differ diff --git a/assets/fonts/inter-latin-ext-wght-normal.woff2 b/assets/fonts/inter-latin-ext-wght-normal.woff2 deleted file mode 100644 index 479d010d..00000000 Binary files a/assets/fonts/inter-latin-ext-wght-normal.woff2 and /dev/null differ diff --git a/assets/fonts/inter-latin-wght-normal.woff2 b/assets/fonts/inter-latin-wght-normal.woff2 deleted file mode 100644 index d15208de..00000000 Binary files a/assets/fonts/inter-latin-wght-normal.woff2 and /dev/null differ diff --git a/assets/images/d2/container-security-layers.svg b/assets/images/d2/container-security-layers.svg index 00b092fa..f977c6bf 100644 --- a/assets/images/d2/container-security-layers.svg +++ b/assets/images/d2/container-security-layers.svg @@ -1,9 +1,9 @@ - + .d2-4021674217 .fill-N1{fill:#0A0F25;} + .d2-4021674217 .fill-N2{fill:#676C7E;} + .d2-4021674217 .fill-N3{fill:#9499AB;} + .d2-4021674217 .fill-N4{fill:#CFD2DD;} + .d2-4021674217 .fill-N5{fill:#DEE1EB;} + .d2-4021674217 .fill-N6{fill:#EEF1F8;} + .d2-4021674217 .fill-N7{fill:#FFFFFF;} + .d2-4021674217 .fill-B1{fill:#0A0F25;} + .d2-4021674217 .fill-B2{fill:#676C7E;} + .d2-4021674217 .fill-B3{fill:#9499AB;} + .d2-4021674217 .fill-B4{fill:#CFD2DD;} + .d2-4021674217 .fill-B5{fill:#DEE1EB;} + .d2-4021674217 .fill-B6{fill:#EEF1F8;} + .d2-4021674217 .fill-AA2{fill:#676C7E;} + .d2-4021674217 .fill-AA4{fill:#CFD2DD;} + .d2-4021674217 .fill-AA5{fill:#DEE1EB;} + .d2-4021674217 .fill-AB4{fill:#CFD2DD;} + .d2-4021674217 .fill-AB5{fill:#DEE1EB;} + .d2-4021674217 .stroke-N1{stroke:#0A0F25;} + .d2-4021674217 .stroke-N2{stroke:#676C7E;} + .d2-4021674217 .stroke-N3{stroke:#9499AB;} + .d2-4021674217 .stroke-N4{stroke:#CFD2DD;} + .d2-4021674217 .stroke-N5{stroke:#DEE1EB;} + .d2-4021674217 .stroke-N6{stroke:#EEF1F8;} + .d2-4021674217 .stroke-N7{stroke:#FFFFFF;} + .d2-4021674217 .stroke-B1{stroke:#0A0F25;} + .d2-4021674217 .stroke-B2{stroke:#676C7E;} + .d2-4021674217 .stroke-B3{stroke:#9499AB;} + .d2-4021674217 .stroke-B4{stroke:#CFD2DD;} + .d2-4021674217 .stroke-B5{stroke:#DEE1EB;} + .d2-4021674217 .stroke-B6{stroke:#EEF1F8;} + .d2-4021674217 .stroke-AA2{stroke:#676C7E;} + .d2-4021674217 .stroke-AA4{stroke:#CFD2DD;} + .d2-4021674217 .stroke-AA5{stroke:#DEE1EB;} + .d2-4021674217 .stroke-AB4{stroke:#CFD2DD;} + .d2-4021674217 .stroke-AB5{stroke:#DEE1EB;} + .d2-4021674217 .background-color-N1{background-color:#0A0F25;} + .d2-4021674217 .background-color-N2{background-color:#676C7E;} + .d2-4021674217 .background-color-N3{background-color:#9499AB;} + .d2-4021674217 .background-color-N4{background-color:#CFD2DD;} + .d2-4021674217 .background-color-N5{background-color:#DEE1EB;} + .d2-4021674217 .background-color-N6{background-color:#EEF1F8;} + .d2-4021674217 .background-color-N7{background-color:#FFFFFF;} + .d2-4021674217 .background-color-B1{background-color:#0A0F25;} + .d2-4021674217 .background-color-B2{background-color:#676C7E;} + .d2-4021674217 .background-color-B3{background-color:#9499AB;} + .d2-4021674217 .background-color-B4{background-color:#CFD2DD;} + .d2-4021674217 .background-color-B5{background-color:#DEE1EB;} + .d2-4021674217 .background-color-B6{background-color:#EEF1F8;} + .d2-4021674217 .background-color-AA2{background-color:#676C7E;} + .d2-4021674217 .background-color-AA4{background-color:#CFD2DD;} + .d2-4021674217 .background-color-AA5{background-color:#DEE1EB;} + .d2-4021674217 .background-color-AB4{background-color:#CFD2DD;} + .d2-4021674217 .background-color-AB5{background-color:#DEE1EB;} + .d2-4021674217 .color-N1{color:#0A0F25;} + .d2-4021674217 .color-N2{color:#676C7E;} + .d2-4021674217 .color-N3{color:#9499AB;} + .d2-4021674217 .color-N4{color:#CFD2DD;} + .d2-4021674217 .color-N5{color:#DEE1EB;} + .d2-4021674217 .color-N6{color:#EEF1F8;} + .d2-4021674217 .color-N7{color:#FFFFFF;} + .d2-4021674217 .color-B1{color:#0A0F25;} + .d2-4021674217 .color-B2{color:#676C7E;} + .d2-4021674217 .color-B3{color:#9499AB;} + .d2-4021674217 .color-B4{color:#CFD2DD;} + .d2-4021674217 .color-B5{color:#DEE1EB;} + .d2-4021674217 .color-B6{color:#EEF1F8;} + .d2-4021674217 .color-AA2{color:#676C7E;} + .d2-4021674217 .color-AA4{color:#CFD2DD;} + .d2-4021674217 .color-AA5{color:#DEE1EB;} + .d2-4021674217 .color-AB4{color:#CFD2DD;} + .d2-4021674217 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-4021674217);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-4021674217);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-4021674217);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-4021674217);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-4021674217);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-4021674217);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-4021674217);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-4021674217);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-4021674217);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-4021674217);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-4021674217);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-4021674217);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Container Image LayersSeparate SBOMs per LayerSecurity ControlsBase ImageApplicationContainer SBOMApplication SBOMVulnerability ScanningMonitoringCompliance +Container Image LayersSeparate SBOMs per LayerSecurity ControlsBase ImageApplicationContainer SBOMApplication SBOMVulnerability ScanningMonitoringCompliance diff --git a/assets/images/d2/cve-lifecycle.svg b/assets/images/d2/cve-lifecycle.svg index b1f5b32b..5f537932 100644 --- a/assets/images/d2/cve-lifecycle.svg +++ b/assets/images/d2/cve-lifecycle.svg @@ -1,31 +1,31 @@ - + .d2-327828170 .fill-N1{fill:#0A0F25;} + .d2-327828170 .fill-N2{fill:#676C7E;} + .d2-327828170 .fill-N3{fill:#9499AB;} + .d2-327828170 .fill-N4{fill:#CFD2DD;} + .d2-327828170 .fill-N5{fill:#DEE1EB;} + .d2-327828170 .fill-N6{fill:#EEF1F8;} + .d2-327828170 .fill-N7{fill:#FFFFFF;} + .d2-327828170 .fill-B1{fill:#0A0F25;} + .d2-327828170 .fill-B2{fill:#676C7E;} + .d2-327828170 .fill-B3{fill:#9499AB;} + .d2-327828170 .fill-B4{fill:#CFD2DD;} + .d2-327828170 .fill-B5{fill:#DEE1EB;} + .d2-327828170 .fill-B6{fill:#EEF1F8;} + .d2-327828170 .fill-AA2{fill:#676C7E;} + .d2-327828170 .fill-AA4{fill:#CFD2DD;} + .d2-327828170 .fill-AA5{fill:#DEE1EB;} + .d2-327828170 .fill-AB4{fill:#CFD2DD;} + .d2-327828170 .fill-AB5{fill:#DEE1EB;} + .d2-327828170 .stroke-N1{stroke:#0A0F25;} + .d2-327828170 .stroke-N2{stroke:#676C7E;} + .d2-327828170 .stroke-N3{stroke:#9499AB;} + .d2-327828170 .stroke-N4{stroke:#CFD2DD;} + .d2-327828170 .stroke-N5{stroke:#DEE1EB;} + .d2-327828170 .stroke-N6{stroke:#EEF1F8;} + .d2-327828170 .stroke-N7{stroke:#FFFFFF;} + .d2-327828170 .stroke-B1{stroke:#0A0F25;} + .d2-327828170 .stroke-B2{stroke:#676C7E;} + .d2-327828170 .stroke-B3{stroke:#9499AB;} + .d2-327828170 .stroke-B4{stroke:#CFD2DD;} + .d2-327828170 .stroke-B5{stroke:#DEE1EB;} + .d2-327828170 .stroke-B6{stroke:#EEF1F8;} + .d2-327828170 .stroke-AA2{stroke:#676C7E;} + .d2-327828170 .stroke-AA4{stroke:#CFD2DD;} + .d2-327828170 .stroke-AA5{stroke:#DEE1EB;} + .d2-327828170 .stroke-AB4{stroke:#CFD2DD;} + .d2-327828170 .stroke-AB5{stroke:#DEE1EB;} + .d2-327828170 .background-color-N1{background-color:#0A0F25;} + .d2-327828170 .background-color-N2{background-color:#676C7E;} + .d2-327828170 .background-color-N3{background-color:#9499AB;} + .d2-327828170 .background-color-N4{background-color:#CFD2DD;} + .d2-327828170 .background-color-N5{background-color:#DEE1EB;} + .d2-327828170 .background-color-N6{background-color:#EEF1F8;} + .d2-327828170 .background-color-N7{background-color:#FFFFFF;} + .d2-327828170 .background-color-B1{background-color:#0A0F25;} + .d2-327828170 .background-color-B2{background-color:#676C7E;} + .d2-327828170 .background-color-B3{background-color:#9499AB;} + .d2-327828170 .background-color-B4{background-color:#CFD2DD;} + .d2-327828170 .background-color-B5{background-color:#DEE1EB;} + .d2-327828170 .background-color-B6{background-color:#EEF1F8;} + .d2-327828170 .background-color-AA2{background-color:#676C7E;} + .d2-327828170 .background-color-AA4{background-color:#CFD2DD;} + .d2-327828170 .background-color-AA5{background-color:#DEE1EB;} + .d2-327828170 .background-color-AB4{background-color:#CFD2DD;} + .d2-327828170 .background-color-AB5{background-color:#DEE1EB;} + .d2-327828170 .color-N1{color:#0A0F25;} + .d2-327828170 .color-N2{color:#676C7E;} + .d2-327828170 .color-N3{color:#9499AB;} + .d2-327828170 .color-N4{color:#CFD2DD;} + .d2-327828170 .color-N5{color:#DEE1EB;} + .d2-327828170 .color-N6{color:#EEF1F8;} + .d2-327828170 .color-N7{color:#FFFFFF;} + .d2-327828170 .color-B1{color:#0A0F25;} + .d2-327828170 .color-B2{color:#676C7E;} + .d2-327828170 .color-B3{color:#9499AB;} + .d2-327828170 .color-B4{color:#CFD2DD;} + .d2-327828170 .color-B5{color:#DEE1EB;} + .d2-327828170 .color-B6{color:#EEF1F8;} + .d2-327828170 .color-AA2{color:#676C7E;} + .d2-327828170 .color-AA4{color:#CFD2DD;} + .d2-327828170 .color-AA5{color:#DEE1EB;} + .d2-327828170 .color-AB4{color:#CFD2DD;} + .d2-327828170 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-327828170);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-327828170);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-327828170);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-327828170);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-327828170);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-327828170);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-327828170);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-327828170);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-327828170);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-327828170);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-327828170);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-327828170);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -DiscoveryCVE IDAssignedNVDEnrichmentSBOMScanningPatch &Remediate CVSS Score+ CPE Data Match againstcomponents Prioritize& fix +DiscoveryCVE IDAssignedNVDEnrichmentSBOMScanningPatch &Remediate CVSS Score+ CPE Data Match againstcomponents Prioritize& fix diff --git a/assets/images/d2/generation.svg b/assets/images/d2/generation.svg index c8ccefaf..35533ccd 100644 --- a/assets/images/d2/generation.svg +++ b/assets/images/d2/generation.svg @@ -1,19 +1,19 @@ - + .d2-1130567843 .fill-N1{fill:#0A0F25;} + .d2-1130567843 .fill-N2{fill:#676C7E;} + .d2-1130567843 .fill-N3{fill:#9499AB;} + .d2-1130567843 .fill-N4{fill:#CFD2DD;} + .d2-1130567843 .fill-N5{fill:#DEE1EB;} + .d2-1130567843 .fill-N6{fill:#EEF1F8;} + .d2-1130567843 .fill-N7{fill:#FFFFFF;} + .d2-1130567843 .fill-B1{fill:#0A0F25;} + .d2-1130567843 .fill-B2{fill:#676C7E;} + .d2-1130567843 .fill-B3{fill:#9499AB;} + .d2-1130567843 .fill-B4{fill:#CFD2DD;} + .d2-1130567843 .fill-B5{fill:#DEE1EB;} + .d2-1130567843 .fill-B6{fill:#EEF1F8;} + .d2-1130567843 .fill-AA2{fill:#676C7E;} + .d2-1130567843 .fill-AA4{fill:#CFD2DD;} + .d2-1130567843 .fill-AA5{fill:#DEE1EB;} + .d2-1130567843 .fill-AB4{fill:#CFD2DD;} + .d2-1130567843 .fill-AB5{fill:#DEE1EB;} + .d2-1130567843 .stroke-N1{stroke:#0A0F25;} + .d2-1130567843 .stroke-N2{stroke:#676C7E;} + .d2-1130567843 .stroke-N3{stroke:#9499AB;} + .d2-1130567843 .stroke-N4{stroke:#CFD2DD;} + .d2-1130567843 .stroke-N5{stroke:#DEE1EB;} + .d2-1130567843 .stroke-N6{stroke:#EEF1F8;} + .d2-1130567843 .stroke-N7{stroke:#FFFFFF;} + .d2-1130567843 .stroke-B1{stroke:#0A0F25;} + .d2-1130567843 .stroke-B2{stroke:#676C7E;} + .d2-1130567843 .stroke-B3{stroke:#9499AB;} + .d2-1130567843 .stroke-B4{stroke:#CFD2DD;} + .d2-1130567843 .stroke-B5{stroke:#DEE1EB;} + .d2-1130567843 .stroke-B6{stroke:#EEF1F8;} + .d2-1130567843 .stroke-AA2{stroke:#676C7E;} + .d2-1130567843 .stroke-AA4{stroke:#CFD2DD;} + .d2-1130567843 .stroke-AA5{stroke:#DEE1EB;} + .d2-1130567843 .stroke-AB4{stroke:#CFD2DD;} + .d2-1130567843 .stroke-AB5{stroke:#DEE1EB;} + .d2-1130567843 .background-color-N1{background-color:#0A0F25;} + .d2-1130567843 .background-color-N2{background-color:#676C7E;} + .d2-1130567843 .background-color-N3{background-color:#9499AB;} + .d2-1130567843 .background-color-N4{background-color:#CFD2DD;} + .d2-1130567843 .background-color-N5{background-color:#DEE1EB;} + .d2-1130567843 .background-color-N6{background-color:#EEF1F8;} + .d2-1130567843 .background-color-N7{background-color:#FFFFFF;} + .d2-1130567843 .background-color-B1{background-color:#0A0F25;} + .d2-1130567843 .background-color-B2{background-color:#676C7E;} + .d2-1130567843 .background-color-B3{background-color:#9499AB;} + .d2-1130567843 .background-color-B4{background-color:#CFD2DD;} + .d2-1130567843 .background-color-B5{background-color:#DEE1EB;} + .d2-1130567843 .background-color-B6{background-color:#EEF1F8;} + .d2-1130567843 .background-color-AA2{background-color:#676C7E;} + .d2-1130567843 .background-color-AA4{background-color:#CFD2DD;} + .d2-1130567843 .background-color-AA5{background-color:#DEE1EB;} + .d2-1130567843 .background-color-AB4{background-color:#CFD2DD;} + .d2-1130567843 .background-color-AB5{background-color:#DEE1EB;} + .d2-1130567843 .color-N1{color:#0A0F25;} + .d2-1130567843 .color-N2{color:#676C7E;} + .d2-1130567843 .color-N3{color:#9499AB;} + .d2-1130567843 .color-N4{color:#CFD2DD;} + .d2-1130567843 .color-N5{color:#DEE1EB;} + .d2-1130567843 .color-N6{color:#EEF1F8;} + .d2-1130567843 .color-N7{color:#FFFFFF;} + .d2-1130567843 .color-B1{color:#0A0F25;} + .d2-1130567843 .color-B2{color:#676C7E;} + .d2-1130567843 .color-B3{color:#9499AB;} + .d2-1130567843 .color-B4{color:#CFD2DD;} + .d2-1130567843 .color-B5{color:#DEE1EB;} + .d2-1130567843 .color-B6{color:#EEF1F8;} + .d2-1130567843 .color-AA2{color:#676C7E;} + .d2-1130567843 .color-AA4{color:#CFD2DD;} + .d2-1130567843 .color-AA5{color:#DEE1EB;} + .d2-1130567843 .color-AB4{color:#CFD2DD;} + .d2-1130567843 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1130567843);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-1130567843);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-1130567843);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-1130567843);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1130567843);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-1130567843);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-1130567843);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1130567843);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1130567843);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1130567843);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1130567843);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1130567843);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -GenerationAugmentationEnrichmentSigning +GenerationAugmentationEnrichmentSigning diff --git a/assets/images/d2/lifecycle.svg b/assets/images/d2/lifecycle.svg index 96cebda3..9741442a 100644 --- a/assets/images/d2/lifecycle.svg +++ b/assets/images/d2/lifecycle.svg @@ -1,9 +1,9 @@ - + .d2-3664705958 .fill-N1{fill:#0A0F25;} + .d2-3664705958 .fill-N2{fill:#676C7E;} + .d2-3664705958 .fill-N3{fill:#9499AB;} + .d2-3664705958 .fill-N4{fill:#CFD2DD;} + .d2-3664705958 .fill-N5{fill:#DEE1EB;} + .d2-3664705958 .fill-N6{fill:#EEF1F8;} + .d2-3664705958 .fill-N7{fill:#FFFFFF;} + .d2-3664705958 .fill-B1{fill:#0A0F25;} + .d2-3664705958 .fill-B2{fill:#676C7E;} + .d2-3664705958 .fill-B3{fill:#9499AB;} + .d2-3664705958 .fill-B4{fill:#CFD2DD;} + .d2-3664705958 .fill-B5{fill:#DEE1EB;} + .d2-3664705958 .fill-B6{fill:#EEF1F8;} + .d2-3664705958 .fill-AA2{fill:#676C7E;} + .d2-3664705958 .fill-AA4{fill:#CFD2DD;} + .d2-3664705958 .fill-AA5{fill:#DEE1EB;} + .d2-3664705958 .fill-AB4{fill:#CFD2DD;} + .d2-3664705958 .fill-AB5{fill:#DEE1EB;} + .d2-3664705958 .stroke-N1{stroke:#0A0F25;} + .d2-3664705958 .stroke-N2{stroke:#676C7E;} + .d2-3664705958 .stroke-N3{stroke:#9499AB;} + .d2-3664705958 .stroke-N4{stroke:#CFD2DD;} + .d2-3664705958 .stroke-N5{stroke:#DEE1EB;} + .d2-3664705958 .stroke-N6{stroke:#EEF1F8;} + .d2-3664705958 .stroke-N7{stroke:#FFFFFF;} + .d2-3664705958 .stroke-B1{stroke:#0A0F25;} + .d2-3664705958 .stroke-B2{stroke:#676C7E;} + .d2-3664705958 .stroke-B3{stroke:#9499AB;} + .d2-3664705958 .stroke-B4{stroke:#CFD2DD;} + .d2-3664705958 .stroke-B5{stroke:#DEE1EB;} + .d2-3664705958 .stroke-B6{stroke:#EEF1F8;} + .d2-3664705958 .stroke-AA2{stroke:#676C7E;} + .d2-3664705958 .stroke-AA4{stroke:#CFD2DD;} + .d2-3664705958 .stroke-AA5{stroke:#DEE1EB;} + .d2-3664705958 .stroke-AB4{stroke:#CFD2DD;} + .d2-3664705958 .stroke-AB5{stroke:#DEE1EB;} + .d2-3664705958 .background-color-N1{background-color:#0A0F25;} + .d2-3664705958 .background-color-N2{background-color:#676C7E;} + .d2-3664705958 .background-color-N3{background-color:#9499AB;} + .d2-3664705958 .background-color-N4{background-color:#CFD2DD;} + .d2-3664705958 .background-color-N5{background-color:#DEE1EB;} + .d2-3664705958 .background-color-N6{background-color:#EEF1F8;} + .d2-3664705958 .background-color-N7{background-color:#FFFFFF;} + .d2-3664705958 .background-color-B1{background-color:#0A0F25;} + .d2-3664705958 .background-color-B2{background-color:#676C7E;} + .d2-3664705958 .background-color-B3{background-color:#9499AB;} + .d2-3664705958 .background-color-B4{background-color:#CFD2DD;} + .d2-3664705958 .background-color-B5{background-color:#DEE1EB;} + .d2-3664705958 .background-color-B6{background-color:#EEF1F8;} + .d2-3664705958 .background-color-AA2{background-color:#676C7E;} + .d2-3664705958 .background-color-AA4{background-color:#CFD2DD;} + .d2-3664705958 .background-color-AA5{background-color:#DEE1EB;} + .d2-3664705958 .background-color-AB4{background-color:#CFD2DD;} + .d2-3664705958 .background-color-AB5{background-color:#DEE1EB;} + .d2-3664705958 .color-N1{color:#0A0F25;} + .d2-3664705958 .color-N2{color:#676C7E;} + .d2-3664705958 .color-N3{color:#9499AB;} + .d2-3664705958 .color-N4{color:#CFD2DD;} + .d2-3664705958 .color-N5{color:#DEE1EB;} + .d2-3664705958 .color-N6{color:#EEF1F8;} + .d2-3664705958 .color-N7{color:#FFFFFF;} + .d2-3664705958 .color-B1{color:#0A0F25;} + .d2-3664705958 .color-B2{color:#676C7E;} + .d2-3664705958 .color-B3{color:#9499AB;} + .d2-3664705958 .color-B4{color:#CFD2DD;} + .d2-3664705958 .color-B5{color:#DEE1EB;} + .d2-3664705958 .color-B6{color:#EEF1F8;} + .d2-3664705958 .color-AA2{color:#676C7E;} + .d2-3664705958 .color-AA4{color:#CFD2DD;} + .d2-3664705958 .color-AA5{color:#DEE1EB;} + .d2-3664705958 .color-AB4{color:#CFD2DD;} + .d2-3664705958 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3664705958);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3664705958);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3664705958);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3664705958);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3664705958);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3664705958);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3664705958);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3664705958);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3664705958);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3664705958);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3664705958);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3664705958);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -AuthoringDistributionAnalysisGenerationAugmentationEnrichmentSigning +AuthoringDistributionAnalysisGenerationAugmentationEnrichmentSigning diff --git a/assets/images/d2/pypi-sbom-stats.svg b/assets/images/d2/pypi-sbom-stats.svg index b7569ceb..450c75eb 100644 --- a/assets/images/d2/pypi-sbom-stats.svg +++ b/assets/images/d2/pypi-sbom-stats.svg @@ -1,9 +1,9 @@ - + .d2-805334181 .fill-N1{fill:#0A0F25;} + .d2-805334181 .fill-N2{fill:#676C7E;} + .d2-805334181 .fill-N3{fill:#9499AB;} + .d2-805334181 .fill-N4{fill:#CFD2DD;} + .d2-805334181 .fill-N5{fill:#DEE1EB;} + .d2-805334181 .fill-N6{fill:#EEF1F8;} + .d2-805334181 .fill-N7{fill:#FFFFFF;} + .d2-805334181 .fill-B1{fill:#0A0F25;} + .d2-805334181 .fill-B2{fill:#676C7E;} + .d2-805334181 .fill-B3{fill:#9499AB;} + .d2-805334181 .fill-B4{fill:#CFD2DD;} + .d2-805334181 .fill-B5{fill:#DEE1EB;} + .d2-805334181 .fill-B6{fill:#EEF1F8;} + .d2-805334181 .fill-AA2{fill:#676C7E;} + .d2-805334181 .fill-AA4{fill:#CFD2DD;} + .d2-805334181 .fill-AA5{fill:#DEE1EB;} + .d2-805334181 .fill-AB4{fill:#CFD2DD;} + .d2-805334181 .fill-AB5{fill:#DEE1EB;} + .d2-805334181 .stroke-N1{stroke:#0A0F25;} + .d2-805334181 .stroke-N2{stroke:#676C7E;} + .d2-805334181 .stroke-N3{stroke:#9499AB;} + .d2-805334181 .stroke-N4{stroke:#CFD2DD;} + .d2-805334181 .stroke-N5{stroke:#DEE1EB;} + .d2-805334181 .stroke-N6{stroke:#EEF1F8;} + .d2-805334181 .stroke-N7{stroke:#FFFFFF;} + .d2-805334181 .stroke-B1{stroke:#0A0F25;} + .d2-805334181 .stroke-B2{stroke:#676C7E;} + .d2-805334181 .stroke-B3{stroke:#9499AB;} + .d2-805334181 .stroke-B4{stroke:#CFD2DD;} + .d2-805334181 .stroke-B5{stroke:#DEE1EB;} + .d2-805334181 .stroke-B6{stroke:#EEF1F8;} + .d2-805334181 .stroke-AA2{stroke:#676C7E;} + .d2-805334181 .stroke-AA4{stroke:#CFD2DD;} + .d2-805334181 .stroke-AA5{stroke:#DEE1EB;} + .d2-805334181 .stroke-AB4{stroke:#CFD2DD;} + .d2-805334181 .stroke-AB5{stroke:#DEE1EB;} + .d2-805334181 .background-color-N1{background-color:#0A0F25;} + .d2-805334181 .background-color-N2{background-color:#676C7E;} + .d2-805334181 .background-color-N3{background-color:#9499AB;} + .d2-805334181 .background-color-N4{background-color:#CFD2DD;} + .d2-805334181 .background-color-N5{background-color:#DEE1EB;} + .d2-805334181 .background-color-N6{background-color:#EEF1F8;} + .d2-805334181 .background-color-N7{background-color:#FFFFFF;} + .d2-805334181 .background-color-B1{background-color:#0A0F25;} + .d2-805334181 .background-color-B2{background-color:#676C7E;} + .d2-805334181 .background-color-B3{background-color:#9499AB;} + .d2-805334181 .background-color-B4{background-color:#CFD2DD;} + .d2-805334181 .background-color-B5{background-color:#DEE1EB;} + .d2-805334181 .background-color-B6{background-color:#EEF1F8;} + .d2-805334181 .background-color-AA2{background-color:#676C7E;} + .d2-805334181 .background-color-AA4{background-color:#CFD2DD;} + .d2-805334181 .background-color-AA5{background-color:#DEE1EB;} + .d2-805334181 .background-color-AB4{background-color:#CFD2DD;} + .d2-805334181 .background-color-AB5{background-color:#DEE1EB;} + .d2-805334181 .color-N1{color:#0A0F25;} + .d2-805334181 .color-N2{color:#676C7E;} + .d2-805334181 .color-N3{color:#9499AB;} + .d2-805334181 .color-N4{color:#CFD2DD;} + .d2-805334181 .color-N5{color:#DEE1EB;} + .d2-805334181 .color-N6{color:#EEF1F8;} + .d2-805334181 .color-N7{color:#FFFFFF;} + .d2-805334181 .color-B1{color:#0A0F25;} + .d2-805334181 .color-B2{color:#676C7E;} + .d2-805334181 .color-B3{color:#9499AB;} + .d2-805334181 .color-B4{color:#CFD2DD;} + .d2-805334181 .color-B5{color:#DEE1EB;} + .d2-805334181 .color-B6{color:#EEF1F8;} + .d2-805334181 .color-AA2{color:#676C7E;} + .d2-805334181 .color-AA4{color:#CFD2DD;} + .d2-805334181 .color-AA5{color:#DEE1EB;} + .d2-805334181 .color-AB4{color:#CFD2DD;} + .d2-805334181 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-805334181);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-805334181);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-805334181);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-805334181);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-805334181);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-805334181);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-805334181);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-805334181);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-805334181);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-805334181);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-805334181);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-805334181);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -15,021 Packages Analyzed Format: All CycloneDX JSONValidation238 With SBOMs(1.58%)14,783 Without SBOMs(98.42%)CycloneDX 1.51,194 wheelsCycloneDX 1.4311 wheelsCycloneDX 1.61 wheel1,469 Valid37 Invalid(cargo-cyclonedx bug) +15,021 Packages Analyzed Format: All CycloneDX JSONValidation238 With SBOMs(1.58%)14,783 Without SBOMs(98.42%)CycloneDX 1.51,194 wheelsCycloneDX 1.4311 wheelsCycloneDX 1.61 wheel1,469 Valid37 Invalid(cargo-cyclonedx bug) diff --git a/assets/images/d2/quality-gap.svg b/assets/images/d2/quality-gap.svg index 72636cc9..30e9151f 100644 --- a/assets/images/d2/quality-gap.svg +++ b/assets/images/d2/quality-gap.svg @@ -1,31 +1,31 @@ - + .d2-3326965995 .fill-N1{fill:#0A0F25;} + .d2-3326965995 .fill-N2{fill:#676C7E;} + .d2-3326965995 .fill-N3{fill:#9499AB;} + .d2-3326965995 .fill-N4{fill:#CFD2DD;} + .d2-3326965995 .fill-N5{fill:#DEE1EB;} + .d2-3326965995 .fill-N6{fill:#EEF1F8;} + .d2-3326965995 .fill-N7{fill:#FFFFFF;} + .d2-3326965995 .fill-B1{fill:#0A0F25;} + .d2-3326965995 .fill-B2{fill:#676C7E;} + .d2-3326965995 .fill-B3{fill:#9499AB;} + .d2-3326965995 .fill-B4{fill:#CFD2DD;} + .d2-3326965995 .fill-B5{fill:#DEE1EB;} + .d2-3326965995 .fill-B6{fill:#EEF1F8;} + .d2-3326965995 .fill-AA2{fill:#676C7E;} + .d2-3326965995 .fill-AA4{fill:#CFD2DD;} + .d2-3326965995 .fill-AA5{fill:#DEE1EB;} + .d2-3326965995 .fill-AB4{fill:#CFD2DD;} + .d2-3326965995 .fill-AB5{fill:#DEE1EB;} + .d2-3326965995 .stroke-N1{stroke:#0A0F25;} + .d2-3326965995 .stroke-N2{stroke:#676C7E;} + .d2-3326965995 .stroke-N3{stroke:#9499AB;} + .d2-3326965995 .stroke-N4{stroke:#CFD2DD;} + .d2-3326965995 .stroke-N5{stroke:#DEE1EB;} + .d2-3326965995 .stroke-N6{stroke:#EEF1F8;} + .d2-3326965995 .stroke-N7{stroke:#FFFFFF;} + .d2-3326965995 .stroke-B1{stroke:#0A0F25;} + .d2-3326965995 .stroke-B2{stroke:#676C7E;} + .d2-3326965995 .stroke-B3{stroke:#9499AB;} + .d2-3326965995 .stroke-B4{stroke:#CFD2DD;} + .d2-3326965995 .stroke-B5{stroke:#DEE1EB;} + .d2-3326965995 .stroke-B6{stroke:#EEF1F8;} + .d2-3326965995 .stroke-AA2{stroke:#676C7E;} + .d2-3326965995 .stroke-AA4{stroke:#CFD2DD;} + .d2-3326965995 .stroke-AA5{stroke:#DEE1EB;} + .d2-3326965995 .stroke-AB4{stroke:#CFD2DD;} + .d2-3326965995 .stroke-AB5{stroke:#DEE1EB;} + .d2-3326965995 .background-color-N1{background-color:#0A0F25;} + .d2-3326965995 .background-color-N2{background-color:#676C7E;} + .d2-3326965995 .background-color-N3{background-color:#9499AB;} + .d2-3326965995 .background-color-N4{background-color:#CFD2DD;} + .d2-3326965995 .background-color-N5{background-color:#DEE1EB;} + .d2-3326965995 .background-color-N6{background-color:#EEF1F8;} + .d2-3326965995 .background-color-N7{background-color:#FFFFFF;} + .d2-3326965995 .background-color-B1{background-color:#0A0F25;} + .d2-3326965995 .background-color-B2{background-color:#676C7E;} + .d2-3326965995 .background-color-B3{background-color:#9499AB;} + .d2-3326965995 .background-color-B4{background-color:#CFD2DD;} + .d2-3326965995 .background-color-B5{background-color:#DEE1EB;} + .d2-3326965995 .background-color-B6{background-color:#EEF1F8;} + .d2-3326965995 .background-color-AA2{background-color:#676C7E;} + .d2-3326965995 .background-color-AA4{background-color:#CFD2DD;} + .d2-3326965995 .background-color-AA5{background-color:#DEE1EB;} + .d2-3326965995 .background-color-AB4{background-color:#CFD2DD;} + .d2-3326965995 .background-color-AB5{background-color:#DEE1EB;} + .d2-3326965995 .color-N1{color:#0A0F25;} + .d2-3326965995 .color-N2{color:#676C7E;} + .d2-3326965995 .color-N3{color:#9499AB;} + .d2-3326965995 .color-N4{color:#CFD2DD;} + .d2-3326965995 .color-N5{color:#DEE1EB;} + .d2-3326965995 .color-N6{color:#EEF1F8;} + .d2-3326965995 .color-N7{color:#FFFFFF;} + .d2-3326965995 .color-B1{color:#0A0F25;} + .d2-3326965995 .color-B2{color:#676C7E;} + .d2-3326965995 .color-B3{color:#9499AB;} + .d2-3326965995 .color-B4{color:#CFD2DD;} + .d2-3326965995 .color-B5{color:#DEE1EB;} + .d2-3326965995 .color-B6{color:#EEF1F8;} + .d2-3326965995 .color-AA2{color:#676C7E;} + .d2-3326965995 .color-AA4{color:#CFD2DD;} + .d2-3326965995 .color-AA5{color:#DEE1EB;} + .d2-3326965995 .color-AB4{color:#CFD2DD;} + .d2-3326965995 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3326965995);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3326965995);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3326965995);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3326965995);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3326965995);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3326965995);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3326965995);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3326965995);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3326965995);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3326965995);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3326965995);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3326965995);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Your SBOMYour Lockfilesbomify actionQuality SBOM or +Your SBOMYour Lockfilesbomify actionQuality SBOM or diff --git a/assets/images/d2/sbom-hierarchy.svg b/assets/images/d2/sbom-hierarchy.svg index 19f9750c..4e42857e 100644 --- a/assets/images/d2/sbom-hierarchy.svg +++ b/assets/images/d2/sbom-hierarchy.svg @@ -1,9 +1,9 @@ - + .d2-724610397 .fill-N1{fill:#0A0F25;} + .d2-724610397 .fill-N2{fill:#676C7E;} + .d2-724610397 .fill-N3{fill:#9499AB;} + .d2-724610397 .fill-N4{fill:#CFD2DD;} + .d2-724610397 .fill-N5{fill:#DEE1EB;} + .d2-724610397 .fill-N6{fill:#EEF1F8;} + .d2-724610397 .fill-N7{fill:#FFFFFF;} + .d2-724610397 .fill-B1{fill:#0A0F25;} + .d2-724610397 .fill-B2{fill:#676C7E;} + .d2-724610397 .fill-B3{fill:#9499AB;} + .d2-724610397 .fill-B4{fill:#CFD2DD;} + .d2-724610397 .fill-B5{fill:#DEE1EB;} + .d2-724610397 .fill-B6{fill:#EEF1F8;} + .d2-724610397 .fill-AA2{fill:#676C7E;} + .d2-724610397 .fill-AA4{fill:#CFD2DD;} + .d2-724610397 .fill-AA5{fill:#DEE1EB;} + .d2-724610397 .fill-AB4{fill:#CFD2DD;} + .d2-724610397 .fill-AB5{fill:#DEE1EB;} + .d2-724610397 .stroke-N1{stroke:#0A0F25;} + .d2-724610397 .stroke-N2{stroke:#676C7E;} + .d2-724610397 .stroke-N3{stroke:#9499AB;} + .d2-724610397 .stroke-N4{stroke:#CFD2DD;} + .d2-724610397 .stroke-N5{stroke:#DEE1EB;} + .d2-724610397 .stroke-N6{stroke:#EEF1F8;} + .d2-724610397 .stroke-N7{stroke:#FFFFFF;} + .d2-724610397 .stroke-B1{stroke:#0A0F25;} + .d2-724610397 .stroke-B2{stroke:#676C7E;} + .d2-724610397 .stroke-B3{stroke:#9499AB;} + .d2-724610397 .stroke-B4{stroke:#CFD2DD;} + .d2-724610397 .stroke-B5{stroke:#DEE1EB;} + .d2-724610397 .stroke-B6{stroke:#EEF1F8;} + .d2-724610397 .stroke-AA2{stroke:#676C7E;} + .d2-724610397 .stroke-AA4{stroke:#CFD2DD;} + .d2-724610397 .stroke-AA5{stroke:#DEE1EB;} + .d2-724610397 .stroke-AB4{stroke:#CFD2DD;} + .d2-724610397 .stroke-AB5{stroke:#DEE1EB;} + .d2-724610397 .background-color-N1{background-color:#0A0F25;} + .d2-724610397 .background-color-N2{background-color:#676C7E;} + .d2-724610397 .background-color-N3{background-color:#9499AB;} + .d2-724610397 .background-color-N4{background-color:#CFD2DD;} + .d2-724610397 .background-color-N5{background-color:#DEE1EB;} + .d2-724610397 .background-color-N6{background-color:#EEF1F8;} + .d2-724610397 .background-color-N7{background-color:#FFFFFF;} + .d2-724610397 .background-color-B1{background-color:#0A0F25;} + .d2-724610397 .background-color-B2{background-color:#676C7E;} + .d2-724610397 .background-color-B3{background-color:#9499AB;} + .d2-724610397 .background-color-B4{background-color:#CFD2DD;} + .d2-724610397 .background-color-B5{background-color:#DEE1EB;} + .d2-724610397 .background-color-B6{background-color:#EEF1F8;} + .d2-724610397 .background-color-AA2{background-color:#676C7E;} + .d2-724610397 .background-color-AA4{background-color:#CFD2DD;} + .d2-724610397 .background-color-AA5{background-color:#DEE1EB;} + .d2-724610397 .background-color-AB4{background-color:#CFD2DD;} + .d2-724610397 .background-color-AB5{background-color:#DEE1EB;} + .d2-724610397 .color-N1{color:#0A0F25;} + .d2-724610397 .color-N2{color:#676C7E;} + .d2-724610397 .color-N3{color:#9499AB;} + .d2-724610397 .color-N4{color:#CFD2DD;} + .d2-724610397 .color-N5{color:#DEE1EB;} + .d2-724610397 .color-N6{color:#EEF1F8;} + .d2-724610397 .color-N7{color:#FFFFFF;} + .d2-724610397 .color-B1{color:#0A0F25;} + .d2-724610397 .color-B2{color:#676C7E;} + .d2-724610397 .color-B3{color:#9499AB;} + .d2-724610397 .color-B4{color:#CFD2DD;} + .d2-724610397 .color-B5{color:#DEE1EB;} + .d2-724610397 .color-B6{color:#EEF1F8;} + .d2-724610397 .color-AA2{color:#676C7E;} + .d2-724610397 .color-AA4{color:#CFD2DD;} + .d2-724610397 .color-AA5{color:#DEE1EB;} + .d2-724610397 .color-AB4{color:#CFD2DD;} + .d2-724610397 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-724610397);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-724610397);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-724610397);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-724610397);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-724610397);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-724610397);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-724610397);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-724610397);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-724610397);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-724610397);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-724610397);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-724610397);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Product SBOMComponent ArtifactsSmart ThermostatPython SBOMNode SBOMDocker SBOMYocto SBOMSOC 2 Type IICE Certificate +Product SBOMComponent ArtifactsSmart ThermostatPython SBOMNode SBOMDocker SBOMYocto SBOMSOC 2 Type IICE Certificate diff --git a/assets/images/d2/sbom-hub.svg b/assets/images/d2/sbom-hub.svg index c0c8723b..42b8f033 100644 --- a/assets/images/d2/sbom-hub.svg +++ b/assets/images/d2/sbom-hub.svg @@ -1,26 +1,26 @@ - + .d2-3900808105 .fill-N1{fill:#0A0F25;} + .d2-3900808105 .fill-N2{fill:#676C7E;} + .d2-3900808105 .fill-N3{fill:#9499AB;} + .d2-3900808105 .fill-N4{fill:#CFD2DD;} + .d2-3900808105 .fill-N5{fill:#DEE1EB;} + .d2-3900808105 .fill-N6{fill:#EEF1F8;} + .d2-3900808105 .fill-N7{fill:#FFFFFF;} + .d2-3900808105 .fill-B1{fill:#0A0F25;} + .d2-3900808105 .fill-B2{fill:#676C7E;} + .d2-3900808105 .fill-B3{fill:#9499AB;} + .d2-3900808105 .fill-B4{fill:#CFD2DD;} + .d2-3900808105 .fill-B5{fill:#DEE1EB;} + .d2-3900808105 .fill-B6{fill:#EEF1F8;} + .d2-3900808105 .fill-AA2{fill:#676C7E;} + .d2-3900808105 .fill-AA4{fill:#CFD2DD;} + .d2-3900808105 .fill-AA5{fill:#DEE1EB;} + .d2-3900808105 .fill-AB4{fill:#CFD2DD;} + .d2-3900808105 .fill-AB5{fill:#DEE1EB;} + .d2-3900808105 .stroke-N1{stroke:#0A0F25;} + .d2-3900808105 .stroke-N2{stroke:#676C7E;} + .d2-3900808105 .stroke-N3{stroke:#9499AB;} + .d2-3900808105 .stroke-N4{stroke:#CFD2DD;} + .d2-3900808105 .stroke-N5{stroke:#DEE1EB;} + .d2-3900808105 .stroke-N6{stroke:#EEF1F8;} + .d2-3900808105 .stroke-N7{stroke:#FFFFFF;} + .d2-3900808105 .stroke-B1{stroke:#0A0F25;} + .d2-3900808105 .stroke-B2{stroke:#676C7E;} + .d2-3900808105 .stroke-B3{stroke:#9499AB;} + .d2-3900808105 .stroke-B4{stroke:#CFD2DD;} + .d2-3900808105 .stroke-B5{stroke:#DEE1EB;} + .d2-3900808105 .stroke-B6{stroke:#EEF1F8;} + .d2-3900808105 .stroke-AA2{stroke:#676C7E;} + .d2-3900808105 .stroke-AA4{stroke:#CFD2DD;} + .d2-3900808105 .stroke-AA5{stroke:#DEE1EB;} + .d2-3900808105 .stroke-AB4{stroke:#CFD2DD;} + .d2-3900808105 .stroke-AB5{stroke:#DEE1EB;} + .d2-3900808105 .background-color-N1{background-color:#0A0F25;} + .d2-3900808105 .background-color-N2{background-color:#676C7E;} + .d2-3900808105 .background-color-N3{background-color:#9499AB;} + .d2-3900808105 .background-color-N4{background-color:#CFD2DD;} + .d2-3900808105 .background-color-N5{background-color:#DEE1EB;} + .d2-3900808105 .background-color-N6{background-color:#EEF1F8;} + .d2-3900808105 .background-color-N7{background-color:#FFFFFF;} + .d2-3900808105 .background-color-B1{background-color:#0A0F25;} + .d2-3900808105 .background-color-B2{background-color:#676C7E;} + .d2-3900808105 .background-color-B3{background-color:#9499AB;} + .d2-3900808105 .background-color-B4{background-color:#CFD2DD;} + .d2-3900808105 .background-color-B5{background-color:#DEE1EB;} + .d2-3900808105 .background-color-B6{background-color:#EEF1F8;} + .d2-3900808105 .background-color-AA2{background-color:#676C7E;} + .d2-3900808105 .background-color-AA4{background-color:#CFD2DD;} + .d2-3900808105 .background-color-AA5{background-color:#DEE1EB;} + .d2-3900808105 .background-color-AB4{background-color:#CFD2DD;} + .d2-3900808105 .background-color-AB5{background-color:#DEE1EB;} + .d2-3900808105 .color-N1{color:#0A0F25;} + .d2-3900808105 .color-N2{color:#676C7E;} + .d2-3900808105 .color-N3{color:#9499AB;} + .d2-3900808105 .color-N4{color:#CFD2DD;} + .d2-3900808105 .color-N5{color:#DEE1EB;} + .d2-3900808105 .color-N6{color:#EEF1F8;} + .d2-3900808105 .color-N7{color:#FFFFFF;} + .d2-3900808105 .color-B1{color:#0A0F25;} + .d2-3900808105 .color-B2{color:#676C7E;} + .d2-3900808105 .color-B3{color:#9499AB;} + .d2-3900808105 .color-B4{color:#CFD2DD;} + .d2-3900808105 .color-B5{color:#DEE1EB;} + .d2-3900808105 .color-B6{color:#EEF1F8;} + .d2-3900808105 .color-AA2{color:#676C7E;} + .d2-3900808105 .color-AA4{color:#CFD2DD;} + .d2-3900808105 .color-AA5{color:#DEE1EB;} + .d2-3900808105 .color-AB4{color:#CFD2DD;} + .d2-3900808105 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3900808105);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3900808105);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3900808105);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3900808105);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3900808105);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3900808105);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3900808105);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3900808105);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3900808105);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3900808105);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3900808105);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3900808105);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -VendorBuyerRegulatorAnalysis Toolsbomify SBOMs VEX & CBOMs Compliance Documents Pentest Result TEA +VendorBuyerRegulatorAnalysis Toolsbomify SBOMs VEX & CBOMs Compliance Documents Pentest Result TEA diff --git a/assets/images/d2/sbom-management-lifecycle.svg b/assets/images/d2/sbom-management-lifecycle.svg index c8cb8cbd..6831a02f 100644 --- a/assets/images/d2/sbom-management-lifecycle.svg +++ b/assets/images/d2/sbom-management-lifecycle.svg @@ -1,9 +1,9 @@ - + .d2-2776275381 .fill-N1{fill:#0A0F25;} + .d2-2776275381 .fill-N2{fill:#676C7E;} + .d2-2776275381 .fill-N3{fill:#9499AB;} + .d2-2776275381 .fill-N4{fill:#CFD2DD;} + .d2-2776275381 .fill-N5{fill:#DEE1EB;} + .d2-2776275381 .fill-N6{fill:#EEF1F8;} + .d2-2776275381 .fill-N7{fill:#FFFFFF;} + .d2-2776275381 .fill-B1{fill:#0A0F25;} + .d2-2776275381 .fill-B2{fill:#676C7E;} + .d2-2776275381 .fill-B3{fill:#9499AB;} + .d2-2776275381 .fill-B4{fill:#CFD2DD;} + .d2-2776275381 .fill-B5{fill:#DEE1EB;} + .d2-2776275381 .fill-B6{fill:#EEF1F8;} + .d2-2776275381 .fill-AA2{fill:#676C7E;} + .d2-2776275381 .fill-AA4{fill:#CFD2DD;} + .d2-2776275381 .fill-AA5{fill:#DEE1EB;} + .d2-2776275381 .fill-AB4{fill:#CFD2DD;} + .d2-2776275381 .fill-AB5{fill:#DEE1EB;} + .d2-2776275381 .stroke-N1{stroke:#0A0F25;} + .d2-2776275381 .stroke-N2{stroke:#676C7E;} + .d2-2776275381 .stroke-N3{stroke:#9499AB;} + .d2-2776275381 .stroke-N4{stroke:#CFD2DD;} + .d2-2776275381 .stroke-N5{stroke:#DEE1EB;} + .d2-2776275381 .stroke-N6{stroke:#EEF1F8;} + .d2-2776275381 .stroke-N7{stroke:#FFFFFF;} + .d2-2776275381 .stroke-B1{stroke:#0A0F25;} + .d2-2776275381 .stroke-B2{stroke:#676C7E;} + .d2-2776275381 .stroke-B3{stroke:#9499AB;} + .d2-2776275381 .stroke-B4{stroke:#CFD2DD;} + .d2-2776275381 .stroke-B5{stroke:#DEE1EB;} + .d2-2776275381 .stroke-B6{stroke:#EEF1F8;} + .d2-2776275381 .stroke-AA2{stroke:#676C7E;} + .d2-2776275381 .stroke-AA4{stroke:#CFD2DD;} + .d2-2776275381 .stroke-AA5{stroke:#DEE1EB;} + .d2-2776275381 .stroke-AB4{stroke:#CFD2DD;} + .d2-2776275381 .stroke-AB5{stroke:#DEE1EB;} + .d2-2776275381 .background-color-N1{background-color:#0A0F25;} + .d2-2776275381 .background-color-N2{background-color:#676C7E;} + .d2-2776275381 .background-color-N3{background-color:#9499AB;} + .d2-2776275381 .background-color-N4{background-color:#CFD2DD;} + .d2-2776275381 .background-color-N5{background-color:#DEE1EB;} + .d2-2776275381 .background-color-N6{background-color:#EEF1F8;} + .d2-2776275381 .background-color-N7{background-color:#FFFFFF;} + .d2-2776275381 .background-color-B1{background-color:#0A0F25;} + .d2-2776275381 .background-color-B2{background-color:#676C7E;} + .d2-2776275381 .background-color-B3{background-color:#9499AB;} + .d2-2776275381 .background-color-B4{background-color:#CFD2DD;} + .d2-2776275381 .background-color-B5{background-color:#DEE1EB;} + .d2-2776275381 .background-color-B6{background-color:#EEF1F8;} + .d2-2776275381 .background-color-AA2{background-color:#676C7E;} + .d2-2776275381 .background-color-AA4{background-color:#CFD2DD;} + .d2-2776275381 .background-color-AA5{background-color:#DEE1EB;} + .d2-2776275381 .background-color-AB4{background-color:#CFD2DD;} + .d2-2776275381 .background-color-AB5{background-color:#DEE1EB;} + .d2-2776275381 .color-N1{color:#0A0F25;} + .d2-2776275381 .color-N2{color:#676C7E;} + .d2-2776275381 .color-N3{color:#9499AB;} + .d2-2776275381 .color-N4{color:#CFD2DD;} + .d2-2776275381 .color-N5{color:#DEE1EB;} + .d2-2776275381 .color-N6{color:#EEF1F8;} + .d2-2776275381 .color-N7{color:#FFFFFF;} + .d2-2776275381 .color-B1{color:#0A0F25;} + .d2-2776275381 .color-B2{color:#676C7E;} + .d2-2776275381 .color-B3{color:#9499AB;} + .d2-2776275381 .color-B4{color:#CFD2DD;} + .d2-2776275381 .color-B5{color:#DEE1EB;} + .d2-2776275381 .color-B6{color:#EEF1F8;} + .d2-2776275381 .color-AA2{color:#676C7E;} + .d2-2776275381 .color-AA4{color:#CFD2DD;} + .d2-2776275381 .color-AA5{color:#DEE1EB;} + .d2-2776275381 .color-AB4{color:#CFD2DD;} + .d2-2776275381 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2776275381);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-2776275381);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-2776275381);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-2776275381);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2776275381);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-2776275381);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-2776275381);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2776275381);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2776275381);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2776275381);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2776275381);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2776275381);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -GenerateStoreMonitorActCI/CDPipelineSBOM ToolSBOMRepositoryVersionTrackingVulnerabilityDatabasesLicenseComplianceAlert &TriageRemediate build triggers store match check notify prioritize update & rebuild +GenerateStoreMonitorActCI/CDPipelineSBOM ToolSBOMRepositoryVersionTrackingVulnerabilityDatabasesLicenseComplianceAlert &TriageRemediate build triggers store match check notify prioritize update & rebuild diff --git a/assets/images/d2/sbom-releases.svg b/assets/images/d2/sbom-releases.svg index 9d3a483f..bb435720 100644 --- a/assets/images/d2/sbom-releases.svg +++ b/assets/images/d2/sbom-releases.svg @@ -1,9 +1,9 @@ - + .d2-2577810341 .fill-N1{fill:#0A0F25;} + .d2-2577810341 .fill-N2{fill:#676C7E;} + .d2-2577810341 .fill-N3{fill:#9499AB;} + .d2-2577810341 .fill-N4{fill:#CFD2DD;} + .d2-2577810341 .fill-N5{fill:#DEE1EB;} + .d2-2577810341 .fill-N6{fill:#EEF1F8;} + .d2-2577810341 .fill-N7{fill:#FFFFFF;} + .d2-2577810341 .fill-B1{fill:#0A0F25;} + .d2-2577810341 .fill-B2{fill:#676C7E;} + .d2-2577810341 .fill-B3{fill:#9499AB;} + .d2-2577810341 .fill-B4{fill:#CFD2DD;} + .d2-2577810341 .fill-B5{fill:#DEE1EB;} + .d2-2577810341 .fill-B6{fill:#EEF1F8;} + .d2-2577810341 .fill-AA2{fill:#676C7E;} + .d2-2577810341 .fill-AA4{fill:#CFD2DD;} + .d2-2577810341 .fill-AA5{fill:#DEE1EB;} + .d2-2577810341 .fill-AB4{fill:#CFD2DD;} + .d2-2577810341 .fill-AB5{fill:#DEE1EB;} + .d2-2577810341 .stroke-N1{stroke:#0A0F25;} + .d2-2577810341 .stroke-N2{stroke:#676C7E;} + .d2-2577810341 .stroke-N3{stroke:#9499AB;} + .d2-2577810341 .stroke-N4{stroke:#CFD2DD;} + .d2-2577810341 .stroke-N5{stroke:#DEE1EB;} + .d2-2577810341 .stroke-N6{stroke:#EEF1F8;} + .d2-2577810341 .stroke-N7{stroke:#FFFFFF;} + .d2-2577810341 .stroke-B1{stroke:#0A0F25;} + .d2-2577810341 .stroke-B2{stroke:#676C7E;} + .d2-2577810341 .stroke-B3{stroke:#9499AB;} + .d2-2577810341 .stroke-B4{stroke:#CFD2DD;} + .d2-2577810341 .stroke-B5{stroke:#DEE1EB;} + .d2-2577810341 .stroke-B6{stroke:#EEF1F8;} + .d2-2577810341 .stroke-AA2{stroke:#676C7E;} + .d2-2577810341 .stroke-AA4{stroke:#CFD2DD;} + .d2-2577810341 .stroke-AA5{stroke:#DEE1EB;} + .d2-2577810341 .stroke-AB4{stroke:#CFD2DD;} + .d2-2577810341 .stroke-AB5{stroke:#DEE1EB;} + .d2-2577810341 .background-color-N1{background-color:#0A0F25;} + .d2-2577810341 .background-color-N2{background-color:#676C7E;} + .d2-2577810341 .background-color-N3{background-color:#9499AB;} + .d2-2577810341 .background-color-N4{background-color:#CFD2DD;} + .d2-2577810341 .background-color-N5{background-color:#DEE1EB;} + .d2-2577810341 .background-color-N6{background-color:#EEF1F8;} + .d2-2577810341 .background-color-N7{background-color:#FFFFFF;} + .d2-2577810341 .background-color-B1{background-color:#0A0F25;} + .d2-2577810341 .background-color-B2{background-color:#676C7E;} + .d2-2577810341 .background-color-B3{background-color:#9499AB;} + .d2-2577810341 .background-color-B4{background-color:#CFD2DD;} + .d2-2577810341 .background-color-B5{background-color:#DEE1EB;} + .d2-2577810341 .background-color-B6{background-color:#EEF1F8;} + .d2-2577810341 .background-color-AA2{background-color:#676C7E;} + .d2-2577810341 .background-color-AA4{background-color:#CFD2DD;} + .d2-2577810341 .background-color-AA5{background-color:#DEE1EB;} + .d2-2577810341 .background-color-AB4{background-color:#CFD2DD;} + .d2-2577810341 .background-color-AB5{background-color:#DEE1EB;} + .d2-2577810341 .color-N1{color:#0A0F25;} + .d2-2577810341 .color-N2{color:#676C7E;} + .d2-2577810341 .color-N3{color:#9499AB;} + .d2-2577810341 .color-N4{color:#CFD2DD;} + .d2-2577810341 .color-N5{color:#DEE1EB;} + .d2-2577810341 .color-N6{color:#EEF1F8;} + .d2-2577810341 .color-N7{color:#FFFFFF;} + .d2-2577810341 .color-B1{color:#0A0F25;} + .d2-2577810341 .color-B2{color:#676C7E;} + .d2-2577810341 .color-B3{color:#9499AB;} + .d2-2577810341 .color-B4{color:#CFD2DD;} + .d2-2577810341 .color-B5{color:#DEE1EB;} + .d2-2577810341 .color-B6{color:#EEF1F8;} + .d2-2577810341 .color-AA2{color:#676C7E;} + .d2-2577810341 .color-AA4{color:#CFD2DD;} + .d2-2577810341 .color-AA5{color:#DEE1EB;} + .d2-2577810341 .color-AB4{color:#CFD2DD;} + .d2-2577810341 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2577810341);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-2577810341);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-2577810341);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-2577810341);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2577810341);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-2577810341);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-2577810341);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2577810341);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2577810341);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2577810341);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2577810341);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2577810341);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Product ReleasesComponent ArtifactsPayment PortalUser APIStripe Servicev2.0Stable Releasev2.1Latest Releasev1.2v1.3v4.2 Upgraded ReusedStable Release - +Product ReleasesComponent ArtifactsPayment PortalUser APIStripe Servicev2.0Stable Releasev2.1Latest Releasev1.2v1.3v4.2 Upgraded ReusedStable Release + - + Latest Release - + - + - + diff --git a/assets/images/d2/sbom-sharing.svg b/assets/images/d2/sbom-sharing.svg index 870b38ba..1dabc675 100644 --- a/assets/images/d2/sbom-sharing.svg +++ b/assets/images/d2/sbom-sharing.svg @@ -1,9 +1,9 @@ - + .d2-4248334984 .fill-N1{fill:#0A0F25;} + .d2-4248334984 .fill-N2{fill:#676C7E;} + .d2-4248334984 .fill-N3{fill:#9499AB;} + .d2-4248334984 .fill-N4{fill:#CFD2DD;} + .d2-4248334984 .fill-N5{fill:#DEE1EB;} + .d2-4248334984 .fill-N6{fill:#EEF1F8;} + .d2-4248334984 .fill-N7{fill:#FFFFFF;} + .d2-4248334984 .fill-B1{fill:#0A0F25;} + .d2-4248334984 .fill-B2{fill:#676C7E;} + .d2-4248334984 .fill-B3{fill:#9499AB;} + .d2-4248334984 .fill-B4{fill:#CFD2DD;} + .d2-4248334984 .fill-B5{fill:#DEE1EB;} + .d2-4248334984 .fill-B6{fill:#EEF1F8;} + .d2-4248334984 .fill-AA2{fill:#676C7E;} + .d2-4248334984 .fill-AA4{fill:#CFD2DD;} + .d2-4248334984 .fill-AA5{fill:#DEE1EB;} + .d2-4248334984 .fill-AB4{fill:#CFD2DD;} + .d2-4248334984 .fill-AB5{fill:#DEE1EB;} + .d2-4248334984 .stroke-N1{stroke:#0A0F25;} + .d2-4248334984 .stroke-N2{stroke:#676C7E;} + .d2-4248334984 .stroke-N3{stroke:#9499AB;} + .d2-4248334984 .stroke-N4{stroke:#CFD2DD;} + .d2-4248334984 .stroke-N5{stroke:#DEE1EB;} + .d2-4248334984 .stroke-N6{stroke:#EEF1F8;} + .d2-4248334984 .stroke-N7{stroke:#FFFFFF;} + .d2-4248334984 .stroke-B1{stroke:#0A0F25;} + .d2-4248334984 .stroke-B2{stroke:#676C7E;} + .d2-4248334984 .stroke-B3{stroke:#9499AB;} + .d2-4248334984 .stroke-B4{stroke:#CFD2DD;} + .d2-4248334984 .stroke-B5{stroke:#DEE1EB;} + .d2-4248334984 .stroke-B6{stroke:#EEF1F8;} + .d2-4248334984 .stroke-AA2{stroke:#676C7E;} + .d2-4248334984 .stroke-AA4{stroke:#CFD2DD;} + .d2-4248334984 .stroke-AA5{stroke:#DEE1EB;} + .d2-4248334984 .stroke-AB4{stroke:#CFD2DD;} + .d2-4248334984 .stroke-AB5{stroke:#DEE1EB;} + .d2-4248334984 .background-color-N1{background-color:#0A0F25;} + .d2-4248334984 .background-color-N2{background-color:#676C7E;} + .d2-4248334984 .background-color-N3{background-color:#9499AB;} + .d2-4248334984 .background-color-N4{background-color:#CFD2DD;} + .d2-4248334984 .background-color-N5{background-color:#DEE1EB;} + .d2-4248334984 .background-color-N6{background-color:#EEF1F8;} + .d2-4248334984 .background-color-N7{background-color:#FFFFFF;} + .d2-4248334984 .background-color-B1{background-color:#0A0F25;} + .d2-4248334984 .background-color-B2{background-color:#676C7E;} + .d2-4248334984 .background-color-B3{background-color:#9499AB;} + .d2-4248334984 .background-color-B4{background-color:#CFD2DD;} + .d2-4248334984 .background-color-B5{background-color:#DEE1EB;} + .d2-4248334984 .background-color-B6{background-color:#EEF1F8;} + .d2-4248334984 .background-color-AA2{background-color:#676C7E;} + .d2-4248334984 .background-color-AA4{background-color:#CFD2DD;} + .d2-4248334984 .background-color-AA5{background-color:#DEE1EB;} + .d2-4248334984 .background-color-AB4{background-color:#CFD2DD;} + .d2-4248334984 .background-color-AB5{background-color:#DEE1EB;} + .d2-4248334984 .color-N1{color:#0A0F25;} + .d2-4248334984 .color-N2{color:#676C7E;} + .d2-4248334984 .color-N3{color:#9499AB;} + .d2-4248334984 .color-N4{color:#CFD2DD;} + .d2-4248334984 .color-N5{color:#DEE1EB;} + .d2-4248334984 .color-N6{color:#EEF1F8;} + .d2-4248334984 .color-N7{color:#FFFFFF;} + .d2-4248334984 .color-B1{color:#0A0F25;} + .d2-4248334984 .color-B2{color:#676C7E;} + .d2-4248334984 .color-B3{color:#9499AB;} + .d2-4248334984 .color-B4{color:#CFD2DD;} + .d2-4248334984 .color-B5{color:#DEE1EB;} + .d2-4248334984 .color-B6{color:#EEF1F8;} + .d2-4248334984 .color-AA2{color:#676C7E;} + .d2-4248334984 .color-AA4{color:#CFD2DD;} + .d2-4248334984 .color-AA5{color:#DEE1EB;} + .d2-4248334984 .color-AB4{color:#CFD2DD;} + .d2-4248334984 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-4248334984);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-4248334984);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-4248334984);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-4248334984);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-4248334984);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-4248334984);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-4248334984);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-4248334984);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-4248334984);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-4248334984);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-4248334984);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-4248334984);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -SupplierssbomifyStakeholdersVendor AVendor BCI/CDCustomersAuditorsInternal Teams SBOMs SBOMs Upload Trust Center Export Dashboard +SupplierssbomifyStakeholdersVendor AVendor BCI/CDCustomersAuditorsInternal Teams SBOMs SBOMs Upload Trust Center Export Dashboard diff --git a/assets/images/d2/sbomify-action-flow.svg b/assets/images/d2/sbomify-action-flow.svg index 96144226..4d7ba60c 100644 --- a/assets/images/d2/sbomify-action-flow.svg +++ b/assets/images/d2/sbomify-action-flow.svg @@ -1,9 +1,9 @@ - + .d2-584619280 .fill-N1{fill:#0A0F25;} + .d2-584619280 .fill-N2{fill:#676C7E;} + .d2-584619280 .fill-N3{fill:#9499AB;} + .d2-584619280 .fill-N4{fill:#CFD2DD;} + .d2-584619280 .fill-N5{fill:#DEE1EB;} + .d2-584619280 .fill-N6{fill:#EEF1F8;} + .d2-584619280 .fill-N7{fill:#FFFFFF;} + .d2-584619280 .fill-B1{fill:#0A0F25;} + .d2-584619280 .fill-B2{fill:#676C7E;} + .d2-584619280 .fill-B3{fill:#9499AB;} + .d2-584619280 .fill-B4{fill:#CFD2DD;} + .d2-584619280 .fill-B5{fill:#DEE1EB;} + .d2-584619280 .fill-B6{fill:#EEF1F8;} + .d2-584619280 .fill-AA2{fill:#676C7E;} + .d2-584619280 .fill-AA4{fill:#CFD2DD;} + .d2-584619280 .fill-AA5{fill:#DEE1EB;} + .d2-584619280 .fill-AB4{fill:#CFD2DD;} + .d2-584619280 .fill-AB5{fill:#DEE1EB;} + .d2-584619280 .stroke-N1{stroke:#0A0F25;} + .d2-584619280 .stroke-N2{stroke:#676C7E;} + .d2-584619280 .stroke-N3{stroke:#9499AB;} + .d2-584619280 .stroke-N4{stroke:#CFD2DD;} + .d2-584619280 .stroke-N5{stroke:#DEE1EB;} + .d2-584619280 .stroke-N6{stroke:#EEF1F8;} + .d2-584619280 .stroke-N7{stroke:#FFFFFF;} + .d2-584619280 .stroke-B1{stroke:#0A0F25;} + .d2-584619280 .stroke-B2{stroke:#676C7E;} + .d2-584619280 .stroke-B3{stroke:#9499AB;} + .d2-584619280 .stroke-B4{stroke:#CFD2DD;} + .d2-584619280 .stroke-B5{stroke:#DEE1EB;} + .d2-584619280 .stroke-B6{stroke:#EEF1F8;} + .d2-584619280 .stroke-AA2{stroke:#676C7E;} + .d2-584619280 .stroke-AA4{stroke:#CFD2DD;} + .d2-584619280 .stroke-AA5{stroke:#DEE1EB;} + .d2-584619280 .stroke-AB4{stroke:#CFD2DD;} + .d2-584619280 .stroke-AB5{stroke:#DEE1EB;} + .d2-584619280 .background-color-N1{background-color:#0A0F25;} + .d2-584619280 .background-color-N2{background-color:#676C7E;} + .d2-584619280 .background-color-N3{background-color:#9499AB;} + .d2-584619280 .background-color-N4{background-color:#CFD2DD;} + .d2-584619280 .background-color-N5{background-color:#DEE1EB;} + .d2-584619280 .background-color-N6{background-color:#EEF1F8;} + .d2-584619280 .background-color-N7{background-color:#FFFFFF;} + .d2-584619280 .background-color-B1{background-color:#0A0F25;} + .d2-584619280 .background-color-B2{background-color:#676C7E;} + .d2-584619280 .background-color-B3{background-color:#9499AB;} + .d2-584619280 .background-color-B4{background-color:#CFD2DD;} + .d2-584619280 .background-color-B5{background-color:#DEE1EB;} + .d2-584619280 .background-color-B6{background-color:#EEF1F8;} + .d2-584619280 .background-color-AA2{background-color:#676C7E;} + .d2-584619280 .background-color-AA4{background-color:#CFD2DD;} + .d2-584619280 .background-color-AA5{background-color:#DEE1EB;} + .d2-584619280 .background-color-AB4{background-color:#CFD2DD;} + .d2-584619280 .background-color-AB5{background-color:#DEE1EB;} + .d2-584619280 .color-N1{color:#0A0F25;} + .d2-584619280 .color-N2{color:#676C7E;} + .d2-584619280 .color-N3{color:#9499AB;} + .d2-584619280 .color-N4{color:#CFD2DD;} + .d2-584619280 .color-N5{color:#DEE1EB;} + .d2-584619280 .color-N6{color:#EEF1F8;} + .d2-584619280 .color-N7{color:#FFFFFF;} + .d2-584619280 .color-B1{color:#0A0F25;} + .d2-584619280 .color-B2{color:#676C7E;} + .d2-584619280 .color-B3{color:#9499AB;} + .d2-584619280 .color-B4{color:#CFD2DD;} + .d2-584619280 .color-B5{color:#DEE1EB;} + .d2-584619280 .color-B6{color:#EEF1F8;} + .d2-584619280 .color-AA2{color:#676C7E;} + .d2-584619280 .color-AA4{color:#CFD2DD;} + .d2-584619280 .color-AA5{color:#DEE1EB;} + .d2-584619280 .color-AB4{color:#CFD2DD;} + .d2-584619280 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-584619280);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-584619280);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-584619280);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-584619280);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-584619280);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-584619280);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-584619280);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-584619280);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-584619280);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-584619280);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-584619280);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-584619280);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Your Codesbomify actionGenerateAugmentEnrichCompliance-ReadyRegulation ChecksVerify Attestation +Your Codesbomify actionGenerateAugmentEnrichCompliance-ReadyRegulation ChecksVerify Attestation diff --git a/assets/images/d2/sca-workflow.svg b/assets/images/d2/sca-workflow.svg index 689266d7..57452d46 100644 --- a/assets/images/d2/sca-workflow.svg +++ b/assets/images/d2/sca-workflow.svg @@ -1,9 +1,9 @@ - + .d2-2769809828 .fill-N1{fill:#0A0F25;} + .d2-2769809828 .fill-N2{fill:#676C7E;} + .d2-2769809828 .fill-N3{fill:#9499AB;} + .d2-2769809828 .fill-N4{fill:#CFD2DD;} + .d2-2769809828 .fill-N5{fill:#DEE1EB;} + .d2-2769809828 .fill-N6{fill:#EEF1F8;} + .d2-2769809828 .fill-N7{fill:#FFFFFF;} + .d2-2769809828 .fill-B1{fill:#0A0F25;} + .d2-2769809828 .fill-B2{fill:#676C7E;} + .d2-2769809828 .fill-B3{fill:#9499AB;} + .d2-2769809828 .fill-B4{fill:#CFD2DD;} + .d2-2769809828 .fill-B5{fill:#DEE1EB;} + .d2-2769809828 .fill-B6{fill:#EEF1F8;} + .d2-2769809828 .fill-AA2{fill:#676C7E;} + .d2-2769809828 .fill-AA4{fill:#CFD2DD;} + .d2-2769809828 .fill-AA5{fill:#DEE1EB;} + .d2-2769809828 .fill-AB4{fill:#CFD2DD;} + .d2-2769809828 .fill-AB5{fill:#DEE1EB;} + .d2-2769809828 .stroke-N1{stroke:#0A0F25;} + .d2-2769809828 .stroke-N2{stroke:#676C7E;} + .d2-2769809828 .stroke-N3{stroke:#9499AB;} + .d2-2769809828 .stroke-N4{stroke:#CFD2DD;} + .d2-2769809828 .stroke-N5{stroke:#DEE1EB;} + .d2-2769809828 .stroke-N6{stroke:#EEF1F8;} + .d2-2769809828 .stroke-N7{stroke:#FFFFFF;} + .d2-2769809828 .stroke-B1{stroke:#0A0F25;} + .d2-2769809828 .stroke-B2{stroke:#676C7E;} + .d2-2769809828 .stroke-B3{stroke:#9499AB;} + .d2-2769809828 .stroke-B4{stroke:#CFD2DD;} + .d2-2769809828 .stroke-B5{stroke:#DEE1EB;} + .d2-2769809828 .stroke-B6{stroke:#EEF1F8;} + .d2-2769809828 .stroke-AA2{stroke:#676C7E;} + .d2-2769809828 .stroke-AA4{stroke:#CFD2DD;} + .d2-2769809828 .stroke-AA5{stroke:#DEE1EB;} + .d2-2769809828 .stroke-AB4{stroke:#CFD2DD;} + .d2-2769809828 .stroke-AB5{stroke:#DEE1EB;} + .d2-2769809828 .background-color-N1{background-color:#0A0F25;} + .d2-2769809828 .background-color-N2{background-color:#676C7E;} + .d2-2769809828 .background-color-N3{background-color:#9499AB;} + .d2-2769809828 .background-color-N4{background-color:#CFD2DD;} + .d2-2769809828 .background-color-N5{background-color:#DEE1EB;} + .d2-2769809828 .background-color-N6{background-color:#EEF1F8;} + .d2-2769809828 .background-color-N7{background-color:#FFFFFF;} + .d2-2769809828 .background-color-B1{background-color:#0A0F25;} + .d2-2769809828 .background-color-B2{background-color:#676C7E;} + .d2-2769809828 .background-color-B3{background-color:#9499AB;} + .d2-2769809828 .background-color-B4{background-color:#CFD2DD;} + .d2-2769809828 .background-color-B5{background-color:#DEE1EB;} + .d2-2769809828 .background-color-B6{background-color:#EEF1F8;} + .d2-2769809828 .background-color-AA2{background-color:#676C7E;} + .d2-2769809828 .background-color-AA4{background-color:#CFD2DD;} + .d2-2769809828 .background-color-AA5{background-color:#DEE1EB;} + .d2-2769809828 .background-color-AB4{background-color:#CFD2DD;} + .d2-2769809828 .background-color-AB5{background-color:#DEE1EB;} + .d2-2769809828 .color-N1{color:#0A0F25;} + .d2-2769809828 .color-N2{color:#676C7E;} + .d2-2769809828 .color-N3{color:#9499AB;} + .d2-2769809828 .color-N4{color:#CFD2DD;} + .d2-2769809828 .color-N5{color:#DEE1EB;} + .d2-2769809828 .color-N6{color:#EEF1F8;} + .d2-2769809828 .color-N7{color:#FFFFFF;} + .d2-2769809828 .color-B1{color:#0A0F25;} + .d2-2769809828 .color-B2{color:#676C7E;} + .d2-2769809828 .color-B3{color:#9499AB;} + .d2-2769809828 .color-B4{color:#CFD2DD;} + .d2-2769809828 .color-B5{color:#DEE1EB;} + .d2-2769809828 .color-B6{color:#EEF1F8;} + .d2-2769809828 .color-AA2{color:#676C7E;} + .d2-2769809828 .color-AA4{color:#CFD2DD;} + .d2-2769809828 .color-AA5{color:#DEE1EB;} + .d2-2769809828 .color-AB4{color:#CFD2DD;} + .d2-2769809828 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2769809828);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-2769809828);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-2769809828);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-2769809828);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2769809828);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-2769809828);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-2769809828);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2769809828);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2769809828);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2769809828);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2769809828);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2769809828);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Source CodeDependencyManifestsSCA ToolComponentInventoryVulnerabilityDatabasesSBOMResultsVulnerabilitiesLicenseReport scan parse identify export match flag check +Source CodeDependencyManifestsSCA ToolComponentInventoryVulnerabilityDatabasesSBOMResultsVulnerabilitiesLicenseReport scan parse identify export match flag check diff --git a/assets/images/d2/screenly-hierarchy.svg b/assets/images/d2/screenly-hierarchy.svg index 1360aab6..eecab4fe 100644 --- a/assets/images/d2/screenly-hierarchy.svg +++ b/assets/images/d2/screenly-hierarchy.svg @@ -1,9 +1,9 @@ - + .d2-4009445917 .fill-N1{fill:#0A0F25;} + .d2-4009445917 .fill-N2{fill:#676C7E;} + .d2-4009445917 .fill-N3{fill:#9499AB;} + .d2-4009445917 .fill-N4{fill:#CFD2DD;} + .d2-4009445917 .fill-N5{fill:#DEE1EB;} + .d2-4009445917 .fill-N6{fill:#EEF1F8;} + .d2-4009445917 .fill-N7{fill:#FFFFFF;} + .d2-4009445917 .fill-B1{fill:#0A0F25;} + .d2-4009445917 .fill-B2{fill:#676C7E;} + .d2-4009445917 .fill-B3{fill:#9499AB;} + .d2-4009445917 .fill-B4{fill:#CFD2DD;} + .d2-4009445917 .fill-B5{fill:#DEE1EB;} + .d2-4009445917 .fill-B6{fill:#EEF1F8;} + .d2-4009445917 .fill-AA2{fill:#676C7E;} + .d2-4009445917 .fill-AA4{fill:#CFD2DD;} + .d2-4009445917 .fill-AA5{fill:#DEE1EB;} + .d2-4009445917 .fill-AB4{fill:#CFD2DD;} + .d2-4009445917 .fill-AB5{fill:#DEE1EB;} + .d2-4009445917 .stroke-N1{stroke:#0A0F25;} + .d2-4009445917 .stroke-N2{stroke:#676C7E;} + .d2-4009445917 .stroke-N3{stroke:#9499AB;} + .d2-4009445917 .stroke-N4{stroke:#CFD2DD;} + .d2-4009445917 .stroke-N5{stroke:#DEE1EB;} + .d2-4009445917 .stroke-N6{stroke:#EEF1F8;} + .d2-4009445917 .stroke-N7{stroke:#FFFFFF;} + .d2-4009445917 .stroke-B1{stroke:#0A0F25;} + .d2-4009445917 .stroke-B2{stroke:#676C7E;} + .d2-4009445917 .stroke-B3{stroke:#9499AB;} + .d2-4009445917 .stroke-B4{stroke:#CFD2DD;} + .d2-4009445917 .stroke-B5{stroke:#DEE1EB;} + .d2-4009445917 .stroke-B6{stroke:#EEF1F8;} + .d2-4009445917 .stroke-AA2{stroke:#676C7E;} + .d2-4009445917 .stroke-AA4{stroke:#CFD2DD;} + .d2-4009445917 .stroke-AA5{stroke:#DEE1EB;} + .d2-4009445917 .stroke-AB4{stroke:#CFD2DD;} + .d2-4009445917 .stroke-AB5{stroke:#DEE1EB;} + .d2-4009445917 .background-color-N1{background-color:#0A0F25;} + .d2-4009445917 .background-color-N2{background-color:#676C7E;} + .d2-4009445917 .background-color-N3{background-color:#9499AB;} + .d2-4009445917 .background-color-N4{background-color:#CFD2DD;} + .d2-4009445917 .background-color-N5{background-color:#DEE1EB;} + .d2-4009445917 .background-color-N6{background-color:#EEF1F8;} + .d2-4009445917 .background-color-N7{background-color:#FFFFFF;} + .d2-4009445917 .background-color-B1{background-color:#0A0F25;} + .d2-4009445917 .background-color-B2{background-color:#676C7E;} + .d2-4009445917 .background-color-B3{background-color:#9499AB;} + .d2-4009445917 .background-color-B4{background-color:#CFD2DD;} + .d2-4009445917 .background-color-B5{background-color:#DEE1EB;} + .d2-4009445917 .background-color-B6{background-color:#EEF1F8;} + .d2-4009445917 .background-color-AA2{background-color:#676C7E;} + .d2-4009445917 .background-color-AA4{background-color:#CFD2DD;} + .d2-4009445917 .background-color-AA5{background-color:#DEE1EB;} + .d2-4009445917 .background-color-AB4{background-color:#CFD2DD;} + .d2-4009445917 .background-color-AB5{background-color:#DEE1EB;} + .d2-4009445917 .color-N1{color:#0A0F25;} + .d2-4009445917 .color-N2{color:#676C7E;} + .d2-4009445917 .color-N3{color:#9499AB;} + .d2-4009445917 .color-N4{color:#CFD2DD;} + .d2-4009445917 .color-N5{color:#DEE1EB;} + .d2-4009445917 .color-N6{color:#EEF1F8;} + .d2-4009445917 .color-N7{color:#FFFFFF;} + .d2-4009445917 .color-B1{color:#0A0F25;} + .d2-4009445917 .color-B2{color:#676C7E;} + .d2-4009445917 .color-B3{color:#9499AB;} + .d2-4009445917 .color-B4{color:#CFD2DD;} + .d2-4009445917 .color-B5{color:#DEE1EB;} + .d2-4009445917 .color-B6{color:#EEF1F8;} + .d2-4009445917 .color-AA2{color:#676C7E;} + .d2-4009445917 .color-AA4{color:#CFD2DD;} + .d2-4009445917 .color-AA5{color:#DEE1EB;} + .d2-4009445917 .color-AB4{color:#CFD2DD;} + .d2-4009445917 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-4009445917);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-4009445917);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-4009445917);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-4009445917);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-4009445917);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-4009445917);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-4009445917);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-4009445917);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-4009445917);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-4009445917);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-4009445917);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-4009445917);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Product SBOMComponent SBOM(s)ScreenlyJS SBOMPython Backend SBOMDocker SBOMRust SBOMPython Player SBOMQT SBOMOS SBOM +Product SBOMComponent SBOM(s)ScreenlyJS SBOMPython Backend SBOMDocker SBOMRust SBOMPython Player SBOMQT SBOMOS SBOM diff --git a/assets/images/d2/sdlc-sbom.svg b/assets/images/d2/sdlc-sbom.svg index ab5284af..93d05b20 100644 --- a/assets/images/d2/sdlc-sbom.svg +++ b/assets/images/d2/sdlc-sbom.svg @@ -1,26 +1,26 @@ - + .d2-518603412 .fill-N1{fill:#0A0F25;} + .d2-518603412 .fill-N2{fill:#676C7E;} + .d2-518603412 .fill-N3{fill:#9499AB;} + .d2-518603412 .fill-N4{fill:#CFD2DD;} + .d2-518603412 .fill-N5{fill:#DEE1EB;} + .d2-518603412 .fill-N6{fill:#EEF1F8;} + .d2-518603412 .fill-N7{fill:#FFFFFF;} + .d2-518603412 .fill-B1{fill:#0A0F25;} + .d2-518603412 .fill-B2{fill:#676C7E;} + .d2-518603412 .fill-B3{fill:#9499AB;} + .d2-518603412 .fill-B4{fill:#CFD2DD;} + .d2-518603412 .fill-B5{fill:#DEE1EB;} + .d2-518603412 .fill-B6{fill:#EEF1F8;} + .d2-518603412 .fill-AA2{fill:#676C7E;} + .d2-518603412 .fill-AA4{fill:#CFD2DD;} + .d2-518603412 .fill-AA5{fill:#DEE1EB;} + .d2-518603412 .fill-AB4{fill:#CFD2DD;} + .d2-518603412 .fill-AB5{fill:#DEE1EB;} + .d2-518603412 .stroke-N1{stroke:#0A0F25;} + .d2-518603412 .stroke-N2{stroke:#676C7E;} + .d2-518603412 .stroke-N3{stroke:#9499AB;} + .d2-518603412 .stroke-N4{stroke:#CFD2DD;} + .d2-518603412 .stroke-N5{stroke:#DEE1EB;} + .d2-518603412 .stroke-N6{stroke:#EEF1F8;} + .d2-518603412 .stroke-N7{stroke:#FFFFFF;} + .d2-518603412 .stroke-B1{stroke:#0A0F25;} + .d2-518603412 .stroke-B2{stroke:#676C7E;} + .d2-518603412 .stroke-B3{stroke:#9499AB;} + .d2-518603412 .stroke-B4{stroke:#CFD2DD;} + .d2-518603412 .stroke-B5{stroke:#DEE1EB;} + .d2-518603412 .stroke-B6{stroke:#EEF1F8;} + .d2-518603412 .stroke-AA2{stroke:#676C7E;} + .d2-518603412 .stroke-AA4{stroke:#CFD2DD;} + .d2-518603412 .stroke-AA5{stroke:#DEE1EB;} + .d2-518603412 .stroke-AB4{stroke:#CFD2DD;} + .d2-518603412 .stroke-AB5{stroke:#DEE1EB;} + .d2-518603412 .background-color-N1{background-color:#0A0F25;} + .d2-518603412 .background-color-N2{background-color:#676C7E;} + .d2-518603412 .background-color-N3{background-color:#9499AB;} + .d2-518603412 .background-color-N4{background-color:#CFD2DD;} + .d2-518603412 .background-color-N5{background-color:#DEE1EB;} + .d2-518603412 .background-color-N6{background-color:#EEF1F8;} + .d2-518603412 .background-color-N7{background-color:#FFFFFF;} + .d2-518603412 .background-color-B1{background-color:#0A0F25;} + .d2-518603412 .background-color-B2{background-color:#676C7E;} + .d2-518603412 .background-color-B3{background-color:#9499AB;} + .d2-518603412 .background-color-B4{background-color:#CFD2DD;} + .d2-518603412 .background-color-B5{background-color:#DEE1EB;} + .d2-518603412 .background-color-B6{background-color:#EEF1F8;} + .d2-518603412 .background-color-AA2{background-color:#676C7E;} + .d2-518603412 .background-color-AA4{background-color:#CFD2DD;} + .d2-518603412 .background-color-AA5{background-color:#DEE1EB;} + .d2-518603412 .background-color-AB4{background-color:#CFD2DD;} + .d2-518603412 .background-color-AB5{background-color:#DEE1EB;} + .d2-518603412 .color-N1{color:#0A0F25;} + .d2-518603412 .color-N2{color:#676C7E;} + .d2-518603412 .color-N3{color:#9499AB;} + .d2-518603412 .color-N4{color:#CFD2DD;} + .d2-518603412 .color-N5{color:#DEE1EB;} + .d2-518603412 .color-N6{color:#EEF1F8;} + .d2-518603412 .color-N7{color:#FFFFFF;} + .d2-518603412 .color-B1{color:#0A0F25;} + .d2-518603412 .color-B2{color:#676C7E;} + .d2-518603412 .color-B3{color:#9499AB;} + .d2-518603412 .color-B4{color:#CFD2DD;} + .d2-518603412 .color-B5{color:#DEE1EB;} + .d2-518603412 .color-B6{color:#EEF1F8;} + .d2-518603412 .color-AA2{color:#676C7E;} + .d2-518603412 .color-AA4{color:#CFD2DD;} + .d2-518603412 .color-AA5{color:#DEE1EB;} + .d2-518603412 .color-AB4{color:#CFD2DD;} + .d2-518603412 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-518603412);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-518603412);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-518603412);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-518603412);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-518603412);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-518603412);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-518603412);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-518603412);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-518603412);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-518603412);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-518603412);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-518603412);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -PlanningDesignImplementation+ SBOM GenerationTesting+ Vulnerability ScanDeployment+ SBOM DistributionMaintenance+ SBOM Monitoring Feedback +PlanningDesignImplementation+ SBOM GenerationTesting+ Vulnerability ScanDeployment+ SBOM DistributionMaintenance+ SBOM Monitoring Feedback diff --git a/assets/images/d2/store-analyze-enrich.svg b/assets/images/d2/store-analyze-enrich.svg index 356307b6..1dba0ba1 100644 --- a/assets/images/d2/store-analyze-enrich.svg +++ b/assets/images/d2/store-analyze-enrich.svg @@ -1,9 +1,9 @@ - + .d2-2500594448 .fill-N1{fill:#0A0F25;} + .d2-2500594448 .fill-N2{fill:#676C7E;} + .d2-2500594448 .fill-N3{fill:#9499AB;} + .d2-2500594448 .fill-N4{fill:#CFD2DD;} + .d2-2500594448 .fill-N5{fill:#DEE1EB;} + .d2-2500594448 .fill-N6{fill:#EEF1F8;} + .d2-2500594448 .fill-N7{fill:#FFFFFF;} + .d2-2500594448 .fill-B1{fill:#0A0F25;} + .d2-2500594448 .fill-B2{fill:#676C7E;} + .d2-2500594448 .fill-B3{fill:#9499AB;} + .d2-2500594448 .fill-B4{fill:#CFD2DD;} + .d2-2500594448 .fill-B5{fill:#DEE1EB;} + .d2-2500594448 .fill-B6{fill:#EEF1F8;} + .d2-2500594448 .fill-AA2{fill:#676C7E;} + .d2-2500594448 .fill-AA4{fill:#CFD2DD;} + .d2-2500594448 .fill-AA5{fill:#DEE1EB;} + .d2-2500594448 .fill-AB4{fill:#CFD2DD;} + .d2-2500594448 .fill-AB5{fill:#DEE1EB;} + .d2-2500594448 .stroke-N1{stroke:#0A0F25;} + .d2-2500594448 .stroke-N2{stroke:#676C7E;} + .d2-2500594448 .stroke-N3{stroke:#9499AB;} + .d2-2500594448 .stroke-N4{stroke:#CFD2DD;} + .d2-2500594448 .stroke-N5{stroke:#DEE1EB;} + .d2-2500594448 .stroke-N6{stroke:#EEF1F8;} + .d2-2500594448 .stroke-N7{stroke:#FFFFFF;} + .d2-2500594448 .stroke-B1{stroke:#0A0F25;} + .d2-2500594448 .stroke-B2{stroke:#676C7E;} + .d2-2500594448 .stroke-B3{stroke:#9499AB;} + .d2-2500594448 .stroke-B4{stroke:#CFD2DD;} + .d2-2500594448 .stroke-B5{stroke:#DEE1EB;} + .d2-2500594448 .stroke-B6{stroke:#EEF1F8;} + .d2-2500594448 .stroke-AA2{stroke:#676C7E;} + .d2-2500594448 .stroke-AA4{stroke:#CFD2DD;} + .d2-2500594448 .stroke-AA5{stroke:#DEE1EB;} + .d2-2500594448 .stroke-AB4{stroke:#CFD2DD;} + .d2-2500594448 .stroke-AB5{stroke:#DEE1EB;} + .d2-2500594448 .background-color-N1{background-color:#0A0F25;} + .d2-2500594448 .background-color-N2{background-color:#676C7E;} + .d2-2500594448 .background-color-N3{background-color:#9499AB;} + .d2-2500594448 .background-color-N4{background-color:#CFD2DD;} + .d2-2500594448 .background-color-N5{background-color:#DEE1EB;} + .d2-2500594448 .background-color-N6{background-color:#EEF1F8;} + .d2-2500594448 .background-color-N7{background-color:#FFFFFF;} + .d2-2500594448 .background-color-B1{background-color:#0A0F25;} + .d2-2500594448 .background-color-B2{background-color:#676C7E;} + .d2-2500594448 .background-color-B3{background-color:#9499AB;} + .d2-2500594448 .background-color-B4{background-color:#CFD2DD;} + .d2-2500594448 .background-color-B5{background-color:#DEE1EB;} + .d2-2500594448 .background-color-B6{background-color:#EEF1F8;} + .d2-2500594448 .background-color-AA2{background-color:#676C7E;} + .d2-2500594448 .background-color-AA4{background-color:#CFD2DD;} + .d2-2500594448 .background-color-AA5{background-color:#DEE1EB;} + .d2-2500594448 .background-color-AB4{background-color:#CFD2DD;} + .d2-2500594448 .background-color-AB5{background-color:#DEE1EB;} + .d2-2500594448 .color-N1{color:#0A0F25;} + .d2-2500594448 .color-N2{color:#676C7E;} + .d2-2500594448 .color-N3{color:#9499AB;} + .d2-2500594448 .color-N4{color:#CFD2DD;} + .d2-2500594448 .color-N5{color:#DEE1EB;} + .d2-2500594448 .color-N6{color:#EEF1F8;} + .d2-2500594448 .color-N7{color:#FFFFFF;} + .d2-2500594448 .color-B1{color:#0A0F25;} + .d2-2500594448 .color-B2{color:#676C7E;} + .d2-2500594448 .color-B3{color:#9499AB;} + .d2-2500594448 .color-B4{color:#CFD2DD;} + .d2-2500594448 .color-B5{color:#DEE1EB;} + .d2-2500594448 .color-B6{color:#EEF1F8;} + .d2-2500594448 .color-AA2{color:#676C7E;} + .d2-2500594448 .color-AA4{color:#CFD2DD;} + .d2-2500594448 .color-AA5{color:#DEE1EB;} + .d2-2500594448 .color-AB4{color:#CFD2DD;} + .d2-2500594448 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2500594448);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-2500594448);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-2500594448);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-2500594448);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2500594448);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-2500594448);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-2500594448);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2500594448);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2500594448);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2500594448);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2500594448);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2500594448);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -CI/CD PipelinesbomifyAnalysisGenerateAugment & EnrichSign Upload Sync +CI/CD PipelinesbomifyAnalysisGenerateAugment & EnrichSign Upload Sync diff --git a/assets/images/d2/supply-chain-risk.svg b/assets/images/d2/supply-chain-risk.svg index 11636217..a416e93a 100644 --- a/assets/images/d2/supply-chain-risk.svg +++ b/assets/images/d2/supply-chain-risk.svg @@ -1,9 +1,9 @@ - + .d2-1970531301 .fill-N1{fill:#0A0F25;} + .d2-1970531301 .fill-N2{fill:#676C7E;} + .d2-1970531301 .fill-N3{fill:#9499AB;} + .d2-1970531301 .fill-N4{fill:#CFD2DD;} + .d2-1970531301 .fill-N5{fill:#DEE1EB;} + .d2-1970531301 .fill-N6{fill:#EEF1F8;} + .d2-1970531301 .fill-N7{fill:#FFFFFF;} + .d2-1970531301 .fill-B1{fill:#0A0F25;} + .d2-1970531301 .fill-B2{fill:#676C7E;} + .d2-1970531301 .fill-B3{fill:#9499AB;} + .d2-1970531301 .fill-B4{fill:#CFD2DD;} + .d2-1970531301 .fill-B5{fill:#DEE1EB;} + .d2-1970531301 .fill-B6{fill:#EEF1F8;} + .d2-1970531301 .fill-AA2{fill:#676C7E;} + .d2-1970531301 .fill-AA4{fill:#CFD2DD;} + .d2-1970531301 .fill-AA5{fill:#DEE1EB;} + .d2-1970531301 .fill-AB4{fill:#CFD2DD;} + .d2-1970531301 .fill-AB5{fill:#DEE1EB;} + .d2-1970531301 .stroke-N1{stroke:#0A0F25;} + .d2-1970531301 .stroke-N2{stroke:#676C7E;} + .d2-1970531301 .stroke-N3{stroke:#9499AB;} + .d2-1970531301 .stroke-N4{stroke:#CFD2DD;} + .d2-1970531301 .stroke-N5{stroke:#DEE1EB;} + .d2-1970531301 .stroke-N6{stroke:#EEF1F8;} + .d2-1970531301 .stroke-N7{stroke:#FFFFFF;} + .d2-1970531301 .stroke-B1{stroke:#0A0F25;} + .d2-1970531301 .stroke-B2{stroke:#676C7E;} + .d2-1970531301 .stroke-B3{stroke:#9499AB;} + .d2-1970531301 .stroke-B4{stroke:#CFD2DD;} + .d2-1970531301 .stroke-B5{stroke:#DEE1EB;} + .d2-1970531301 .stroke-B6{stroke:#EEF1F8;} + .d2-1970531301 .stroke-AA2{stroke:#676C7E;} + .d2-1970531301 .stroke-AA4{stroke:#CFD2DD;} + .d2-1970531301 .stroke-AA5{stroke:#DEE1EB;} + .d2-1970531301 .stroke-AB4{stroke:#CFD2DD;} + .d2-1970531301 .stroke-AB5{stroke:#DEE1EB;} + .d2-1970531301 .background-color-N1{background-color:#0A0F25;} + .d2-1970531301 .background-color-N2{background-color:#676C7E;} + .d2-1970531301 .background-color-N3{background-color:#9499AB;} + .d2-1970531301 .background-color-N4{background-color:#CFD2DD;} + .d2-1970531301 .background-color-N5{background-color:#DEE1EB;} + .d2-1970531301 .background-color-N6{background-color:#EEF1F8;} + .d2-1970531301 .background-color-N7{background-color:#FFFFFF;} + .d2-1970531301 .background-color-B1{background-color:#0A0F25;} + .d2-1970531301 .background-color-B2{background-color:#676C7E;} + .d2-1970531301 .background-color-B3{background-color:#9499AB;} + .d2-1970531301 .background-color-B4{background-color:#CFD2DD;} + .d2-1970531301 .background-color-B5{background-color:#DEE1EB;} + .d2-1970531301 .background-color-B6{background-color:#EEF1F8;} + .d2-1970531301 .background-color-AA2{background-color:#676C7E;} + .d2-1970531301 .background-color-AA4{background-color:#CFD2DD;} + .d2-1970531301 .background-color-AA5{background-color:#DEE1EB;} + .d2-1970531301 .background-color-AB4{background-color:#CFD2DD;} + .d2-1970531301 .background-color-AB5{background-color:#DEE1EB;} + .d2-1970531301 .color-N1{color:#0A0F25;} + .d2-1970531301 .color-N2{color:#676C7E;} + .d2-1970531301 .color-N3{color:#9499AB;} + .d2-1970531301 .color-N4{color:#CFD2DD;} + .d2-1970531301 .color-N5{color:#DEE1EB;} + .d2-1970531301 .color-N6{color:#EEF1F8;} + .d2-1970531301 .color-N7{color:#FFFFFF;} + .d2-1970531301 .color-B1{color:#0A0F25;} + .d2-1970531301 .color-B2{color:#676C7E;} + .d2-1970531301 .color-B3{color:#9499AB;} + .d2-1970531301 .color-B4{color:#CFD2DD;} + .d2-1970531301 .color-B5{color:#DEE1EB;} + .d2-1970531301 .color-B6{color:#EEF1F8;} + .d2-1970531301 .color-AA2{color:#676C7E;} + .d2-1970531301 .color-AA4{color:#CFD2DD;} + .d2-1970531301 .color-AA5{color:#DEE1EB;} + .d2-1970531301 .color-AB4{color:#CFD2DD;} + .d2-1970531301 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1970531301);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-1970531301);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-1970531301);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-1970531301);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1970531301);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-1970531301);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-1970531301);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1970531301);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1970531301);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1970531301);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1970531301);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1970531301);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Upstream Supply ChainBuild & IntegrationDownstream DistributionOpen SourceRepositoriesPackageRegistriesCI/CD PipelineSBOMGenerationReleaseArtifactConsumers &Customers Dependencies Ship with SBOM +Upstream Supply ChainBuild & IntegrationDownstream DistributionOpen SourceRepositoriesPackageRegistriesCI/CD PipelineSBOMGenerationReleaseArtifactConsumers &Customers Dependencies Ship with SBOM diff --git a/assets/images/d2/tea-flow.svg b/assets/images/d2/tea-flow.svg index d5a5db77..1fb8aec5 100644 --- a/assets/images/d2/tea-flow.svg +++ b/assets/images/d2/tea-flow.svg @@ -1,9 +1,9 @@ - + .d2-1043555754 .fill-N1{fill:#0A0F25;} + .d2-1043555754 .fill-N2{fill:#676C7E;} + .d2-1043555754 .fill-N3{fill:#9499AB;} + .d2-1043555754 .fill-N4{fill:#CFD2DD;} + .d2-1043555754 .fill-N5{fill:#DEE1EB;} + .d2-1043555754 .fill-N6{fill:#EEF1F8;} + .d2-1043555754 .fill-N7{fill:#FFFFFF;} + .d2-1043555754 .fill-B1{fill:#0A0F25;} + .d2-1043555754 .fill-B2{fill:#676C7E;} + .d2-1043555754 .fill-B3{fill:#9499AB;} + .d2-1043555754 .fill-B4{fill:#CFD2DD;} + .d2-1043555754 .fill-B5{fill:#DEE1EB;} + .d2-1043555754 .fill-B6{fill:#EEF1F8;} + .d2-1043555754 .fill-AA2{fill:#676C7E;} + .d2-1043555754 .fill-AA4{fill:#CFD2DD;} + .d2-1043555754 .fill-AA5{fill:#DEE1EB;} + .d2-1043555754 .fill-AB4{fill:#CFD2DD;} + .d2-1043555754 .fill-AB5{fill:#DEE1EB;} + .d2-1043555754 .stroke-N1{stroke:#0A0F25;} + .d2-1043555754 .stroke-N2{stroke:#676C7E;} + .d2-1043555754 .stroke-N3{stroke:#9499AB;} + .d2-1043555754 .stroke-N4{stroke:#CFD2DD;} + .d2-1043555754 .stroke-N5{stroke:#DEE1EB;} + .d2-1043555754 .stroke-N6{stroke:#EEF1F8;} + .d2-1043555754 .stroke-N7{stroke:#FFFFFF;} + .d2-1043555754 .stroke-B1{stroke:#0A0F25;} + .d2-1043555754 .stroke-B2{stroke:#676C7E;} + .d2-1043555754 .stroke-B3{stroke:#9499AB;} + .d2-1043555754 .stroke-B4{stroke:#CFD2DD;} + .d2-1043555754 .stroke-B5{stroke:#DEE1EB;} + .d2-1043555754 .stroke-B6{stroke:#EEF1F8;} + .d2-1043555754 .stroke-AA2{stroke:#676C7E;} + .d2-1043555754 .stroke-AA4{stroke:#CFD2DD;} + .d2-1043555754 .stroke-AA5{stroke:#DEE1EB;} + .d2-1043555754 .stroke-AB4{stroke:#CFD2DD;} + .d2-1043555754 .stroke-AB5{stroke:#DEE1EB;} + .d2-1043555754 .background-color-N1{background-color:#0A0F25;} + .d2-1043555754 .background-color-N2{background-color:#676C7E;} + .d2-1043555754 .background-color-N3{background-color:#9499AB;} + .d2-1043555754 .background-color-N4{background-color:#CFD2DD;} + .d2-1043555754 .background-color-N5{background-color:#DEE1EB;} + .d2-1043555754 .background-color-N6{background-color:#EEF1F8;} + .d2-1043555754 .background-color-N7{background-color:#FFFFFF;} + .d2-1043555754 .background-color-B1{background-color:#0A0F25;} + .d2-1043555754 .background-color-B2{background-color:#676C7E;} + .d2-1043555754 .background-color-B3{background-color:#9499AB;} + .d2-1043555754 .background-color-B4{background-color:#CFD2DD;} + .d2-1043555754 .background-color-B5{background-color:#DEE1EB;} + .d2-1043555754 .background-color-B6{background-color:#EEF1F8;} + .d2-1043555754 .background-color-AA2{background-color:#676C7E;} + .d2-1043555754 .background-color-AA4{background-color:#CFD2DD;} + .d2-1043555754 .background-color-AA5{background-color:#DEE1EB;} + .d2-1043555754 .background-color-AB4{background-color:#CFD2DD;} + .d2-1043555754 .background-color-AB5{background-color:#DEE1EB;} + .d2-1043555754 .color-N1{color:#0A0F25;} + .d2-1043555754 .color-N2{color:#676C7E;} + .d2-1043555754 .color-N3{color:#9499AB;} + .d2-1043555754 .color-N4{color:#CFD2DD;} + .d2-1043555754 .color-N5{color:#DEE1EB;} + .d2-1043555754 .color-N6{color:#EEF1F8;} + .d2-1043555754 .color-N7{color:#FFFFFF;} + .d2-1043555754 .color-B1{color:#0A0F25;} + .d2-1043555754 .color-B2{color:#676C7E;} + .d2-1043555754 .color-B3{color:#9499AB;} + .d2-1043555754 .color-B4{color:#CFD2DD;} + .d2-1043555754 .color-B5{color:#DEE1EB;} + .d2-1043555754 .color-B6{color:#EEF1F8;} + .d2-1043555754 .color-AA2{color:#676C7E;} + .d2-1043555754 .color-AA4{color:#CFD2DD;} + .d2-1043555754 .color-AA5{color:#DEE1EB;} + .d2-1043555754 .color-AB4{color:#CFD2DD;} + .d2-1043555754 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1043555754);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-1043555754);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-1043555754);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-1043555754);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1043555754);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-1043555754);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-1043555754);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1043555754);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1043555754);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1043555754);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1043555754);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1043555754);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + - TEA ServerTransparency ArtifactsSoftwareVendorTEAClientSBOMVEXAttestation Publish TEI → DNS → .well-known + TEA ServerTransparency ArtifactsSoftwareVendorTEAClientSBOMVEXAttestation Publish TEI → DNS → .well-known diff --git a/assets/images/d2/trust-chain.svg b/assets/images/d2/trust-chain.svg index a2ed977c..b438ae30 100644 --- a/assets/images/d2/trust-chain.svg +++ b/assets/images/d2/trust-chain.svg @@ -1,9 +1,9 @@ - + .d2-3055029060 .fill-N1{fill:#0A0F25;} + .d2-3055029060 .fill-N2{fill:#676C7E;} + .d2-3055029060 .fill-N3{fill:#9499AB;} + .d2-3055029060 .fill-N4{fill:#CFD2DD;} + .d2-3055029060 .fill-N5{fill:#DEE1EB;} + .d2-3055029060 .fill-N6{fill:#EEF1F8;} + .d2-3055029060 .fill-N7{fill:#FFFFFF;} + .d2-3055029060 .fill-B1{fill:#0A0F25;} + .d2-3055029060 .fill-B2{fill:#676C7E;} + .d2-3055029060 .fill-B3{fill:#9499AB;} + .d2-3055029060 .fill-B4{fill:#CFD2DD;} + .d2-3055029060 .fill-B5{fill:#DEE1EB;} + .d2-3055029060 .fill-B6{fill:#EEF1F8;} + .d2-3055029060 .fill-AA2{fill:#676C7E;} + .d2-3055029060 .fill-AA4{fill:#CFD2DD;} + .d2-3055029060 .fill-AA5{fill:#DEE1EB;} + .d2-3055029060 .fill-AB4{fill:#CFD2DD;} + .d2-3055029060 .fill-AB5{fill:#DEE1EB;} + .d2-3055029060 .stroke-N1{stroke:#0A0F25;} + .d2-3055029060 .stroke-N2{stroke:#676C7E;} + .d2-3055029060 .stroke-N3{stroke:#9499AB;} + .d2-3055029060 .stroke-N4{stroke:#CFD2DD;} + .d2-3055029060 .stroke-N5{stroke:#DEE1EB;} + .d2-3055029060 .stroke-N6{stroke:#EEF1F8;} + .d2-3055029060 .stroke-N7{stroke:#FFFFFF;} + .d2-3055029060 .stroke-B1{stroke:#0A0F25;} + .d2-3055029060 .stroke-B2{stroke:#676C7E;} + .d2-3055029060 .stroke-B3{stroke:#9499AB;} + .d2-3055029060 .stroke-B4{stroke:#CFD2DD;} + .d2-3055029060 .stroke-B5{stroke:#DEE1EB;} + .d2-3055029060 .stroke-B6{stroke:#EEF1F8;} + .d2-3055029060 .stroke-AA2{stroke:#676C7E;} + .d2-3055029060 .stroke-AA4{stroke:#CFD2DD;} + .d2-3055029060 .stroke-AA5{stroke:#DEE1EB;} + .d2-3055029060 .stroke-AB4{stroke:#CFD2DD;} + .d2-3055029060 .stroke-AB5{stroke:#DEE1EB;} + .d2-3055029060 .background-color-N1{background-color:#0A0F25;} + .d2-3055029060 .background-color-N2{background-color:#676C7E;} + .d2-3055029060 .background-color-N3{background-color:#9499AB;} + .d2-3055029060 .background-color-N4{background-color:#CFD2DD;} + .d2-3055029060 .background-color-N5{background-color:#DEE1EB;} + .d2-3055029060 .background-color-N6{background-color:#EEF1F8;} + .d2-3055029060 .background-color-N7{background-color:#FFFFFF;} + .d2-3055029060 .background-color-B1{background-color:#0A0F25;} + .d2-3055029060 .background-color-B2{background-color:#676C7E;} + .d2-3055029060 .background-color-B3{background-color:#9499AB;} + .d2-3055029060 .background-color-B4{background-color:#CFD2DD;} + .d2-3055029060 .background-color-B5{background-color:#DEE1EB;} + .d2-3055029060 .background-color-B6{background-color:#EEF1F8;} + .d2-3055029060 .background-color-AA2{background-color:#676C7E;} + .d2-3055029060 .background-color-AA4{background-color:#CFD2DD;} + .d2-3055029060 .background-color-AA5{background-color:#DEE1EB;} + .d2-3055029060 .background-color-AB4{background-color:#CFD2DD;} + .d2-3055029060 .background-color-AB5{background-color:#DEE1EB;} + .d2-3055029060 .color-N1{color:#0A0F25;} + .d2-3055029060 .color-N2{color:#676C7E;} + .d2-3055029060 .color-N3{color:#9499AB;} + .d2-3055029060 .color-N4{color:#CFD2DD;} + .d2-3055029060 .color-N5{color:#DEE1EB;} + .d2-3055029060 .color-N6{color:#EEF1F8;} + .d2-3055029060 .color-N7{color:#FFFFFF;} + .d2-3055029060 .color-B1{color:#0A0F25;} + .d2-3055029060 .color-B2{color:#676C7E;} + .d2-3055029060 .color-B3{color:#9499AB;} + .d2-3055029060 .color-B4{color:#CFD2DD;} + .d2-3055029060 .color-B5{color:#DEE1EB;} + .d2-3055029060 .color-B6{color:#EEF1F8;} + .d2-3055029060 .color-AA2{color:#676C7E;} + .d2-3055029060 .color-AA4{color:#CFD2DD;} + .d2-3055029060 .color-AA5{color:#DEE1EB;} + .d2-3055029060 .color-AB4{color:#CFD2DD;} + .d2-3055029060 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3055029060);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3055029060);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3055029060);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3055029060);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3055029060);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3055029060);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3055029060);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3055029060);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3055029060);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3055029060);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3055029060);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3055029060);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -CI/CD PipelineDistributeVerifyGenerateSign Signed SBOM Trust +CI/CD PipelineDistributeVerifyGenerateSign Signed SBOM Trust diff --git a/assets/images/d2/vulnerability-prioritization.svg b/assets/images/d2/vulnerability-prioritization.svg index ab5fd7dd..461c938f 100644 --- a/assets/images/d2/vulnerability-prioritization.svg +++ b/assets/images/d2/vulnerability-prioritization.svg @@ -1,9 +1,9 @@ - + .d2-3803882504 .fill-N1{fill:#0A0F25;} + .d2-3803882504 .fill-N2{fill:#676C7E;} + .d2-3803882504 .fill-N3{fill:#9499AB;} + .d2-3803882504 .fill-N4{fill:#CFD2DD;} + .d2-3803882504 .fill-N5{fill:#DEE1EB;} + .d2-3803882504 .fill-N6{fill:#EEF1F8;} + .d2-3803882504 .fill-N7{fill:#FFFFFF;} + .d2-3803882504 .fill-B1{fill:#0A0F25;} + .d2-3803882504 .fill-B2{fill:#676C7E;} + .d2-3803882504 .fill-B3{fill:#9499AB;} + .d2-3803882504 .fill-B4{fill:#CFD2DD;} + .d2-3803882504 .fill-B5{fill:#DEE1EB;} + .d2-3803882504 .fill-B6{fill:#EEF1F8;} + .d2-3803882504 .fill-AA2{fill:#676C7E;} + .d2-3803882504 .fill-AA4{fill:#CFD2DD;} + .d2-3803882504 .fill-AA5{fill:#DEE1EB;} + .d2-3803882504 .fill-AB4{fill:#CFD2DD;} + .d2-3803882504 .fill-AB5{fill:#DEE1EB;} + .d2-3803882504 .stroke-N1{stroke:#0A0F25;} + .d2-3803882504 .stroke-N2{stroke:#676C7E;} + .d2-3803882504 .stroke-N3{stroke:#9499AB;} + .d2-3803882504 .stroke-N4{stroke:#CFD2DD;} + .d2-3803882504 .stroke-N5{stroke:#DEE1EB;} + .d2-3803882504 .stroke-N6{stroke:#EEF1F8;} + .d2-3803882504 .stroke-N7{stroke:#FFFFFF;} + .d2-3803882504 .stroke-B1{stroke:#0A0F25;} + .d2-3803882504 .stroke-B2{stroke:#676C7E;} + .d2-3803882504 .stroke-B3{stroke:#9499AB;} + .d2-3803882504 .stroke-B4{stroke:#CFD2DD;} + .d2-3803882504 .stroke-B5{stroke:#DEE1EB;} + .d2-3803882504 .stroke-B6{stroke:#EEF1F8;} + .d2-3803882504 .stroke-AA2{stroke:#676C7E;} + .d2-3803882504 .stroke-AA4{stroke:#CFD2DD;} + .d2-3803882504 .stroke-AA5{stroke:#DEE1EB;} + .d2-3803882504 .stroke-AB4{stroke:#CFD2DD;} + .d2-3803882504 .stroke-AB5{stroke:#DEE1EB;} + .d2-3803882504 .background-color-N1{background-color:#0A0F25;} + .d2-3803882504 .background-color-N2{background-color:#676C7E;} + .d2-3803882504 .background-color-N3{background-color:#9499AB;} + .d2-3803882504 .background-color-N4{background-color:#CFD2DD;} + .d2-3803882504 .background-color-N5{background-color:#DEE1EB;} + .d2-3803882504 .background-color-N6{background-color:#EEF1F8;} + .d2-3803882504 .background-color-N7{background-color:#FFFFFF;} + .d2-3803882504 .background-color-B1{background-color:#0A0F25;} + .d2-3803882504 .background-color-B2{background-color:#676C7E;} + .d2-3803882504 .background-color-B3{background-color:#9499AB;} + .d2-3803882504 .background-color-B4{background-color:#CFD2DD;} + .d2-3803882504 .background-color-B5{background-color:#DEE1EB;} + .d2-3803882504 .background-color-B6{background-color:#EEF1F8;} + .d2-3803882504 .background-color-AA2{background-color:#676C7E;} + .d2-3803882504 .background-color-AA4{background-color:#CFD2DD;} + .d2-3803882504 .background-color-AA5{background-color:#DEE1EB;} + .d2-3803882504 .background-color-AB4{background-color:#CFD2DD;} + .d2-3803882504 .background-color-AB5{background-color:#DEE1EB;} + .d2-3803882504 .color-N1{color:#0A0F25;} + .d2-3803882504 .color-N2{color:#676C7E;} + .d2-3803882504 .color-N3{color:#9499AB;} + .d2-3803882504 .color-N4{color:#CFD2DD;} + .d2-3803882504 .color-N5{color:#DEE1EB;} + .d2-3803882504 .color-N6{color:#EEF1F8;} + .d2-3803882504 .color-N7{color:#FFFFFF;} + .d2-3803882504 .color-B1{color:#0A0F25;} + .d2-3803882504 .color-B2{color:#676C7E;} + .d2-3803882504 .color-B3{color:#9499AB;} + .d2-3803882504 .color-B4{color:#CFD2DD;} + .d2-3803882504 .color-B5{color:#DEE1EB;} + .d2-3803882504 .color-B6{color:#EEF1F8;} + .d2-3803882504 .color-AA2{color:#676C7E;} + .d2-3803882504 .color-AA4{color:#CFD2DD;} + .d2-3803882504 .color-AA5{color:#DEE1EB;} + .d2-3803882504 .color-AB4{color:#CFD2DD;} + .d2-3803882504 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3803882504);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3803882504);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3803882504);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3803882504);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3803882504);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3803882504);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3803882504);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3803882504);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3803882504);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3803882504);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3803882504);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3803882504);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -CVEIdentifierCVSSSeverity ScoreKEVExploited in WildYour EnvironmentPrioritizedRemediationAffectedComponents How severe? Activelyexploited? Matchagainst SBOM Patch highestrisk first +CVEIdentifierCVSSSeverity ScoreKEVExploited in WildYour EnvironmentPrioritizedRemediationAffectedComponents How severe? Activelyexploited? Matchagainst SBOM Patch highestrisk first diff --git a/assets/images/d2/what-is-sbom.svg b/assets/images/d2/what-is-sbom.svg index ba0840ae..e35298f6 100644 --- a/assets/images/d2/what-is-sbom.svg +++ b/assets/images/d2/what-is-sbom.svg @@ -1,9 +1,9 @@ - + .d2-2018012941 .fill-N1{fill:#0A0F25;} + .d2-2018012941 .fill-N2{fill:#676C7E;} + .d2-2018012941 .fill-N3{fill:#9499AB;} + .d2-2018012941 .fill-N4{fill:#CFD2DD;} + .d2-2018012941 .fill-N5{fill:#DEE1EB;} + .d2-2018012941 .fill-N6{fill:#EEF1F8;} + .d2-2018012941 .fill-N7{fill:#FFFFFF;} + .d2-2018012941 .fill-B1{fill:#0A0F25;} + .d2-2018012941 .fill-B2{fill:#676C7E;} + .d2-2018012941 .fill-B3{fill:#9499AB;} + .d2-2018012941 .fill-B4{fill:#CFD2DD;} + .d2-2018012941 .fill-B5{fill:#DEE1EB;} + .d2-2018012941 .fill-B6{fill:#EEF1F8;} + .d2-2018012941 .fill-AA2{fill:#676C7E;} + .d2-2018012941 .fill-AA4{fill:#CFD2DD;} + .d2-2018012941 .fill-AA5{fill:#DEE1EB;} + .d2-2018012941 .fill-AB4{fill:#CFD2DD;} + .d2-2018012941 .fill-AB5{fill:#DEE1EB;} + .d2-2018012941 .stroke-N1{stroke:#0A0F25;} + .d2-2018012941 .stroke-N2{stroke:#676C7E;} + .d2-2018012941 .stroke-N3{stroke:#9499AB;} + .d2-2018012941 .stroke-N4{stroke:#CFD2DD;} + .d2-2018012941 .stroke-N5{stroke:#DEE1EB;} + .d2-2018012941 .stroke-N6{stroke:#EEF1F8;} + .d2-2018012941 .stroke-N7{stroke:#FFFFFF;} + .d2-2018012941 .stroke-B1{stroke:#0A0F25;} + .d2-2018012941 .stroke-B2{stroke:#676C7E;} + .d2-2018012941 .stroke-B3{stroke:#9499AB;} + .d2-2018012941 .stroke-B4{stroke:#CFD2DD;} + .d2-2018012941 .stroke-B5{stroke:#DEE1EB;} + .d2-2018012941 .stroke-B6{stroke:#EEF1F8;} + .d2-2018012941 .stroke-AA2{stroke:#676C7E;} + .d2-2018012941 .stroke-AA4{stroke:#CFD2DD;} + .d2-2018012941 .stroke-AA5{stroke:#DEE1EB;} + .d2-2018012941 .stroke-AB4{stroke:#CFD2DD;} + .d2-2018012941 .stroke-AB5{stroke:#DEE1EB;} + .d2-2018012941 .background-color-N1{background-color:#0A0F25;} + .d2-2018012941 .background-color-N2{background-color:#676C7E;} + .d2-2018012941 .background-color-N3{background-color:#9499AB;} + .d2-2018012941 .background-color-N4{background-color:#CFD2DD;} + .d2-2018012941 .background-color-N5{background-color:#DEE1EB;} + .d2-2018012941 .background-color-N6{background-color:#EEF1F8;} + .d2-2018012941 .background-color-N7{background-color:#FFFFFF;} + .d2-2018012941 .background-color-B1{background-color:#0A0F25;} + .d2-2018012941 .background-color-B2{background-color:#676C7E;} + .d2-2018012941 .background-color-B3{background-color:#9499AB;} + .d2-2018012941 .background-color-B4{background-color:#CFD2DD;} + .d2-2018012941 .background-color-B5{background-color:#DEE1EB;} + .d2-2018012941 .background-color-B6{background-color:#EEF1F8;} + .d2-2018012941 .background-color-AA2{background-color:#676C7E;} + .d2-2018012941 .background-color-AA4{background-color:#CFD2DD;} + .d2-2018012941 .background-color-AA5{background-color:#DEE1EB;} + .d2-2018012941 .background-color-AB4{background-color:#CFD2DD;} + .d2-2018012941 .background-color-AB5{background-color:#DEE1EB;} + .d2-2018012941 .color-N1{color:#0A0F25;} + .d2-2018012941 .color-N2{color:#676C7E;} + .d2-2018012941 .color-N3{color:#9499AB;} + .d2-2018012941 .color-N4{color:#CFD2DD;} + .d2-2018012941 .color-N5{color:#DEE1EB;} + .d2-2018012941 .color-N6{color:#EEF1F8;} + .d2-2018012941 .color-N7{color:#FFFFFF;} + .d2-2018012941 .color-B1{color:#0A0F25;} + .d2-2018012941 .color-B2{color:#676C7E;} + .d2-2018012941 .color-B3{color:#9499AB;} + .d2-2018012941 .color-B4{color:#CFD2DD;} + .d2-2018012941 .color-B5{color:#DEE1EB;} + .d2-2018012941 .color-B6{color:#EEF1F8;} + .d2-2018012941 .color-AA2{color:#676C7E;} + .d2-2018012941 .color-AA4{color:#CFD2DD;} + .d2-2018012941 .color-AA5{color:#DEE1EB;} + .d2-2018012941 .color-AB4{color:#CFD2DD;} + .d2-2018012941 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2018012941);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-2018012941);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-2018012941);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-2018012941);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2018012941);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-2018012941);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-2018012941);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2018012941);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2018012941);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2018012941);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2018012941);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2018012941);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -Modern ApplicationSBOM(Ingredients List)Transitive DependenciesOpen Source LibrariesYour Source Code included in included in Cataloged by +Modern ApplicationSBOM(Ingredients List)Transitive DependenciesOpen Source LibrariesYour Source Code included in included in Cataloged by diff --git a/assets/images/d2/zero-to-hero.svg b/assets/images/d2/zero-to-hero.svg index 2eb0965e..32137a22 100644 --- a/assets/images/d2/zero-to-hero.svg +++ b/assets/images/d2/zero-to-hero.svg @@ -1,24 +1,24 @@ - + .d2-255076474 .fill-N1{fill:#0A0F25;} + .d2-255076474 .fill-N2{fill:#676C7E;} + .d2-255076474 .fill-N3{fill:#9499AB;} + .d2-255076474 .fill-N4{fill:#CFD2DD;} + .d2-255076474 .fill-N5{fill:#DEE1EB;} + .d2-255076474 .fill-N6{fill:#EEF1F8;} + .d2-255076474 .fill-N7{fill:#FFFFFF;} + .d2-255076474 .fill-B1{fill:#0A0F25;} + .d2-255076474 .fill-B2{fill:#676C7E;} + .d2-255076474 .fill-B3{fill:#9499AB;} + .d2-255076474 .fill-B4{fill:#CFD2DD;} + .d2-255076474 .fill-B5{fill:#DEE1EB;} + .d2-255076474 .fill-B6{fill:#EEF1F8;} + .d2-255076474 .fill-AA2{fill:#676C7E;} + .d2-255076474 .fill-AA4{fill:#CFD2DD;} + .d2-255076474 .fill-AA5{fill:#DEE1EB;} + .d2-255076474 .fill-AB4{fill:#CFD2DD;} + .d2-255076474 .fill-AB5{fill:#DEE1EB;} + .d2-255076474 .stroke-N1{stroke:#0A0F25;} + .d2-255076474 .stroke-N2{stroke:#676C7E;} + .d2-255076474 .stroke-N3{stroke:#9499AB;} + .d2-255076474 .stroke-N4{stroke:#CFD2DD;} + .d2-255076474 .stroke-N5{stroke:#DEE1EB;} + .d2-255076474 .stroke-N6{stroke:#EEF1F8;} + .d2-255076474 .stroke-N7{stroke:#FFFFFF;} + .d2-255076474 .stroke-B1{stroke:#0A0F25;} + .d2-255076474 .stroke-B2{stroke:#676C7E;} + .d2-255076474 .stroke-B3{stroke:#9499AB;} + .d2-255076474 .stroke-B4{stroke:#CFD2DD;} + .d2-255076474 .stroke-B5{stroke:#DEE1EB;} + .d2-255076474 .stroke-B6{stroke:#EEF1F8;} + .d2-255076474 .stroke-AA2{stroke:#676C7E;} + .d2-255076474 .stroke-AA4{stroke:#CFD2DD;} + .d2-255076474 .stroke-AA5{stroke:#DEE1EB;} + .d2-255076474 .stroke-AB4{stroke:#CFD2DD;} + .d2-255076474 .stroke-AB5{stroke:#DEE1EB;} + .d2-255076474 .background-color-N1{background-color:#0A0F25;} + .d2-255076474 .background-color-N2{background-color:#676C7E;} + .d2-255076474 .background-color-N3{background-color:#9499AB;} + .d2-255076474 .background-color-N4{background-color:#CFD2DD;} + .d2-255076474 .background-color-N5{background-color:#DEE1EB;} + .d2-255076474 .background-color-N6{background-color:#EEF1F8;} + .d2-255076474 .background-color-N7{background-color:#FFFFFF;} + .d2-255076474 .background-color-B1{background-color:#0A0F25;} + .d2-255076474 .background-color-B2{background-color:#676C7E;} + .d2-255076474 .background-color-B3{background-color:#9499AB;} + .d2-255076474 .background-color-B4{background-color:#CFD2DD;} + .d2-255076474 .background-color-B5{background-color:#DEE1EB;} + .d2-255076474 .background-color-B6{background-color:#EEF1F8;} + .d2-255076474 .background-color-AA2{background-color:#676C7E;} + .d2-255076474 .background-color-AA4{background-color:#CFD2DD;} + .d2-255076474 .background-color-AA5{background-color:#DEE1EB;} + .d2-255076474 .background-color-AB4{background-color:#CFD2DD;} + .d2-255076474 .background-color-AB5{background-color:#DEE1EB;} + .d2-255076474 .color-N1{color:#0A0F25;} + .d2-255076474 .color-N2{color:#676C7E;} + .d2-255076474 .color-N3{color:#9499AB;} + .d2-255076474 .color-N4{color:#CFD2DD;} + .d2-255076474 .color-N5{color:#DEE1EB;} + .d2-255076474 .color-N6{color:#EEF1F8;} + .d2-255076474 .color-N7{color:#FFFFFF;} + .d2-255076474 .color-B1{color:#0A0F25;} + .d2-255076474 .color-B2{color:#676C7E;} + .d2-255076474 .color-B3{color:#9499AB;} + .d2-255076474 .color-B4{color:#CFD2DD;} + .d2-255076474 .color-B5{color:#DEE1EB;} + .d2-255076474 .color-B6{color:#EEF1F8;} + .d2-255076474 .color-AA2{color:#676C7E;} + .d2-255076474 .color-AA4{color:#CFD2DD;} + .d2-255076474 .color-AA5{color:#DEE1EB;} + .d2-255076474 .color-AB4{color:#CFD2DD;} + .d2-255076474 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-255076474);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-255076474);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-255076474);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-255076474);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-255076474);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-255076474);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-255076474);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-255076474);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-255076474);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-255076474);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-255076474);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-255076474);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -ZeroLearnGenerateManageHero +ZeroLearnGenerateManageHero diff --git a/assets/images/site/dependency-track-navy.svg b/assets/images/site/dependency-track-navy.svg new file mode 100644 index 00000000..e8cd8fce --- /dev/null +++ b/assets/images/site/dependency-track-navy.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/site/hamburger-menu.svg b/assets/images/site/hamburger-menu.svg index 8f9b70aa..ce24df78 100644 --- a/assets/images/site/hamburger-menu.svg +++ b/assets/images/site/hamburger-menu.svg @@ -1,5 +1,5 @@ - + diff --git a/assets/images/site/logo-navy.svg b/assets/images/site/logo-navy.svg new file mode 100644 index 00000000..3b97a2a4 --- /dev/null +++ b/assets/images/site/logo-navy.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/site/osv-navy.svg b/assets/images/site/osv-navy.svg new file mode 100644 index 00000000..ba74cd36 --- /dev/null +++ b/assets/images/site/osv-navy.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bun.lock b/bun.lock index 90dde35b..46b79ff6 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,7 @@ "": { "name": "blog", "dependencies": { - "@fontsource-variable/inter": "^5.2.8", + "@fontsource-variable/figtree": "^5.3.0", "@fortawesome/fontawesome-free": "^7.1.0", "@tabler/icons": "^3.36.1", "autoprefixer": "^10.4.24", @@ -14,6 +14,7 @@ "caniuse-lite": "^1.0.30001769", "postcss": "^8.5.6", "postcss-cli": "^11.0.1", + "postcss-import": "^17.0.1", "tailwindcss": "^3.4.18", "update-browserslist-db": "^1.1.4", }, @@ -43,7 +44,7 @@ "@dprint/win32-x64": ["@dprint/win32-x64@0.50.2", "", { "os": "win32", "cpu": "x64" }, "sha512-N3l9k31c3IMfVXqL0L6ygIhJFvCIrfQ+Z5Jph6RnCcBO6oDYWeYhAv/qBk1vLsF2y/e79TKsR1tvaEwnrQ03XA=="], - "@fontsource-variable/inter": ["@fontsource-variable/inter@5.2.8", "", {}, "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ=="], + "@fontsource-variable/figtree": ["@fontsource-variable/figtree@5.3.0", "", {}, "sha512-VRVodD7OiG7apQwE8/2fMjaqpY/a0qRJqL5HtYj8CKIVps+9amaFcdfKmDIf7iqYQx6iPLlArVXAfKeIZmVcNQ=="], "@fortawesome/fontawesome-free": ["@fortawesome/fontawesome-free@7.1.0", "", {}, "sha512-+WxNld5ZCJHvPQCr/GnzCTVREyStrAJjisUPtUxG5ngDA8TMlPnKp6dddlTpai4+1GNmltAeuk1hJEkBohwZYA=="], @@ -219,7 +220,7 @@ "postcss-cli": ["postcss-cli@11.0.1", "", { "dependencies": { "chokidar": "^3.3.0", "dependency-graph": "^1.0.0", "fs-extra": "^11.0.0", "picocolors": "^1.0.0", "postcss-load-config": "^5.0.0", "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", "read-cache": "^1.0.0", "slash": "^5.0.0", "tinyglobby": "^0.2.12", "yargs": "^17.0.0" }, "peerDependencies": { "postcss": "^8.0.0" }, "bin": { "postcss": "index.js" } }, "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g=="], - "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], + "postcss-import": ["postcss-import@17.0.1", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-lthLZRa+sMc/xo+lG7TMUvOviwP9ngR0VULnvfXTyOE3JIc0mFrbjcubI6Jx52X+B3IKt9yfp6wwVWE768JezA=="], "postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="], @@ -327,6 +328,8 @@ "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "tailwindcss/postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], + "yargs/escalade": ["escalade@3.1.2", "", {}, "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], diff --git a/content/_index.html b/content/_index.html index 3ff532a6..01355ee4 100644 --- a/content/_index.html +++ b/content/_index.html @@ -6,57 +6,50 @@ ---
-
- {{< aurora >}} - {{< comment >}}Soft top vignette to anchor the headline{{< /comment >}} - +
{{< comment >}}Hero Section{{< /comment >}} -
-

- Your Security Artifact Hub +
+

+ Your Security Artifact Hub

-

From zero to SBOM hero. Generate, manage, and share SBOMs and compliance documents with your stakeholders.

- {{< comment >}}Integration Sections{{< /comment >}}
{{< comment >}}Integrates With section{{< /comment >}} - {{< comment >}}Press Coverage Section{{< /comment >}} -
+
- As featured in + As featured in {{< comment >}}Mission Statement Section{{< /comment >}} -
+ -
+
{{< comment >}}Persona routing{{< /comment >}} -
-

Find Your Path

+ -
+
SBOM Lifecycle Tool
-

Zero to SBOM Hero

-

- Build high-quality SBOMs directly in your CI pipeline with our open source action. Once generated, SBOMs are automatically uploaded to sbomify where you can manage releases (including complex hierarchies) and share the latest software versions with stakeholders – publicly or privately via your Trust Center. No more manual SBOM distribution or version confusion. +

Zero to SBOM Hero

+

+ Build high-quality SBOMs directly in your CI pipeline with our open source action. Once generated, SBOMs are automatically uploaded to sbomify where you can manage releases (including complex hierarchies) and share the latest software versions with stakeholders – publicly or privately via your Trust Center. No more manual SBOM distribution or version confusion.

Zero to SBOM Hero Process
- Get Started + Get Started
-
-
Trust Center
-

Transparency That Builds Trust

-

- Send a link instead of scheduling a call, and cut security questionnaire response times from weeks to minutes. -

-

- Share SBOMs, VEX, CBOMs, compliance documents, and security artifacts with stakeholders in a standardized way. Your trust center can be hosted on your own domain and supports web portal access, standardized SBOM formats, and the Transparency Exchange API (TEA) for automated consumption. Compliance documents are expressed programmatically alongside your SBOMs. -

- -
- {{< trust-center-artifacts >}} +
+
+
+
Trust Center
+

Transparency That Builds Trust

+

+ Send a link instead of scheduling a call, and cut security questionnaire response times from weeks to minutes. +

+

+ Share SBOMs, VEX, CBOMs, compliance documents, and security artifacts with stakeholders in a standardized way. Your trust center can be hosted on your own domain and supports web portal access, standardized SBOM formats, and the Transparency Exchange API (TEA) for automated consumption. Compliance documents are expressed programmatically alongside your SBOMs. +

+ +
+
+ {{< trust-center-artifacts >}} +
{{< trust-center-pillars-grid >}} - Explore the Trust Center
-
+
Security Artifact Hub
-

Store, Analyze & Enrich

-

- sbomify is designed not only to hold your security artifacts but also to send them off for analysis. We integrate with CI/CD pipelines (GitHub, GitLab, Bitbucket), analysis tools like Google OSV and Dependency Track, and enrichment platforms such as Ecosyste.ms. Your security artifacts flow seamlessly from generation through analysis and enrichment, giving you actionable insights without manual work. Scan results are VEX-aware, so your not-affected decisions suppress noise in OSV and Dependency Track findings, and cryptographic assets are inventoried as CBOMs with a post-quantum readiness view. +

Store, Analyze & Enrich

+

+ sbomify is designed not only to hold your security artifacts but also to send them off for analysis. We integrate with CI/CD pipelines (GitHub, GitLab, Bitbucket), analysis tools like Google OSV and Dependency Track, and enrichment platforms such as Ecosyste.ms. Your security artifacts flow seamlessly from generation through analysis and enrichment, giving you actionable insights without manual work. Scan results are VEX-aware, so your not-affected decisions suppress noise in OSV and Dependency Track findings, and cryptographic assets are inventoried as CBOMs with a post-quantum readiness view.

Store, Analyze & Enrich Process
- View All Integrations + View All Integrations
{{< comment >}}Trusted By section{{< /comment >}} -
- Trusted By +
+ Trusted By

“Using sbomify has hugely accelerated our work on NTIA compliance. Viktor has also been leading a group that’s creating standards for making SBOMs — this gives us confidence that sbomify will become a platform that follows industry practices as they emerge.”

-
- — Chris Swan, Atsign +
+ — Chris Swan, Atsign
@@ -193,43 +189,45 @@

Store, Analyze

-
+
+
Why Now?
-

CRA is Coming. Ready or Not.

-

- The EU's Cyber Resilience Act (CRA) is now in force, with mandatory reporting starting September 11, 2026. Non-compliance can carry administrative fines of up to €15 million or 2.5% of global annual turnover, whichever is higher. Whether you sell to European customers or not, CRA compliance is becoming a baseline expectation for B2B software. +

CRA is Coming. Ready or Not.

+

+ The EU's Cyber Resilience Act (CRA) is now in force, with mandatory reporting starting September 11, 2026. Non-compliance can carry administrative fines of up to €15 million or 2.5% of global annual turnover, whichever is higher. Whether you sell to European customers or not, CRA compliance is becoming a baseline expectation for B2B software.

-

- In the US, Executive Order 14028 kicked off federal SBOM adoption and remains in effect, and OMB's latest guidance encourages agencies to require SBOMs in contracts. Cryptography is next: under EO 14144's post-quantum provisions, CISA now maintains a list of product categories where post-quantum support is expected, and agencies must support TLS 1.3 by January 2030. You can't migrate cryptography you haven't inventoried, which is exactly what a CBOM gives you. sbomify covers both: automated SBOM generation and CBOM ingestion with a post-quantum readiness view. +

+ In the US, Executive Order 14028 kicked off federal SBOM adoption and remains in effect, and OMB's latest guidance encourages agencies to require SBOMs in contracts. Cryptography is next: under EO 14144's post-quantum provisions, CISA now maintains a list of product categories where post-quantum support is expected, and agencies must support TLS 1.3 by January 2030. You can't migrate cryptography you haven't inventoried, which is exactly what a CBOM gives you. sbomify covers both: automated SBOM generation and CBOM ingestion with a post-quantum readiness view.

- Learn More About CRA +
-
+
Your Choice, Your Control
-

Self-Host or Cloud

+

Self-Host or Cloud

-

- sbomify gives you the flexibility to run it yourself or let us run it for you. Find us on GitHub to self-host for complete control over your data and infrastructure, or use our managed cloud service for zero-maintenance convenience. +

+ sbomify gives you the flexibility to run it yourself or let us run it for you. Find us on GitHub to self-host for complete control over your data and infrastructure, or use our managed cloud service for zero-maintenance convenience.

-

+

Either way, you get the same powerful SBOM and compliance document management, support for CycloneDX and SPDX formats, and seamless integrations with your existing tools. No vendor lock-in, no compromises.

-
+
-
+
-
+
Blog
{{< posts limit="3" dark="true" title="Latest blog posts" >}} @@ -276,15 +274,15 @@

Self-Host or CloudSelf-Host or CloudSelf-Host or CloudThe Origin Story

Leadership

-
+
{{< author-photo name="Viktor Petersson" src="images/viktor.png" size="leader" >}}
-
+
-

Viktor Petersson

+

Viktor Petersson

{{< icon "linkedin" "w-5 h-5" >}}
-

Founder

+

Founder

Viktor is a serial entrepreneur and cybersecurity innovator, currently focused on shaping the future of software security and compliance. As the founder of sbomify, he simplifies Software Bill of Materials (SBOM) management, helping organizations navigate emerging cybersecurity regulations such as the Cyber Resilience Act (CRA).

-
-

Community Leadership:

+
+

Community Leadership:

  • CISA SBOM Working Group: Co-led the working group on SBOM generation.
  • ECMA TC54: Invited expert to the working group focusing on security artifacts and the Transparency Exchange API.
  • diff --git a/content/case-studies/_index.html b/content/case-studies/_index.html index db7d62f9..1c96cfdd 100644 --- a/content/case-studies/_index.html +++ b/content/case-studies/_index.html @@ -7,20 +7,20 @@
    {{< comment >}}Atsign Case Study{{< /comment >}} - +
    Atsign logo
    -

    +

    Working towards NTIA compliance

    -

    +

    Learn how Atsign, a platform for secure and private communication, improved their SBOM quality and visibility while working towards NTIA compliance using sbomify.

    -
    +
    Read Case Study

    +
    Screenly logo
    -

    +

    Simplifying SBOM Management

    -

    +

    Learn how Screenly, a secure digital signage platform trusted by Fortune 500 companies, automated their SBOM generation and distribution using sbomify.

    -
    +
    Read Case Study

    -
    -

    Ready to start your story?

    -

    +

    +

    Ready to start your story?

    +

    Join these organizations in securing your software supply chain.

    diff --git a/content/case-studies/atsign.md b/content/case-studies/atsign.md index b58ad30c..3ce10d71 100644 --- a/content/case-studies/atsign.md +++ b/content/case-studies/atsign.md @@ -54,15 +54,15 @@ Whilst working together on SBOM quality and visibility, opportunities have arisen to take on broader issues in the SBOM arena, such as the difficulty in generating SBOMs for C based projects. -
    -

    +

    +

    "Working with Viktor and the team at sbomify has been a pleasure. Using sbomify has hugely accelerated our work on NTIA compliance. Viktor has also been leading a group that's creating standards for making SBOMs. This gives us confidence that sbomify will become a platform that follows industry practices as they emerge."

    -

    – Chris Swan

    +

    – Chris Swan

    ## The Results diff --git a/content/compliance/_index.md b/content/compliance/_index.md index f1902146..db58c6df 100644 --- a/content/compliance/_index.md +++ b/content/compliance/_index.md @@ -193,7 +193,7 @@ See our comprehensive [SBOM generation guides](/guides/) covering Python, JavaSc - [SBOM Resources & Tools](/resources/) - Comprehensive tool directory
    - + Edit this page on GitHub diff --git a/content/faq/how-do-products-work-in-sbomify.md b/content/faq/how-do-products-work-in-sbomify.md index 74ecfc92..5870e73b 100644 --- a/content/faq/how-do-products-work-in-sbomify.md +++ b/content/faq/how-do-products-work-in-sbomify.md @@ -16,7 +16,7 @@ sbomify uses a tree-like structure to organize your SBOMs in a way that reflects Unlike tools that flatten everything into a single SBOM file (losing critical context like where an affected component lives), sbomify leverages CycloneDX and SPDX to link multiple SBOMs into a nested structure. -
    +
    {{< d2 "sbom-hierarchy" >}}
    @@ -36,7 +36,7 @@ A product can have releases. A release is a versioned snapshot that points to sp Because sbomify uses linkage rather than copying, multiple products (or versions of a product) can reuse the same component SBOMs without duplication. -
    +
    {{< d2 "sbom-releases" >}}
    diff --git a/content/features/generate-collaborate-analyze.md b/content/features/generate-collaborate-analyze.md index f48f571c..6af05c3b 100644 --- a/content/features/generate-collaborate-analyze.md +++ b/content/features/generate-collaborate-analyze.md @@ -6,7 +6,7 @@ description: "Streamline your Software Bill of Materials (SBOM) workflow with ou The Software Bill of Materials (SBOM) lifecycle comprises three key stages: **Authoring**, **Distribution**, and **Analysis**. -
    +
    {{< d2 "lifecycle" >}}
    @@ -22,7 +22,7 @@ While this _might_ suffice for internal SBOM needs when starting out, the realit To produce an SBOM that complies with standards like the NTIA Minimum Elements, it's helpful to view the process in four phases. -
    +
    {{< d2 "generation" >}}
    @@ -71,7 +71,7 @@ This is where sbomify transforms the landscape. sbomify automates the distributi A frequently overlooked but essential step in the SBOM lifecycle is the creation of a consolidated [SBOM hierarchy](/features/sbom-hierarchy/), which is especially valuable in complex software architectures. Take a basic SaaS product, for instance: with an API service running in a Docker container and a JavaScript-based frontend, you’ll quickly accumulate multiple SBOMs – for the backend, the Docker environment, and the JavaScript libraries. -
    +
    {{< d2 "sbom-hierarchy" >}}
    @@ -92,7 +92,7 @@ The final phase in the SBOM lifecycle is the analysis phase. Generally, teams ha There are many tools available that focus on different problem spaces (many are listed [here](/resources/#analysis)). Two popular open-source tools for SBOM analysis are [Dependency Track](https://dependencytrack.org/) and [guac](https://github.com/guacsec/guac). -
    +
    {{< d2 "store-analyze-enrich" >}}
    diff --git a/content/features/integrations.html b/content/features/integrations.html index baaf63bb..27be09cb 100644 --- a/content/features/integrations.html +++ b/content/features/integrations.html @@ -9,20 +9,20 @@ {{< comment >}}CI/CD Section{{< /comment >}}
    -

    CI/CD & Generation

    -

    Generate SBOMs automatically in your pipelines. We support all major CI/CD providers.

    +

    CI/CD & Generation

    +

    Generate SBOMs automatically in your pipelines. We support all major CI/CD providers.

    {{< comment >}}Setup Wizard{{< /comment >}} -
    +
    - New: Interactive Setup Wizard - Read the FAQ → + New: Interactive Setup Wizard + Read the FAQ →
    -

    - The fastest way to get started. Run the wizard from the root of your repository and it scans your lockfiles, creates your products and components, registers OIDC trusted publishing, and writes a ready-to-commit .github/workflows/sboms.yml. No tokens to copy, no YAML to hand-write. +

    + The fastest way to get started. Run the wizard from the root of your repository and it scans your lockfiles, creates your products and components, registers OIDC trusted publishing, and writes a ready-to-commit .github/workflows/sboms.yml. No tokens to copy, no YAML to hand-write.

    -
    +
    docker run --rm -it \
       -v "$(pwd):/github/workspace" \
       -w /github/workspace \
    @@ -33,18 +33,18 @@ 

    CI/CD & Generation

    {{< comment >}}GitHub{{< /comment >}} -
    +
    - {{< icon "github" "w-8 h-8" >}} GitHub + {{< icon "github" "w-8 h-8" >}} GitHub
    - Documentation →View on Marketplace → + Documentation →View on Marketplace →
    -

    - GitHub is at the core of many organizations. Our sbomify Action supports OIDC trusted publishing, so no long-lived token secret is needed. +

    + GitHub is at the core of many organizations. Our sbomify Action supports OIDC trusted publishing, so no long-lived token secret is needed.

    -
    +
    permissions:
       id-token: write  # OIDC trusted publishing, no token needed
    @@ -61,20 +61,20 @@ 

    CI/CD & Generation

    ENRICH: true
    -

    Prefer token auth, or using another CI system? Set TOKEN: ${SBOMIFY_TOKEN} instead.

    +

    Prefer token auth, or using another CI system? Set TOKEN: ${SBOMIFY_TOKEN} instead.

    {{< comment >}}GitLab{{< /comment >}} -
    +
    - {{< icon "gitlab" "w-8 h-8" >}} GitLab - Documentation → - View on GitHub → + {{< icon "gitlab" "w-8 h-8" >}} GitLab + Documentation → + View on GitHub →
    -

    - Use our Docker image directly in GitLab CI with built-in caching support. +

    + Use our Docker image directly in GitLab CI with built-in caching support.

    -
    +
    generate-sbom:
       image: ghcr.io/sbomify/sbomify-action
    @@ -96,16 +96,16 @@ 

    CI/CD & Generation

    {{< comment >}}Bitbucket{{< /comment >}} -
    +
    - {{< icon "bitbucket" "w-8 h-8" >}} Bitbucket - Documentation → - View on GitHub → + {{< icon "bitbucket" "w-8 h-8" >}} Bitbucket + Documentation → + View on GitHub →
    -

    +

    Seamlessly integrate with Bitbucket Pipelines using our Docker image with built-in caching.

    -
    +
    pipelines:
       default:
    @@ -130,16 +130,16 @@ 

    CI/CD & Generation

    {{< comment >}}Docker{{< /comment >}} -
    +
    - {{< icon "docker" "w-8 h-8" >}} Docker - Documentation → - View on GHCR → + {{< icon "docker" "w-8 h-8" >}} Docker + Documentation → + View on GHCR →
    -

    +

    For any other CI/CD system, use our multi-arch (amd64 and arm64) Docker image directly. Generators are fetched on first use, digest-pinned and cached — nothing to install.

    -
    +
    # Create persistent cache volume
     docker volume create sbomify-cache
    @@ -160,16 +160,16 @@ 

    CI/CD & Generation

    {{< comment >}}pip / CLI{{< /comment >}} -
    +
    - {{< icon "python" "w-8 h-8" >}} Local CLI - View on PyPI → + {{< icon "python" "w-8 h-8" >}} Local CLI + View on PyPI →
    -

    +

    Run the CLI on your machine with uvx or pipx for local development, one-off SBOMs and the setup wizard. Generators are downloaded on first use and cached, exactly as they are in the Docker image, so there is nothing else to install. - Read the guide → + Read the guide →

    -
    +
    # Run without installing anything
     uvx sbomify-action --lock-file requirements.txt \
    @@ -194,146 +194,146 @@ 

    CI/CD & Generation

    {{< comment >}}Supported Ecosystems Section{{< /comment >}}
    -

    Supported Ecosystems

    -

    Generate SBOMs from lockfiles across 18 ecosystems, plus container images, directory scans and Yocto/OpenEmbedded builds.

    +

    Supported Ecosystems

    +

    Generate SBOMs from lockfiles across 18 ecosystems, plus container images, directory scans and Yocto/OpenEmbedded builds.

    -
    -

    {{< icon "python" "w-5 h-5" >}} Python

    +
    +

    {{< icon "python" "w-5 h-5" >}} Python

    - requirements.txt - poetry.lock - Pipfile.lock - uv.lock - pyproject.toml + requirements.txt + poetry.lock + Pipfile.lock + uv.lock + pyproject.toml
    -
    -

    {{< icon "javascript" "w-5 h-5" >}} JavaScript

    +
    +

    {{< icon "javascript" "w-5 h-5" >}} JavaScript

    - package.json - package-lock.json - yarn.lock - pnpm-lock.yaml - bun.lock + package.json + package-lock.json + yarn.lock + pnpm-lock.yaml + bun.lock
    -
    -

    {{< icon "java" "w-5 h-5" >}} Java

    +
    +

    {{< icon "java" "w-5 h-5" >}} Java

    - pom.xml - build.gradle - build.gradle.kts - gradle.lockfile + pom.xml + build.gradle + build.gradle.kts + gradle.lockfile
    -
    -

    {{< icon "golang" "w-5 h-5" >}} Go

    +
    +

    {{< icon "golang" "w-5 h-5" >}} Go

    - go.mod - go.sum + go.mod + go.sum
    -
    -

    {{< icon "rust" "w-5 h-5" >}} Rust

    +
    +

    {{< icon "rust" "w-5 h-5" >}} Rust

    - Cargo.lock + Cargo.lock
    -
    -

    Ruby

    +
    +

    Ruby

    - Gemfile.lock + Gemfile.lock
    -
    -

    {{< icon "php" "w-5 h-5" >}} PHP

    +
    +

    {{< icon "php" "w-5 h-5" >}} PHP

    - composer.json - composer.lock + composer.json + composer.lock
    -
    -

    .NET / C#

    +
    +

    .NET / C#

    - packages.lock.json + packages.lock.json
    -
    -

    {{< icon "swift" "w-5 h-5" >}} Swift

    +
    +

    {{< icon "swift" "w-5 h-5" >}} Swift

    - Package.swift - Package.resolved + Package.swift + Package.resolved
    -
    -

    {{< icon "dart" "w-5 h-5" >}} Dart

    +
    +

    {{< icon "dart" "w-5 h-5" >}} Dart

    - pubspec.lock + pubspec.lock
    -
    -

    Elixir

    +
    +

    Elixir

    - mix.lock + mix.lock
    -
    -

    Scala

    +
    +

    Scala

    - build.sbt + build.sbt
    -
    -

    {{< icon "cpp" "w-5 h-5" >}} C++

    +
    +

    {{< icon "cpp" "w-5 h-5" >}} C++

    - conan.lock + conan.lock
    -
    -

    {{< icon "terraform" "w-5 h-5" >}} Terraform

    +
    +

    {{< icon "terraform" "w-5 h-5" >}} Terraform

    - .terraform.lock.hcl + .terraform.lock.hcl
    -
    -

    Haskell

    +
    +

    Haskell

    - stack.yaml.lock - stack.yaml - cabal.project.freeze + stack.yaml.lock + stack.yaml + cabal.project.freeze
    -
    -

    Erlang

    +
    +

    Erlang

    - rebar.lock + rebar.lock
    -
    -

    Clojure

    +
    +

    Clojure

    - deps.edn - project.clj + deps.edn + project.clj
    -
    -

    PlatformIO

    +
    +

    PlatformIO

    - platformio.ini + platformio.ini
    -
    -

    Container Images

    -

    Generate SBOMs directly from container images using DOCKER_IMAGE instead of a lockfile. Scans all layers and installed packages.

    +
    +

    Container Images

    +

    Generate SBOMs directly from container images using DOCKER_IMAGE instead of a lockfile. Scans all layers and installed packages.

    -
    -

    Yocto / OpenEmbedded

    -

    Batch process SPDX SBOMs from Yocto builds. Extracts .spdx.tar.zst archives, uploads package SBOMs, and tags them with a product release.

    +
    +

    Yocto / OpenEmbedded

    +

    Batch process SPDX SBOMs from Yocto builds. Extracts .spdx.tar.zst archives, uploads package SBOMs, and tags them with a product release.

    @@ -342,82 +342,82 @@

    Yocto / OpenEmbedded

    {{< comment >}}SBOM Generators Section{{< /comment >}}
    -

    SBOM Generators

    -

    Four generators with automatic fallback. The best tool for each ecosystem is selected automatically.

    +

    SBOM Generators

    +

    Four generators with automatic fallback. The best tool for each ecosystem is selected automatically.

    -
    +
    -

    cyclonedx-py

    - Priority 10 +

    cyclonedx-py

    + Priority 10
    -

    Native Python generator. Most accurate for Python ecosystems.

    +

    Native Python generator. Most accurate for Python ecosystems.

    - Python + Python
    -
    +
    -

    cargo-cyclonedx

    - Priority 10 +

    cargo-cyclonedx

    + Priority 10
    -

    Native Rust generator. Most accurate for Rust ecosystems.

    +

    Native Rust generator. Most accurate for Rust ecosystems.

    - Rust + Rust
    -
    +
    -

    cdxgen

    - Priority 20 +

    cdxgen

    + Priority 20
    -

    Broadest ecosystem support. Best choice for Java/Gradle and multi-language projects.

    +

    Broadest ecosystem support. Best choice for Java/Gradle and multi-language projects.

    - Python - JS - Java - Go - Rust - Ruby - +8 more + Python + JS + Java + Go + Rust + Ruby + +8 more
    -
    +
    -

    Syft

    - Priority 35 +

    Syft

    + Priority 35
    -

    Comprehensive scanner by Anchore. Supports CycloneDX and SPDX output including Terraform.

    +

    Comprehensive scanner by Anchore. Supports CycloneDX and SPDX output including Terraform.

    - Python - JS - Go - Terraform - Docker - +7 more + Python + JS + Go + Terraform + Docker + +7 more
    {{< comment >}}SBOM Formats{{< /comment >}}
    -
    -

    CycloneDX

    -

    Default format. Versions 1.3 through 1.7 supported depending on generator.

    - SBOM_FORMAT=cyclonedx +
    +

    CycloneDX

    +

    Default format. Versions 1.3 through 1.7 supported depending on generator.

    + SBOM_FORMAT=cyclonedx
    -
    -

    SPDX

    -

    Versions 2.2, 2.3, and 3.0.1 supported, validated against official schemas.

    - SBOM_FORMAT=spdx +
    +

    SPDX

    +

    Versions 2.2, 2.3, and 3.0.1 supported, validated against official schemas.

    + SBOM_FORMAT=spdx
    {{< comment >}}Beyond SBOMs{{< /comment >}} -
    -

    Beyond SBOMs

    -

    The same pipeline can upload pre-authored VEX, CBOM, and HBOM documents verbatim with BOM_TYPE=vex, cbom, or hbom.

    +
    +

    Beyond SBOMs

    +

    The same pipeline can upload pre-authored VEX, CBOM, and HBOM documents verbatim with BOM_TYPE=vex, cbom, or hbom.

    @@ -425,37 +425,37 @@

    Beyond SBOMs

    {{< comment >}}Vulnerability Analysis Section{{< /comment >}}
    -

    Vulnerability Analysis

    -

    Comprehensive scanning powered by industry-leading databases.

    +

    Vulnerability Analysis

    +

    Comprehensive scanning powered by industry-leading databases.

    {{< comment >}}OSV{{< /comment >}} -
    - Google OSV -

    Google OSV

    -

    +

    + Google OSV +

    Google OSV

    +

    We integrate with the Open Source Vulnerability (OSV) database to provide precise, distributed vulnerability intelligence across a wide range of ecosystems.

    {{< comment >}}Dependency Track{{< /comment >}} -
    - Dependency Track -

    Dependency Track

    -

    - Leverage the power of OWASP Dependency-Track for continuous component analysis. Upload SBOMs directly from CI/CD with UPLOAD_DESTINATIONS=dependency-track. +

    + Dependency Track +

    Dependency Track

    +

    + Leverage the power of OWASP Dependency-Track for continuous component analysis. Upload SBOMs directly from CI/CD with UPLOAD_DESTINATIONS=dependency-track.

    -
    +
    - CI/CD -

    + CI/CD +

    Direct Upload: sbomify-action can upload SBOMs directly to your Dependency Track instance from any CI pipeline.

    - Enterprise -

    + Enterprise +

    Bring Your Own: Enterprise customers can connect their existing Dependency Track instance for unified visibility.

    @@ -468,35 +468,35 @@

    Dependency T {{< comment >}}Enrichment Section{{< /comment >}}
    -

    Enrichment Data Sources

    -

    We integrate with 12 data sources to add metadata to your SBOM components: descriptions, licenses, supplier information, and more.

    +

    Enrichment Data Sources

    +

    We integrate with 12 data sources to add metadata to your SBOM components: descriptions, licenses, supplier information, and more.

    {{< comment >}}Pre-computed Databases{{< /comment >}}
    -

    Pre-computed Databases (Fastest)

    -

    Local data with zero network latency. Checked first for maximum performance.

    +

    Pre-computed Databases (Fastest)

    +

    Local data with zero network latency. Checked first for maximum performance.

    -
    -

    LicenseDB

    -

    Pre-computed license database covering 28 Linux distro versions. Provides authoritative license data for APK, DEB, and RPM packages.

    +
    +

    LicenseDB

    +

    Pre-computed license database covering 28 Linux distro versions. Provides authoritative license data for APK, DEB, and RPM packages.

    - pkg:apk/* - pkg:deb/* - pkg:rpm/* + pkg:apk/* + pkg:deb/* + pkg:rpm/*
    -
    -

    Lifecycle Database

    -

    CLE lifecycle dates (release, end-of-support, end-of-life) for major runtimes and frameworks following ECMA-428.

    +
    +

    Lifecycle Database

    +

    CLE lifecycle dates (release, end-of-support, end-of-life) for major runtimes and frameworks following ECMA-428.

    - Python - PHP - Go - Rust - Django - Rails - +more + Python + PHP + Go + Rust + Django + Rails + +more
    @@ -504,87 +504,87 @@

    Lifecycle Database

    {{< comment >}}Native Sources{{< /comment >}}
    -

    Native Package Registries

    -

    Authoritative data direct from the ecosystem's official source.

    +

    Native Package Registries

    +

    Authoritative data direct from the ecosystem's official source.

    -
    -

    PyPI

    -

    Python Package Index

    - pkg:pypi/* +
    +

    PyPI

    +

    Python Package Index

    + pkg:pypi/*
    -
    -

    crates.io

    -

    Rust Package Registry

    - pkg:cargo/* +
    +

    crates.io

    +

    Rust Package Registry

    + pkg:cargo/*
    -
    -

    pub.dev

    -

    Dart/Flutter Packages

    - pkg:pub/* +
    +

    pub.dev

    +

    Dart/Flutter Packages

    + pkg:pub/*
    -
    -

    Debian Sources

    -

    Debian Package Archive

    - pkg:deb/debian/* +
    +

    Debian Sources

    +

    Debian Package Archive

    + pkg:deb/debian/*
    -
    -

    Conan Center

    -

    C/C++ (Conan)

    - pkg:conan/* +
    +

    Conan Center

    +

    C/C++ (Conan)

    + pkg:conan/*
    {{< comment >}}Aggregators{{< /comment >}}
    -

    Package Aggregators

    -

    Multi-ecosystem services providing broad coverage.

    +

    Package Aggregators

    +

    Multi-ecosystem services providing broad coverage.

    -
    +
    -

    deps.dev

    - Google +

    deps.dev

    + Google
    -

    Open source dependency insights from Google. Covers most major ecosystems.

    +

    Open source dependency insights from Google. Covers most major ecosystems.

    -
    +
    - Ecosyste.ms + Ecosyste.ms
    -

    Community-driven package metadata and project health metrics across ecosystems.

    +

    Community-driven package metadata and project health metrics across ecosystems.

    {{< comment >}}Fallback Sources{{< /comment >}}
    -

    Fallback Sources

    -

    Additional coverage when primary sources do not have data.

    +

    Fallback Sources

    +

    Additional coverage when primary sources do not have data.

    -
    -

    PURL Extraction

    -

    Local extraction from package URLs. Maps namespaces to suppliers without API calls.

    +
    +

    PURL Extraction

    +

    Local extraction from package URLs. Maps namespaces to suppliers without API calls.

    -
    -

    ClearlyDefined

    -

    Community-curated license and metadata for open source components.

    +
    +

    ClearlyDefined

    +

    Community-curated license and metadata for open source components.

    -
    -

    Repology

    -

    Cross-distribution package tracking for Linux packages.

    +
    +

    Repology

    +

    Cross-distribution package tracking for Linux packages.

    {{< comment >}}How to enable{{< /comment >}} -
    -

    - How it works: - Enrichment happens automatically when using our GitHub Action or CLI with the enrich flag. +

    +

    + How it works: + Enrichment happens automatically when using our GitHub Action or CLI with the enrich flag.

    - ENRICH=true - or - --enrich + ENRICH=true + or + --enrich
    @@ -592,38 +592,38 @@

    Repology

    {{< comment >}}Augmentation Section{{< /comment >}}
    -

    Augmentation Providers

    -

    Add organizational metadata to your SBOM: supplier info, manufacturer details, VCS context, and more.

    +

    Augmentation Providers

    +

    Add organizational metadata to your SBOM: supplier info, manufacturer details, VCS context, and more.

    -
    -

    sbomify API

    -

    Pull organizational metadata from your sbomify workspace: supplier, manufacturer, authors, and declared license.

    +
    +

    sbomify API

    +

    Pull organizational metadata from your sbomify workspace: supplier, manufacturer, authors, and declared license.

    -
    -

    Local Config

    -

    Override metadata via sbomify.json in your repository for supplier, authors, license, and VCS info.

    +
    +

    Local Config

    +

    Override metadata via sbomify.json in your repository for supplier, authors, license, and VCS info.

    -
    -

    CI/CD Auto-Detection

    -

    Automatically detects VCS URL, commit SHA, and branch from GitHub Actions, GitLab CI, and Bitbucket Pipelines environment variables.

    +
    +

    CI/CD Auto-Detection

    +

    Automatically detects VCS URL, commit SHA, and branch from GitHub Actions, GitLab CI, and Bitbucket Pipelines environment variables.

    -
    -

    Fields Added

    -

    Supplier, manufacturer, authors, license, lifecycle phase, repository URL, commit SHA, branch/ref.

    +
    +

    Fields Added

    +

    Supplier, manufacturer, authors, license, lifecycle phase, repository URL, commit SHA, branch/ref.

    {{< comment >}}How to enable{{< /comment >}} -
    -

    - How it works: +

    +

    + How it works: Augmentation pulls metadata from sbomify and your CI environment.

    - AUGMENT=true - or - --augment + AUGMENT=true + or + --augment
    @@ -636,12 +636,12 @@

    Fields Added

    .then(data => { if (data.tag_name) { const releaseBadge = ` - + - - + + - Release ${data.tag_name} + Release ${data.tag_name} `; diff --git a/content/features/sbom-hierarchy.md b/content/features/sbom-hierarchy.md index 651c466b..6feebf1d 100644 --- a/content/features/sbom-hierarchy.md +++ b/content/features/sbom-hierarchy.md @@ -22,6 +22,6 @@ Beyond static hierarchies, sbomify supports full **release management** for your - **Accurate History**: When you create a new release, your old SBOMs remain unchanged and accurate for that point in time. - **Efficient Reuse**: Because we leverage linkage, multiple products (or versions of a product) can reuse the same component SBOMs. You simply create a composition that points to the relevant artifacts for a given release, avoiding duplication and keeping your data clean. -
    +
    {{< d2 "sbom-releases" >}}
    diff --git a/content/features/trust-center.html b/content/features/trust-center.html index 37037757..effa86a3 100644 --- a/content/features/trust-center.html +++ b/content/features/trust-center.html @@ -1,23 +1,24 @@ --- title: Trust Center +layout: integrations description: "Build customer confidence with a dedicated trust center. Share SBOMs, compliance documents, and security artifacts publicly to demonstrate transparency." aliases: - /features/sbom-hub/ - /features/public-sbom-portal/ --- -
    -Turn transparency into a competitive advantage. Showcase your security posture with a branded, automated Trust Center. +
    +Turn transparency into a competitive advantage. Showcase your security posture with a branded, automated Trust Center.
    -
    +
    sbomified -
    View Live Trust Center
    -
    +
    View Live Trust Center
    +
    Explore Demo
    @@ -27,18 +28,18 @@
    -

    Everything You Need

    -

    A complete platform for managing and sharing your security posture

    +

    Everything You Need

    +

    A complete platform for managing and sharing your security posture

    - {{< feature-card icon_bg_class="bg-purple-50" icon_text_class="text-[#8A7DFF]" title="Branded Portal" description="Your trust center, your brand. Use your own domain and logo to present a unified professional image to customers." >}} + {{< feature-card icon_bg_class="bg-surface-strong" icon_text_class="text-ink" title="Branded Portal" description="Your trust center, your brand. Use your own domain and logo to present a unified professional image to customers." >}} {{< /feature-card >}} - {{< feature-card icon_bg_class="bg-blue-50" icon_text_class="text-blue-500" title="Automated Publishing" description="Stop manual uploads. Your trust center stays in sync with your CI/CD pipeline, automatically publishing new SBOMs for every software release. Manage complex hierarchies with ease." >}} + {{< feature-card icon_bg_class="bg-surface-strong" icon_text_class="text-ink" title="Automated Publishing" description="Stop manual uploads. Your trust center stays in sync with your CI/CD pipeline, automatically publishing new SBOMs for every software release. Manage complex hierarchies with ease." >}} {{< /feature-card >}} - {{< feature-card icon_bg_class="bg-pink-50" icon_text_class="text-[#d874a9]" title="Flexible Access Control" description="Choose your audience. Make your Trust Center public for broad transparency, or private for invited internal and external stakeholders only." >}} + {{< feature-card icon_bg_class="bg-surface-strong" icon_text_class="text-ink" title="Flexible Access Control" description="Choose your audience. Make your Trust Center public for broad transparency, or private for invited internal and external stakeholders only." >}} {{< /feature-card >}}
    @@ -48,24 +49,24 @@

    Everything You Ne
    -
    Why Now
    -

    The New Standard for Transparency

    -

    +

    Why Now
    +

    The New Standard for Transparency

    +

    Trust Centers are becoming essential. Buyers now expect vendors to provide near real-time data about security posture and compliance status.

    -
    - +
    +
    -
    EU Cyber Resilience Act (CRA)
    -
    SBOMs are now expected as part of Trust Centers for stakeholders
    +
    EU Cyber Resilience Act (CRA)
    +
    SBOMs are now expected as part of Trust Centers for stakeholders
    -
    - +
    +
    -
    PCI DSS 4.0
    -
    First major framework adopting SBOMs as security posture requirement
    +
    PCI DSS 4.0
    +
    First major framework adopting SBOMs as security posture requirement
    @@ -83,9 +84,9 @@

    The New Standard for Transpar
    -
    Comprehensive Coverage
    -

    Share More Than Just SBOMs

    -

    +

    Comprehensive Coverage
    +

    Share More Than Just SBOMs

    +

    A complete trust center goes beyond dependencies. Provide a comprehensive view of your security posture by hosting all critical artifacts in one searchable library. Everything is also consumable programmatically via the Transparency Exchange API (TEA), and your security contact details can be published as an RFC 9116 security.txt.

      @@ -107,19 +108,19 @@

      Share More Than Just SBOMs
      -

      Real-World Impact

      -

      See how Trust Centers transform the way you do business

      +

      Real-World Impact

      +

      See how Trust Centers transform the way you do business

      - {{< impact-card icon_bg_class="bg-purple-50" icon_text_class="text-[#8A7DFF]" title="Accelerate Sales" description="\"Do you have a SOC 2?\" Send a link instead of scheduling a call. Reduce questionnaire response times from weeks to minutes." link_text="Sales Enablement" >}} + {{< impact-card icon_bg_class="bg-surface-strong" icon_text_class="text-ink" title="Accelerate Sales" description="\"Do you have a SOC 2?\" Send a link instead of scheduling a call. Reduce questionnaire response times from weeks to minutes." link_text="Sales Enablement" >}} {{< /impact-card >}} - {{< impact-card icon_bg_class="bg-blue-50" icon_text_class="text-blue-500" title="Build Trust" description="Show, don't just tell. Proactive transparency proves your commitment to security before a prospect even asks." link_text="Brand Reputation" >}} + {{< impact-card icon_bg_class="bg-surface-strong" icon_text_class="text-ink" title="Build Trust" description="Show, don't just tell. Proactive transparency proves your commitment to security before a prospect even asks." link_text="Brand Reputation" >}} {{< /impact-card >}} - {{< impact-card icon_bg_class="bg-amber-50" icon_text_class="text-amber-500" title="Streamline Ops" description="Eliminate ad-hoc email requests. Give customers self-service access to the documents they need, 24/7." link_text="Operational Efficiency" >}} + {{< impact-card icon_bg_class="bg-surface-strong" icon_text_class="text-ink" title="Streamline Ops" description="Eliminate ad-hoc email requests. Give customers self-service access to the documents they need, 24/7." link_text="Operational Efficiency" >}} {{< /impact-card >}}
      diff --git a/content/posts/2024-04-07-how-to-create-an-sbom.md b/content/posts/2024-04-07-how-to-create-an-sbom.md index 37398a26..754993cb 100644 --- a/content/posts/2024-04-07-how-to-create-an-sbom.md +++ b/content/posts/2024-04-07-how-to-create-an-sbom.md @@ -16,16 +16,16 @@ comments: [] slug: how-to-create-an-sbom --- -
      +
      -
      -

      📘 Updated Guides Available

      -

      This article provides a general overview, but we now have more comprehensive and up-to-date guides available. Check out our SBOM Generation Guides for language-specific instructions covering Python, JavaScript, Go, Rust, Java, Docker, and many more.

      +

      📘 Updated Guides Available

      +

      This article provides a general overview, but we now have more comprehensive and up-to-date guides available. Check out our SBOM Generation Guides for language-specific instructions covering Python, JavaScript, Go, Rust, Java, Docker, and many more.

      diff --git a/content/posts/2024-10-04-github-action-update.md b/content/posts/2024-10-04-github-action-update.md index 15d1ca7d..9efc8c79 100644 --- a/content/posts/2024-10-04-github-action-update.md +++ b/content/posts/2024-10-04-github-action-update.md @@ -15,7 +15,7 @@ In the last few weeks, we've worked hard on overhauling the [sbomify GitHub Acti As a refresher, the SBOM lifecycle looks like this: -
      +
      {{< d2 "lifecycle" >}}
      diff --git a/content/posts/2025-02-21-mastering-sbom-generation-with-yocto.md b/content/posts/2025-02-21-mastering-sbom-generation-with-yocto.md index a5c66adb..f80e04c2 100644 --- a/content/posts/2025-02-21-mastering-sbom-generation-with-yocto.md +++ b/content/posts/2025-02-21-mastering-sbom-generation-with-yocto.md @@ -200,13 +200,13 @@ Overall, Yocto's capabilities for generating SPDX SBOMs are robust, making it an Once you have your SBOMs, you can use sbomify to distribute your SBOMs to your stakeholders. Since we already have all the SBOMs for each package, we need to create a component in sbomify for each package. We can help you with this, but it's important to note that this is just the beginning of the [SBOM lifecycle](/features/generate-collaborate-analyze/). -
      +
      {{< d2 "generation" >}}
      We still need to go through the augmentation process, which adds information to the SBOM about you as the vendor. In this particular case, you might not need to go through the Enrichment process, since Yocto already has all the information we need, but you might still want to sign your SBOMs. -
      +
      {{< d2 "sbom-hierarchy" >}}
      diff --git a/content/posts/2026-03-01-why-were-bullish-on-tea.md b/content/posts/2026-03-01-why-were-bullish-on-tea.md index cecaa97e..1439e612 100644 --- a/content/posts/2026-03-01-why-were-bullish-on-tea.md +++ b/content/posts/2026-03-01-why-were-bullish-on-tea.md @@ -29,7 +29,7 @@ At the heart of TEA is the **Transparency Exchange Identifier (TEI)**, a URN sch Here's the elegant part: given a TEI, a TEA client can automatically resolve it through DNS, discover the API endpoint via the IETF `.well-known` namespace, and retrieve all transparency artifacts for that product, all without any manual intervention. -
      +
      {{< d2 "tea-flow" >}}
      diff --git a/content/pricing.html b/content/pricing.html index a176e96b..c803d95a 100644 --- a/content/pricing.html +++ b/content/pricing.html @@ -15,7 +15,7 @@ answer: "Yes! Sbomify is open source and available for self-hosting. Check out our GitHub repository for installation instructions and documentation." --- -
      +
      @@ -117,7 +117,8 @@

      Features

      Enterprise

      - Custom Quote + Custom + quote
      @@ -146,7 +147,7 @@

      Features

      @@ -154,32 +155,32 @@

      Features

      {{< comment >}}FAQ Section{{< /comment >}}
      -

      Frequently Asked Questions

      +

      Frequently Asked Questions

      -
      -

      What's included in the free tier?

      -

      The Community tier is perfect for open source projects and includes public SBOM hosting, 1 product with 5 components, and community support.

      +
      +

      What's included in the free tier?

      +

      The Community tier is perfect for open source projects and includes public SBOM hosting, 1 product with 5 components, and community support.

      -
      -

      Can I upgrade or downgrade at any time?

      -

      Yes, you can change your plan at any time. Your billing will be prorated accordingly.

      +
      +

      Can I upgrade or downgrade at any time?

      +

      Yes, you can change your plan at any time. Your billing will be prorated accordingly.

      -
      -

      What payment methods do you accept?

      -

      We accept all major credit cards and can arrange alternative payment methods for enterprise customers.

      +
      +

      What payment methods do you accept?

      +

      We accept all major credit cards and can arrange alternative payment methods for enterprise customers.

      -
      -

      Do you offer custom solutions?

      -

      Yes, our enterprise tier can be customized to meet your specific needs. Contact our sales team to learn more.

      +
      +

      Do you offer custom solutions?

      +

      Yes, our enterprise tier can be customized to meet your specific needs. Contact our sales team to learn more.

      -
      -

      Can I self-host Sbomify?

      -

      Yes! Sbomify is open source and available for self-hosting. Check out our GitHub repository for installation instructions and documentation.

      +
      +

      Can I self-host Sbomify?

      +

      Yes! Sbomify is open source and available for self-hosting. Check out our GitHub repository for installation instructions and documentation.

      diff --git a/content/resources.md b/content/resources.md index 92d5b751..45047f02 100644 --- a/content/resources.md +++ b/content/resources.md @@ -262,7 +262,7 @@ For detailed information on SBOM compliance requirements across NTIA, CISA, EU C - [Open Regulatory Compliance Working Group (ORC WG)](https://orcwg.org/) – Hosted by the Eclipse Foundation, ORC WG is where open source foundations, maintainers, and industry work out what the CRA means for open source in practice. Its [CRA Hub](https://github.com/orcwg/cra-hub) collects an FAQ, a resource inventory, a summary of the requested harmonised standards, and input on the important and critical product categories. Start here if you are working out whether you are an **open-source steward** under [CRA Article 24](/compliance/eu-cra/) rather than a manufacturer.
      - + Edit this page on GitHub diff --git a/content/share-and-collaborate.md b/content/share-and-collaborate.md index 80e8a77a..680e2f57 100644 --- a/content/share-and-collaborate.md +++ b/content/share-and-collaborate.md @@ -8,7 +8,7 @@ description: "Centralize SBOM management and share software transparency artifac sbomify is a central hub for managing and sharing SBOMs and compliance artifacts. Suppliers upload SBOMs automatically through CI/CD integrations, while stakeholders (customers, auditors, and internal teams) access them through the [Trust Center](/features/trust-center/) or direct exports. -
      +
      {{< d2 "sbom-sharing" >}}
      @@ -24,7 +24,7 @@ Both CycloneDX and SPDX formats are fully supported. Most real-world products are composed of multiple backend services, frontend components, and infrastructure, each with its own SBOM. sbomify organizes these by grouping **Components** directly under **Products**, reflecting how your software is actually structured. -
      +
      {{< d2 "sbom-hierarchy" >}}
      diff --git a/content/zero-to-hero.md b/content/zero-to-hero.md index c56b67fa..2be497cb 100644 --- a/content/zero-to-hero.md +++ b/content/zero-to-hero.md @@ -5,7 +5,7 @@ title: From Zero to SBOM Hero description: "Generate your first compliance-ready SBOM in under 5 minutes. A quick-start guide to SBOM generation, quality, and distribution." --- -
      +
      {{< d2 "zero-to-hero" >}}
      @@ -27,7 +27,7 @@ Most SBOM generation tools produce incomplete SBOMs that: - **License compliance**: Missing license data means legal blind spots - **Compliance failures**: [NTIA minimum elements](/compliance/ntia-minimum-elements/), [CISA requirements](/compliance/cisa-minimum-elements/), and [EU CRA](/compliance/eu-cra/) all set quality bars that raw generation tools don't meet -
      +
      {{< d2 "quality-gap" >}}
      @@ -47,7 +47,7 @@ The [sbomify action](https://github.com/sbomify/sbomify-action) is **fully open See [Integrations](/features/integrations/) for the full list of enrichment sources. -
      +
      {{< d2 "sbomify-action-flow" >}}
      @@ -73,7 +73,7 @@ Your SBOMs, your infrastructure, your choice. Use the action standalone or with A Software Bill of Materials (SBOM) is like the ingredients list on a food package - but for software. It documents every component, library, and dependency in your application. -
      +
      {{< d2 "what-is-sbom" >}}
      @@ -139,7 +139,7 @@ All options handle generation + augmentation + enrichment automatically. The Doc SBOMs generated outside CI/CD (or without signing) could be altered post-generation. No cryptographic proof means no way to verify authenticity or integrity. -
      +
      {{< d2 "trust-chain" >}}
      @@ -157,7 +157,7 @@ The sbomify action supports attestation via GitHub Actions (Sigstore) and other For those who want to understand what's happening under the hood: -
      +
      {{< d2 "generation" >}}
      @@ -176,7 +176,7 @@ When you're generating one SBOM, management is easy. When you have dozens or hun [Learn about SBOM Hierarchy →](/features/sbom-hierarchy/) -
      +
      {{< d2 "store-analyze-enrich" >}}
      @@ -222,5 +222,5 @@ Regulators and buyers are no longer asking "do you have security?" - they're ask

      Ready to become an SBOM Hero?

      Start generating compliance-ready SBOMs in minutes with sbomify.

      Get Started Free -

      Or explore our guides to learn more.

      +

      Or explore our guides to learn more.

      diff --git a/hugo.toml b/hugo.toml index 62f487cb..d6160f4c 100644 --- a/hugo.toml +++ b/hugo.toml @@ -37,6 +37,10 @@ ignoreFiles = ["_config\\.yml$", "_config_development\\.yml$", "Gemfile", "Gemfi [markup.goldmark] [markup.goldmark.renderer] unsafe = true + [markup.tableOfContents] + startLevel = 2 + endLevel = 3 + ordered = false [markup.highlight] style = "monokai" noClasses = false diff --git a/layouts/404.html b/layouts/404.html index ea138637..2910e61b 100644 --- a/layouts/404.html +++ b/layouts/404.html @@ -1,34 +1,33 @@ {{ define "main" }}
      -
      - {{ partial "aurora.html" . }} +
      -

      - Oops, 404! +

      + Oops, 404!

      -

      +

      This page has gone missing from our supply chain

      -
      +
      -
      -

      +

      +

      We couldn't find what you were looking for, but don't worry — unlike a missing SBOM, this is easy to fix.

      - + Take Me Home -
      -

      Or explore these instead:

      +
      +

      Or explore these instead:

      diff --git a/layouts/_default/about.html b/layouts/_default/about.html index 1f203814..d36829af 100644 --- a/layouts/_default/about.html +++ b/layouts/_default/about.html @@ -24,35 +24,34 @@ }
      -
      - {{ partial "aurora.html" . }} +
      -

      - {{ .Title }} +

      + {{ .Title }}

      {{ with .Params.description }} -

      +

      {{ . }}

      {{ end }}
      -
      +
      -
      +
      {{ partial "content.html" . }}
      {{/* Advisors Section */}}
      -

      Advisors

      +

      Advisors

      {{ range $i, $advisor := site.Data.advisors }} {{ $mod := mod (add $i 1) 2 }} -
      +
      {{ $imgPath := strings.TrimPrefix "/assets/" $advisor.image }} @@ -70,15 +69,15 @@

      Ad
      -

      {{ $advisor.name }}

      +

      {{ $advisor.name }}

      {{ with $advisor.linkedin }} {{ partial "icon.html" (dict "name" "linkedin" "class" "w-5 h-5") }} {{ end }}
      -

      {{ $advisor.role }}

      -

      +

      {{ $advisor.role }}

      +

      {{ $advisor.bio }}

      diff --git a/layouts/_default/integrations.html b/layouts/_default/integrations.html index 66952bb6..447eb797 100644 --- a/layouts/_default/integrations.html +++ b/layouts/_default/integrations.html @@ -1,22 +1,21 @@ {{ define "main" }}
      -
      - {{ partial "aurora.html" . }} +
      {{/* Content */}}
      -

      - {{ .Title }} +

      + {{ .Title }}

      {{ with .Params.description }} -

      +

      {{ . }}

      {{ end }}
      -
      +
      {{ partial "content.html" . }}
      diff --git a/layouts/_default/list.html b/layouts/_default/list.html index 6ccc0bfe..d97cccda 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -1,27 +1,32 @@ {{ define "main" }}
      -
      - {{ partial "aurora.html" . }} - -
      -

      - {{ .Title }} + {{/* Same hero and reading measure as _default/single.html: these section + pages (guides, compliance, sbomify-action, ...) are long-form prose. */}} +
      +
      +

      + {{ .Title }}

      {{ with .Params.description }} -

      +

      {{ . }}

      {{ end }}
      -

      + -
      - {{ if .Content }} -
      - {{ partial "tldr.html" . }} - {{ partial "content.html" . }} -
      - {{ end }} -
      + {{ if .Content }} +
      + {{ $toc := partial "toc-enabled.html" . }} +
      +
      + {{ partial "tldr.html" . }} + {{ partial "toc.html" (dict "page" . "mode" "inline") }} + {{ partial "content.html" . }} +
      + {{ partial "toc.html" (dict "page" . "mode" "aside") }} +
      +
      + {{ end }}
      {{ end }} diff --git a/layouts/_default/pricing.html b/layouts/_default/pricing.html index f751618b..61244c76 100644 --- a/layouts/_default/pricing.html +++ b/layouts/_default/pricing.html @@ -1,6 +1,7 @@ {{ define "main" }} {{ end }} diff --git a/layouts/faq/list.html b/layouts/faq/list.html index 0efc6f2d..aad00d01 100644 --- a/layouts/faq/list.html +++ b/layouts/faq/list.html @@ -1,25 +1,24 @@ {{ define "main" }}
      -
      - {{ partial "aurora.html" . }} +
      {{/* Content */}}
      -

      - {{ .Title }} +

      + {{ .Title }}

      {{ with .Params.description }} -

      +

      {{ . }}

      {{ end }}
      -
      +
      {{ with .Content }} -
      +
      {{ partial "content.html" $ }}
      {{ end }} @@ -31,15 +30,15 @@

      - +

      {{/* No results message */}} @@ -47,19 +46,19 @@

      {{ range .Pages.ByWeight }} -
      -

      - +
      +

      + {{ .Title }} {{ with .Params.plan }} - {{ . }} + {{ . }} {{ end }}

      {{ with .Params.answer }} -

      {{ . }}

      +

      {{ . }}

      {{ end }} - + Read full answer →
      @@ -68,20 +67,20 @@

      {{/* Show more button */}} {{/* CTA Section */}} -
      -

      Still have questions?

      -

      Our team is here to help you get started with SBOMs and supply chain security.

      +
      +

      Still have questions?

      +

      Our team is here to help you get started with SBOMs and supply chain security.

      diff --git a/layouts/faq/single.html b/layouts/faq/single.html index 34f4d88f..d61444f8 100644 --- a/layouts/faq/single.html +++ b/layouts/faq/single.html @@ -1,43 +1,42 @@ {{ define "main" }}
      -
      - {{ partial "aurora.html" . }} +
      {{/* Content */}}
      -

      - {{ .Title }} +

      + {{ .Title }}

      {{ with .Params.plan }} - {{ . }} plan + {{ . }} plan {{ end }}
      -
      +
      {{/* Breadcrumb */}} -

    {{ end }} diff --git a/layouts/posts/single.html b/layouts/posts/single.html index 6a56239b..3108668f 100644 --- a/layouts/posts/single.html +++ b/layouts/posts/single.html @@ -1,14 +1,13 @@ {{ define "main" }}
    -
    - {{ partial "aurora.html" . }} +
    -

    - {{ .Title }} +

    + {{ .Title }}

    -
    +
    {{ with .Params.author }}{{ with .display_name }} {{- $authorName := . -}} {{- $authorFound := false -}} @@ -21,17 +20,17 @@

    - By {{ if $authorFound }}{{ $authorName }}{{ else }}{{ $authorName }}{{ end }} + By {{ if $authorFound }}{{ $authorName }}{{ else }}{{ $authorName }}{{ end }} - • + • {{ end }}{{ end }} {{ with .GetTerms "categories" }} {{ range . }} - • - {{ .LinkTitle }} + • + {{ .LinkTitle }} {{ end }} {{ end }}

    @@ -39,29 +38,32 @@

    {{ range . }} - {{ .LinkTitle }} + {{ .LinkTitle }} {{ end }}

    {{ end }}
    -
    -
    -
    +
    + {{ $toc := partial "toc-enabled.html" . }} +
    + + {{ partial "toc.html" (dict "page" . "mode" "aside") }}
    -

diff --git a/layouts/shortcodes/trust-center-pillars-grid.html b/layouts/shortcodes/trust-center-pillars-grid.html index ff8b973d..bc1560e4 100644 --- a/layouts/shortcodes/trust-center-pillars-grid.html +++ b/layouts/shortcodes/trust-center-pillars-grid.html @@ -1,22 +1,22 @@
-
- - Vendor agnostic +
+ + Vendor agnostic
-
- - No vendor lock-in +
+ + No vendor lock-in
-
- - SBOM-driven +
+ + SBOM-driven
-
- - CRA-focused +
+ + CRA-focused
-
- - Self-hostable +
+ + Self-hostable
diff --git a/layouts/shortcodes/trust-center-pillars.html b/layouts/shortcodes/trust-center-pillars.html index f6635b12..954bf90a 100644 --- a/layouts/shortcodes/trust-center-pillars.html +++ b/layouts/shortcodes/trust-center-pillars.html @@ -1,26 +1,26 @@
-
-

Built on Open Principles

+
+

Built on Open Principles

-
- - Vendor agnostic +
+ + Vendor agnostic
-
- - No lock-in +
+ + No lock-in
-
- - SBOM-driven +
+ + SBOM-driven
-
- - CRA-focused +
+ + CRA-focused
-
- - Self-hostable +
+ + Self-hostable
diff --git a/layouts/shortcodes/video-embed-native.html b/layouts/shortcodes/video-embed-native.html index 756bf56c..0b476381 100644 --- a/layouts/shortcodes/video-embed-native.html +++ b/layouts/shortcodes/video-embed-native.html @@ -1,5 +1,5 @@
-
+