diff --git a/app/portal/[eventSlug]/page.tsx b/app/portal/[eventSlug]/page.tsx index 019a6a7d..83ae10b5 100644 --- a/app/portal/[eventSlug]/page.tsx +++ b/app/portal/[eventSlug]/page.tsx @@ -59,7 +59,7 @@ export default async function PortalHomePage({

Hello, {speakerName(me, ctx).split(' ')[0]}

{branding.welcomeHtml ? (
@@ -94,7 +94,7 @@ export default async function PortalHomePage({
) : ( - + {outstanding.slice(0, 6).map((entry) => (
{entry.overdue ? ( diff --git a/app/portal/portal.module.css b/app/portal/portal.module.css index 158df9bb..19a956ee 100644 --- a/app/portal/portal.module.css +++ b/app/portal/portal.module.css @@ -297,6 +297,17 @@ padding: var(--space-6); } +/* + * The organizer's welcome is a banner, not an article. `.prose` caps every other body of text at the + * 68ch reading measure, which is right for a task description or an info page but leaves this block + * wrapping halfway across an empty hero on a wide screen. The hero is already bounded by + * `--content-max`, so the text tracks the container instead of a fixed measure. + */ +.heroProse { + max-width: none; + margin-top: var(--space-2); +} + .statGrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); @@ -360,11 +371,16 @@ align-items: center; } +/* + * The rows sit inside a `padding="none"` card so the dividers run edge to edge, which means the row + * itself owns the inset. It matches the card default (`md`) so the list lines up with the padded + * cards beside it. + */ .checkRow { display: flex; align-items: flex-start; gap: var(--space-3); - padding: var(--space-3) 0; + padding: var(--space-3) var(--space-4); border-bottom: var(--border-width) solid var(--border-hairline); } @@ -372,6 +388,16 @@ border-bottom: 0; } +/* Rows carry their own vertical padding; the body gap would double it around each divider. */ +.checkList { + gap: var(--space-0); +} + +/* The final row of the list is not the final row of the card: the footer action still follows it. */ +.checkList .checkRow:last-child { + border-bottom: var(--border-width) solid var(--border-hairline); +} + .checkLink { color: var(--text-strong); text-decoration: none;