diff --git a/blocks/roster_grid.ninjatpl b/blocks/roster_grid.ninjatpl index 1429edf..c2f279d 100644 --- a/blocks/roster_grid.ninjatpl +++ b/blocks/roster_grid.ninjatpl @@ -4,7 +4,7 @@ {% if eyebrow %}

{{ eyebrow }}

{% endif %} {% if heading %}

{{ heading }}

{% endif %} {% if intro %}

{{ intro }}

{% endif %} -
+
{% for member in members %}
{% if member.avatar %}{% img member.avatar alt=member.name class="h-full w-full object-cover" %}{% else %}{% endif %} diff --git a/manifest.yaml b/manifest.yaml index 03225af..4fa5471 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -351,77 +351,19 @@ css: linear-gradient(to bottom, transparent, hsl(var(--background) / 0.6)); } - /* --- Responsive layout utilities (theme-owned, media-query driven) ---- */ - /* The host Tailwind build does NOT reliably compile responsive utility - variants (sm:/md:/lg:grid-cols-*, min-h-screen, arbitrary values) that - appear only in this theme's templates, so multi-column grids collapse - to a single column at every width and heroes lose their min-height. - Drive the load-bearing responsive layout from explicit CSS instead. - Layout only — no colour literals (colours stay on semantic tokens). */ - - .cp-grid { display: grid; gap: 1.5rem; grid-template-columns: minmax(0, 1fr); } - .cp-grid.cp-g-none { gap: 0; } - .cp-grid.cp-g-tight { gap: 1rem; } - .cp-grid.cp-g-wide { gap: 2rem; } - .cp-grid.cp-g-xl { gap: 2.5rem; } - .cp-grid.cp-m2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } - @media (min-width: 640px) { - .cp-grid.cp-s2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } - } - @media (min-width: 768px) { - .cp-grid.cp-md2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .cp-grid.cp-md3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } - .cp-grid.cp-md4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } - } - @media (min-width: 1024px) { - .cp-grid.cp-lg2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .cp-grid.cp-lg3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } - .cp-grid.cp-lg4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } - .cp-grid.cp-lg5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } - } - .cp-span2 { grid-column: span 2; } - @media (min-width: 1024px) { .cp-lg-span1 { grid-column: span 1; } } - - /* Masonry column-count (gallery) with the same reliability guarantee. */ - .cp-cols { column-gap: 1rem; } - .cp-cols.cp-c2 { columns: 2; } - @media (min-width: 768px) { - .cp-cols.cp-md-c2 { columns: 2; } - .cp-cols.cp-md-c3 { columns: 3; } - .cp-cols.cp-md-c4 { columns: 4; } - } - - /* Two-column content split (rich-section, hours-location) + article aside. */ - .cp-split { display: grid; gap: 2.5rem; grid-template-columns: minmax(0, 1fr); } - @media (min-width: 768px) { - .cp-split.cp-split-md { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4rem; } - } - .cp-article-grid { display: grid; gap: 2.5rem; grid-template-columns: minmax(0, 1fr); } - @media (min-width: 1024px) { - .cp-article-grid { grid-template-columns: minmax(0, 1fr) 260px; } - } - - /* --- Hero heights (bounded; host drops min-h-screen / arbitrary vh) ---- */ - /* Capped so a sparse hero never balloons into an empty neon void, while a - populated hero still reads full-bleed. */ + /* --- Hero heights (bespoke bounded clamp — anti-balloon) -------------- */ + /* Responsive grids/columns/spans/splits are plain Tailwind utilities in the + templates (grid-cols-*, columns-*, col-span-*, gap-*) — the host build + scans theme .ninjatpl, so no CSS reimplementation of those. + These hero min-heights stay CSS: a bespoke clamp() that caps a sparse + hero so it never balloons into an empty neon void while a populated hero + still reads full-bleed — not a stock min-h-* utility. */ .cp-hero-tall { min-height: clamp(32rem, 82vh, 50rem); } .cp-hero-mid { min-height: clamp(28rem, 70vh, 44rem); } .cp-hero-short { min-height: clamp(20rem, 50vh, 30rem); } .cp-hero-auto { min-height: 22rem; } .cp-hero-split { min-height: clamp(20rem, 46vh, 28rem); } - /* Vertical-timeline connector line (arbitrary before:* utilities dropped). */ - .cp-timeline { position: relative; } - .cp-timeline::before { - content: ""; - position: absolute; - left: 1rem; - top: 0.5rem; - width: 1px; - height: calc(100% - 1rem); - background: hsl(var(--primary) / 0.5); - } - /* --- Reduced motion: kill all motion --------------------- */ @media (prefers-reduced-motion: reduce) { diff --git a/templates/cyberpunk/article.ninjatpl b/templates/cyberpunk/article.ninjatpl index dc73894..42eae26 100644 --- a/templates/cyberpunk/article.ninjatpl +++ b/templates/cyberpunk/article.ninjatpl @@ -5,7 +5,7 @@ {{ admin_banner_html|safe }}
{{ slots.header|safe }}
-
+
{{ slots.main|safe }}
{% if slots.aside %}{% endif %}
diff --git a/templates/overrides/cyberpunk/blog-hero.ninjatpl b/templates/overrides/cyberpunk/blog-hero.ninjatpl index c92b02f..b4578be 100644 --- a/templates/overrides/cyberpunk/blog-hero.ninjatpl +++ b/templates/overrides/cyberpunk/blog-hero.ninjatpl @@ -7,7 +7,7 @@ {% if subtitle %}

{{ subtitle }}

{% endif %}
{% if posts %} -
+
{% for post in posts %}
{% if post.featured_image_url %}{% img post.featured_image_url alt=post.title class="aspect-video h-full w-full object-cover transition-transform duration-300 group-hover:scale-105" %}{% endif %} diff --git a/templates/overrides/cyberpunk/contact-card.ninjatpl b/templates/overrides/cyberpunk/contact-card.ninjatpl index 0517a66..be0d7b3 100644 --- a/templates/overrides/cyberpunk/contact-card.ninjatpl +++ b/templates/overrides/cyberpunk/contact-card.ninjatpl @@ -3,7 +3,7 @@
{% if heading %}

{{ heading }}

{% endif %} {% if description %}

{{ description }}

{% endif %} -
+
{% for channel in channels %}
{% if channel.icon %}{% endif %} diff --git a/templates/overrides/cyberpunk/event-list.ninjatpl b/templates/overrides/cyberpunk/event-list.ninjatpl index 30f5480..01c4ded 100644 --- a/templates/overrides/cyberpunk/event-list.ninjatpl +++ b/templates/overrides/cyberpunk/event-list.ninjatpl @@ -4,7 +4,7 @@ {% if heading %}

{{ heading }}

{% endif %} {% if intro %}

{{ intro }}

{% endif %} {% if layout == "cards" %} -
+
{% for event in events %}{% if not (hidePast and event.past) %}
{% if event.media %}
{% img event.media alt=event.title class="h-full w-full object-cover" %}
{% endif %} diff --git a/templates/overrides/cyberpunk/feature-grid.ninjatpl b/templates/overrides/cyberpunk/feature-grid.ninjatpl index b01336f..3a16038 100644 --- a/templates/overrides/cyberpunk/feature-grid.ninjatpl +++ b/templates/overrides/cyberpunk/feature-grid.ninjatpl @@ -5,7 +5,7 @@ {% if eyebrow %}

{{ eyebrow }}

{% endif %} {% if heading %}

{{ heading }}

{% endif %} {% if intro %}

{{ intro }}

{% endif %} -
+
{% for item in items %}
{% if item.icon %}
{% endif %} diff --git a/templates/overrides/cyberpunk/featured-posts.ninjatpl b/templates/overrides/cyberpunk/featured-posts.ninjatpl index 49767ed..efd5af9 100644 --- a/templates/overrides/cyberpunk/featured-posts.ninjatpl +++ b/templates/overrides/cyberpunk/featured-posts.ninjatpl @@ -3,7 +3,7 @@
{% if heading %}

{{ heading }}

{% endif %} -
+
{% for post in posts %}
{{ legalbar() }} {% else %} -
-
+
+
{% if logo %}{{ companyName }}{% elif companyName %}{{ companyName }}{% endif %} {% if tagline %}

{{ tagline }}

{% endif %} {% if address or email or phone %}
{% if address %}
{{ address }}
{% endif %}{% if email %}{% endif %}{% if phone %}{% endif %}
{% endif %} {{ sociallinks("mt-5") }}
{% for col in columns %}

{{ col.header }}

{% endfor %} -{% if showNewsletter %}
{{ newsletter() }}
{% endif %} +{% if showNewsletter %}
{{ newsletter() }}
{% endif %}
{{ legalbar() }} {% endif %} diff --git a/templates/overrides/cyberpunk/gallery.ninjatpl b/templates/overrides/cyberpunk/gallery.ninjatpl index 8e0261d..75b2f61 100644 --- a/templates/overrides/cyberpunk/gallery.ninjatpl +++ b/templates/overrides/cyberpunk/gallery.ninjatpl @@ -1,5 +1,5 @@ {# gallery cyberpunk override: neon-edged tiles. Lightbox script + data-bn-* attributes + {% img %} preserved byte-for-byte. #} -{% with layout=layout|default:"grid" gap=gap|default:"md" cols=columns|default:3 %}{% if lightbox %}