diff --git a/apps/web/package.json b/apps/web/package.json
index f699ef717..ea99fa20a 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -17,6 +17,7 @@
"@fluentui/react-charts": "^9.3.22",
"@fluentui/react-components": "^9.74.4",
"@fluentui/react-icons": "^2.0.334",
+ "@fontsource-variable/cascadia-code": "^5.3.0",
"@hookform/resolvers": "^5.5.7",
"@react-router/node": "8.3.0",
"d3-shape": "^3.2.0",
@@ -46,6 +47,7 @@
"@types/prismjs": "^1.26.6",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
+ "@unocss/postcss": "^66.7.5",
"happy-dom": "^20.11.1",
"unocss": "^66.7.5",
"vite": "^8.1.5"
diff --git a/apps/web/postcss.config.ts b/apps/web/postcss.config.ts
new file mode 100644
index 000000000..9807c93ab
--- /dev/null
+++ b/apps/web/postcss.config.ts
@@ -0,0 +1,25 @@
+import UnoCSS from '@unocss/postcss';
+
+// UnoCSS generates through PostCSS rather than `unocss/vite`, whose global mode
+// emits nothing under React Router: it keys its `vite:css-post` handle by the
+// top-level `build.outDir`, while React Router sets `outDir` only per
+// environment (`dist/client`, `dist/server`) and opts into
+// `builder.sharedConfigBuild`, which is what otherwise re-resolves the config
+// per environment. The lookup misses and the layer placeholder ships as the
+// entire stylesheet.
+// https://github.com/unocss/unocss/issues/4990
+// https://github.com/unocss/unocss/blob/e28a47c557fe179935a37a4fbeb650292d0d1d5a/packages-integrations/vite/src/modes/global/build.ts#L128-L182
+//
+// That plugin's per-module mode does emit, but generates one sheet per module,
+// and concatenating them in module-graph order breaks the cascade: a breakpoint
+// variant can land ahead of the base utility it has to override, and since a
+// media query adds no specificity the base utility wins at every width. Rule
+// order is a property of a single `generate()` call, which is what one PostCSS
+// pass over the whole content set gives us.
+//
+// `cwd` resolves both uno.config.ts discovery and the `content.filesystem`
+// globs, and defaults to the build process's working directory. Pinning it here
+// keeps a build launched from the workspace root scanning the same files as one
+// launched from this package.
+// https://github.com/unocss/unocss/blob/e28a47c557fe179935a37a4fbeb650292d0d1d5a/packages-integrations/postcss/src/esm.ts#L21-L110
+export default { plugins: [UnoCSS({ cwd: import.meta.dirname })] };
diff --git a/apps/web/src/components/api-docs/api-docs-content.tsx b/apps/web/src/components/api-docs/api-docs-content.tsx
index abfcbb975..fd8e734a7 100644
--- a/apps/web/src/components/api-docs/api-docs-content.tsx
+++ b/apps/web/src/components/api-docs/api-docs-content.tsx
@@ -1,5 +1,5 @@
import { ArrowUpRight16Regular } from '@fluentui/react-icons';
-import { useState } from 'react';
+import { Fragment, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { apiDocsEndpoints, apiDocsExamples, apiDocsGroups, authCurlExample, type ApiDocsExampleId } from './api-docs-data';
@@ -13,6 +13,7 @@ const {
AccordionHeader,
AccordionItem,
AccordionPanel,
+ Badge,
Link,
MessageBar,
MessageBarBody,
@@ -65,23 +66,29 @@ export function ApiDocsContent() {
{t('dashboard.apiDocs.endpointsTitle')}{t('dashboard.apiDocs.endpointsDescription')}
- {apiDocsGroups.map(group =>
- {t(`dashboard.apiDocs.groups.${group}`)}
-
-