All checks were successful
Deploy Theme / deploy (push) Successful in 14s
87 lines
3.9 KiB
Handlebars
87 lines
3.9 KiB
Handlebars
{{!< default}}
|
|
|
|
{{#author}}
|
|
<header class="author-header relative w-full mb-12">
|
|
{{#if cover_image}}
|
|
<div class="w-full h-64 md:h-96 relative overflow-hidden">
|
|
<img class="w-full h-full object-cover opacity-40 grayscale hover:grayscale-0 transition-all duration-700" src="{{img_url cover_image size="xl"}}" alt="{{name}}'s cover image">
|
|
<div class="absolute inset-0 bg-gradient-to-b from-transparent to-[var(--bg-primary)]"></div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class="container mx-auto px-4 relative {{#if cover_image}}-mt-20 md:-mt-32{{else}}pt-12{{/if}} flex flex-col items-center">
|
|
{{#if profile_image}}
|
|
<div class="relative inline-block p-1 rounded-full bg-gradient-to-tr from-[var(--brand-primary)] to-[var(--bg-secondary)] mb-6 shadow-2xl">
|
|
<img class="w-32 h-32 md:w-36 md:h-36 rounded-full object-cover border-4 border-[var(--bg-primary)] shadow-inner" src="{{img_url profile_image size="s"}}" alt="{{name}}'s avatar">
|
|
</div>
|
|
{{/if}}
|
|
|
|
<h1 class="text-5xl md:text-7xl font-bold tracking-tighter text-[var(--text-primary)] mb-4">{{name}}</h1>
|
|
|
|
<div class="flex flex-wrap items-center justify-center gap-4 mb-6 text-[var(--text-secondary)] font-medium">
|
|
{{#if location}}
|
|
<span class="flex items-center">
|
|
{{> "icons/location" class="w-4 h-4 mr-1 text-[var(--brand-primary)]"}}
|
|
{{location}}
|
|
</span>
|
|
{{/if}}
|
|
{{#if website}}
|
|
<a href="{{website}}" target="_blank" rel="noopener" class="fancy-link flex items-center">
|
|
{{> "icons/link" class="w-4 h-4 mr-1"}}
|
|
Website
|
|
</a>
|
|
{{/if}}
|
|
{{#if twitter}}
|
|
<a href="{{twitter_url}}" target="_blank" rel="noopener" class="fancy-link flex items-center">
|
|
{{> "icons/twitter" class="w-4 h-4 mr-1"}}
|
|
Twitter
|
|
</a>
|
|
{{/if}}
|
|
{{#if facebook}}
|
|
<a href="{{facebook_url}}" target="_blank" rel="noopener" class="fancy-link flex items-center">
|
|
{{> "icons/facebook" class="w-4 h-4 mr-1"}}
|
|
Facebook
|
|
</a>
|
|
{{/if}}
|
|
</div>
|
|
|
|
{{#if bio}}
|
|
<p class="text-xl md:text-2xl text-[var(--text-secondary)] text-center max-w-2xl font-serif italic italic leading-relaxed opacity-90 mb-8">
|
|
{{bio}}
|
|
</p>
|
|
{{/if}}
|
|
|
|
<div class="flex items-center text-sm font-medium uppercase tracking-[0.2em] text-[var(--text-tertiary)]">
|
|
<span class="inline-block w-8 h-px bg-[var(--bg-tertiary)] mr-4"></span>
|
|
{{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}}
|
|
<span class="inline-block w-8 h-px bg-[var(--bg-tertiary)] ml-4"></span>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
{{/author}}
|
|
|
|
<div class="container mx-auto px-4 pb-20">
|
|
<div id="posts-container" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10">
|
|
{{#foreach posts}}
|
|
{{> "post-card"}}
|
|
{{/foreach}}
|
|
|
|
{{#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}}
|
|
</div>
|
|
|
|
<div id="loading-spinner" class="htmx-indicator text-center py-12">
|
|
<div class="inline-block animate-spin rounded-full h-10 w-10 border-4 border-[var(--brand-primary)] border-t-transparent"></div>
|
|
<p class="text-[var(--text-secondary)] mt-4 font-medium tracking-wide">Loading more posts...</p>
|
|
</div>
|
|
</div>
|