2026-02-17 17:53:00 +01:00
|
|
|
{{!< default}}
|
|
|
|
|
|
|
|
|
|
<header class="container mx-auto px-4 py-8 text-center">
|
2026-02-17 20:15:10 +01:00
|
|
|
<h1 class="text-5xl font-bold tracking-tight text-[var(--text-primary)]">{{@site.title}}</h1>
|
2026-02-17 18:54:09 +01:00
|
|
|
<p class="mt-2 text-xl text-[var(--text-secondary)]">{{@site.description}}</p>
|
2026-02-17 17:53:00 +01:00
|
|
|
</header>
|
|
|
|
|
|
|
|
|
|
<div class="container mx-auto px-4">
|
|
|
|
|
{{#if posts}}
|
2026-02-17 19:07:11 +01:00
|
|
|
<div id="posts-container" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
|
2026-02-17 17:53:00 +01:00
|
|
|
{{#foreach posts}}
|
2026-02-19 18:07:46 +01:00
|
|
|
{{> "post-card"}}
|
2026-02-17 17:53:00 +01:00
|
|
|
{{/foreach}}
|
2026-02-19 18:07:46 +01:00
|
|
|
|
|
|
|
|
{{#if pagination.next}}
|
|
|
|
|
<div id="pagination-trigger"
|
|
|
|
|
hx-get="{{page_url pagination.next}}"
|
|
|
|
|
hx-trigger="revealed"
|
|
|
|
|
hx-select="#posts-container > *"
|
|
|
|
|
hx-target="this"
|
|
|
|
|
hx-swap="outerHTML"
|
|
|
|
|
hx-indicator="#loading-spinner"
|
|
|
|
|
class="col-span-full h-1">
|
|
|
|
|
</div>
|
|
|
|
|
{{/if}}
|
2026-02-17 17:53:00 +01:00
|
|
|
</div>
|
|
|
|
|
|
2026-02-19 18:07:46 +01:00
|
|
|
<div id="loading-spinner" class="htmx-indicator text-center py-8">
|
2026-02-17 19:07:11 +01:00
|
|
|
<div class="inline-block animate-spin rounded-full h-8 w-8 border-4 border-[var(--brand-primary)] border-t-transparent"></div>
|
|
|
|
|
<p class="text-[var(--text-secondary)] mt-2">Loading more posts...</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-02-17 17:53:00 +01:00
|
|
|
{{else}}
|
2026-02-17 18:54:09 +01:00
|
|
|
<p class="text-center text-[var(--text-secondary)] text-2xl py-20">No posts found.</p>
|
2026-02-17 17:53:00 +01:00
|
|
|
{{/if}}
|
|
|
|
|
</div>
|