themes-gotham/templates/gotham/blog-index.ninjatpl
Alex Dunmow 486d3a283e fix(gotham): remediate whitespace stranding, imageless hero void, mobile grid collapse
- Robust scroll-reveal: replace observer-only reveal (which stranded
  below-fold .reveal blocks at opacity:0 while they still occupied layout
  height, producing a huge dead band before the footer) with an instant
  in-view pass + scroll/resize/load listeners + safety-net full reveal.
  Applied identically to all 8 page templates. Never strands content;
  fixes the invisible hero text and the giant empty band.
- Imageless hero: cap to a compact 520px (380px mobile) letterboxed text
  plate with a token spotlight backdrop instead of a 75vh empty void.
  Height moved to a raw manifest CSS class (JIT-scan-independent).
- Mobile safety net: raw @media(max-width:640px) rules force the events,
  membership and feature-grid layouts to a single column so a dropped
  responsive Tailwind prefix can never strand a wide grid on a phone.
- Shorten reveal transition .7s -> .5s for screenshot-safe opacity.

check-safety: 32 checks 19 ok 13 skip -> OK; codeless build exit 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:20:44 +08:00

27 lines
2.7 KiB
Plaintext

<!doctype html>
<html lang="en" class="{% if theme_mode == "dark" %}dark{% endif %}">
{{ head_html|safe }}
<body class="bg-background text-foreground antialiased min-h-screen flex flex-col film-grain" style="font-family: var(--font-body, &quot;Cormorant Garamond&quot;, &quot;Cormorant&quot;, Georgia, serif);">
{{ admin_banner_html|safe }}
{% if slots.header %}<header class="w-full">{{ slots.header|safe }}</header>{% endif %}
<main class="flex-grow w-full">
<div class="max-w-6xl mx-auto px-4 py-12 md:py-16">
{% if title %}
<div class="text-center reveal">
<h1 class="reel-caps reel-underline mx-auto w-fit text-4xl md:text-5xl" style="font-family:var(--font-heading, 'Antonio', 'Oswald', 'Bebas Neue', sans-serif);">{{ title }}</h1>
{% if page_meta.MetaDescription %}<p class="mt-4 text-lg italic" style="color:hsl(var(--muted-foreground));">{{ page_meta.MetaDescription }}</p>{% endif %}
<div class="mx-auto mt-6 h-4 w-40 reel-strip" aria-hidden="true"></div>
</div>
{% endif %}
{% if slots.featured %}<section class="mt-12">{{ slots.featured|safe }}</section>{% endif %}
{% if slots.main %}<section class="mt-12">{{ slots.main|safe }}</section>{% else %}<div class="py-20 text-center"><p class="italic" style="color:hsl(var(--muted-foreground));">No posts published yet.</p></div>{% endif %}
</div>
</main>
{% if slots.footer %}<footer class="w-full mt-auto border-t border-[hsl(var(--primary)/0.35)]">{{ slots.footer|safe }}</footer>{% endif %}
{{ body_end_html|safe }}
<script>
(function(){if(window.__gothamMotion)return;window.__gothamMotion=1;var d=document,root=d.documentElement;root.classList.add('gotham-js');var reduce=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;function pending(){return d.querySelectorAll('.reveal:not(.is-visible)');}function reveal(el){el.classList.add('is-visible');}function inView(){var h=window.innerHeight||root.clientHeight;pending().forEach(function(el){var r=el.getBoundingClientRect();if(r.top<h*1.05&&r.bottom>-h*0.25)reveal(el);});}function all(){pending().forEach(reveal);}function run(){if(reduce){all();return;}inView();window.addEventListener('scroll',inView,{passive:true});window.addEventListener('resize',inView,{passive:true});window.addEventListener('load',function(){inView();setTimeout(inView,120);},{once:true});setTimeout(inView,400);setTimeout(all,2600);d.querySelectorAll('[data-spotlight]').forEach(function(s){s.addEventListener('pointermove',function(ev){var r=s.getBoundingClientRect();s.style.setProperty('--sx',((ev.clientX-r.left)/r.width*100)+'%');s.style.setProperty('--sy',((ev.clientY-r.top)/r.height*100)+'%');});});}if(d.readyState!='loading')run();else d.addEventListener('DOMContentLoaded',run);})();
</script>
</body>
</html>