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 */}