Repository navigation
Reskin the site to Brand Guidelines v2.0 with design tokens - #159
Merged
Merged
Conversation
Move the marketing site off the purple-on-dark theme and onto the v2.0 brand: white canvas with navy type, Mist surfaces, and Signal Orange kept to one moment per layout. - Add _assets/css/tokens.css: the published palette as primitives (navy scale, mist, orange scale, semantic full/tint pairs) plus role tokens (ink, canvas, surface, line, inverse, accent, focus, code), typography (Figtree, the product's mono stack, weights, tracking, leading), radii and shadows. Imported via postcss-import. - tailwind.config.js now replaces the default palette with the tokens, so off-brand classes cannot creep back. Legacy purple/primary*/gray-* classes across layouts and content are migrated to the role tokens, and hard-coded hexes in templates and <style> blocks are gone. - Shared components (btn-primary/-navy/-secondary/-inverse, link, eyebrow, eyebrow-chip, tag, card, hero) carry the brand rules: white type on Orange 700 fills, orange text on white in Orange 700, body copy Navy 80 or darker, status colours for status only. - Swap Inter for self-hosted Figtree Variable; code uses the ui-monospace / SF Mono stack at ~90%. - Light page heroes with a static orange haze replace the animated aurora and gradient headline text. Header is the navy-on-white lockup; footer and select bands stay white on navy. - Pricing page restyled light, with the featured plan as the single navy card and the page's one orange CTA. - Chroma code theme: Regular on navy, strings in Orange 300. - D2 theme moved to brand colours and all diagrams regenerated. - Navy variants of the logo, OSV and Dependency-Track marks for light surfaces. - Document the token system and brand rules in CLAUDE.md. axe colour-contrast reports zero violations on 16 key pages plus a 44-page sample of the sitemap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
- The base <button> hover fill now has zero specificity (:where(button:hover)), so a button's own bg-* utility still wins. Before this, hovering the footer "Cookie settings" or the FAQ "Show more" button painted it orange. - FAQ "Clear search" unwinds the base button fill instead of showing navy text on orange. - The inverse focus ring (Signal Orange) now also applies on the cookie banner, the featured pricing card and .cta-box, where Orange 700 is below 3:1 against navy. - A bare `border` / `divide-*` defaults to the line token again, and a bare `ring` to the focus token. Replacing the palette had left them on currentColor and Tailwind's blue. - FAQ search placeholder moves from Navy 40 (2.4:1) to ink-subtle. - Hand-rolled orange CTAs use .btn-primary (new .btn-lg size) and the 14 pasted link recipes on the integrations page use .link. - The trust-center inline link stops using the info colour as decoration. - Drop the header backdrop-blur (a per-scroll re-composite over a white page), no-op hovers and blur on the author social links, and the unused .btn-inverse. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
- Show where you are: the desktop and mobile nav mark the current section with aria-current="page" and a filled pill (blog posts count as Blog, since they live under /YYYY/MM/DD/). - Stop non-clickable cards from behaving like links. Homepage section cards, feature/impact/artifact cards and the trust-center mock lifted, scaled or grew a shadow on hover, which signals "click me" on elements that do nothing. Hover feedback stays on real links and buttons. - Section pages (_default/list.html: guides, compliance, sbomify-action, features) use the same centred hero and 4xl reading measure as single pages. They ran at 7xl, about 130 characters a line on desktop for long-form prose. - Blog, tag and taxonomy grids sit on the surface background, so the hero ends visibly instead of trailing into ~190px of blank canvas. - Homepage hero CTAs stack full-width on mobile instead of three ragged pill widths, using btn-primary/btn-secondary at btn-lg. - Integration marks render monochrome like the press row and take colour on hover, so the row no longer mixes pink, red and green third-party colours next to the brand. - Footer social icons get 40px hit areas (were 20px). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
- Homepage hero has two calls to action (Get Started Free, Contact Us). Slack moves to the footer's Company column. - Homepage rhythm: sections widen to 6xl with prose held to a 3xl measure. Trust Center puts its copy beside the artifact mock, and the two text-only sections (CRA, Self-Host or Cloud) sit side by side instead of stacking as five near-identical cards. - Pricing: below 1200px the featured Business plan comes first, and Enterprise reads "Custom / quote" on one line. - Long-form pages get an "On this page" table of contents (h2/h3 from Hugo's TableOfContents): a sticky sidebar at xl and a collapsible <details> block below it, no JavaScript. It shows when a page has at least 5 entries and 1000 words (79 pages today). Opt out with `toc: false`. - Blog cards show their category as an eyebrow above the title. - Footer becomes brand plus three labelled columns (Product, Resources, Company), with legal and social on one bottom row. - The hero's orange haze shrinks to a corner glow below the sm breakpoint. - .eyebrow-chip is w-fit so it does not stretch inside flex columns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
Replace the grey tray of three floating cards with a single product panel that reads like a real trust center: - Header with the organisation, its mono domain and a Public status. - Divided document rows: icon, title, mono version/file metadata, and a status on the right (dot plus label, the semantic pairing from the brand guide), with "Request access" on the gated pentest report to show access control. - A navy footer strip showing the same documents over the Transparency Exchange API, set as code (Regular on navy, strings in Orange 300). - Drop the decorative orange blur blob. The code-* role tokens are now exposed to Tailwind (bg-code-bg, text-code-text, text-code-string, text-code-muted). The mock is marked aria-hidden since the surrounding copy carries the meaning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
The strip showed an invented endpoint (/tea/v1/products); TEA discovery starts at /.well-known/tea, so it was both decorative and wrong. Without it the panel is narrower on phones, so the homepage cards use p-6 below sm, the CI status reads "Synced" and "Request access" shortens to "Request" on small screens to keep titles from truncating. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
The page rendered through _default/single.html, which wraps content in a 4xl prose card. Its markup (three-up feature cards, two-column sections, the artifacts panel) was written for full width, so cards wrapped about one word per line and the panel was squeezed into a narrow column. It now uses the same wide layout as the Integrations page. The "Built on Open Principles" block and the cta-ready card become white cards so they no longer disappear into the grey surface. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
vpetersson
approved these changes
Oct 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Reskins sbomify.com to the sbomify Brand Guidelines v2.0, built on a design token layer instead of hard-coded colours.
Why
The site still used the old purple-on-dark theme (purple
#8A7DFF, pink/orange gradients, Inter), with colours hard-coded as hexes and one-off Tailwind names across templates, content and<style>blocks. The v2.0 guide calls for a white canvas with navy type, Mist surfaces, Signal Orange kept for emphasis, Figtree, and a system mono for code.How
Tokens (
_assets/css/tokens.css, imported viapostcss-import)derived(e.g. Navy 5, the Orange 700 hover) and only extend a published scale.ink,ink-muted,canvas,surface,line,inverse,accent,accent-strong,focus,code-*, plus type (Figtree, the product's mono stack, weights, tracking, leading), radii and shadows.tailwind.config.jsreplaces the default palette with these tokens, so classes likeindigo-500no longer exist. Opacity modifiers still work.Components in
tailwind.css:btn-primary,btn-navy,btn-secondary,btn-inverse,link,eyebrow,eyebrow-chip,tag,card,hero. These carry the guide's rules:Templates and content
layouts/andcontent/now only finds third-party brand colours (the LinkedIn blue) and code samples.Assets
font-display: swapand preloaded.native.css): Regular on navy, strings in Orange 300._d2/theme.d2moved to brand colours, and all diagrams were regenerated.CLAUDE.mddocuments the token system and the brand rules.Follow-up work in this PR
Code review fixes (
92c0c60)<button>hover fill had enough specificity to override a button's ownbg-*utility. It now uses:where(button:hover), with zero specificity.borderdefaults to the line token and a bareringto the focus token..btn-primaryand.link.UI/UX pass (
117e382,54f30ad)aria-current.xland a<details>block below it, with no JS. It needs at least 5 entries and 1000 words, and pages can opt out withtoc: false.Trust center (
0167aa3,9cfef5b,fab8db9)/features/trust-center/uses the wide layout. Its markup was being squeezed into the 4xl prose card.Verification
bun run build:css,bun run build:d2andhugo --minify --environment productionall build cleanly.bun run lint:markdownpasses.Not in this PR
assets/images/d2/tea-architecture.svghas no D2 source and isn't referenced anywhere, so I left it alone.package-lock.jsonis stale (CI and Docker use bun) and still lists Inter. I didn't touch it because npm is not the package manager here.🤖 Generated with Claude Code