diff --git a/frontend/src/App.css b/frontend/src/App.css
index 69d9525..4cff9ce 100644
--- a/frontend/src/App.css
+++ b/frontend/src/App.css
@@ -2334,6 +2334,8 @@ a.app-footer__repo:hover {
max-width: 56rem;
margin: 0 auto;
padding: 1rem 0;
+ border-left: 4px solid transparent;
+ padding-left: 1.25rem;
}
.subtopic-page__title {
@@ -2347,6 +2349,13 @@ a.app-footer__repo:hover {
font-size: 0.95rem;
color: var(--color-text-secondary);
margin: 0 0 2rem;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.subtopic-page__subtitle-sep {
+ color: var(--color-text-muted);
}
.subtopic-groups {
diff --git a/frontend/src/pages/SearchResults.tsx b/frontend/src/pages/SearchResults.tsx
index 916ae64..f609099 100644
--- a/frontend/src/pages/SearchResults.tsx
+++ b/frontend/src/pages/SearchResults.tsx
@@ -9,6 +9,7 @@
import { useCallback, useEffect, useRef, useState } from "react";
import { Link, useSearchParams, useNavigate } from "react-router-dom";
import { searchApi, type SearchResultItem } from "../api/public-client";
+import { catSlug } from "../utils/catSlug";
export default function SearchResults() {
const [searchParams] = useSearchParams();
@@ -167,7 +168,7 @@ function SearchResultCard({ item }: { item: SearchResultItem }) {
{item.topic_category && (
<>
·
- {item.topic_category}
+ {item.topic_category}
>
)}
{item.topic_tags.length > 0 && (
diff --git a/frontend/src/pages/SubTopicPage.tsx b/frontend/src/pages/SubTopicPage.tsx
index ebc53e2..09923f6 100644
--- a/frontend/src/pages/SubTopicPage.tsx
+++ b/frontend/src/pages/SubTopicPage.tsx
@@ -11,6 +11,7 @@ import {
fetchSubTopicTechniques,
type TechniqueListItem,
} from "../api/public-client";
+import { catSlug } from "../utils/catSlug";
/** Convert a URL slug to a display name: replace hyphens with spaces, title-case. */
function slugToDisplayName(slug: string): string {
@@ -91,9 +92,13 @@ export default function SubTopicPage() {
}
const groups = groupByCreator(techniques);
+ const slug = category ? catSlug(categoryDisplay) : "";
return (
-
+
{/* Breadcrumbs */}