Full Wave A build to the OVERRIDE-CONTRACT (frozen cms a0f07e2ae): - 49 mandatory builtin overrides in templates/overrides/magazine-bold/, re-skinned to streetwear cover-story chrome (massive condensed uppercase Archivo Black headlines, heavy 2px rules, hard square edges, mono datelines, fluoro accent slabs). Every content field, provider var, custom tag and JS block preserved verbatim from the frozen builtin defaults; legacy button (link/style/label) and card (media/text) field reads already reconciled. - 7 page templates: default, full-width, landing, article, blog-index, contact, auth. - 4 persona blocks (deleted masthead/photo_essay/pull_quote/issue_archive/ colophon — now overrides of navbar/gallery/quote/post-index/footer): cover_story, lookbook, drop_calendar, credits_ticker. - 5 dual-mode presets (newsprint+voltage light / ink-black+fluoro dark), all 19 tokens, dark tuned not inverted. - Bundled OFL woff2: Archivo Black (display), Inter (body), IBM Plex Mono (labels); fonts.json + assets/fonts/LICENSES.md. All font-family via var(--font-heading|body|mono, fallback). - Themed email-safe wrapper (tables, inline styles, streetwear defaults). - Master pages (navbar/footer/slot chrome) + seed demo site (OFFCUT label: home, about, blog + 3 posts, contact with data table + row_inserted → email-admins workflow, login) in fashion-label voice. - MID motion tier: marquee ticker, scroll reveal, duotone hover, scroll progress bar — all prefers-reduced-motion honored with static fallback, no canvas. - Icon packs (lucide, simple-icons) declared in plugin.mod + RECOMMENDED_ICONS. Verified: `make build` exit 0; `check-safety` 32 checks 19 ok 13 skip -> OK. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
5.2 KiB
Plaintext
41 lines
5.2 KiB
Plaintext
{# footer override — quiet magazine-bold colophon: hairline rules, small-caps labels, address, reservations, social on a card panel. Structure/fields/signup_form preserved from builtin; reskinned to magazine-bold. #}
|
|
{% set fl = layout %}
|
|
{% if not fl %}{% if template == "centered" %}{% set fl = "centered" %}{% else %}{% set fl = "columns" %}{% endif %}{% endif %}
|
|
{% set fbg = backgroundColor|default:"bg-card text-card-foreground" %}
|
|
{% macro sociallinks(cls) %}{% if social_items %}<div class="flex items-center gap-4 {{ cls }}">{% for s in social_items %}<a href="{{ s.url }}" target="_blank" rel="noopener" title="{{ s.label }}" class="text-muted-foreground hover:text-[hsl(var(--accent))] transition-colors"><span class="sr-only">{{ s.label }}</span>{% if s.icon %}::{{ s.icon }}::{% else %}{{ s.label }}{% endif %}</a>{% endfor %}</div>{% endif %}{% endmacro %}
|
|
{% macro newsletter() %}{% if showNewsletter %}<div class="max-w-sm"><h3 class="mb-caps text-sm text-muted-foreground">{{ newsletterTitle|default:"Join the guest list" }}</h3>{% if newsletterDescription %}<p class="mt-1 text-sm italic text-muted-foreground">{{ newsletterDescription }}</p>{% endif %}<div class="mt-3">{% signup_form list=newsletterListSlug|default:"main" source="footer" submit=newsletterButtonText|default:"Subscribe" %}</div></div>{% endif %}{% endmacro %}
|
|
{% macro legalbar() %}<div class="mt-10 pt-6 border-t border-[hsl(var(--border))] flex flex-col sm:flex-row items-center justify-between gap-3 text-sm text-muted-foreground"><p>{% if copyright %}© {{ copyright }}{% else %}© {{ companyName }}{% endif %}</p>{% if legal_items %}<nav class="flex flex-wrap items-center gap-x-4 gap-y-1">{% for l in legal_items %}<a href="{{ l.url|default:'#' }}"{% if l.open_in_new_tab %} target="_blank" rel="noopener"{% endif %} class="hover:text-[hsl(var(--accent))] transition-colors">{{ l.label }}</a>{% endfor %}</nav>{% endif %}</div>{% endmacro %}
|
|
<footer data-block-override="magazine-bold:footer" class="w-full border-t border-[hsl(var(--border))] {{ fbg }} {{ class }}">
|
|
<div class="{% if fullWidth %}w-full px-4 sm:px-6 lg:px-8{% else %}max-w-7xl mx-auto px-4 sm:px-6 lg:px-8{% endif %} py-16">
|
|
{% if fl == "minimal" %}
|
|
<div class="flex flex-col sm:flex-row items-center justify-between gap-6">
|
|
<div class="flex items-center gap-3">{% if logo %}<img src="{{ logo }}" alt="{{ companyName }}" class="h-8 w-auto"/>{% elif companyName %}<span class="mb-caps text-lg" style="font-family:var(--font-heading, 'Archivo Black', 'Arial Black', sans-serif);">{{ companyName }}</span>{% endif %}{% if tagline %}<span class="text-sm italic text-muted-foreground hidden sm:inline">{{ tagline }}</span>{% endif %}</div>
|
|
{{ sociallinks("") }}
|
|
</div>
|
|
{{ legalbar() }}
|
|
{% elif fl == "centered" %}
|
|
<div class="flex flex-col items-center text-center gap-5">
|
|
{% if logo %}<img src="{{ logo }}" alt="{{ companyName }}" class="h-10 w-auto"/>{% elif companyName %}<span class="mb-caps text-2xl text-[hsl(var(--accent))]" style="font-family:var(--font-heading, 'Archivo Black', 'Arial Black', sans-serif);">{{ companyName }}</span>{% endif %}
|
|
<span class="mb-rule w-12"></span>
|
|
{% if tagline %}<p class="max-w-md text-sm italic text-muted-foreground">{{ tagline }}</p>{% endif %}
|
|
{% if columns %}<nav class="flex flex-wrap items-center justify-center gap-x-6 gap-y-2">{% for col in columns %}{% for item in col.items %}<a href="{{ item.url|default:'#' }}"{% if item.open_in_new_tab %} target="_blank" rel="noopener"{% endif %} class="mb-caps text-xs text-muted-foreground hover:text-[hsl(var(--accent))] transition-colors">{{ item.label }}</a>{% endfor %}{% endfor %}</nav>{% endif %}
|
|
{{ newsletter() }}
|
|
{{ sociallinks("justify-center") }}
|
|
</div>
|
|
{{ legalbar() }}
|
|
{% else %}
|
|
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-8">
|
|
<div class="col-span-2 lg:col-span-2">
|
|
{% if logo %}<img src="{{ logo }}" alt="{{ companyName }}" class="h-9 w-auto"/>{% elif companyName %}<span class="mb-caps text-xl text-[hsl(var(--accent))]" style="font-family:var(--font-heading, 'Archivo Black', 'Arial Black', sans-serif);">{{ companyName }}</span>{% endif %}
|
|
{% if tagline %}<p class="mt-3 max-w-xs text-sm italic text-muted-foreground">{{ tagline }}</p>{% endif %}
|
|
{% if address or email or phone %}<address class="mt-4 not-italic text-sm text-muted-foreground space-y-1">{% if address %}<div>{{ address }}</div>{% endif %}{% if email %}<div><a href="mailto:{{ email }}" class="hover:text-[hsl(var(--accent))] transition-colors">{{ email }}</a></div>{% endif %}{% if phone %}<div><a href="tel:{{ phone }}" class="hover:text-[hsl(var(--accent))] transition-colors">{{ phone }}</a></div>{% endif %}</address>{% endif %}
|
|
{{ sociallinks("mt-5") }}
|
|
</div>
|
|
{% for col in columns %}<div><h3 class="mb-caps text-xs text-muted-foreground">{{ col.header }}</h3><ul class="mt-3 space-y-2">{% for item in col.items %}<li><a href="{{ item.url|default:'#' }}"{% if item.open_in_new_tab %} target="_blank" rel="noopener"{% endif %} class="text-sm text-muted-foreground hover:text-[hsl(var(--accent))] transition-colors">{{ item.label }}</a></li>{% endfor %}</ul></div>{% endfor %}
|
|
{% if showNewsletter %}<div class="col-span-2 lg:col-span-1">{{ newsletter() }}</div>{% endif %}
|
|
</div>
|
|
{{ legalbar() }}
|
|
{% endif %}
|
|
</div>
|
|
</footer>
|