# Indifferent Broccoli brand tokens — extracted 2026-05-01 Source pages fetched live via `curl`: - HTML: `https://indifferentbroccoli.com/` (100,017 bytes) - CSS: `https://indifferentbroccoli.com/css/output.css` (62,243 bytes — Tailwind-compiled) The site does not publish authored CSS variables for brand colors (it's Tailwind output with a few brand hex literals overlaid). The tokens below are reverse-engineered from the compiled stylesheet by frequency and semantic role. ## 1. Colors (raw values from `output.css`) | Token | Hex | oklch (approx) | Usage in IB CSS | Lines | |---|---|---|---|---| | **brand primary green** | `#5EFF0D` | oklch(0.88 0.27 138) | `.stroke-primary { stroke: #5EFF0D }`, `.decoration-primary { text-decoration-color: #5EFF0D }`, file-selector-button border | output.css:1674, 2090, 2233-2234, 2730 | | brand secondary blue | `#0050FF` | oklch(0.43 0.27 264) | text/link color appearances | 4 occurrences | | dark surface | `#0A141E` | oklch(0.20 0.025 240) | navy panel background | 1 occurrence | | accent pink | `#c0a0b9` | oklch(0.74 0.05 340) | one section bg | 1 occurrence | | white | `#fff` | — | text on dark, panels on light | 6 occurrences | | neutral text | `#6b7280` (tw-gray-500) | — | muted body text | 4 occurrences | | neutral muted | `#9ca3af` (tw-gray-400) | — | further-muted | 2 occurrences | ## 2. Fonts `` `` | Role | Family | Weights | Source | |---|---|---|---| | heading / display | **Sora** | 400, 600 | Google Fonts (CDN) | | body / paragraph | **Open Sans** | 400, 600 | Google Fonts (CDN) | | icons | Font Awesome | — | `/vendor/font-awesome/css/font-awesome.min.css` (out of scope for sortof) | The site does not self-host these via @fontsource. We will hot-link the same Google Fonts URLs as IB to inherit identically. Mono font is unspecified by IB; sortof keeps its existing **JetBrains Mono** for code/output blocks (no brand conflict). ## 3. Border radii (compiled Tailwind) | Value | Frequency | Likely role | |---|---|---| | `0.25rem` (4px) | 2 | small corners (rounded) | | `0.5rem` (8px) | 1 | medium (rounded-lg) | | `0.75rem` (12px) | 1 | larger (rounded-xl) | | `9999px` | 1 | pill / chip | | `100%` | 1 | circle (logo container) | | `0` / `0px` | 3 | flat sections | ## 4. Shadows ```css box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); /* card lift */ box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.1); /* focus ring (green-tinted) */ ``` ## 5. Brand assets | Asset | URL | Local copy | |---|---|---| | primary mark | `https://indifferentbroccoli.com/img/broccoli_shadow_square.png` | `/opt/sortof/frontend/img/broccoli_shadow_square.png` (866×866 PNG, 19,075 bytes) | | smiley wordmark | `(:|)` (text glyph) — appears in `` ("Indifferent Broccoli (:|)") and footer-class flourish | Pulled the broccoli image locally so we don't hot-link IB's CDN. Same file used for both header brand mark and favicon. ## 6. Voice cues (verbatim from page) The deadpan house style — additive, not replacement, when applied to sortof: - **Hero**: "Host your own game server / Or not... we don't care" - **Sub-hero**: "Premium game servers with instant deployment, full mod support, and a control panel so simple your cat could use it." - **Trim**: "Or not." - **Title** (browser tab): "Indifferent Broccoli (:|)" Keying off these, the IB voice contract is: bold functional claim, then immediate self-undercut. Reverse-pleasantness. No exclamation points. Lowercase or sentence-case (no shouting). ## 7. Header layout (extracted) ``` [broccoli_shadow_square.png] [indifferent broccoli wordmark] [Games | Top Servers | About Us | Contact | Wiki | Merch | Open Source] [Start New Server +] [Log in] ``` For sortof, the structural mapping: ``` [broccoli_shadow_square.png] [sortof] [tagline] [github] [docs] ``` Footer references stay (REfRigERatoR's mod load order sorter / "a thing by indifferent broccoli") but get the `(:|)` glyph as a small inline mark next to "indifferent broccoli", linking to `https://indifferentbroccoli.com`. ## 8. Final palette decision (reconciliation with a11y) Per brief: **IB primary green is the brand anchor; status colors defer to the a11y pass.** | Role | Token | Value | Source | |---|---|---|---| | Brand primary (sortof = an IB thing) | `--brand-primary` | `#5EFF0D` | IB literal | | Brand surface (alt anchor) | `--brand-anchor-bg` | `#0A141E` | IB literal | | Status: success | `--acc-success` | oklch(0.78 0.13 165) | a11y (Okabe-Ito bluish-green). Unchanged. | | Status: warning | `--acc-warn` | oklch(0.82 0.15 75) | a11y (Okabe-Ito orange-yellow). Unchanged. | | Status: error | `--acc-error` | oklch(0.70 0.18 35) | a11y (Okabe-Ito vermillion). Unchanged. | | Status: info / link | `--acc-info` | oklch(0.78 0.13 230) | a11y (Okabe-Ito sky blue). Unchanged. | | Foreground ramp | `--fg`, `--fg-1`, `--fg-2`, `--fg-3` | a11y values | Unchanged. | | Backgrounds | `--bg`, `--bg-1`, `--bg-2`, `--bg-3` | a11y values | Unchanged. | ### Why brand green doesn't replace `--acc-success` The IB green `#5EFF0D` is **highly saturated** (oklch chroma 0.27) and reads as "this is a CTA / this is the IB look." Using it as the success-state color would: - Conflict with the a11y reasoning: success at hue 138 (yellow-green) sits closer to Okabe-Ito's *yellow* than its *bluish-green*. Less safe under deuteranopia. - Conflict with the spec semantics: in the a11y system, brand-anchor color and status-success color have different jobs. Swapping them would re-collapse what the a11y pass deliberately separated. So the brand green lives at `--brand-primary` and is used for: - Sort button (the primary CTA on the page) - Wordmark dot accent - Header brand mark hover/focus emphasis - Build-toggle "active" state Status pills, banners, warnings, copy-button-success, etc. continue to use the a11y `--acc-*` tokens. ### Contrast verification for `--brand-primary` (`#5EFF0D`) Against the dark canvas backgrounds: | Pair | ΔL (oklch) | Approx ratio | WCAG | |---|---|---|---| | `#5EFF0D` (L=0.88) vs `--bg` (L=0.18) | 0.70 | ~12.5:1 | AAA | | `#5EFF0D` (L=0.88) vs `--bg-1` (L=0.21) | 0.67 | ~10:1 | AAA | | `#5EFF0D` (L=0.88) vs `--bg-3` (L=0.28) | 0.60 | ~7.5:1 | AAA | Brand green clears AAA against every background token. No luminance adjustment needed. ### IB blue `#0050FF` — not used `#0050FF` ≈ oklch(0.43 0.27 264) → fails AA against any of our dark backgrounds (~3.0:1). The a11y pass already established `--acc-info` (oklch 0.78 0.13 230) as the link / info color and that token clears AAA. We document IB's blue here for completeness but do not put it in the live palette. ## 9. Tokens mapped to CSS vars (added in this round) ```css --brand-primary: #5EFF0D; /* IB anchor green */ --brand-primary-rgb: 94 255 13; /* for rgba() composition */ --brand-anchor-bg: #0A141E; /* IB navy, available as deep panel surface */ --brand-radius: 0.5rem; /* IB medium radius */ --brand-radius-sm: 0.25rem; /* IB small radius */ --brand-shadow-card: 0 4px 12px rgba(0, 0, 0, 0.3); /* IB card lift */ --brand-mark: url('/img/broccoli_shadow_square.png'); /* logo asset */ --brand-font-display: 'Sora', 'Geist', ui-sans-serif, system-ui, sans-serif; --brand-font-body: 'Open Sans', 'Geist', ui-sans-serif, system-ui, sans-serif; ```