` = `$post->getTitle()` — display font, `clamp(2rem,3.4vw,3rem)`, margin 10px 0 28px.
- Body `{!! $post->getBody() !!}`
(keep the existing output exactly). New CSS: `body.site .site-prose :is(h2,h3,h4){font-family:var(--display)}`,
`body.site .site-prose a{color:var(--olive)}`, `body.site .site-prose{font-size:1.06rem;line-height:1.85}`.
- Footer: ``
`posts.back_to_posts`, preceded by a hairline `border-top:1px solid var(--line)` with 48px
margin-top and 24px padding-top. Remove `flux:heading`.
### Legal pages
- `resources/views/pages/legal.blade.php` — inside ``:
``,
`` `$page->getTitle()` (same h1 style as the article page), the existing
`prose prose-brand` block with the class `site-prose` added and its card styling replaced by
white background, radius 16px, `--shadow-1`, padding 40px (24px ≤760px); the existing
"last updated" line as muted .85rem text. Keep the `clean()` call and the
`pages.content_coming_soon` fallback unchanged.
- `resources/views/pages/terms.blade.php` and `resources/views/pages/privacy.blade.php` — the same
structure with their existing title and placeholder text. (`/terms` and `/privacy` redirect to
`/page/terms` and `/page/privacy`; these two views are kept in case they are rendered
directly.)
### Language keys
None new; `site.hero_eyebrow` (24-4) and `site.nav_articles` (24-2) are reused.
### Files
- Modify: `resources/views/livewire/pages/posts/index.blade.php`,
`resources/views/livewire/pages/posts/show.blade.php`, `resources/views/pages/legal.blade.php`,
`resources/views/pages/terms.blade.php`, `resources/views/pages/privacy.blade.php`,
`resources/css/public.css`.
## Acceptance Criteria
- [ ] `/posts` shows the section head, a working search (typing filters results after the
debounce and shows the count line), text-only post cards and styled pagination when there
are more than 10 published posts.
- [ ] `/posts/{post}` for a published post shows date, a display-font ``, the body and a Back
button to `/posts`; an unpublished post still returns 404.
- [ ] `/page/terms` and `/page/privacy` show the title, the sanitised CMS content (or the
coming-soon text) and the last-updated line.
- [ ] Each of these pages has exactly one `` and no horizontal scroll at 1440, 768 and 390px.
- [ ] The admin posts screens (`/admin/posts`) are unchanged (they do not use the public layout).
## Sub-tasks
None.
`,
`` `$page->getTitle()` (same h1 style as the article page), the existing
`prose prose-brand` block with the class `site-prose` added and its card styling replaced by
white background, radius 16px, `--shadow-1`, padding 40px (24px ≤760px); the existing
"last updated" line as muted .85rem text. Keep the `clean()` call and the
`pages.content_coming_soon` fallback unchanged.
- `resources/views/pages/terms.blade.php` and `resources/views/pages/privacy.blade.php` — the same
structure with their existing title and placeholder text. (`/terms` and `/privacy` redirect to
`/page/terms` and `/page/privacy`; these two views are kept in case they are rendered
directly.)
### Language keys
None new; `site.hero_eyebrow` (24-4) and `site.nav_articles` (24-2) are reused.
### Files
- Modify: `resources/views/livewire/pages/posts/index.blade.php`,
`resources/views/livewire/pages/posts/show.blade.php`, `resources/views/pages/legal.blade.php`,
`resources/views/pages/terms.blade.php`, `resources/views/pages/privacy.blade.php`,
`resources/css/public.css`.
## Acceptance Criteria
- [ ] `/posts` shows the section head, a working search (typing filters results after the
debounce and shows the count line), text-only post cards and styled pagination when there
are more than 10 published posts.
- [ ] `/posts/{post}` for a published post shows date, a display-font `