diff --git a/apps/portal-admin/public/logos/apf-logo.svg b/apps/portal-admin/public/logos/apf-logo.svg
new file mode 100644
index 0000000..2d84645
--- /dev/null
+++ b/apps/portal-admin/public/logos/apf-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/portal-admin/public/logos/apf-portal.svg b/apps/portal-admin/public/logos/apf-portal.svg
new file mode 100644
index 0000000..a0516bd
--- /dev/null
+++ b/apps/portal-admin/public/logos/apf-portal.svg
@@ -0,0 +1,12 @@
+
diff --git a/apps/portal-admin/src/app/components/header/header.html b/apps/portal-admin/src/app/components/header/header.html
index 8b2c7dc..9c5a49a 100644
--- a/apps/portal-admin/src/app/components/header/header.html
+++ b/apps/portal-admin/src/app/components/header/header.html
@@ -1,5 +1,13 @@
+ APF PortalAdmin
diff --git a/apps/portal-admin/src/app/components/header/header.scss b/apps/portal-admin/src/app/components/header/header.scss
index fb5c9ec..2df1e4a 100644
--- a/apps/portal-admin/src/app/components/header/header.scss
+++ b/apps/portal-admin/src/app/components/header/header.scss
@@ -30,6 +30,13 @@
}
}
+.brand-logo {
+ display: block;
+ flex-shrink: 0;
+ height: 1.75rem;
+ width: 1.75rem;
+}
+
// "Admin" pill — distinct color from the wordmark so it reads as a
// status badge even in dense headers. Keeps the surface
// immediately recognisable per ADR-0020 §"Discoverability for
diff --git a/apps/portal-admin/src/app/components/sidebar/sidebar.scss b/apps/portal-admin/src/app/components/sidebar/sidebar.scss
index b56b153..5e65930 100644
--- a/apps/portal-admin/src/app/components/sidebar/sidebar.scss
+++ b/apps/portal-admin/src/app/components/sidebar/sidebar.scss
@@ -1,18 +1,28 @@
-.admin-sidebar {
+// The host element owns the sidebar envelope (width + chrome) so
+// the gray background + right border cover the full column, not
+// just the rail of links. The inner