Skip to content

fix(marketing): normalize download page System B primitives#9935

Merged
jovie-bot[bot] merged 1 commit into
mainfrom
codex/jov-2548-download-system-b
Jun 3, 2026
Merged

fix(marketing): normalize download page System B primitives#9935
jovie-bot[bot] merged 1 commit into
mainfrom
codex/jov-2548-download-system-b

Conversation

@itstimwhite

@itstimwhite itstimwhite commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Move /download route-local visual values onto named system-b-download-* primitives.
  • Demote the shared marketing-glass header CTA from a filled primary pill to secondary chrome so /download has one clear first-viewport primary action.
  • Add a focused source guard for /download against raw colors, gradients, arbitrary visual utilities, and negative tracking.

Verification

  • ./scripts/setup.sh
  • pnpm biome check --write apps/web/app/(marketing)/download/page.tsx apps/web/components/organisms/HeaderNav.css apps/web/styles/design-system.css apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts
  • pnpm --filter @jovie/web exec vitest run tests/unit/marketing/download-system-b-style-guard.test.ts
  • pnpm --filter @jovie/web run typecheck -- --pretty false
  • git diff --check
  • Pre-commit hook: proxy guard, Biome, ESLint, web typecheck
  • Pre-push hook: Biome check, proxy guard, Tailwind guard, web typecheck, web lint

Screenshot Proof

  • .gstack/design-reports/screenshots/download-system-b-desktop-after-20260603.png
  • .gstack/design-reports/screenshots/download-system-b-narrow-after-20260603.png
  • .gstack/design-reports/screenshots/download-system-b-mobile-after-20260603.png

Runtime proof on mobile: CLS 0, no horizontal overflow, one visible Download for Mac primary, and the header CTA computed as transparent secondary chrome with no shadow.

Summary by CodeRabbit

  • New Features

    • Updated download page layout and styling across hero, platform selection, workflow details, and FAQ sections.
  • Style

    • Modernized header navigation button styling with improved design tokens and dynamic color handling for better visual consistency.
  • Tests

    • Added automated validation to ensure styling consistency and prevent visual regressions on the download page.

@linear-code

linear-code Bot commented Jun 3, 2026

Copy link
Copy Markdown

JOV-2548

@sonarqubecloud

sonarqubecloud Bot commented Jun 3, 2026

Copy link
Copy Markdown

@itstimwhite

Copy link
Copy Markdown
Collaborator Author

No description provided.

@sentry

sentry Bot commented Jun 3, 2026

Copy link
Copy Markdown

✅ All tests passed.

@jovie-bot jovie-bot Bot marked this pull request as ready for review June 3, 2026 07:54

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR migrates the marketing download page to a new "System B" design system by introducing semantic design tokens, comprehensive CSS styling, refactoring the page JSX to use token-based classes, updating header styling to match, and adding a visual contract test to enforce compliance.

Changes

System B Download Page Styling

Layer / File(s) Summary
Design Tokens and System B Download Styling
apps/web/styles/design-system.css
Introduces semantic token set for System B (cinematic black, primary text, button colors, header height, motion duration, pill radius) and defines comprehensive CSS styling for the download page hero, platform section, workflow/details blocks, FAQ, and legal footer using the new tokens and responsive layouts.
Download Page Markup Refactoring to System B Classes
apps/web/app/(marketing)/download/page.tsx
Restructures the download page layout and all sections to apply System B class names throughout: hero shell and grid, secondary link and metadata, platform cards, workflow and details feature grids, FAQ section, and legal footer, while preserving functional logic for analytics and platform-specific actions.
Header CTA Button Token-Based Styling
apps/web/components/organisms/HeaderNav.css
Updates the .marketing-glass-header__cta button styling to use design-system CSS variables and color-mix(in oklab, ...) color blending instead of hard-coded values, including hover and focus-visible states.
System B Visual Contract Test
apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts
Adds a Vitest unit test that scans the download page source for forbidden visual patterns (hex colors, opacity functions, gradients, Tailwind utilities), enforcing that the System B styling contract is maintained.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • jovie-bot

Poem

🐰 A rabbit hops through System B's design,
Where tokens glow and colors align,
The download page now dances with style,
No Tailwind chaos for mile after mile!
With tests to ensure we don't stray from the way—
A beautiful page that's here now to stay! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(marketing): normalize download page System B primitives' directly describes the main changes: moving download page visual values onto named design primitives and normalizing styling.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/jov-2548-download-system-b

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/app/(marketing)/download/page.tsx (1)

251-296: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Consider semantic markup for the inactive iPhone action.

Line 287 renders the inactive iPhone action as a <div>. While this prevents interaction, it loses semantic meaning. Consider using a <button disabled> or maintaining the anchor with aria-disabled="true" to preserve the control semantics for assistive technologies.

♻️ Proposed semantic alternative
-                    <div className='system-b-download-platform-inactive'>
-                      {platform.action}
-                    </div>
+                    <button
+                      disabled
+                      className='system-b-download-platform-inactive'
+                    >
+                      {platform.action}
+                    </button>

Or preserve the anchor with aria attributes:

-                    <div className='system-b-download-platform-inactive'>
+                    <a
+                      href={platform.href}
+                      aria-disabled="true"
+                      onClick={(e) => e.preventDefault()}
+                      className='system-b-download-platform-inactive'
+                    >
                       {platform.action}
-                    </div>
+                    </a>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/app/`(marketing)/download/page.tsx around lines 251 - 296, The
inactive platform action currently renders as a non-semantic <div> (see
PLATFORM_ROWS mapping and the isMac conditional rendering in page.tsx), which
should be a real control for accessibility; replace the <div
className='system-b-download-platform-inactive'> with a semantic control—either
render a <button disabled> preserving the same classes or keep the <a
className='system-b-download-platform-action'> but add aria-disabled="true" and
tabindex="-1" (and remove href) so assistive tech sees it as a disabled control;
update any analytics attributes accordingly and keep visual styling via the
existing class names (system-b-download-platform-inactive /
system-b-download-platform-action).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts`:
- Line 19: The test uses resolve(process.cwd(), sourcePath) which is brittle;
change it to resolve(__dirname, sourcePath) (or otherwise compute the
module-relative path) so readFileSync reads the fixture relative to the test
module. Update the call that constructs the path (the expression passed to
readFileSync in this test) to use __dirname (or an equivalent module-relative
base) instead of process.cwd(); keep the same readFileSync and sourcePath
variables.
- Line 14: The current regex literal in the unit test that guards System B color
utilities is too narrow—replace the existing
/\b(?:emerald|...|white)-(?:[0-9]|\[|\/)/ pattern with a broader pattern that
matches utilities like text-<color>, bg-<color>, and slash-opacity variants
(e.g. the suggested
/\b(?:bg|border|text|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)\b(?:-\d+|-\[|\/(?:\d+|\[))?/);
also replace the test’s process.cwd() based path resolution with the
fileURLToPath(dirname(import.meta.url)) approach used in neighboring tests to
make path resolution more robust.

---

Outside diff comments:
In `@apps/web/app/`(marketing)/download/page.tsx:
- Around line 251-296: The inactive platform action currently renders as a
non-semantic <div> (see PLATFORM_ROWS mapping and the isMac conditional
rendering in page.tsx), which should be a real control for accessibility;
replace the <div className='system-b-download-platform-inactive'> with a
semantic control—either render a <button disabled> preserving the same classes
or keep the <a className='system-b-download-platform-action'> but add
aria-disabled="true" and tabindex="-1" (and remove href) so assistive tech sees
it as a disabled control; update any analytics attributes accordingly and keep
visual styling via the existing class names (system-b-download-platform-inactive
/ system-b-download-platform-action).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b26ea5c4-fbf2-4dd6-8fa0-3d37418d7894

📥 Commits

Reviewing files that changed from the base of the PR and between f7d0985 and b7a8831.

📒 Files selected for processing (4)
  • apps/web/app/(marketing)/download/page.tsx
  • apps/web/components/organisms/HeaderNav.css
  • apps/web/styles/design-system.css
  • apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts

/linear-gradient|radial-gradient/,
/\b(?:bg|border|text|ring|shadow|decoration)-\[/,
/\b(?:rounded|text|h|w|max-w|min-h|tracking|leading|px|py|pt|pb|z)-\[/,
/\b(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)-(?:[0-9]|\[|\/)/,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check for standalone Tailwind color utilities in download page

rg -n '\b(bg|text|border|ring|shadow|decoration)-(emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)(?!-)' \
  apps/web/app/\(marketing\)/download/page.tsx

Repository: JovieInc/Jovie

Length of output: 499


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Inspect the new test file to see how it resolves/reads the download source
echo "=== download-system-b-style-guard.test.ts (first ~120 lines) ==="
sed -n '1,140p' apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts

# 2) Also inspect the similar existing guard test to compare patterns
echo
echo "=== artist-notifications-hero-system-b-style-guard.test.ts (first ~140 lines) ==="
sed -n '1,160p' apps/web/tests/unit/marketing/artist-notifications-hero-system-b-style-guard.test.ts

# 3) Find any standalone color utilities in the download page.
#    Use PCRE2 so we can use lookarounds.
echo
echo "=== standalone Tailwind color utilities on download page (PCRE2) ==="
rg -n --pcre2 '\b(?:bg|text|border|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)\b(?!-)' \
  apps/web/app/(marketing)/download/page.tsx || true

# 4) Also collect all occurrences of direct color utility references for context
echo
echo "=== any direct color utility references on download page ==="
rg -n --pcre2 '\b(?:bg|text|border|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)-(?:\d+|\[|/)' \
  apps/web/app/(marketing)/download/page.tsx || true

Repository: JovieInc/Jovie

Length of output: 2315


🏁 Script executed:

#!/bin/bash
set -euo pipefail

DOWNLOAD_PAGE_PATH='apps/web/app/(marketing)/download/page.tsx'

echo "=== standalone Tailwind color utilities on download page (PCRE2) ==="
rg -n --pcre2 '\b(?:bg|text|border|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)\b(?!-)' \
  "$DOWNLOAD_PAGE_PATH" || true

echo
echo "=== any direct color utility references on download page (with shade or bracket/opacity) ==="
rg -n --pcre2 '\b(?:bg|text|border|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)-(?:\d+|\[|/)' \
  "$DOWNLOAD_PAGE_PATH" || true

echo
echo "=== direct references found without requiring the shade suffix (broad scan) ==="
rg -n --pcre2 '\b(?:bg|text|border|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)' \
  "$DOWNLOAD_PAGE_PATH" || true

Repository: JovieInc/Jovie

Length of output: 302


🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n "process\.cwd\(\)" apps/web/tests/unit/marketing --glob '*.test.{ts,tsx}' || true
rg -n "fileURLToPath|dirname\(" apps/web/tests/unit/marketing --glob '*.test.{ts,tsx}' || true
ls -la apps/web/tests/unit/marketing

Repository: JovieInc/Jovie

Length of output: 1698


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Find other System B style guard tests and inspect any color utility regexes they use.
rg -n "system-b-style-guard|System B source contract|forbiddenVisualPatterns" apps/web/tests/unit --glob '*.test.{ts,tsx}' 

echo
echo "=== Find regexes matching 'text-white' style patterns in marketing guard tests ==="
rg -n --pcre2 "text-\w+|bg-\w+|border-\w+|ring-\w+|shadow-\w+|decoration-\w+|-(?:\\[|/)|\\b(?:bg|text|border|ring|shadow|decoration)-\\(?:" apps/web/tests/unit/marketing --glob '*.test.{ts,tsx}' || true

Repository: JovieInc/Jovie

Length of output: 922


🏁 Script executed:

#!/bin/bash
set -euo pipefail
node <<'NODE'
const pattern = /\b(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)-(?:[0-9]|\[|\/)/;
const samples = [
  'text-white',
  'bg-black',
  'text-red',
  'text-white-500',
  'bg-black-50',
  'text-red/50',
  'bg-black/50',
  'text-red-[custom]',
  'text-red-/50', // not valid tailwind, but test anyway
];
for (const s of samples) {
  console.log(s.padEnd(18), '=>', pattern.test(s));
}
NODE

Repository: JovieInc/Jovie

Length of output: 306


🏁 Script executed:

#!/bin/bash
set -euo pipefail
DOWNLOAD_PAGE_PATH='apps/web/app/(marketing)/download/page.tsx'

echo "=== grep candidates: white/black/red tokens ==="
rg -n --pcre2 '\b(?:white|black|red)\b' "$DOWNLOAD_PAGE_PATH" || true

echo
echo "=== grep candidates: text-white / bg-black / text-red/50 ==="
rg -n --pcre2 'text-white|bg-black|text-red/50|bg-black/50' "$DOWNLOAD_PAGE_PATH" || true

echo
echo "=== grep tailwind color-looking tokens (color-name substrings) ==="
rg -n --pcre2 '\b(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)\b(?:-\d+)?' "$DOWNLOAD_PAGE_PATH" || true

Repository: JovieInc/Jovie

Length of output: 402


Fix System B color guard regex to catch standalone + slash-opacity utilities

  • The line 14 regex /\b(?:emerald|...|white)-(?:[0-9]|\[|\/)/ won’t catch text-<color> / bg-<color> (no shade suffix) and also won’t catch slash-opacity variants like text-red/50 (it requires - before /).
  • Since this page currently has no text-white/bg-black/text-red/50-style occurrences, it won’t fail today, but the guard is overly narrow for future violations—update the pattern to allow slash-opacity directly after the color, e.g.:
    /\b(?:bg|border|text|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)\b(?:-\d+|-\[|\/(?:\d+|\[))?/
  • The test’s process.cwd()-based path resolution is less robust than the neighboring fileURLToPath(dirname(...)) approach; aligning would reduce fragility.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts` at line
14, The current regex literal in the unit test that guards System B color
utilities is too narrow—replace the existing
/\b(?:emerald|...|white)-(?:[0-9]|\[|\/)/ pattern with a broader pattern that
matches utilities like text-<color>, bg-<color>, and slash-opacity variants
(e.g. the suggested
/\b(?:bg|border|text|ring|shadow|decoration)-(?:emerald|fuchsia|amber|sky|indigo|orange|rose|cyan|violet|red|black|white)\b(?:-\d+|-\[|\/(?:\d+|\[))?/);
also replace the test’s process.cwd() based path resolution with the
fileURLToPath(dirname(import.meta.url)) approach used in neighboring tests to
make path resolution more robust.


describe('download page System B source contract', () => {
it('keeps download page visuals on named System B primitives', () => {
const source = readFileSync(resolve(process.cwd(), sourcePath), 'utf8');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Use module-relative path resolution for test robustness.

The current approach using process.cwd() depends on the working directory when the test runs. This can cause failures if tests are executed from a different location.

The similar guard test in artist-notifications-hero-system-b-style-guard.test.ts uses a more robust pattern:

♻️ Recommended fix: Use module-relative path resolution
-import { readFileSync } from 'node:fs';
-import { resolve } from 'node:path';
+import { readFileSync } from 'node:fs';
+import { dirname, resolve } from 'node:path';
+import { fileURLToPath } from 'node:url';
 import { describe, expect, it } from 'vitest';

 const sourcePath = 'app/(marketing)/download/page.tsx';
+const appRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../..');

 const forbiddenVisualPatterns = [
   // ... patterns
 ] as const;

 describe('download page System B source contract', () => {
   it('keeps download page visuals on named System B primitives', () => {
-    const source = readFileSync(resolve(process.cwd(), sourcePath), 'utf8');
+    const source = readFileSync(resolve(appRoot, sourcePath), 'utf8');

     for (const pattern of forbiddenVisualPatterns) {
       expect(source, `${sourcePath} matched ${pattern}`).not.toMatch(pattern);
     }
   });
 });

Based on learnings from similar guard test pattern in artist-notifications-hero-system-b-style-guard.test.ts which uses module-relative path resolution.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/tests/unit/marketing/download-system-b-style-guard.test.ts` at line
19, The test uses resolve(process.cwd(), sourcePath) which is brittle; change it
to resolve(__dirname, sourcePath) (or otherwise compute the module-relative
path) so readFileSync reads the fixture relative to the test module. Update the
call that constructs the path (the expression passed to readFileSync in this
test) to use __dirname (or an equivalent module-relative base) instead of
process.cwd(); keep the same readFileSync and sourcePath variables.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

CI Summary

A crisp snapshot of this PR run — executed vs. skipped, with timing for every key lane.

Job Status Context Time
PR Ready (merge gate) ✅ Passed Executed 3s
Env Example Guard ✅ Passed Executed 8s
Guardrails ✅ Passed Executed 18s
Biome ⚪️ Not run Skipped (job not applicable)
Migration Guard ✅ Passed Executed 14s
Neon DB ⚠️ Skipped Skipped (job not applicable) 0s
Drizzle Check ⚠️ Skipped Skipped (job not applicable) 0s
Build ⚠️ Skipped Skipped (job not applicable) 0s
Build (public routes) ✅ Passed Executed 4m 12s
Layout Guard ✅ Passed Executed 1m 37s
Lighthouse (PR) ⚪️ Not run Skipped (job not applicable)
A11y (axe) ⚠️ Skipped Skipped (job not applicable) 0s
Unit Tests ⚪️ Not run Skipped (conditional job)
E2E Smoke ⚠️ Skipped Skipped (job not applicable) 0s
Test Performance Budgets ⚠️ Skipped Skipped (job not applicable) 0s
E2E Tests ⚪️ Not run Skipped (job not applicable)
DB Migrate (PR main) ⚠️ Skipped Skipped (job not applicable) 0s
Preview Deploy ✅ Passed Executed 4m 49s

Run: 26871049862

@jovie-bot jovie-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto-Approved by Agent Pipeline

All quality gates passed:

  • CI checks (typecheck, lint, unit tests, a11y)
  • Scope judge (diff aligns with ticket intent)
  • CodeRabbit review (no blocking feedback)
  • Sensitive path check (no auth/billing/migration/CI changes)

This PR was auto-approved because it meets all criteria for low-risk agent changes.
It will now enter the merge queue for final validation.

If this approval is incorrect, dismiss it and add the needs-human label.

@jovie-bot jovie-bot Bot added this pull request to the merge queue Jun 3, 2026
width: 100%;
max-width: 760px;
margin-inline: auto;
padding: var(--homepage-section-space) var(--homepage-page-gutter);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The CSS variables --homepage-section-space and --homepage-page-gutter are undefined on the download page, causing the FAQ section to render without padding.
Severity: MEDIUM

Suggested Fix

Define --homepage-section-space and --homepage-page-gutter in a globally accessible scope, such as :root in design-system.css. Alternatively, provide fallback values in the .system-b-download-faq class definition using var(--variable, <fallback>) syntax.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: apps/web/styles/design-system.css#L2039

Potential issue: The CSS class `.system-b-download-faq` applies padding using the CSS
custom properties `--homepage-section-space` and `--homepage-page-gutter`. These
variables are defined exclusively within the `.home-viewport` class, which is only
present on the homepage. On other pages, such as the `/download` page where
`.system-b-download-faq` is used, these variables are undefined. This causes the
`padding` to resolve to an invalid value, effectively becoming `0`, which will result in
a visually broken layout for the FAQ section with no spacing.

Did we get this right? 👍 / 👎 to inform future reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant