...
+
+// In LESS:
+[purpose='hero-container'] {
+ padding: 80px 0;
+}
+```
+Nest `[purpose]` selectors to scope styles within a section. Traditional CSS classes are secondary β used only for Bootstrap utilities and state toggles (`.truncated`, `.expanded`, `.loading-spinner`).
+
+### Page-level scoping
+Each page stylesheet is scoped to a page ID selector at the root:
+```less
+#pricing {
+ // All page-specific styles nested inside
+ [purpose='page-content'] { ... }
+ [purpose='hero-text'] { ... }
+
+ @media (max-width: 991px) { ... }
+}
+```
+This prevents style leakage between pages. The page ID matches the `id` attribute on the page's outermost `` in the EJS template.
+
+Some pages use a `-page` suffix (e.g., `#software-management-page` instead of `#software-management`). This is done when the base name would collide with an auto-generated heading ID β for example, markdown articles with a "Software management" heading get `id="software-management"` automatically. Add the `-page` suffix when the page name could conflict with a heading ID elsewhere on the site.
+
+### Variables and mixins
+All colors, fonts, weights, and mixins live in `mixins-and-variables/`. Always use variable names instead of raw hex (e.g., `@core-fleet-black` not `#192147`). Common mixins: `.page-container()`, `.page-content()`, `.btn-reset()`, `.fade-in()`.
+
+Don't use `@core-vibrant-blue` in new code β it's deprecated.
+
+Primary CTA buttons should use the `btn btn-primary` Bootstrap classes β this adds pseudo-element shine effects on hover (defined in `bootstrap-overrides.less`). The default color is `@core-vibrant-green` but can be overridden per page; the key benefit is the shine, not the color.
+
+### Page backgrounds
+Pages don't set their own section backgrounds. The page background is a gradient defined in `layout.less` and overridden per-page. Pages with a `
` footer typically end with a dedicated `bottom-gradient` section just before the component.
+
+### Responsive breakpoints
+Max-width media queries, typically nested inside the page's root ID selector:
+```less
+#my-page {
+ // Desktop styles at root level
+
+ @media (max-width: 1199px) { /* large desktop adjustments */ }
+ @media (max-width: 991px) { /* tablet: cards stack, padding reduces */ }
+ @media (max-width: 767px) { /* mobile: single column, smaller text */ }
+ @media (max-width: 575px) { /* small mobile: minimal padding */ }
+ @media (max-width: 375px) { /* extra small: final adjustments */ }
+}
+```
+
+### Framework
+Bootstrap 4 is loaded as a base dependency. Global overrides live in `bootstrap-overrides.less`, page-specific overrides should be scoped inside the page's ID selector.
+
+Avoid using Bootstrap utility classes (`.d-flex`, `.justify-content-center`, `.flex-column`, etc.) for layout and display properties. Define these styles in the LESS stylesheet using `[purpose]` selectors instead β this keeps all styles in one place and makes them easier to adjust later. Bootstrap's grid (`.row`, `.col-*`) is acceptable where already established, but prefer stylesheet-defined layout for new work.
+
+### Browser compatibility
+
+The website enforces minimum browser versions via a [bowser](https://github.com/lancedikson/bowser) check in `views/layouts/layout.ejs` (around line 970). Visitors on unsupported browsers see a full-page block prompting them to upgrade. These floors were chosen to enable modern CSS features β notably the flexbox/grid `gap` property.
+
+**Minimum supported versions** (source of truth: `layout.ejs`):
+
+| Browser | Min version | Notes |
+|---------|------------|-------|
+| Chrome | 84 | `gap` support |
+| Edge | 84 | `gap` support |
+| Opera | 70 | `gap` support |
+| Safari | 14 | `gap` support |
+| Firefox | 103 | `backdrop-filter` support |
+| iOS | 14 | Supports embedded podcast player |
+| Android | 6 | Google's search crawler user agent |
+
+Internet Explorer is blocked entirely.
+
+**What's safe to use**:
+- Flexbox and CSS Grid, including `gap` on both
+- `backdrop-filter`
+- CSS custom properties (variables) β supported everywhere above IE
+- Modern ES2017+ JavaScript (async/await, object spread, etc.)
+
+**What to be cautious with**:
+- Container queries β Safari 14 does not support them; need to fall back to media queries or wait to raise the floor
+- `:has()` selector β Safari 14 does not support it
+- Any CSS feature newer than ~2021 β check [caniuse.com](https://caniuse.com) against the table above
+
+**Manual QA**: Per the [handbook](https://fleetdm.com/handbook/engineering#check-browser-compatibility-for-fleetdm-com), cross-browser checks are done monthly via BrowserStack. Google Chrome (macOS) latest is the baseline; other supported browsers are checked against it. File issues as bugs and assign for fixing.
+
+**Raising or lowering the floor**: Update the `LATEST_SUPPORTED_VERSION_BY_USER_AGENT` and `LATEST_SUPPORTED_VERSION_BY_OS` objects in `views/layouts/layout.ejs`. Add a comment explaining *why* that version was chosen (which CSS/JS feature it enables), matching the existing pattern.
+
+### LESS formatting rules (from `.lesshintrc`)
+- One space before `{` β `[purpose='hero'] {` not `[purpose='hero']{`
+- One space after `:` in properties β `padding: 16px` not `padding:16px`
+- Avoid `!important` β if unavoidable, add `//lesshint-disable-line importantRule` on the same line
+- No strict property ordering enforced
+- Zero warnings policy β `npm run lint` must pass with zero lesshint warnings
+
+## Markdown content pipeline
+
+### Source files
+Markdown content lives outside the `website/` directory in three top-level folders:
+- `docs/` β technical documentation
+- `articles/` β blog posts, case studies, whitepapers, comparisons
+- `handbook/` β internal company handbook
+
+### Build process
+The build script `scripts/build-static-content.js` compiles markdown to HTML:
+```bash
+sails run build-static-content # compile markdown β EJS partials
+npm run build-for-prod # full production build (includes above + asset minification)
+npm run start-dev # dev mode (runs build-static-content then starts console)
+```
+Compiled output lands in `views/partials/built-from-markdown/`; metadata is exposed at runtime as `sails.config.builtStaticContent`.
+
+### Metadata
+Embedded as HTML `` tags in the markdown file (not YAML frontmatter). See existing files in each folder for the required tags per content type.
+
+### Custom syntax
+- `((bubble-text))` β converts to `` elements
+- Blockquotes β automatically rendered with `purpose="tip"` styling
+- Code blocks β language-specific highlighting (`js`, `bash`, `yaml`, `mermaid`, etc.)
+- Checklists β `- [x]` and `- [ ]` syntax renders as checkboxes
+
+### Restrictions
+The build script enforces several rules and will throw errors for:
+- Vue template syntax (`{{ }}`) outside code blocks (conflicts with client-side Vue)
+- Relative markdown links without `.md` extension
+- `@fleetdm.com` email addresses in markdown
+- Missing required meta tags per content type
+
+## Creating new pages
+Use `sails generate page /` β scaffolds controller, view, page script, and LESS file. Then: add the route in `config/routes.js`, add the LESS `@import` to `importer.less`, and update `config/policies.js` if bypassing `is-logged-in` (not needed under folders like `landing-pages/` that already bypass it).
+
+## Code style
+
+- **Indentation**: 2 spaces
+- **Quotes**: Single quotes (template literals allowed)
+- **Semicolons**: Always required
+- **Equality**: Strict only (`===` / `!==`)
+- **Variables/functions**: camelCase
+- **Files/directories**: kebab-case
+
+## Development commands
+
+```bash
+npm run start-dev # Start dev server with live reload
+npm run lint # Run ESLint + HTMLHint + lesshint
+npm run build-for-prod # Compile markdown, build and minify assets
+```
+
+## Linting
+
+- **JS**: ESLint (`.eslintrc` at root, browser override in `assets/.eslintrc`)
+- **HTML/EJS**: HTMLHint (`.htmlhintrc`)
+- **LESS**: lesshint (`.lesshintrc`) β zero warnings policy
diff --git a/website/assets/images/testimonial-author-thomas-luebker-48x48@2x.png b/website/assets/images/testimonial-author-thomas-luebker-48x48@2x.png
new file mode 100644
index 0000000000..8fd35d800d
Binary files /dev/null and b/website/assets/images/testimonial-author-thomas-luebker-48x48@2x.png differ