+
+ {kind_label}
+ {announcement.title}
+
+
+ {location
+ .map(|loc| {
+ view! {
+ " · "
+ {loc}
+ }
+ })}
+
+ p]:mb-5 [&_a]:underline [&_a]:underline-offset-4 [&_a]:text-ink-accent",
+ "[&_strong]:font-semibold [&_ul]:list-disc [&_ul]:pl-6 [&_ul]:mb-5 [&_li]:mb-2"
+ ]>{children()}
+
+
+ }
+}
+
+/// A blog-list card for the announcements index.
+///
+/// Renders the eyebrow (kind + date + optional location), the title,
+/// an excerpt, and a "Read more →" affordance. The entire card is a
+/// single anchor to the permalink so the click target is generous.
+#[component]
+pub fn AnnouncementCard(announcement: &'static crate::data::announcements::Announcement) -> impl IntoView {
+ let href = format!("/announcements/{}", announcement.slug);
+ let date_long = announcement.published_at.long();
+ let date_iso = announcement.published_at.iso();
+ let kind_label = announcement.kind.label();
+ let location = announcement.location;
+ view! {
+