From 6c03f6da6c0188fc89f50a59816fd81027ac778c Mon Sep 17 00:00:00 2001 From: Alex Dunmow Date: Sun, 5 Jul 2026 10:56:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(brutalist):=20Wave=20A=20override=20contra?= =?UTF-8?q?ct=20=E2=80=94=2049=20builtin=20overrides,=207=20templates,=20s?= =?UTF-8?q?eed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WO-TF-012. Neo-brutalist creative-studio theme brought up to the Wave A OVERRIDE-CONTRACT (frozen against cms a0f07e2ae). - Override all 49 mandatory builtin keys in templates/overrides/brutalist/ (chrome, marketing, primitives, commerce, blog family, auth surface, 404), each carrying the brutalist chrome (chunky borders, hard offset shadows, hover snap, mono uppercase meta, candy accents) via a raw-CSS "bru-*" kit shipped in manifest.yaml. Load-bearing wiring (HTMX auth endpoints, signup form, contact-form submit + honeypot, facade scripts, lightbox) preserved verbatim. - 7 page templates: default, full-width, landing, article, blog-index, contact, auth (fixed a bug where templates omitted the `dark` class so dark presets never activated). - Blocks rework: removed 6 blocks that duplicated builtins (masthead, concrete_hero, meta_strip, caption_image, pull_quote, colophon) — now overrides; kept project_ledger; added persona blocks sticker_wall, changelog, spec_sheet (4 total). - 4 dual-mode presets (all mode "both", 19 tokens light + dark): Concrete & Cadmium, Hazard, Riso, Acid. - Bundled 8 latin-subset OFL woff2 (Space Grotesk, Archivo Black, Inter, IBM Plex Mono) in assets/fonts/ + LICENSES.md; fonts.json populated; all font-family via var(--font-*). RECOMMENDED_FONTS/ICONS updated; required_icon_packs declared. - Email-safe themed wrapper (tables, inline styles) cleaned up. - master_pages.json reworked to builtin navbar/hero/cta/footer. - Demo seed (seed/seed.json + workflows.json, demo:true): home, about, blog (3 posts), contact (form + contact_submissions data table + row_inserted → email-admins workflow), login — studio voice. Known codeless limitation: page-suggestions renders themed 404 chrome but the similar-pages list (server-side DB query, no template provider) can't be reproduced; auth-form captcha widget is server-generated and can't be emitted (seed leaves captchaEnabled=false). Verified: make exit 0; check-safety exit 0. Visual quality UNVERIFIED until Wave B. Co-Authored-By: Claude Opus 4.8 --- RECOMMENDED_FONTS.md | 49 ++-- RECOMMENDED_ICONS.md | 21 ++ assets/fonts/LICENSES.md | 16 ++ assets/fonts/archivo-black-400.woff2 | Bin 0 -> 18604 bytes assets/fonts/ibm-plex-mono-400.woff2 | Bin 0 -> 14708 bytes assets/fonts/ibm-plex-mono-500.woff2 | Bin 0 -> 14888 bytes assets/fonts/inter-400.woff2 | Bin 0 -> 23664 bytes assets/fonts/inter-500.woff2 | Bin 0 -> 24272 bytes assets/fonts/inter-700.woff2 | Bin 0 -> 24356 bytes assets/fonts/space-grotesk-500.woff2 | Bin 0 -> 13312 bytes assets/fonts/space-grotesk-700.woff2 | Bin 0 -> 12840 bytes blocks/blocks.yaml | 61 ++-- blocks/caption_image.ninjatpl | 1 - blocks/caption_image.schema.json | 26 -- blocks/changelog.ninjatpl | 8 + blocks/changelog.schema.json | 51 ++++ blocks/colophon.ninjatpl | 1 - blocks/colophon.schema.json | 53 ---- blocks/concrete_hero.ninjatpl | 1 - blocks/concrete_hero.schema.json | 27 -- blocks/masthead.ninjatpl | 5 - blocks/masthead.schema.json | 29 -- blocks/meta_strip.ninjatpl | 1 - blocks/pull_quote.ninjatpl | 1 - blocks/pull_quote.schema.json | 21 -- blocks/spec_sheet.ninjatpl | 6 + ...rip.schema.json => spec_sheet.schema.json} | 20 +- blocks/sticker_wall.ninjatpl | 8 + blocks/sticker_wall.schema.json | 47 +++ fonts.json | 35 ++- manifest.yaml | 270 +++++++++++++++++- master_pages.json | 31 +- plugin.mod | 3 +- presets.json | 118 +++++++- seed/seed.json | 212 ++++++++++++++ seed/workflows.json | 19 ++ templates/brutalist/article.ninjatpl | 24 +- templates/brutalist/auth.ninjatpl | 19 ++ templates/brutalist/blog-index.ninjatpl | 17 ++ templates/brutalist/contact.ninjatpl | 22 ++ templates/brutalist/default.ninjatpl | 14 +- templates/brutalist/full-width.ninjatpl | 12 +- templates/brutalist/landing.ninjatpl | 16 +- templates/email/brutalist.ninjatpl | 28 +- .../brutalist/announcement-bar.ninjatpl | 21 ++ .../overrides/brutalist/audio-embed.ninjatpl | 16 ++ .../overrides/brutalist/auth-form.ninjatpl | 61 ++++ .../overrides/brutalist/auth-status.ninjatpl | 33 +++ .../brutalist/author-bio-hero.ninjatpl | 21 ++ .../overrides/brutalist/author-bio.ninjatpl | 13 + .../overrides/brutalist/blog-hero.ninjatpl | 23 ++ .../overrides/brutalist/breadcrumbs.ninjatpl | 13 + templates/overrides/brutalist/button.ninjatpl | 3 +- templates/overrides/brutalist/card.ninjatpl | 2 + .../brutalist/category-list.ninjatpl | 18 ++ .../overrides/brutalist/contact-card.ninjatpl | 18 ++ .../overrides/brutalist/contact-form.ninjatpl | 40 +++ .../overrides/brutalist/countdown.ninjatpl | 49 ++++ templates/overrides/brutalist/cta.ninjatpl | 13 + .../overrides/brutalist/divider.ninjatpl | 2 + .../overrides/brutalist/event-list.ninjatpl | 41 +++ templates/overrides/brutalist/faq.ninjatpl | 18 ++ .../overrides/brutalist/feature-grid.ninjatpl | 18 ++ .../brutalist/featured-posts.ninjatpl | 22 ++ templates/overrides/brutalist/footer.ninjatpl | 28 ++ .../overrides/brutalist/gallery.ninjatpl | 52 ++++ .../overrides/brutalist/heading.ninjatpl | 8 +- templates/overrides/brutalist/hero.ninjatpl | 24 ++ .../brutalist/hours-location.ninjatpl | 31 ++ templates/overrides/brutalist/image.ninjatpl | 3 +- .../overrides/brutalist/logo-strip.ninjatpl | 16 ++ .../overrides/brutalist/menu-list.ninjatpl | 30 ++ templates/overrides/brutalist/navbar.ninjatpl | 64 +++++ .../brutalist/newsletter-signup.ninjatpl | 10 + .../brutalist/page-suggestions.ninjatpl | 20 ++ .../brutalist/password-reset-form.ninjatpl | 13 + .../brutalist/popular-posts.ninjatpl | 16 ++ .../overrides/brutalist/post-hero.ninjatpl | 20 ++ .../brutalist/post-metadata.ninjatpl | 9 + .../overrides/brutalist/pricing.ninjatpl | 25 ++ templates/overrides/brutalist/quote.ninjatpl | 2 + .../brutalist/related-posts.ninjatpl | 19 ++ .../overrides/brutalist/rich-section.ninjatpl | 14 + .../overrides/brutalist/rich-text.ninjatpl | 2 + .../overrides/brutalist/sidebar-nav.ninjatpl | 13 + .../overrides/brutalist/social-links.ninjatpl | 14 + templates/overrides/brutalist/stats.ninjatpl | 49 ++++ templates/overrides/brutalist/team.ninjatpl | 22 ++ .../overrides/brutalist/testimonial.ninjatpl | 27 ++ templates/overrides/brutalist/text.ninjatpl | 3 +- .../overrides/brutalist/timeline.ninjatpl | 22 ++ .../overrides/brutalist/utility-bar.ninjatpl | 10 + .../overrides/brutalist/video-embed.ninjatpl | 23 ++ 93 files changed, 1994 insertions(+), 333 deletions(-) create mode 100644 RECOMMENDED_ICONS.md create mode 100644 assets/fonts/LICENSES.md create mode 100644 assets/fonts/archivo-black-400.woff2 create mode 100644 assets/fonts/ibm-plex-mono-400.woff2 create mode 100644 assets/fonts/ibm-plex-mono-500.woff2 create mode 100644 assets/fonts/inter-400.woff2 create mode 100644 assets/fonts/inter-500.woff2 create mode 100644 assets/fonts/inter-700.woff2 create mode 100644 assets/fonts/space-grotesk-500.woff2 create mode 100644 assets/fonts/space-grotesk-700.woff2 delete mode 100644 blocks/caption_image.ninjatpl delete mode 100644 blocks/caption_image.schema.json create mode 100644 blocks/changelog.ninjatpl create mode 100644 blocks/changelog.schema.json delete mode 100644 blocks/colophon.ninjatpl delete mode 100644 blocks/colophon.schema.json delete mode 100644 blocks/concrete_hero.ninjatpl delete mode 100644 blocks/concrete_hero.schema.json delete mode 100644 blocks/masthead.ninjatpl delete mode 100644 blocks/masthead.schema.json delete mode 100644 blocks/meta_strip.ninjatpl delete mode 100644 blocks/pull_quote.ninjatpl delete mode 100644 blocks/pull_quote.schema.json create mode 100644 blocks/spec_sheet.ninjatpl rename blocks/{meta_strip.schema.json => spec_sheet.schema.json} (56%) create mode 100644 blocks/sticker_wall.ninjatpl create mode 100644 blocks/sticker_wall.schema.json create mode 100644 seed/seed.json create mode 100644 seed/workflows.json create mode 100644 templates/brutalist/auth.ninjatpl create mode 100644 templates/brutalist/blog-index.ninjatpl create mode 100644 templates/brutalist/contact.ninjatpl create mode 100644 templates/overrides/brutalist/announcement-bar.ninjatpl create mode 100644 templates/overrides/brutalist/audio-embed.ninjatpl create mode 100644 templates/overrides/brutalist/auth-form.ninjatpl create mode 100644 templates/overrides/brutalist/auth-status.ninjatpl create mode 100644 templates/overrides/brutalist/author-bio-hero.ninjatpl create mode 100644 templates/overrides/brutalist/author-bio.ninjatpl create mode 100644 templates/overrides/brutalist/blog-hero.ninjatpl create mode 100644 templates/overrides/brutalist/breadcrumbs.ninjatpl create mode 100644 templates/overrides/brutalist/card.ninjatpl create mode 100644 templates/overrides/brutalist/category-list.ninjatpl create mode 100644 templates/overrides/brutalist/contact-card.ninjatpl create mode 100644 templates/overrides/brutalist/contact-form.ninjatpl create mode 100644 templates/overrides/brutalist/countdown.ninjatpl create mode 100644 templates/overrides/brutalist/cta.ninjatpl create mode 100644 templates/overrides/brutalist/divider.ninjatpl create mode 100644 templates/overrides/brutalist/event-list.ninjatpl create mode 100644 templates/overrides/brutalist/faq.ninjatpl create mode 100644 templates/overrides/brutalist/feature-grid.ninjatpl create mode 100644 templates/overrides/brutalist/featured-posts.ninjatpl create mode 100644 templates/overrides/brutalist/footer.ninjatpl create mode 100644 templates/overrides/brutalist/gallery.ninjatpl create mode 100644 templates/overrides/brutalist/hero.ninjatpl create mode 100644 templates/overrides/brutalist/hours-location.ninjatpl create mode 100644 templates/overrides/brutalist/logo-strip.ninjatpl create mode 100644 templates/overrides/brutalist/menu-list.ninjatpl create mode 100644 templates/overrides/brutalist/navbar.ninjatpl create mode 100644 templates/overrides/brutalist/newsletter-signup.ninjatpl create mode 100644 templates/overrides/brutalist/page-suggestions.ninjatpl create mode 100644 templates/overrides/brutalist/password-reset-form.ninjatpl create mode 100644 templates/overrides/brutalist/popular-posts.ninjatpl create mode 100644 templates/overrides/brutalist/post-hero.ninjatpl create mode 100644 templates/overrides/brutalist/post-metadata.ninjatpl create mode 100644 templates/overrides/brutalist/pricing.ninjatpl create mode 100644 templates/overrides/brutalist/quote.ninjatpl create mode 100644 templates/overrides/brutalist/related-posts.ninjatpl create mode 100644 templates/overrides/brutalist/rich-section.ninjatpl create mode 100644 templates/overrides/brutalist/rich-text.ninjatpl create mode 100644 templates/overrides/brutalist/sidebar-nav.ninjatpl create mode 100644 templates/overrides/brutalist/social-links.ninjatpl create mode 100644 templates/overrides/brutalist/stats.ninjatpl create mode 100644 templates/overrides/brutalist/team.ninjatpl create mode 100644 templates/overrides/brutalist/testimonial.ninjatpl create mode 100644 templates/overrides/brutalist/timeline.ninjatpl create mode 100644 templates/overrides/brutalist/utility-bar.ninjatpl create mode 100644 templates/overrides/brutalist/video-embed.ninjatpl diff --git a/RECOMMENDED_FONTS.md b/RECOMMENDED_FONTS.md index 4ddf310..32f61ce 100644 --- a/RECOMMENDED_FONTS.md +++ b/RECOMMENDED_FONTS.md @@ -1,33 +1,32 @@ -# Recommended Fonts — Brutalist +# Recommended fonts — Brutalist -`fonts.json` ships empty (`[]`) per the wave-1 policy in -`/home/alex/src/blockninja/themes/docs/FONTS.md`. No woff2 files are bundled in -this build pass; the theme uses CSS variable fallback stacks until an admin -assigns fonts in the typography panel. +Fonts are admin-controlled. Assign them in Admin → Appearance → Typography; the +theme consumes them only via `var(--font-heading|body|mono, )`, never a +hardcoded family. -All three roles below are available in the Google Fonts tab of the typography -picker. Open the typography panel, pick from the **Google Fonts** tab, and -assign: +## Bundled (ship with this theme, SIL OFL 1.1) -| Role | Source | Family | Notes | -|---|---|---|---| -| Heading | `google:Space Grotesk` | Space Grotesk | Display / wordmark face. The whole point of the theme is that it lives at 200pt+. Bold (700) is what the templates default to. | -| Body | `google:Inter` | Inter | 16–18px body copy with generous tracking. Weights 400 and 600. (Inter Tight is an acceptable swap if you prefer tighter setting.) | -| Mono | `google:JetBrains Mono` | JetBrains Mono | 11px mono captions, figure numbers, timestamps, metadata. Weights 400 and 700. | +These latin-subset woff2 files are bundled in `assets/fonts/` and appear in the +picker as `source=template` rows (see `assets/fonts/LICENSES.md`): -## CSS fallback chain (already in the theme) +| Role | Family | Weights | Notes | +|------|--------|---------|-------| +| Heading | **Space Grotesk** | 500, 700 | The signature display face — oversized, uppercase. | +| Display (alt) | **Archivo Black** | 400 | Heavier alternative for masthead-scale headlines. | +| Body | **Inter** | 400, 500, 700 | Neutral, high-legibility body copy. | +| Mono | **IBM Plex Mono** | 400, 500 | Meta labels, captions, buttons, tags. | -Until those assignments land, every `font-family` declaration in the theme -flows through CSS custom properties with the following fallback stacks: +## Suggested assignment -```css -var(--font-heading, "Space Grotesk", "Inter Tight", "Helvetica Neue", Helvetica, Arial, sans-serif) -var(--font-body, "Inter", "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif) -var(--font-mono, "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace) -``` +- **Heading:** Space Grotesk (700). Alternative: Archivo Black for maximum weight. +- **Body:** Inter (400). +- **Mono:** IBM Plex Mono (400). Alternative from the Google tab: JetBrains Mono. -## Wave-2 follow-up (out of scope) +## Fallback stacks (used when no admin font is set) -The wider design system roadmap calls for shipping a custom display face for -Brutalist. When that lands, replace this doc with a `LICENSES.md` and add the -woff2 family to `fonts.json` per the schema in `docs/FONTS.md`. +- Heading: `"Space Grotesk", "Inter Tight", "Helvetica Neue", Helvetica, Arial, sans-serif` +- Body: `"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif` +- Mono: `"JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace` + +All four bundled families are SIL Open Font License 1.1. Swap freely from the +Google Fonts tab; the theme only references the CSS variables. diff --git a/RECOMMENDED_ICONS.md b/RECOMMENDED_ICONS.md new file mode 100644 index 0000000..7801aae --- /dev/null +++ b/RECOMMENDED_ICONS.md @@ -0,0 +1,21 @@ +# Recommended icons — Brutalist + +This theme renders icons through the sprite pipeline +(``). Two packs are used by +the theme's block overrides and are declared in `plugin.mod` +(`required_icon_packs = ["lucide", "simple-icons"]`). + +Until the loader auto-installs declared packs, install them manually before +activation: + +1. Open `/admin/icons`. +2. Install **Lucide** (bundled — usually already present). Used for UI chrome: + `menu`, `x`, `chevron-down`, `chevron-left`, `chevron-right`, `arrow-right`, + `play`, `download`, `check`, `star`, `navigation`, `map-pin`, `flag`, `globe`, + `asterisk`. +3. Install **Simple Icons** (bundled). Used by the author-bio-hero social row: + `x`, `linkedin`, `github`. + +`lucide` is the safe default for any icon-picker field. Utility-bar and footer +social icons render whatever `pack:name` string the admin assigns, so they work +with any installed pack. diff --git a/assets/fonts/LICENSES.md b/assets/fonts/LICENSES.md new file mode 100644 index 0000000..703cf6c --- /dev/null +++ b/assets/fonts/LICENSES.md @@ -0,0 +1,16 @@ +# Bundled font licenses + +All bundled woff2 files in this directory are latin-subset builds redistributed +under the SIL Open Font License 1.1 (OFL). No modifications were made beyond +subsetting to the latin range. + +| Family | Files | License | Source | +|--------|-------|---------|--------| +| Space Grotesk | space-grotesk-500.woff2, space-grotesk-700.woff2 | SIL OFL 1.1 | Florian Karsten / Google Fonts | +| Archivo Black | archivo-black-400.woff2 | SIL OFL 1.1 | Omnibus-Type / Google Fonts | +| Inter | inter-400.woff2, inter-500.woff2, inter-700.woff2 | SIL OFL 1.1 | Rasmus Andersson / Google Fonts | +| IBM Plex Mono | ibm-plex-mono-400.woff2, ibm-plex-mono-500.woff2 | SIL OFL 1.1 | IBM / Google Fonts | + +Full OFL text: https://openfontlicense.org/. Font-family is still admin-controlled; +these bundled families appear as `source=template` rows in the fonts picker and +are consumed only via `var(--font-heading|body|mono, )`. diff --git a/assets/fonts/archivo-black-400.woff2 b/assets/fonts/archivo-black-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a88b0b5352960c400c46ee17180d0d8f5c0d0db9 GIT binary patch literal 18604 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/inter-500.woff2 b/assets/fonts/inter-500.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..54f0a595dd3c76344a980109e7517ed42416de93 GIT binary patch literal 24272 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 GLCRiVB40oN literal 0 HcmV?d00001 diff --git a/blocks/blocks.yaml b/blocks/blocks.yaml index aaa886a..97c1b4b 100644 --- a/blocks/blocks.yaml +++ b/blocks/blocks.yaml @@ -1,48 +1,31 @@ -# Brutalist theme block definitions (codeless .bnp, WO-WZ-021). -# Keys are fully qualified (brutalist:) because the codeless loader -# registers definitions verbatim — there is no PluginBlockRegistry prefixing -# in the codeless path (unlike the wasm/templ path). The qualified keys match -# the hardcoded data-block attributes and the master_pages.json references. +# Brutalist theme persona block definitions (codeless .bnp, WO-WZ-021 / WO-TF-012). +# Keys are fully qualified (brutalist:) because the codeless loader registers +# definitions verbatim. Blocks that duplicated builtins (masthead, concrete_hero, +# meta_strip, caption_image, pull_quote, colophon) were removed — they are now +# template overrides of navbar/hero/utility-bar/image/quote/footer. Only true +# persona furniture remains here. blocks: - - key: brutalist:masthead - title: Studio Masthead - description: Oversized studio wordmark with mono index counter top-right - category: layout - schema: masthead.schema.json - template: masthead.ninjatpl - key: brutalist:project_ledger title: Project Ledger - description: "Ordered project list on a 12-col grid: number / year / client / role / arrow" + description: "Ordered project index on a 12-col grid: number / year / client / role / arrow" category: content schema: project_ledger.schema.json template: project_ledger.ninjatpl - - key: brutalist:concrete_hero - title: Concrete Hero - description: 200pt+ display headline with optional eyebrow and full-bleed image - category: layout - schema: concrete_hero.schema.json - template: concrete_hero.ninjatpl - - key: brutalist:meta_strip - title: Metadata Strip - description: "Mono uppercase strip: CLIENT / YEAR / DISCIPLINE / LOCATION" + - key: brutalist:sticker_wall + title: Sticker Wall + description: "Wall of hard-bordered candy stickers — labels, disciplines, or tags with offset shadows" category: content - schema: meta_strip.schema.json - template: meta_strip.ninjatpl - - key: brutalist:caption_image - title: Captioned Image - description: Image with 11px mono caption in the left gutter + schema: sticker_wall.schema.json + template: sticker_wall.ninjatpl + - key: brutalist:changelog + title: Changelog + description: "Versioned changelog rows — version tag, date, and note per release" category: content - schema: caption_image.schema.json - template: caption_image.ninjatpl - - key: brutalist:pull_quote - title: Pull Quote - description: Massive quote spanning 8 columns with hairline rules above and below + schema: changelog.schema.json + template: changelog.ninjatpl + - key: brutalist:spec_sheet + title: Spec Sheet + description: "Mono label/value spec table with hairline rows" category: content - schema: pull_quote.schema.json - template: pull_quote.ninjatpl - - key: brutalist:colophon - title: Colophon Footer - description: Three-row mono footer with copyright stamp - category: layout - schema: colophon.schema.json - template: colophon.ninjatpl + schema: spec_sheet.schema.json + template: spec_sheet.ninjatpl diff --git a/blocks/caption_image.ninjatpl b/blocks/caption_image.ninjatpl deleted file mode 100644 index aa1587d..0000000 --- a/blocks/caption_image.ninjatpl +++ /dev/null @@ -1 +0,0 @@ -
{% if image %}{{ caption }}{% endif %}{% if caption or figureNumber %}
{% if figureNumber %}{{ figureNumber }}{% endif %}{% if caption %}{{ caption }}{% endif %}
{% endif %}
diff --git a/blocks/caption_image.schema.json b/blocks/caption_image.schema.json deleted file mode 100644 index 91486ba..0000000 --- a/blocks/caption_image.schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Captioned Image", - "description": "Image with 11px mono caption in the left gutter", - "type": "object", - "properties": { - "image": { - "type": "string", - "title": "Image", - "description": "Figure image", - "x-editor": "media" - }, - "caption": { - "type": "string", - "title": "Caption", - "description": "Mono uppercase caption text", - "x-editor": "text" - }, - "figureNumber": { - "type": "string", - "title": "Figure Number", - "description": "e.g. Fig. 01", - "x-editor": "text" - } - } -} diff --git a/blocks/changelog.ninjatpl b/blocks/changelog.ninjatpl new file mode 100644 index 0000000..ca3637c --- /dev/null +++ b/blocks/changelog.ninjatpl @@ -0,0 +1,8 @@ +
+
+{% if heading %}

{{ heading }}

{% endif %} +
+{% for entry in entries %}
{{ entry.version }}{% if entry.date %}
{{ entry.date }}
{% endif %}
{% if entry.title %}

{{ entry.title }}

{% endif %}{% if entry.note %}
{{ entry.note|safe }}
{% endif %}
{% endfor %} +
+
+
diff --git a/blocks/changelog.schema.json b/blocks/changelog.schema.json new file mode 100644 index 0000000..07de1c2 --- /dev/null +++ b/blocks/changelog.schema.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Changelog", + "description": "Versioned changelog rows", + "type": "object", + "properties": { + "heading": { + "type": "string", + "title": "Heading", + "description": "Optional section heading", + "x-editor": "text" + }, + "entries": { + "type": "array", + "title": "Entries", + "description": "Changelog entries, newest first", + "default": [], + "x-editor": "collection", + "items": { + "type": "object", + "properties": { + "version": { + "type": "string", + "title": "Version", + "description": "Version tag e.g. v1.2", + "x-editor": "text" + }, + "date": { + "type": "string", + "title": "Date", + "description": "Release date", + "x-editor": "text" + }, + "title": { + "type": "string", + "title": "Title", + "description": "Optional short title for the release", + "x-editor": "text" + }, + "note": { + "type": "string", + "title": "Note", + "description": "What changed", + "x-editor": "richtext" + } + }, + "required": ["version"] + } + } + } +} diff --git a/blocks/colophon.ninjatpl b/blocks/colophon.ninjatpl deleted file mode 100644 index 45615df..0000000 --- a/blocks/colophon.ninjatpl +++ /dev/null @@ -1 +0,0 @@ -
diff --git a/blocks/colophon.schema.json b/blocks/colophon.schema.json deleted file mode 100644 index 5937774..0000000 --- a/blocks/colophon.schema.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Colophon Footer", - "description": "Three-row mono footer with address, email, and social links", - "type": "object", - "properties": { - "address": { - "type": "string", - "title": "Address", - "description": "Studio postal address", - "x-editor": "textarea" - }, - "email": { - "type": "string", - "title": "Contact Email", - "description": "Contact email rendered in mono", - "x-editor": "text" - }, - "showAddress": { - "type": "string", - "title": "Show Address", - "description": "Toggle the address row on or off", - "x-editor": "select", - "enum": ["true", "false"], - "default": "true" - }, - "social": { - "type": "array", - "title": "Social Links", - "description": "Optional list of social links", - "default": [], - "x-editor": "collection", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string", - "title": "Label", - "description": "Display label", - "x-editor": "text" - }, - "url": { - "type": "string", - "title": "URL", - "description": "Target URL", - "x-editor": "link" - } - }, - "required": ["label", "url"] - } - } - } -} diff --git a/blocks/concrete_hero.ninjatpl b/blocks/concrete_hero.ninjatpl deleted file mode 100644 index 1a49649..0000000 --- a/blocks/concrete_hero.ninjatpl +++ /dev/null @@ -1 +0,0 @@ -
{% if media %}{% endif %}
{% if eyebrow %}

{{ eyebrow }}

{% endif %}

{{ headline }}

diff --git a/blocks/concrete_hero.schema.json b/blocks/concrete_hero.schema.json deleted file mode 100644 index 0c75339..0000000 --- a/blocks/concrete_hero.schema.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Concrete Hero", - "description": "200pt+ display headline with optional eyebrow and full-bleed image", - "type": "object", - "properties": { - "headline": { - "type": "string", - "title": "Headline", - "description": "Oversized display headline", - "x-editor": "text" - }, - "eyebrow": { - "type": "string", - "title": "Eyebrow", - "description": "Mono eyebrow line shown above the headline", - "x-editor": "text" - }, - "media": { - "type": "string", - "title": "Background Media", - "description": "Optional full-bleed background image", - "x-editor": "media" - } - }, - "required": ["headline"] -} diff --git a/blocks/masthead.ninjatpl b/blocks/masthead.ninjatpl deleted file mode 100644 index 57d4512..0000000 --- a/blocks/masthead.ninjatpl +++ /dev/null @@ -1,5 +0,0 @@ -
- {{ indexNumber|default:"01 / 14" }} -

{{ studioName|default:"STUDIO" }}

- {% if tagline %}

{{ tagline }}

{% endif %} -
diff --git a/blocks/masthead.schema.json b/blocks/masthead.schema.json deleted file mode 100644 index df42321..0000000 --- a/blocks/masthead.schema.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Studio Masthead", - "description": "Oversized studio wordmark with mono index counter top-right", - "type": "object", - "properties": { - "studioName": { - "type": "string", - "title": "Studio Name", - "description": "Wordmark text rendered at display size", - "x-editor": "text", - "default": "STUDIO" - }, - "tagline": { - "type": "string", - "title": "Tagline", - "description": "Short tagline rendered below the wordmark", - "x-editor": "text" - }, - "indexNumber": { - "type": "string", - "title": "Index Counter", - "description": "Mono index counter top-right, e.g. 01 / 14", - "x-editor": "text", - "default": "01 / 14" - } - }, - "required": ["studioName"] -} diff --git a/blocks/meta_strip.ninjatpl b/blocks/meta_strip.ninjatpl deleted file mode 100644 index cfea4c6..0000000 --- a/blocks/meta_strip.ninjatpl +++ /dev/null @@ -1 +0,0 @@ -
{% for item in items %}
{{ item.label }}
{{ item.value }}
{% endfor %}
diff --git a/blocks/pull_quote.ninjatpl b/blocks/pull_quote.ninjatpl deleted file mode 100644 index 2aab9f6..0000000 --- a/blocks/pull_quote.ninjatpl +++ /dev/null @@ -1 +0,0 @@ -
{{ quote|safe }}
{% if attribution %}— {{ attribution }}{% endif %}
diff --git a/blocks/pull_quote.schema.json b/blocks/pull_quote.schema.json deleted file mode 100644 index 337050e..0000000 --- a/blocks/pull_quote.schema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pull Quote", - "description": "Massive quote spanning 8 columns with hairline rules above and below", - "type": "object", - "properties": { - "quote": { - "type": "string", - "title": "Quote", - "description": "The quoted text", - "x-editor": "richtext" - }, - "attribution": { - "type": "string", - "title": "Attribution", - "description": "Person or source the quote is attributed to", - "x-editor": "text" - } - }, - "required": ["quote"] -} diff --git a/blocks/spec_sheet.ninjatpl b/blocks/spec_sheet.ninjatpl new file mode 100644 index 0000000..ddce901 --- /dev/null +++ b/blocks/spec_sheet.ninjatpl @@ -0,0 +1,6 @@ +
+
+{% if heading %}

{{ heading }}

{% endif %} +
{% for row in rows %}
{{ row.label }}
{{ row.value }}
{% endfor %}
+
+
diff --git a/blocks/meta_strip.schema.json b/blocks/spec_sheet.schema.json similarity index 56% rename from blocks/meta_strip.schema.json rename to blocks/spec_sheet.schema.json index 5be18b4..d04d240 100644 --- a/blocks/meta_strip.schema.json +++ b/blocks/spec_sheet.schema.json @@ -1,13 +1,19 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Metadata Strip", - "description": "Mono uppercase strip: CLIENT / YEAR / DISCIPLINE / LOCATION", + "title": "Spec Sheet", + "description": "Mono label/value spec table with hairline rows", "type": "object", "properties": { - "items": { + "heading": { + "type": "string", + "title": "Heading", + "description": "Optional section heading", + "x-editor": "text" + }, + "rows": { "type": "array", - "title": "Items", - "description": "Label/value pairs displayed inline", + "title": "Rows", + "description": "Spec label/value pairs in display order", "default": [], "x-editor": "collection", "items": { @@ -16,13 +22,13 @@ "label": { "type": "string", "title": "Label", - "description": "Short uppercase label", + "description": "Spec label", "x-editor": "text" }, "value": { "type": "string", "title": "Value", - "description": "Value text shown beside the label", + "description": "Spec value", "x-editor": "text" } }, diff --git a/blocks/sticker_wall.ninjatpl b/blocks/sticker_wall.ninjatpl new file mode 100644 index 0000000..f7bbb0e --- /dev/null +++ b/blocks/sticker_wall.ninjatpl @@ -0,0 +1,8 @@ +
+
+{% if heading %}

{{ heading }}

{% endif %} +
+{% for item in items %}{{ item.text }}{% endfor %} +
+
+
diff --git a/blocks/sticker_wall.schema.json b/blocks/sticker_wall.schema.json new file mode 100644 index 0000000..1d1eb38 --- /dev/null +++ b/blocks/sticker_wall.schema.json @@ -0,0 +1,47 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sticker Wall", + "description": "Wall of hard-bordered candy stickers", + "type": "object", + "properties": { + "heading": { + "type": "string", + "title": "Heading", + "description": "Optional section heading", + "x-editor": "text" + }, + "items": { + "type": "array", + "title": "Stickers", + "description": "Sticker labels in display order", + "default": [], + "x-editor": "collection", + "items": { + "type": "object", + "properties": { + "text": { + "type": "string", + "title": "Label", + "description": "Sticker text", + "x-editor": "text" + }, + "tone": { + "type": "string", + "title": "Tone", + "description": "Sticker colour", + "default": "accent", + "enum": ["accent", "ink", "paper"], + "x-editor": "select" + }, + "size": { + "type": "string", + "title": "Size", + "description": "Optional font-size (e.g. 1.5rem)", + "x-editor": "text" + } + }, + "required": ["text"] + } + } + } +} diff --git a/fonts.json b/fonts.json index fe51488..a729406 100644 --- a/fonts.json +++ b/fonts.json @@ -1 +1,34 @@ -[] +[ + { + "name": "Space Grotesk", + "family": "Space Grotesk", + "variants": [ + { "weight": "500", "style": "normal", "file": "fonts/space-grotesk-500.woff2" }, + { "weight": "700", "style": "normal", "file": "fonts/space-grotesk-700.woff2" } + ] + }, + { + "name": "Archivo Black", + "family": "Archivo Black", + "variants": [ + { "weight": "400", "style": "normal", "file": "fonts/archivo-black-400.woff2" } + ] + }, + { + "name": "Inter", + "family": "Inter", + "variants": [ + { "weight": "400", "style": "normal", "file": "fonts/inter-400.woff2" }, + { "weight": "500", "style": "normal", "file": "fonts/inter-500.woff2" }, + { "weight": "700", "style": "normal", "file": "fonts/inter-700.woff2" } + ] + }, + { + "name": "IBM Plex Mono", + "family": "IBM Plex Mono", + "variants": [ + { "weight": "400", "style": "normal", "file": "fonts/ibm-plex-mono-400.woff2" }, + { "weight": "500", "style": "normal", "file": "fonts/ibm-plex-mono-500.woff2" } + ] + } +] diff --git a/manifest.yaml b/manifest.yaml index e7d4c67..fcfce4a 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -13,29 +13,96 @@ page_templates: - system: brutalist key: default title: Default - description: "Standard masthead + 12-col body + footer" + description: "Standard masthead + hard-ruled body + colophon footer" slots: [header, main, footer] - - system: brutalist - key: landing - title: Index Sheet - description: "Oversized headline + project ledger" - slots: [hero, ledger, footer] - - system: brutalist - key: article - title: Case Study - description: "Long-form project page with metadata strip" - slots: [header, meta, main, footer] - system: brutalist key: full-width title: Full Bleed description: "Edge-to-edge gallery layout" slots: [header, main, footer] + - system: brutalist + key: landing + title: Index Sheet + description: "Oversized display headline + stacked sections" + slots: [header, hero, main, cta, footer] + - system: brutalist + key: article + title: Case Study + description: "Long-form project page with post hero and byline" + slots: [header, post_hero, main, author, related, footer] + - system: brutalist + key: blog-index + title: Index Ledger + description: "Blog listing on a hard grid with featured slab" + slots: [header, featured, main, footer] + - system: brutalist + key: contact + title: Contact Sheet + description: "Contact form with optional details aside" + slots: [header, main, aside, footer] + - system: brutalist + key: auth + title: Access + description: "Centered bordered auth card" + slots: [main, footer] template_overrides: + # Chrome (4) + - { template: brutalist, block: navbar } + - { template: brutalist, block: footer } + - { template: brutalist, block: utility-bar } + - { template: brutalist, block: announcement-bar } + # Marketing (12) + - { template: brutalist, block: hero } + - { template: brutalist, block: feature-grid } + - { template: brutalist, block: rich-section } + - { template: brutalist, block: stats } + - { template: brutalist, block: testimonial } + - { template: brutalist, block: logo-strip } + - { template: brutalist, block: pricing } + - { template: brutalist, block: team } + - { template: brutalist, block: faq } + - { template: brutalist, block: timeline } + - { template: brutalist, block: cta } + - { template: brutalist, block: countdown } + # Primitives (11) - { template: brutalist, block: heading } - { template: brutalist, block: text } - - { template: brutalist, block: button } + - { template: brutalist, block: rich-text } - { template: brutalist, block: image } + - { template: brutalist, block: quote } + - { template: brutalist, block: divider } + - { template: brutalist, block: button } + - { template: brutalist, block: card } + - { template: brutalist, block: gallery } + - { template: brutalist, block: video-embed } + - { template: brutalist, block: audio-embed } + # Commerce / local (6) + - { template: brutalist, block: menu-list } + - { template: brutalist, block: event-list } + - { template: brutalist, block: contact-form } + - { template: brutalist, block: contact-card } + - { template: brutalist, block: hours-location } + - { template: brutalist, block: social-links } + # Blog family (12) + - { template: brutalist, block: blog-hero } + - { template: brutalist, block: featured-posts } + - { template: brutalist, block: related-posts } + - { template: brutalist, block: popular-posts } + - { template: brutalist, block: category-list } + - { template: brutalist, block: post-hero } + - { template: brutalist, block: post-metadata } + - { template: brutalist, block: author-bio } + - { template: brutalist, block: author-bio-hero } + - { template: brutalist, block: newsletter-signup } + - { template: brutalist, block: breadcrumbs } + - { template: brutalist, block: sidebar-nav } + # Auth surface (3) + - { template: brutalist, block: auth-form } + - { template: brutalist, block: password-reset-form } + - { template: brutalist, block: auth-status } + # System (1) + - { template: brutalist, block: page-suggestions } email_wrappers: - brutalist @@ -401,3 +468,182 @@ css: ); } + /* ============================================================ + BRUTALIST OVERRIDE KIT (Wave A) — semantic classes the block + overrides apply. Raw CSS (not Tailwind @apply) so it ships in + the codeless manifest regardless of JIT scanning. All colour + via hsl(var(--token)); all type via var(--font-*). + ============================================================ */ + + .bru-section { padding: 4rem 0; } + @media (min-width: 768px) { .bru-section { padding: 6rem 0; } } + .bru-wrap { width: 100%; max-width: 80rem; margin: 0 auto; padding: 0 1.5rem; } + .bru-wrap-mid { width: 100%; max-width: 64rem; margin: 0 auto; padding: 0 1.5rem; } + .bru-wrap-narrow { width: 100%; max-width: 44rem; margin: 0 auto; padding: 0 1.5rem; } + + /* Slab = the core bordered block. Shadow = the hard offset. */ + .bru-slab { + border: 3px solid hsl(var(--border)); + background-color: hsl(var(--card)); + color: hsl(var(--card-foreground)); + } + .bru-slab-bg { + border: 3px solid hsl(var(--border)); + background-color: hsl(var(--background)); + color: hsl(var(--foreground)); + } + .bru-shadow { box-shadow: 6px 6px 0 0 hsl(var(--border)); } + .bru-shadow-sm { box-shadow: 4px 4px 0 0 hsl(var(--border)); } + .bru-shadow-accent { box-shadow: 6px 6px 0 0 hsl(var(--accent)); } + + /* Hover snap: the block nudges into its own shadow. */ + .bru-hover { transition: transform 90ms linear, box-shadow 90ms linear; } + @media (prefers-reduced-motion: no-preference) { + .bru-hover:hover { transform: translate(3px, 3px); box-shadow: 3px 3px 0 0 hsl(var(--border)); } + .bru-hover.bru-shadow-sm:hover { transform: translate(2px, 2px); box-shadow: 2px 2px 0 0 hsl(var(--border)); } + } + + /* Type utilities */ + .bru-eyebrow { + display: inline-block; + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-size: 0.6875rem; + letter-spacing: 0.18em; + text-transform: uppercase; + color: hsl(var(--muted-foreground)); + } + .bru-kicker { + font-family: var(--font-heading, "Space Grotesk", "Inter Tight", sans-serif); + font-weight: 700; + text-transform: uppercase; + letter-spacing: -0.015em; + line-height: 1; + color: hsl(var(--foreground)); + } + .bru-meta { + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-size: 0.6875rem; + letter-spacing: 0.1em; + text-transform: uppercase; + color: hsl(var(--muted-foreground)); + } + + /* Sticker tag — candy accent chip with a hard border. */ + .bru-tag { + display: inline-flex; + align-items: center; + gap: 0.35rem; + border: 2px solid hsl(var(--border)); + background-color: hsl(var(--accent)); + color: hsl(var(--accent-foreground)); + padding: 0.15rem 0.55rem; + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-size: 0.65rem; + letter-spacing: 0.1em; + text-transform: uppercase; + line-height: 1.4; + box-shadow: 2px 2px 0 0 hsl(var(--border)); + } + .bru-tag-ghost { + background-color: transparent; + color: hsl(var(--foreground)); + box-shadow: none; + } + + /* Buttons */ + .bru-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + padding: 0.7rem 1.4rem; + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-size: 0.75rem; + letter-spacing: 0.12em; + text-transform: uppercase; + border: 3px solid hsl(var(--border)); + text-decoration: none; + cursor: pointer; + box-shadow: 4px 4px 0 0 hsl(var(--border)); + transition: transform 90ms linear, box-shadow 90ms linear; + } + .bru-btn-solid { background-color: hsl(var(--accent)); color: hsl(var(--accent-foreground)); } + .bru-btn-ghost { background-color: hsl(var(--background)); color: hsl(var(--foreground)); } + @media (prefers-reduced-motion: no-preference) { + .bru-btn:hover { transform: translate(2px, 2px); box-shadow: 2px 2px 0 0 hsl(var(--border)); } + } + .bru-btn:focus-visible { outline: 2px solid hsl(var(--ring)); outline-offset: 2px; } + + /* Hard rules */ + .bru-rule { border: 0; border-top: 3px solid hsl(var(--border)); margin: 0; } + .bru-rule-thin { border: 0; border-top: 1px solid hsl(var(--border)); margin: 0; } + + /* Inputs (block-level, complements the page-wide input reset above) */ + .bru-field { + width: 100%; + border: 3px solid hsl(var(--input)); + background-color: hsl(var(--background)); + color: hsl(var(--foreground)); + padding: 0.65rem 0.85rem; + font-family: var(--font-body, "Inter", sans-serif); + font-size: 0.95rem; + } + .bru-field:focus { outline: 2px solid hsl(var(--ring)); outline-offset: 2px; } + .bru-label { + display: block; + margin-bottom: 0.4rem; + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-size: 0.7rem; + letter-spacing: 0.1em; + text-transform: uppercase; + color: hsl(var(--foreground)); + } + + /* Numbered index cell (ledgers, ranks, steps) */ + .bru-index { + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-variant-numeric: tabular-nums; + color: hsl(var(--accent)); + font-weight: 700; + } + + /* Sticker wall / changelog / spec-sheet persona furniture */ + .bru-sticker { + display: inline-flex; + align-items: center; + justify-content: center; + text-align: center; + border: 3px solid hsl(var(--border)); + padding: 1rem 1.25rem; + font-family: var(--font-heading, "Space Grotesk", sans-serif); + font-weight: 700; + text-transform: uppercase; + letter-spacing: -0.01em; + line-height: 1; + box-shadow: 4px 4px 0 0 hsl(var(--border)); + } + .bru-changelog-row { + display: grid; + grid-template-columns: 8rem 1fr; + gap: 1.5rem; + padding: 1.5rem 0; + border-top: 1px solid hsl(var(--border)); + } + .bru-changelog-row:last-child { border-bottom: 1px solid hsl(var(--border)); } + @media (max-width: 640px) { + .bru-changelog-row { grid-template-columns: 1fr; gap: 0.5rem; } + } + .bru-spec-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + padding: 0.85rem 0; + border-top: 1px solid hsl(var(--border)); + font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); + font-size: 0.8rem; + letter-spacing: 0.04em; + } + .bru-spec-row:last-child { border-bottom: 1px solid hsl(var(--border)); } + .bru-spec-row dt { text-transform: uppercase; color: hsl(var(--muted-foreground)); } + .bru-spec-row dd { margin: 0; text-align: right; color: hsl(var(--foreground)); } + diff --git a/master_pages.json b/master_pages.json index 0b5db75..b4f6d14 100644 --- a/master_pages.json +++ b/master_pages.json @@ -1,33 +1,32 @@ [ { "key": "brutalist:default-master", - "title": "Brutalist Default Master", - "page_templates": ["default", "article"], + "title": "Brutalist Default", + "page_templates": ["default", "full-width", "contact", "blog-index", "article"], "blocks": [ - { "block_key": "navbar", "title": "Masthead Nav", "content": { "menuName": "main" }, "slot": "header", "sort_order": 0 }, - { "block_key": "brutalist:masthead", "title": "Studio Masthead", "content": { "studioName": "STUDIO" }, "slot": "header", "sort_order": 1 }, + { "block_key": "navbar", "title": "Studio Nav", "content": { "menuName": "main", "companyName": "HARDSET", "ctaLabel": "Start a project", "ctaUrl": "/contact" }, "slot": "header", "sort_order": 0 }, { "block_key": "slot", "title": "Main Content", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 }, - { "block_key": "brutalist:colophon", "title": "Colophon Footer", "content": { "showAddress": true }, "slot": "footer", "sort_order": 0 } + { "block_key": "footer", "title": "Colophon", "content": { "layout": "columns", "companyName": "HARDSET", "tagline": "A creative studio for people who ship." }, "slot": "footer", "sort_order": 0 } ] }, { - "key": "brutalist:index-master", - "title": "Brutalist Index Master", + "key": "brutalist:landing-master", + "title": "Brutalist Index Sheet", "page_templates": ["landing"], "blocks": [ - { "block_key": "brutalist:masthead", "title": "Studio Masthead", "content": { "studioName": "STUDIO" }, "slot": "hero", "sort_order": 0 }, - { "block_key": "slot", "title": "Ledger Slot", "content": { "slotName": "ledger" }, "slot": "ledger", "sort_order": 0 }, - { "block_key": "brutalist:colophon", "title": "Colophon Footer", "content": { "showAddress": true }, "slot": "footer", "sort_order": 0 } + { "block_key": "navbar", "title": "Studio Nav", "content": { "menuName": "main", "companyName": "HARDSET", "ctaLabel": "Start a project", "ctaUrl": "/contact" }, "slot": "header", "sort_order": 0 }, + { "block_key": "hero", "title": "Display Hero", "content": { "template": "left-aligned", "eyebrow": "Creative studio", "headline": "WE MAKE LOUD THINGS", "subheadline": "Brand, web, and product work with a hard edge." }, "slot": "hero", "sort_order": 0 }, + { "block_key": "slot", "title": "Main Content", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 }, + { "block_key": "cta", "title": "Closing CTA", "content": { "background": "band", "heading": "Have a project in mind?", "text": "Tell us what you are building.", "primaryUrl": "/contact", "primaryLabel": "Start a project" }, "slot": "cta", "sort_order": 0 }, + { "block_key": "footer", "title": "Colophon", "content": { "layout": "columns", "companyName": "HARDSET", "tagline": "A creative studio for people who ship." }, "slot": "footer", "sort_order": 0 } ] }, { - "key": "brutalist:fullbleed-master", - "title": "Brutalist Full Bleed Master", - "page_templates": ["full-width"], + "key": "brutalist:auth-master", + "title": "Brutalist Access", + "page_templates": ["auth"], "blocks": [ - { "block_key": "navbar", "title": "Masthead Nav", "content": { "menuName": "main" }, "slot": "header", "sort_order": 0 }, - { "block_key": "slot", "title": "Full Bleed Slot", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 }, - { "block_key": "brutalist:colophon", "title": "Colophon Footer", "content": { "showAddress": false }, "slot": "footer", "sort_order": 0 } + { "block_key": "slot", "title": "Form", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 } ] } ] diff --git a/plugin.mod b/plugin.mod index 8007dd3..d58a931 100644 --- a/plugin.mod +++ b/plugin.mod @@ -6,4 +6,5 @@ version = "0.2.0" description = "Concrete, oversized type, hard 12-col grid theme for design studios, architecture firms and art galleries." kind = "theme" categories = ["templates"] -tags = ["brutalist", "raw", "mono", "agency", "architecture", "gallery", "editorial", "minimal"] +tags = ["brutalist", "neo-brutalist", "studio", "agency", "bold", "mono", "editorial", "candy"] +required_icon_packs = ["lucide", "simple-icons"] diff --git a/presets.json b/presets.json index 0409baf..c95d79a 100644 --- a/presets.json +++ b/presets.json @@ -2,7 +2,7 @@ { "id": "concrete-red", "name": "Concrete & Cadmium", - "description": "Off-white concrete with cadmium red accent. Light mode primary; dark mode for case-study deep-dives.", + "description": "Paper-white concrete with a cadmium red accent. Black rules in light, paper rules in wet-concrete dark.", "theme": { "mode": "both", "lightColors": { @@ -33,28 +33,28 @@ "cardForeground": "40 14% 93%", "popover": "0 0% 9%", "popoverForeground": "40 14% 93%", - "primary": "4 86% 54%", + "primary": "4 86% 56%", "primaryForeground": "0 0% 6%", "secondary": "0 0% 14%", "secondaryForeground": "40 14% 93%", "muted": "0 0% 12%", "mutedForeground": "40 6% 65%", - "accent": "4 86% 54%", + "accent": "4 86% 56%", "accentForeground": "0 0% 6%", "destructive": "0 84% 60%", "destructiveForeground": "0 0% 100%", "border": "40 14% 93%", "input": "40 14% 93%", - "ring": "4 86% 54%" + "ring": "4 86% 56%" } } }, { "id": "hazard-yellow", "name": "Hazard", - "description": "Construction-site safety yellow on ink black. Dark mode primary.", + "description": "Construction-site safety yellow. Ink type sits on yellow; wet-concrete dark glows.", "theme": { - "mode": "dark", + "mode": "both", "lightColors": { "background": "40 14% 93%", "foreground": "0 0% 4%", @@ -83,19 +83,119 @@ "cardForeground": "48 100% 88%", "popover": "0 0% 9%", "popoverForeground": "48 100% 88%", - "primary": "48 100% 50%", + "primary": "48 100% 52%", "primaryForeground": "0 0% 6%", "secondary": "0 0% 14%", "secondaryForeground": "48 100% 88%", "muted": "0 0% 12%", "mutedForeground": "48 20% 65%", - "accent": "48 100% 50%", + "accent": "48 100% 52%", "accentForeground": "0 0% 6%", "destructive": "0 84% 55%", "destructiveForeground": "0 0% 100%", "border": "48 100% 88%", "input": "48 100% 88%", - "ring": "48 100% 50%" + "ring": "48 100% 52%" + } + } + }, + { + "id": "riso-blue", + "name": "Riso", + "description": "Off-white with a riso-print electric blue. Cool concrete dark with a glowing blue accent.", + "theme": { + "mode": "both", + "lightColors": { + "background": "40 14% 93%", + "foreground": "0 0% 4%", + "card": "40 10% 96%", + "cardForeground": "0 0% 4%", + "popover": "40 10% 96%", + "popoverForeground": "0 0% 4%", + "primary": "222 89% 52%", + "primaryForeground": "0 0% 100%", + "secondary": "40 8% 88%", + "secondaryForeground": "0 0% 4%", + "muted": "40 6% 90%", + "mutedForeground": "0 0% 35%", + "accent": "222 89% 52%", + "accentForeground": "0 0% 100%", + "destructive": "0 84% 50%", + "destructiveForeground": "0 0% 100%", + "border": "0 0% 4%", + "input": "0 0% 4%", + "ring": "222 89% 52%" + }, + "darkColors": { + "background": "222 20% 7%", + "foreground": "210 30% 92%", + "card": "222 18% 10%", + "cardForeground": "210 30% 92%", + "popover": "222 18% 10%", + "popoverForeground": "210 30% 92%", + "primary": "222 92% 62%", + "primaryForeground": "222 20% 7%", + "secondary": "222 14% 15%", + "secondaryForeground": "210 30% 92%", + "muted": "222 14% 13%", + "mutedForeground": "213 18% 66%", + "accent": "222 92% 62%", + "accentForeground": "222 20% 7%", + "destructive": "0 84% 60%", + "destructiveForeground": "0 0% 100%", + "border": "210 30% 92%", + "input": "210 30% 92%", + "ring": "222 92% 62%" + } + } + }, + { + "id": "acid-lime", + "name": "Acid", + "description": "Off-white with an acid lime accent. Ink type on lime; wet-concrete dark with a lime glow.", + "theme": { + "mode": "both", + "lightColors": { + "background": "40 14% 93%", + "foreground": "0 0% 4%", + "card": "40 10% 96%", + "cardForeground": "0 0% 4%", + "popover": "40 10% 96%", + "popoverForeground": "0 0% 4%", + "primary": "84 78% 40%", + "primaryForeground": "0 0% 4%", + "secondary": "40 8% 88%", + "secondaryForeground": "0 0% 4%", + "muted": "40 6% 90%", + "mutedForeground": "0 0% 35%", + "accent": "84 78% 40%", + "accentForeground": "0 0% 4%", + "destructive": "0 84% 50%", + "destructiveForeground": "0 0% 100%", + "border": "0 0% 4%", + "input": "0 0% 4%", + "ring": "84 78% 40%" + }, + "darkColors": { + "background": "90 12% 7%", + "foreground": "80 20% 92%", + "card": "90 10% 10%", + "cardForeground": "80 20% 92%", + "popover": "90 10% 10%", + "popoverForeground": "80 20% 92%", + "primary": "84 82% 52%", + "primaryForeground": "90 12% 7%", + "secondary": "90 8% 15%", + "secondaryForeground": "80 20% 92%", + "muted": "90 8% 13%", + "mutedForeground": "82 15% 66%", + "accent": "84 82% 52%", + "accentForeground": "90 12% 7%", + "destructive": "0 84% 60%", + "destructiveForeground": "0 0% 100%", + "border": "80 20% 92%", + "input": "80 20% 92%", + "ring": "84 82% 52%" } } } diff --git a/seed/seed.json b/seed/seed.json new file mode 100644 index 0000000..1433af4 --- /dev/null +++ b/seed/seed.json @@ -0,0 +1,212 @@ +{ + "demo": true, + "settings": { + "merge": { + "companyName": "HARDSET", + "tagline": "A creative studio for people who ship." + } + }, + "data_tables": [ + { + "key": "contact_submissions", + "name": "Project Enquiries", + "description": "Seeded contact-form submissions for the HARDSET demo. A submission becomes a row here and emails the site admins.", + "columns": [ + { "key": "name", "label": "Name", "type": "text", "required": true }, + { "key": "email", "label": "Email", "type": "email", "required": true }, + { "key": "project", "label": "Project type", "type": "text", "required": false }, + { "key": "message", "label": "Message", "type": "text", "required": true } + ] + } + ], + "pages": [ + { + "slug": "/", + "title": "HARDSET", + "template_key": "landing", + "blocks": [ + { + "block_key": "brutalist:sticker_wall", + "title": "Disciplines", + "slot": "main", + "sort_order": 1, + "content": { + "heading": "What we do", + "items": [ + { "text": "Brand", "tone": "accent", "size": "1.6rem" }, + { "text": "Web", "tone": "ink", "size": "1.6rem" }, + { "text": "Product", "tone": "paper", "size": "1.6rem" }, + { "text": "Motion", "tone": "accent", "size": "1.6rem" }, + { "text": "Type", "tone": "ink", "size": "1.6rem" }, + { "text": "Print", "tone": "paper", "size": "1.6rem" } + ] + } + }, + { + "block_key": "feature-grid", + "title": "Services", + "slot": "main", + "sort_order": 2, + "content": { + "eyebrow": "Services", + "heading": "How we work", + "layout": "card", + "columns": 3, + "items": [ + { "icon": "lucide:box", "title": "Brand systems", "text": "Names, marks, and the rules that hold them together." }, + { "icon": "lucide:code", "title": "Websites", "text": "Fast, accessible sites built to last past the launch." }, + { "icon": "lucide:zap", "title": "Product design", "text": "Interfaces that read clearly and ship on schedule." } + ] + } + }, + { + "block_key": "brutalist:project_ledger", + "title": "Selected work", + "slot": "main", + "sort_order": 3, + "content": { + "rows": [ + { "no": "01", "year": "2024", "client": "Independent record label", "role": "Brand system" }, + { "no": "02", "year": "2024", "client": "Climbing gym chain", "role": "Website" }, + { "no": "03", "year": "2023", "client": "Furniture maker", "role": "Product + web" }, + { "no": "04", "year": "2023", "client": "Community radio station", "role": "Identity" } + ] + } + } + ] + }, + { + "slug": "/about", + "title": "The Studio", + "template_key": "default", + "blocks": [ + { "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "The Studio", "level": 1 } }, + { "block_key": "rich-text", "title": "Story", "slot": "main", "sort_order": 2, "content": { "html": "

HARDSET is a small studio. We take on a few projects at a time and give each one the whole team. No account layer, no handoff. You talk to the people doing the work.

We like clear briefs and hard deadlines. We ship. Then we help you run it.

" } }, + { + "block_key": "brutalist:spec_sheet", + "title": "Studio facts", + "slot": "main", + "sort_order": 3, + "content": { + "heading": "Studio", + "rows": [ + { "label": "Founded", "value": "2019" }, + { "label": "Team", "value": "Six" }, + { "label": "Based", "value": "Melbourne" }, + { "label": "Focus", "value": "Brand, web, product" } + ] + } + }, + { + "block_key": "brutalist:changelog", + "title": "Recent", + "slot": "main", + "sort_order": 4, + "content": { + "heading": "Lately", + "entries": [ + { "version": "Now", "date": "This quarter", "title": "Booking two new projects", "note": "

We have room for two more brand or web projects this quarter.

" }, + { "version": "New", "date": "Last month", "title": "Two more designers", "note": "

The studio grew to six. Same way of working, more hands.

" } + ] + } + }, + { "block_key": "quote", "title": "Quote", "slot": "main", "sort_order": 5, "content": { "style": "pull", "quote": "Make it obvious, then make it loud.", "attribution": "HARDSET" } } + ] + }, + { + "slug": "/blog", + "title": "Journal", + "template_key": "blog-index", + "blocks": [ + { "block_key": "card", "title": "Post: Borders", "slot": "main", "sort_order": 1, "content": { "layout": "vertical", "title": "In praise of a hard border", "text": "

Why a thick black line still does more work than a soft shadow.

", "link": "/blog/in-praise-of-a-hard-border", "linkLabel": "Read" } }, + { "block_key": "card", "title": "Post: Ship", "slot": "main", "sort_order": 2, "content": { "layout": "vertical", "title": "Ship the ugly first draft", "text": "

How shipping early keeps a project honest.

", "link": "/blog/ship-the-ugly-first-draft", "linkLabel": "Read" } }, + { "block_key": "card", "title": "Post: Type", "slot": "main", "sort_order": 3, "content": { "layout": "vertical", "title": "Set it in one typeface", "text": "

A short case for doing more with less type.

", "link": "/blog/set-it-in-one-typeface", "linkLabel": "Read" } } + ] + }, + { + "slug": "/blog/in-praise-of-a-hard-border", + "title": "In praise of a hard border", + "template_key": "article", + "parent_slug": "/blog", + "blocks": [ + { "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "In praise of a hard border", "level": 1 } }, + { "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "

A soft shadow asks you to squint. A hard border does not. It draws the edge, holds the block, and tells you where one thing ends and the next begins.

We reach for the line first. It is honest. It prints. It reads on a bad screen in bright sun. When we want energy we add one loud colour and a hard offset. That is the whole trick.

" } } + ] + }, + { + "slug": "/blog/ship-the-ugly-first-draft", + "title": "Ship the ugly first draft", + "template_key": "article", + "parent_slug": "/blog", + "blocks": [ + { "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Ship the ugly first draft", "level": 1 } }, + { "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "

The first draft is meant to be wrong. Its job is to exist. Once it is on a real screen, the real problems show up and the fake ones fall away.

We ship early and often. It keeps the brief honest and the feedback specific. Polish comes last, after the shape is right.

" } } + ] + }, + { + "slug": "/blog/set-it-in-one-typeface", + "title": "Set it in one typeface", + "template_key": "article", + "parent_slug": "/blog", + "blocks": [ + { "block_key": "heading", "title": "Title", "slot": "main", "sort_order": 1, "content": { "text": "Set it in one typeface", "level": 1 } }, + { "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "

One family, used well, beats three used at random. Pick a face with range, learn its weights, and let scale do the talking.

We set most of a project in a single grotesque. Big for headlines, tight for meta, plain for body. The result reads as one voice.

" } } + ] + }, + { + "slug": "/contact", + "title": "Start a project", + "template_key": "contact", + "blocks": [ + { + "block_key": "contact-form", + "title": "Project enquiry", + "slot": "main", + "sort_order": 1, + "content": { + "heading": "Start a project", + "description": "Tell us what you are building and when you need it. We reply within two working days.", + "submitLabel": "Send it", + "successMessage": "Thanks. Your enquiry is in. We will reply within two working days.", + "fields": [ + { "name": "name", "label": "Your name", "type": "text", "required": true, "width": "half" }, + { "name": "email", "label": "Email", "type": "email", "required": true, "width": "half" }, + { "name": "project", "label": "Project type", "type": "text", "required": false, "width": "full" }, + { "name": "message", "label": "What are you building?", "type": "textarea", "required": true, "width": "full" } + ], + "formConfig": { "enabled": true, "captchaEnabled": false, "targetTable": "contact_submissions" } + } + }, + { + "block_key": "contact-card", + "title": "Direct", + "slot": "aside", + "sort_order": 1, + "content": { + "heading": "Direct", + "columns": 1, + "channels": [ + { "icon": "lucide:mail", "label": "Email", "value": "studio@hardset.example", "link": "mailto:studio@hardset.example" }, + { "icon": "lucide:map-pin", "label": "Studio", "value": "Melbourne, AU" } + ] + } + } + ] + }, + { + "slug": "/login", + "title": "Sign in", + "template_key": "auth", + "blocks": [ + { "block_key": "auth-form", "title": "Sign in", "slot": "main", "sort_order": 1, "content": { "default_tab": "login", "show_social": false } }, + { "block_key": "text", "title": "Foot", "slot": "footer", "sort_order": 1, "content": { "text": "

Clients sign in to review work and approve invoices.

" } } + ] + } + ], + "menu_items": [ + { "menu": "main", "label": "Home", "page_slug": "/", "sort_order": 1 }, + { "menu": "main", "label": "Studio", "page_slug": "/about", "sort_order": 2 }, + { "menu": "main", "label": "Journal", "page_slug": "/blog", "sort_order": 3 }, + { "menu": "main", "label": "Contact", "page_slug": "/contact", "sort_order": 4 } + ] +} diff --git a/seed/workflows.json b/seed/workflows.json new file mode 100644 index 0000000..2967cde --- /dev/null +++ b/seed/workflows.json @@ -0,0 +1,19 @@ +{ + "workflows": [ + { + "key": "contact_notify_admins", + "name": "Project enquiry to admins", + "description": "On a contact-form submission, email the site admins.", + "enabled": true, + "trigger": { "type": "row_inserted", "table": "contact_submissions" }, + "steps": [ + { + "type": "email", + "name": "Email admins", + "template": "Form Submission Notification", + "recipients": { "mode": "admins", "scope": "all" } + } + ] + } + ] +} diff --git a/templates/brutalist/article.ninjatpl b/templates/brutalist/article.ninjatpl index e0fac74..e287e1c 100644 --- a/templates/brutalist/article.ninjatpl +++ b/templates/brutalist/article.ninjatpl @@ -1,22 +1,22 @@ - + {{ head_html|safe }} {{ admin_banner_html|safe }} -
-
{{ slots.header|safe }}
-
-
-
{{ slots.meta|safe }}
-
+ {% if slots.header %}
{{ slots.header|safe }}
{% endif %}
-
- {% if slots.main %}{{ slots.main|safe }}{% endif %} +
+ {% if slots.post_hero %}{{ slots.post_hero|safe }}{% else %}

{{ title }}

{% endif %} +
{% if slots.main %}{{ slots.main|safe }}{% else %}

This post has no content yet.

{% endif %}
+ {% if slots.author or slots.related %} +
+ {% if slots.author %}
{{ slots.author|safe }}
{% endif %} + {% if slots.related %}
{{ slots.related|safe }}
{% endif %} +
+ {% endif %}
-
-
{{ slots.footer|safe }}
-
+ {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} {{ body_end_html|safe }} diff --git a/templates/brutalist/auth.ninjatpl b/templates/brutalist/auth.ninjatpl new file mode 100644 index 0000000..26b2a67 --- /dev/null +++ b/templates/brutalist/auth.ninjatpl @@ -0,0 +1,19 @@ + + +{{ head_html|safe }} + + {{ admin_banner_html|safe }} +
+
+ + {% if site_settings.Logo %}{{ site_settings.LogoAlt }}{% else %}{{ site_settings.Title|default:"STUDIO" }}{% endif %} + +
+ {% if slots.main %}{{ slots.main|safe }}{% else %}

No form assigned to this page.

{% endif %} +
+ {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} +
+
+ {{ body_end_html|safe }} + + diff --git a/templates/brutalist/blog-index.ninjatpl b/templates/brutalist/blog-index.ninjatpl new file mode 100644 index 0000000..2434b7f --- /dev/null +++ b/templates/brutalist/blog-index.ninjatpl @@ -0,0 +1,17 @@ + + +{{ head_html|safe }} + + {{ admin_banner_html|safe }} + {% if slots.header %}
{{ slots.header|safe }}
{% endif %} +
+
+ {% if title %}

{{ title }}

{% if page_meta.MetaDescription %}

{{ page_meta.MetaDescription }}

{% endif %}
{% endif %} + {% if slots.featured %}
{{ slots.featured|safe }}
{% endif %} + {% if slots.main %}
{{ slots.main|safe }}
{% else %}

No posts published yet.

{% endif %} +
+
+ {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} + {{ body_end_html|safe }} + + diff --git a/templates/brutalist/contact.ninjatpl b/templates/brutalist/contact.ninjatpl new file mode 100644 index 0000000..2328821 --- /dev/null +++ b/templates/brutalist/contact.ninjatpl @@ -0,0 +1,22 @@ + + +{{ head_html|safe }} + + {{ admin_banner_html|safe }} + {% if slots.header %}
{{ slots.header|safe }}
{% endif %} +
+
+ {% if slots.aside %} +
+
{% if slots.main %}{{ slots.main|safe }}{% endif %}
+ +
+ {% else %} +
{% if slots.main %}{{ slots.main|safe }}{% else %}

No content blocks assigned to this page.

{% endif %}
+ {% endif %} +
+
+ {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} + {{ body_end_html|safe }} + + diff --git a/templates/brutalist/default.ninjatpl b/templates/brutalist/default.ninjatpl index 737b84f..2fd5871 100644 --- a/templates/brutalist/default.ninjatpl +++ b/templates/brutalist/default.ninjatpl @@ -1,19 +1,15 @@ - + {{ head_html|safe }} {{ admin_banner_html|safe }} -
-
{{ slots.header|safe }}
-
+ {% if slots.header %}
{{ slots.header|safe }}
{% endif %}
-
- {% if slots.main %}{{ slots.main|safe }}{% else %}

NO CONTENT BLOCKS ASSIGNED TO THIS PAGE.

{% endif %} +
+ {% if slots.main %}
{{ slots.main|safe }}
{% else %}

No content blocks assigned to this page.

{% endif %}
-
-
{{ slots.footer|safe }}
-
+ {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} {{ body_end_html|safe }} diff --git a/templates/brutalist/full-width.ninjatpl b/templates/brutalist/full-width.ninjatpl index c88c6e6..aad974c 100644 --- a/templates/brutalist/full-width.ninjatpl +++ b/templates/brutalist/full-width.ninjatpl @@ -1,17 +1,13 @@ - + {{ head_html|safe }} {{ admin_banner_html|safe }} -
-
{{ slots.header|safe }}
-
+ {% if slots.header %}
{{ slots.header|safe }}
{% endif %}
- {% if slots.main %}{{ slots.main|safe }}{% endif %} + {% if slots.main %}{{ slots.main|safe }}{% else %}

No content blocks assigned to this page.

{% endif %}
-
-
{{ slots.footer|safe }}
-
+ {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} {{ body_end_html|safe }} diff --git a/templates/brutalist/landing.ninjatpl b/templates/brutalist/landing.ninjatpl index 89e334c..c9e83b8 100644 --- a/templates/brutalist/landing.ninjatpl +++ b/templates/brutalist/landing.ninjatpl @@ -1,19 +1,15 @@ - + {{ head_html|safe }} {{ admin_banner_html|safe }} -
-
{{ slots.hero|safe }}
-
+ {% if slots.header %}
{{ slots.header|safe }}
{% endif %} + {% if slots.hero %}
{{ slots.hero|safe }}
{% endif %}
-
- {% if slots.ledger %}{{ slots.ledger|safe }}{% endif %} -
+ {% if slots.main %}
{{ slots.main|safe }}
{% endif %}
-
-
{{ slots.footer|safe }}
-
+ {% if slots.cta %}
{{ slots.cta|safe }}
{% endif %} + {% if slots.footer %}
{{ slots.footer|safe }}
{% endif %} {{ body_end_html|safe }} diff --git a/templates/email/brutalist.ninjatpl b/templates/email/brutalist.ninjatpl index 18fa1f6..8c2f4f8 100644 --- a/templates/email/brutalist.ninjatpl +++ b/templates/email/brutalist.ninjatpl @@ -7,32 +7,32 @@ {{ site_name }} + body, table, td, p, a, li, blockquote { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } + table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } + img { -ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; } + body { margin: 0 !important; padding: 0 !important; width: 100% !important; } + @media only screen and (max-width: 620px) { + .brutalist-email-container { width: 100% !important; max-width: 100% !important; } + .brutalist-email-pad { padding-left: 24px !important; padding-right: 24px !important; } + } + - + {% if preview_text %}
{{ preview_text }}
{% endif %}
- + - - diff --git a/templates/overrides/brutalist/announcement-bar.ninjatpl b/templates/overrides/brutalist/announcement-bar.ninjatpl new file mode 100644 index 0000000..061909c --- /dev/null +++ b/templates/overrides/brutalist/announcement-bar.ninjatpl @@ -0,0 +1,21 @@ +{# brutalist announcement-bar override — bold bordered strip, dismissable. Fields: message, variant, linkText, linkUrl, dismissable. #} +{% set annstyle = "background:hsl(var(--accent));color:hsl(var(--accent-foreground))" %} +{% if variant == "alert" %}{% set annstyle = "background:hsl(var(--destructive));color:hsl(var(--destructive-foreground))" %}{% elif variant == "info" %}{% set annstyle = "background:hsl(var(--foreground));color:hsl(var(--background))" %}{% endif %} +
+
+

{{ message }}{% if linkText and linkUrl %} {{ linkText }}{% endif %}

+{% if dismissable %}{% endif %} +
+
+{% if dismissable %}{% endif %} diff --git a/templates/overrides/brutalist/audio-embed.ninjatpl b/templates/overrides/brutalist/audio-embed.ninjatpl new file mode 100644 index 0000000..c79e9e2 --- /dev/null +++ b/templates/overrides/brutalist/audio-embed.ninjatpl @@ -0,0 +1,16 @@ +{# brutalist audio-embed override — bordered player card. Fields: url, media, artwork, title, artist, download. #} +
{% if artwork %}
{% img artwork alt=title|default:"" class="h-full w-full object-cover" %}
{% endif %}
{% if title %}

{{ title }}

{% endif %}{% if artist %}

{{ artist }}

{% endif %}
{% if download %}Download{% endif %}
diff --git a/templates/overrides/brutalist/auth-form.ninjatpl b/templates/overrides/brutalist/auth-form.ninjatpl new file mode 100644 index 0000000..1a41c8c --- /dev/null +++ b/templates/overrides/brutalist/auth-form.ninjatpl @@ -0,0 +1,61 @@ +{# brutalist auth-form override — bordered login/register card. HTMX endpoints + input names + tab panels are load-bearing (public_auth.go); kept exact. Fields: default_tab, show_social, captchaEnabled; context.isPublicLoggedIn, context.publicUsername, context.site.google_oauth_client_id/facebook_app_id. NOTE: the proof-of-work captcha widget is server-generated and cannot be emitted from a codeless template — do NOT enable captchaEnabled on an override-rendered auth-form (see WO limitation). #} +{% if context.isPublicLoggedIn %} +
+

Logged in as {{ context.publicUsername }}

+ My Account +
+{% else %} +{% set defaultTab = default_tab|default:"login" %} + +
+
+
+ + +
+ + +
+ +{% endif %} diff --git a/templates/overrides/brutalist/auth-status.ninjatpl b/templates/overrides/brutalist/auth-status.ninjatpl new file mode 100644 index 0000000..119b941 --- /dev/null +++ b/templates/overrides/brutalist/auth-status.ninjatpl @@ -0,0 +1,33 @@ +{# brutalist auth-status override — header login state. Logout/resend HTMX endpoints load-bearing. Context: context.isPublicLoggedIn, context.publicDisplayName, context.publicUsername, context.publicEmailVerified. #} +{% if not context.isPublicLoggedIn %} +
+ Login + Sign Up +
+{% else %} +{% set displayName = context.publicDisplayName|default:context.publicUsername %} +{% if not context.publicEmailVerified %}
Please verify your email address.
{% endif %} +
+ + + +
+{% endif %} diff --git a/templates/overrides/brutalist/author-bio-hero.ninjatpl b/templates/overrides/brutalist/author-bio-hero.ninjatpl new file mode 100644 index 0000000..d677501 --- /dev/null +++ b/templates/overrides/brutalist/author-bio-hero.ninjatpl @@ -0,0 +1,21 @@ +{# brutalist author-bio-hero override — author-page header from the `authors` provider. Fields: showAvatar, author.*, showPostCount, showSocial. #} +{% if author %} +
+
+{% if showAvatar and author.avatar_url %}
{% img author.avatar_url alt=author.display_name class="h-full w-full object-cover" %}
{% endif %} +

{{ author.display_name }}

+{% if author.job_title or author.company %}

{{ author.job_title }}{% if author.job_title and author.company %} · {% endif %}{{ author.company }}

{% endif %} +{% if author.bio %}

{{ author.bio }}

{% endif %} +
+{% if showPostCount %}{{ author.post_count|default:0 }} post{% if author.post_count != 1 %}s{% endif %}{% endif %} +{% if author.location %}{{ author.location }}{% endif %} +
+{% if showSocial %}
+{% if author.website_url %}{% endif %} +{% if author.twitter_handle %}{% endif %} +{% if author.linkedin_url %}{% endif %} +{% if author.github_url %}{% endif %} +
{% endif %} +
+
+{% endif %} diff --git a/templates/overrides/brutalist/author-bio.ninjatpl b/templates/overrides/brutalist/author-bio.ninjatpl new file mode 100644 index 0000000..04836fc --- /dev/null +++ b/templates/overrides/brutalist/author-bio.ninjatpl @@ -0,0 +1,13 @@ +{# brutalist author-bio override — byline slab sourced from the `post` provider's author_* fields. Fields: heading, showAvatar, post.author_*. #} +{% if post.author_name %} + +{% endif %} diff --git a/templates/overrides/brutalist/blog-hero.ninjatpl b/templates/overrides/brutalist/blog-hero.ninjatpl new file mode 100644 index 0000000..1ca186b --- /dev/null +++ b/templates/overrides/brutalist/blog-hero.ninjatpl @@ -0,0 +1,23 @@ +{# brutalist blog-hero override — blog-index masthead + featured posts from the `posts` provider. Fields: title, subtitle, posts[], showExcerpt. #} +
+
+
+{% if title %}

{{ title }}

{% endif %} +{% if subtitle %}

{{ subtitle }}

{% endif %} +
+{% if posts %} +
+{% for post in posts %} + +{% endfor %} +
+{% endif %} +
+
diff --git a/templates/overrides/brutalist/breadcrumbs.ninjatpl b/templates/overrides/brutalist/breadcrumbs.ninjatpl new file mode 100644 index 0000000..40dfc11 --- /dev/null +++ b/templates/overrides/brutalist/breadcrumbs.ninjatpl @@ -0,0 +1,13 @@ +{# brutalist breadcrumbs override — trail from the `breadcrumbs` provider (page ancestry). Mono uppercase trail; keeps the arrows-template chevron verbatim. Fields: template, showHome, homeLabel, breadcrumbs[], separator, showCurrent, item.*. #} +{% set arrows = template == "arrows" %} + diff --git a/templates/overrides/brutalist/button.ninjatpl b/templates/overrides/brutalist/button.ninjatpl index 041af3d..a9769e7 100644 --- a/templates/overrides/brutalist/button.ninjatpl +++ b/templates/overrides/brutalist/button.ninjatpl @@ -1 +1,2 @@ -{{ text }} +{# brutalist button override — square, hard border, offset shadow, hover snap. Fields: label, link, style, size, icon, iconPosition, align, newTab. #} +{% with align=align|default:"left" %}{% endwith %} diff --git a/templates/overrides/brutalist/card.ninjatpl b/templates/overrides/brutalist/card.ninjatpl new file mode 100644 index 0000000..9957636 --- /dev/null +++ b/templates/overrides/brutalist/card.ninjatpl @@ -0,0 +1,2 @@ +{# brutalist card override — slab with hard offset shadow + hover snap. Fields: title, text, media, link, linkLabel, layout. #} +{% with layout=layout|default:"vertical" %}{% endwith %} diff --git a/templates/overrides/brutalist/category-list.ninjatpl b/templates/overrides/brutalist/category-list.ninjatpl new file mode 100644 index 0000000..7d8e50a --- /dev/null +++ b/templates/overrides/brutalist/category-list.ninjatpl @@ -0,0 +1,18 @@ +{# brutalist category-list override — from the `categories` provider. list or pills. Fields: heading, style, categories[], showCount. #} +{% set pills = style == "pills" %} +
+{% if heading %}

{{ heading }}

{% endif %} +{% if pills %} +
+{% for cat in categories %} +{{ cat.name }}{% if showCount %}{{ cat.post_count }}{% endif %} +{% endfor %} +
+{% else %} + +{% endif %} +
diff --git a/templates/overrides/brutalist/contact-card.ninjatpl b/templates/overrides/brutalist/contact-card.ninjatpl new file mode 100644 index 0000000..0dcf15d --- /dev/null +++ b/templates/overrides/brutalist/contact-card.ninjatpl @@ -0,0 +1,18 @@ +{# brutalist contact-card override — bordered channel slabs, accent icon square. Fields: heading, description, columns, channels[] (icon, label, value, link). Keeps builtin icon split + literal conditional column classes. #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if description %}

{{ description }}

{% endif %} +
+ {% for channel in channels %} +
+ {% if channel.icon %}{% endif %} +
+ {% if channel.label %}
{{ channel.label }}
{% endif %} + {% if channel.value %}
{% if channel.link %}{{ channel.value }}{% else %}{{ channel.value }}{% endif %}
{% endif %} +
+
+ {% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/contact-form.ninjatpl b/templates/overrides/brutalist/contact-form.ninjatpl new file mode 100644 index 0000000..0bd2082 --- /dev/null +++ b/templates/overrides/brutalist/contact-form.ninjatpl @@ -0,0 +1,40 @@ +{# brutalist contact-form override — bordered form, mono labels. Submit + honeypot wiring is load-bearing; kept verbatim. Fields: heading, description, successMessage, submitLabel, fields[.name,.label,.type,.required,.placeholder,.width,.options], plus `form` context. #} +{% with bid=_block_id|default:context.blockId %} +
+
+ {% if form.submitted %} +
+
+

{{ form.message|default:successMessage|default:"Thanks — your message has been sent." }}

+
+ {% else %} + {% if heading %}

{{ heading }}

{% endif %} + {% if description %}

{{ description }}

{% endif %} + {% if form.errors._form %}
{{ form.errors._form }}
{% endif %} + {% with formAction="/api/blocks/"|add:bid|add:"/submit" formTarget="#contact-form-"|add:bid %} + {% form action=formAction hx_target=formTarget hx_swap="outerHTML" class="mt-8 grid grid-cols-1 gap-5 sm:grid-cols-2" %} + {% for field in fields %} +
+ {% if field.label %}{% endif %} + {% if field.type == "textarea" %} + + {% elif field.type == "select" %} + + {% else %} + + {% endif %} +
+ {% endfor %} + +
+ +
+ {% endform %} + {% endwith %} + {% endif %} +
+
+{% endwith %} diff --git a/templates/overrides/brutalist/countdown.ninjatpl b/templates/overrides/brutalist/countdown.ninjatpl new file mode 100644 index 0000000..6b59345 --- /dev/null +++ b/templates/overrides/brutalist/countdown.ninjatpl @@ -0,0 +1,49 @@ +{# brutalist countdown override — mono digit slabs, timer script + data hooks kept verbatim. Fields: heading, intro, target, variant, labelDays/Hours/Minutes/Seconds, expiredMessage, expiredUrl, expiredLabel. #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+
+
--{{ labelDays|default:"Days" }}
+
--{{ labelHours|default:"Hours" }}
+
--{{ labelMinutes|default:"Minutes" }}
+
--{{ labelSeconds|default:"Seconds" }}
+
+ +
+ +
+
+ diff --git a/templates/overrides/brutalist/cta.ninjatpl b/templates/overrides/brutalist/cta.ninjatpl new file mode 100644 index 0000000..416c54b --- /dev/null +++ b/templates/overrides/brutalist/cta.ninjatpl @@ -0,0 +1,13 @@ +{# brutalist cta override — bordered slab with hard offset. Fields: heading, text, primaryUrl, primaryLabel, secondaryUrl, secondaryLabel, background. #} +
+
+
+{% if heading %}

{{ heading }}

{% endif %} +{% if text %}

{{ text }}

{% endif %} +{% if (primaryUrl and primaryLabel) or (secondaryUrl and secondaryLabel) %}
+{% if primaryUrl and primaryLabel %}{{ primaryLabel }}{% endif %} +{% if secondaryUrl and secondaryLabel %}{{ secondaryLabel }}{% endif %} +
{% endif %} +
+
+
diff --git a/templates/overrides/brutalist/divider.ninjatpl b/templates/overrides/brutalist/divider.ninjatpl new file mode 100644 index 0000000..a6db714 --- /dev/null +++ b/templates/overrides/brutalist/divider.ninjatpl @@ -0,0 +1,2 @@ +{# brutalist divider override — hard rule or icon ornament. Fields: variant, weight, width, icon. #} +{% with variant=variant|default:"line" weight=weight|default:"thick" width=width|default:"full" %}{% if variant == "ornament" %}{% else %}{% endif %}{% endwith %} diff --git a/templates/overrides/brutalist/event-list.ninjatpl b/templates/overrides/brutalist/event-list.ninjatpl new file mode 100644 index 0000000..bd4fd04 --- /dev/null +++ b/templates/overrides/brutalist/event-list.ninjatpl @@ -0,0 +1,41 @@ +{# brutalist event-list override — bordered event slabs (cards) or hard-ruled rows (list). Fields: heading, intro, layout, hidePast, events[] (past, media, datetime, start, end, timezone, title, venue, description, link, linkLabel). Keeps builtin hidePast guards. #} +
+
+ {% 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 %} +
+
{{ event.start }}{% if event.end %} – {{ event.end }}{% endif %}{% if event.timezone %} {{ event.timezone }}{% endif %}
+

{{ event.title }}

+ {% if event.venue %}

{{ event.venue }}

{% endif %} + {% if event.description %}

{{ event.description }}

{% endif %} + {% if event.link %}{{ event.linkLabel|default:"Details" }} →{% endif %} +
+
+ {% endif %}{% endfor %} +
+ {% else %} +
    + {% for event in events %}{% if not (hidePast and event.past) %} +
  • +
    +
    {{ event.start }}
    + {% if event.end %}
    to {{ event.end }}
    {% endif %} + {% if event.timezone %}
    {{ event.timezone }}
    {% endif %} +
    +
    +

    {{ event.title }}

    + {% if event.venue %}

    {{ event.venue }}

    {% endif %} + {% if event.description %}

    {{ event.description }}

    {% endif %} +
    + {% if event.link %}{{ event.linkLabel|default:"Details" }}{% endif %} +
  • + {% endif %}{% endfor %} +
+ {% endif %} +
+
diff --git a/templates/overrides/brutalist/faq.ninjatpl b/templates/overrides/brutalist/faq.ninjatpl new file mode 100644 index 0000000..d0c80fd --- /dev/null +++ b/templates/overrides/brutalist/faq.ninjatpl @@ -0,0 +1,18 @@ +{# brutalist faq override — bordered accordion, native
mechanism kept. Fields: heading, intro, variant, items[] (question, answer). #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+ {% for item in items %} +
+ + {{ item.question }} + + +
{{ item.answer|safe }}
+
+ {% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/feature-grid.ninjatpl b/templates/overrides/brutalist/feature-grid.ninjatpl new file mode 100644 index 0000000..b6281a4 --- /dev/null +++ b/templates/overrides/brutalist/feature-grid.ninjatpl @@ -0,0 +1,18 @@ +{# brutalist feature-grid override — bordered slabs with hard offset shadow. Fields: eyebrow, heading, intro, columns, layout, items[] (icon, title, text, linkUrl, linkLabel). Keeps builtin icon split + literal conditional column classes. #} +
+
+ {% if eyebrow %}{{ eyebrow }}{% endif %} + {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+ {% for item in items %} +
+ {% if item.icon %}
{% endif %} +

{% if item.linkUrl %}{{ item.title }}{% else %}{{ item.title }}{% endif %}

+ {% if item.text %}

{{ item.text }}

{% endif %} + {% if item.linkUrl and item.linkLabel %}{{ item.linkLabel }} →{% endif %} +
+ {% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/featured-posts.ninjatpl b/templates/overrides/brutalist/featured-posts.ninjatpl new file mode 100644 index 0000000..6899f1b --- /dev/null +++ b/templates/overrides/brutalist/featured-posts.ninjatpl @@ -0,0 +1,22 @@ +{# brutalist featured-posts override — grid of bordered slab cards from the `posts` provider. Fields: heading, columns, posts[], showFeaturedImage, showExcerpt, showAuthor, showDate. #} +
+
+{% if heading %}

{{ heading }}

{% endif %} +
+{% for post in posts %} +
+{% if showFeaturedImage and post.featured_image_url %}{% img post.featured_image_url alt=post.title class="h-full w-full object-cover transition-transform duration-300 group-hover:scale-105" %}{% endif %} +
+

{{ post.title }}

+{% if showExcerpt and post.excerpt %}

{{ post.excerpt }}

{% endif %} +
+{% if showAuthor and post.author_name %}{{ post.author_name }}{% endif %} +{% if showDate and post.published_at %}{{ post.published_at|date:"M j, Y" }}{% endif %} +{% if post.reading_time %}{{ post.reading_time }} min read{% endif %} +
+
+
+{% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/footer.ninjatpl b/templates/overrides/brutalist/footer.ninjatpl new file mode 100644 index 0000000..41f1788 --- /dev/null +++ b/templates/overrides/brutalist/footer.ninjatpl @@ -0,0 +1,28 @@ +{# brutalist footer override — colophon. Thick top rule, mono uppercase columns, copyright stamp. Fields: layout, social_items[], showNewsletter, newsletter*, columns[], legal_items[], copyright, companyName, logo, tagline, address, email, phone, fullWidth, backgroundColor. #} +{% set fl = layout|default:"columns" %} +{% macro sociallinks(cls) %}{% if social_items %}{% endif %}{% endmacro %} +{% macro newsletter() %}{% if showNewsletter %}

{{ newsletterTitle|default:"Join the list" }}

{% if newsletterDescription %}

{{ newsletterDescription }}

{% endif %}
{% signup_form list=newsletterListSlug|default:"main" source="footer" submit=newsletterButtonText|default:"Subscribe" %}
{% endif %}{% endmacro %} +{% macro legalbar() %}

© {% now "2006" %} {% if copyright %}{{ copyright }}{% else %}{{ companyName }}{% endif %}

{% if legal_items %}{% endif %}
{% endmacro %} +
+
+{% if fl == "minimal" %} +
+
{% if logo %}{{ companyName }}{% elif companyName %}{{ companyName }}{% endif %}{% if tagline %}{% endif %}
+{{ sociallinks("") }} +
+{{ 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 %} +
+{{ legalbar() }} +{% endif %} +
+
diff --git a/templates/overrides/brutalist/gallery.ninjatpl b/templates/overrides/brutalist/gallery.ninjatpl new file mode 100644 index 0000000..566cbd8 --- /dev/null +++ b/templates/overrides/brutalist/gallery.ninjatpl @@ -0,0 +1,52 @@ +{# brutalist gallery override — hard-bordered tiles + dependency-free lightbox. Fields: images[.src,.alt,.caption], layout, columns, gap, lightbox. #} +{% with layout=layout|default:"grid" gap=gap|default:"md" cols=columns|default:3 %}{% if lightbox %}{% endif %}{% endwith %} diff --git a/templates/overrides/brutalist/heading.ninjatpl b/templates/overrides/brutalist/heading.ninjatpl index 4088b13..4287b4b 100644 --- a/templates/overrides/brutalist/heading.ninjatpl +++ b/templates/overrides/brutalist/heading.ninjatpl @@ -1 +1,7 @@ -{% if level|integer == 1 %}

{{ text }}

{% elif level|integer == 3 %}

{{ text }}

{% elif level|integer == 4 %}

{{ text }}

{% elif level|integer == 5 %}
{{ text }}
{% elif level|integer == 6 %}
{{ text }}
{% else %}

{{ text }}

{% endif %} +{# brutalist heading override — oversized uppercase display type. Fields: level, text, textClass. #} +{% if level == 1 %}

{{ text }}

+{% elif level == 3 %}

{{ text }}

+{% elif level == 4 %}

{{ text }}

+{% elif level == 5 %}
{{ text }}
+{% elif level == 6 %}
{{ text }}
+{% else %}

{{ text }}

{% endif %} diff --git a/templates/overrides/brutalist/hero.ninjatpl b/templates/overrides/brutalist/hero.ninjatpl new file mode 100644 index 0000000..9e856c7 --- /dev/null +++ b/templates/overrides/brutalist/hero.ninjatpl @@ -0,0 +1,24 @@ +{# brutalist hero override — oversized display headline (the studio masthead identity). Styled-text fields accept {text} object OR bare string. Fields: eyebrow, headline, subheadline, description, ctaPrimary{.text,.url}, ctaSecondary{.text,.url}, template, backgroundImage. {% img %} takes no nested {% if %} so the bg is one unconditional call. #} +{% set eyebrowText = eyebrow.text|default:eyebrow %} +{% set headlineText = headline.text|default:headline %} +{% set subText = subheadline.text|default:subheadline %} +{% set descText = description.text|default:description %} +{% set pText = ctaPrimary.text %} +{% set pUrl = ctaPrimary.url %} +{% set sText = ctaSecondary.text %} +{% set sUrl = ctaSecondary.url %} +{% set variant = template|default:"centered" %} +{% set hasImage = backgroundImage %} +
+{% if hasImage %}
{% img backgroundImage alt=headlineText class="h-full w-full object-cover" layout="hero" %}
{% endif %} +
+
+{% if eyebrowText %}{{ eyebrowText }}{% endif %} +{% if headlineText %}

{{ headlineText }}

{% endif %} +{% if subText %}

{{ subText }}

{% endif %} +{% if descText %}

{{ descText }}

{% endif %} +{% if pText or sText %}
{% if pText and pUrl %}{{ pText }}{% endif %}{% if sText and sUrl %}{{ sText }}{% endif %}
{% endif %} +{% if trustLogos %}

Trusted by

{% for logo in trustLogos %}{% if logo.url %}{% img logo.image alt=logo.alt class="h-8 w-auto" %}{% else %}{% img logo.image alt=logo.alt class="h-8 w-auto opacity-70" %}{% endif %}{% endfor %}
{% endif %} +
+
+
diff --git a/templates/overrides/brutalist/hours-location.ninjatpl b/templates/overrides/brutalist/hours-location.ninjatpl new file mode 100644 index 0000000..4e7fe85 --- /dev/null +++ b/templates/overrides/brutalist/hours-location.ninjatpl @@ -0,0 +1,31 @@ +{# brutalist hours-location override — bordered hours table + lazy map. Fields: heading, hours[] (day, closed, hours), specialHoursNote, address, phone, directionsUrl, mapEmbedUrl, mapButtonLabel. Keeps map button's inline onclick verbatim. Builtin uses fixed lucide icons (no icon split field). #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} +
+
+ {% if hours %} +
+ + {% for row in hours %} + + + + + {% endfor %} + +
{{ row.day }}{% if row.closed %}Closed{% else %}{{ row.hours }}{% endif %}
+ {% endif %} + {% if specialHoursNote %}

{{ specialHoursNote }}

{% endif %} + {% if address %}
Address
{{ address }}
{% endif %} + {% if phone %}{% endif %} + {% if directionsUrl %}Get directions{% endif %} + + {% if mapEmbedUrl %} +
+ +
+ {% endif %} + + + diff --git a/templates/overrides/brutalist/image.ninjatpl b/templates/overrides/brutalist/image.ninjatpl index 5e3b029..6e75b61 100644 --- a/templates/overrides/brutalist/image.ninjatpl +++ b/templates/overrides/brutalist/image.ninjatpl @@ -1 +1,2 @@ -
{% if src %}{{ alt }}{% elif url %}{{ alt }}{% endif %}{% if caption %}
{{ caption }}
{% endif %}
+{# brutalist image override — hard-bordered figure, mono caption. Fields: src, alt, size, align, aspectRatio, objectFit, caption. Rounding is killed page-wide. #} +{% with size=size|default:"full" align=align|default:"center" aspectRatio=aspectRatio|default:"auto" objectFit=objectFit|default:"cover" %}
{% if objectFit == "contain" %}{% img src alt=alt class="w-full h-full object-contain" layout=size %}{% elif objectFit == "fill" %}{% img src alt=alt class="w-full h-full object-fill" layout=size %}{% else %}{% img src alt=alt class="w-full h-full object-cover" layout=size %}{% endif %}
{% if caption %}
{{ caption }}
{% endif %}
{% endwith %} diff --git a/templates/overrides/brutalist/logo-strip.ninjatpl b/templates/overrides/brutalist/logo-strip.ninjatpl new file mode 100644 index 0000000..ceecdb9 --- /dev/null +++ b/templates/overrides/brutalist/logo-strip.ninjatpl @@ -0,0 +1,16 @@ +{# brutalist logo-strip override — mono heading + optional marquee, keyframe kept verbatim. Fields: heading, marquee, grayscale, logos[] (url, image, alt). #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} +
+
+ {% for logo in logos %} + {% if logo.url %}{% endif %} + {% img logo.image alt=logo.alt class="h-8 w-auto object-contain" %} + {% if logo.url %}{% endif %} + {% endfor %} +
+
+
+
+{% if marquee %}{% endif %} diff --git a/templates/overrides/brutalist/menu-list.ninjatpl b/templates/overrides/brutalist/menu-list.ninjatpl new file mode 100644 index 0000000..b60a03c --- /dev/null +++ b/templates/overrides/brutalist/menu-list.ninjatpl @@ -0,0 +1,30 @@ +{# brutalist menu-list override — bordered menu sections, mono price. Fields: heading, intro, columns, currency, footnote, sections[] (title, note, items[] {name, badges[] {label}, description, price}). Builtin has no icon field so no icon split here. #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+ {% for section in sections %} + + {% endfor %} +
+ {% if footnote %}

{{ footnote }}

{% endif %} +
+
diff --git a/templates/overrides/brutalist/navbar.ninjatpl b/templates/overrides/brutalist/navbar.ninjatpl new file mode 100644 index 0000000..6902819 --- /dev/null +++ b/templates/overrides/brutalist/navbar.ninjatpl @@ -0,0 +1,64 @@ +{# brutalist navbar override — thick-ruled bar, uppercase wordmark, mono links, off-canvas drawer. One navbar per page (fixed drawer ids). Fields: companyName, logo, logoType, logoText.text, alt, menu.items[], cta.text|ctaLabel, cta.url|ctaUrl, stickyBehavior, sticky, showUtilityBar, utilityBar*, class. #} +{% set sb = stickyBehavior %}{% if not sb %}{% if sticky %}{% set sb = "sticky" %}{% else %}{% set sb = "none" %}{% endif %}{% endif %} +{% set cta_text = cta.text|default:ctaLabel %} +{% set cta_url = cta.url|default:ctaUrl %} +{% macro brand() %}{% if logoType == "text" and logoText.text %}{{ logoText.text }}{% elif logo %}{{ alt|default:companyName }}{% else %}{{ companyName|default:"STUDIO" }}{% endif %}{% endmacro %} +{% macro navlink(item) %}{{ item.label }}{% endmacro %} +{% macro dropdown(item) %}
{% endmacro %} +{% macro ctabtn(extra) %}{% if cta_text %}{{ cta_text }}{% endif %}{% endmacro %} + + + diff --git a/templates/overrides/brutalist/newsletter-signup.ninjatpl b/templates/overrides/brutalist/newsletter-signup.ninjatpl new file mode 100644 index 0000000..c91c4df --- /dev/null +++ b/templates/overrides/brutalist/newsletter-signup.ninjatpl @@ -0,0 +1,10 @@ +{# brutalist newsletter-signup override — the {% signup_form %} tag carries the untouchable subscribe wiring; this template only supplies brutalist chrome. Fields: layout, title, description, listSlug, source, submitText, successMessage, placeholder. #} +
+
+
+{% if title %}

{{ title }}

{% endif %} +{% if description %}

{{ description }}

{% endif %} +
{% signup_form list=listSlug source=source submit=submitText success_message=successMessage placeholder=placeholder %}
+
+
+
diff --git a/templates/overrides/brutalist/page-suggestions.ninjatpl b/templates/overrides/brutalist/page-suggestions.ninjatpl new file mode 100644 index 0000000..2f00748 --- /dev/null +++ b/templates/overrides/brutalist/page-suggestions.ninjatpl @@ -0,0 +1,20 @@ +{# brutalist page-suggestions override — themed 404. Fields: title, emptyMessage, showDescription. NOTE: the builtin computes `suggestions` via a server-side SearchSimilarPages DB query keyed on the requested path; that data is NOT exposed to codeless templates, so the dynamic suggestion list cannot be reproduced here (WO limitation). The `{% for %}` below renders defensively if the host ever supplies `suggestions`; otherwise the themed 404 chrome + a way home is shown. #} +
+
+

404

+

{{ title|default:"Page not found" }}

+ {% if suggestions %} + + {% elif emptyMessage %} +

{{ emptyMessage }}

+ {% endif %} + +
+
diff --git a/templates/overrides/brutalist/password-reset-form.ninjatpl b/templates/overrides/brutalist/password-reset-form.ninjatpl new file mode 100644 index 0000000..85e7292 --- /dev/null +++ b/templates/overrides/brutalist/password-reset-form.ninjatpl @@ -0,0 +1,13 @@ +{# brutalist password-reset-form override — request-reset form. HTMX endpoint + input name load-bearing; kept exact. #} +
+
+
+

Reset Password

+

Enter your email address and we will send you a link to reset your password.

+
+
+ +
+

Back to login

+
+
diff --git a/templates/overrides/brutalist/popular-posts.ninjatpl b/templates/overrides/brutalist/popular-posts.ninjatpl new file mode 100644 index 0000000..47492eb --- /dev/null +++ b/templates/overrides/brutalist/popular-posts.ninjatpl @@ -0,0 +1,16 @@ +{# brutalist popular-posts override — compact ranked list from the `posts` provider. Fields: heading, posts[], showRank, showThumbnail. #} +
+{% if heading %}

{{ heading }}

{% endif %} +
    +{% for post in posts %} +
  1. +{% if showRank %}{{ forloop.Counter }}{% endif %} +{% if showThumbnail and post.featured_image_url %}{% img post.featured_image_url alt=post.title class="h-full w-full object-cover" %}{% endif %} +
    +

    {{ post.title }}

    +{% if post.published_at %}

    {{ post.published_at|date:"M j, Y" }}

    {% endif %} +
    +
  2. +{% endfor %} +
+
diff --git a/templates/overrides/brutalist/post-hero.ninjatpl b/templates/overrides/brutalist/post-hero.ninjatpl new file mode 100644 index 0000000..246de7a --- /dev/null +++ b/templates/overrides/brutalist/post-hero.ninjatpl @@ -0,0 +1,20 @@ +{# brutalist post-hero override — current post from the `post` provider. Featured image = overlaid banner; otherwise clean text hero. Fields: align, post.*, showExcerpt, showMeta. #} +{% set center = align != "left" %} +{% if post.featured_image_url %} +
+
{% img post.featured_image_url alt=post.featured_image_alt class="h-full w-full object-cover" layout="hero" %}
+
+

{{ post.title }}

+{% if showExcerpt and post.excerpt %}

{{ post.excerpt }}

{% endif %} +{% if showMeta %}
{% if post.author_name %}{{ post.author_name }}{% endif %}{% if post.published_at %}{{ post.published_at|date:"F j, Y" }}{% endif %}{% if post.reading_time %}{{ post.reading_time }} min read{% endif %}
{% endif %} +
+
+{% else %} +
+
+

{{ post.title }}

+{% if showExcerpt and post.excerpt %}

{{ post.excerpt }}

{% endif %} +{% if showMeta %}
{% if post.author_name %}{{ post.author_name }}{% endif %}{% if post.published_at %}{{ post.published_at|date:"F j, Y" }}{% endif %}{% if post.reading_time %}{{ post.reading_time }} min read{% endif %}
{% endif %} +
+
+{% endif %} diff --git a/templates/overrides/brutalist/post-metadata.ninjatpl b/templates/overrides/brutalist/post-metadata.ninjatpl new file mode 100644 index 0000000..7da5003 --- /dev/null +++ b/templates/overrides/brutalist/post-metadata.ninjatpl @@ -0,0 +1,9 @@ +{# brutalist post-metadata override — author/date/reading-time row from the `post` provider. Fields: showAuthor, showAvatar, showDate, showReadingTime, post.*, post.categories[]. #} +{% if post %} +
+{% if showAuthor and post.author_name %}{% if showAvatar and post.author_avatar %}{% img post.author_avatar alt=post.author_name class="h-7 w-7 object-cover" %}{% endif %}{{ post.author_name }}{% endif %} +{% if showDate and post.published_at %}{% endif %} +{% if showReadingTime and post.reading_time %}{{ post.reading_time }} min read{% endif %} +{% if post.categories %}{% for cat in post.categories %}{{ cat.name }}{% endfor %}{% endif %} +
+{% endif %} diff --git a/templates/overrides/brutalist/pricing.ninjatpl b/templates/overrides/brutalist/pricing.ninjatpl new file mode 100644 index 0000000..552541a --- /dev/null +++ b/templates/overrides/brutalist/pricing.ninjatpl @@ -0,0 +1,25 @@ +{# brutalist pricing override — bordered tier slabs, highlighted tier gets accent band. Fields: heading, intro, currency, billingNote, tiers[] (highlighted, badge, name, price, period, description, features[], ctaUrl, ctaLabel). #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+ {% for tier in tiers %} +
+ {% if tier.badge %}{{ tier.badge }}{% endif %} +

{{ tier.name }}

+

+ {% if currency %}{{ currency }}{% else %}${% endif %}{{ tier.price }} + {% if tier.period %}{{ tier.period }}{% endif %} +

+ {% if tier.description %}

{{ tier.description }}

{% endif %} + {% if tier.features %}
    + {% for feature in tier.features %}
  • {{ feature }}
  • {% endfor %} +
{% endif %} + {% if tier.ctaUrl and tier.ctaLabel %}{{ tier.ctaLabel }}{% endif %} +
+ {% endfor %} +
+ {% if billingNote %}

{{ billingNote }}

{% endif %} +
+
diff --git a/templates/overrides/brutalist/quote.ninjatpl b/templates/overrides/brutalist/quote.ninjatpl new file mode 100644 index 0000000..c66a61a --- /dev/null +++ b/templates/overrides/brutalist/quote.ninjatpl @@ -0,0 +1,2 @@ +{# brutalist quote override — thick accent rule or bordered slab. Fields: quote, cite, attribution, role, style, align. #} +{% with style=style|default:"block" align=align|default:"left" %}
{{ quote|safe }}{% if attribution or role or cite %}
{% if attribution %}{{ attribution }}{% endif %}{% if role %}{{ role }}{% endif %}{% if cite %}Source{% endif %}
{% endif %}
{% endwith %} diff --git a/templates/overrides/brutalist/related-posts.ninjatpl b/templates/overrides/brutalist/related-posts.ninjatpl new file mode 100644 index 0000000..9379443 --- /dev/null +++ b/templates/overrides/brutalist/related-posts.ninjatpl @@ -0,0 +1,19 @@ +{# brutalist related-posts override — grid from the `posts` provider, thick top rule. Fields: heading, columns, posts[]. #} +{% if posts %} +
+
+

{{ heading|default:"Related posts" }}

+
+{% for post in posts %} + +{% endfor %} +
+
+
+{% endif %} diff --git a/templates/overrides/brutalist/rich-section.ninjatpl b/templates/overrides/brutalist/rich-section.ninjatpl new file mode 100644 index 0000000..c99f54b --- /dev/null +++ b/templates/overrides/brutalist/rich-section.ninjatpl @@ -0,0 +1,14 @@ +{# brutalist rich-section override — split text/media with bordered media frame. Fields: background, mediaPosition, eyebrow, heading, body, ctaUrl, ctaLabel, media, mediaAlt. #} +
+
+
+ {% if eyebrow %}{{ eyebrow }}{% endif %} + {% if heading %}

{{ heading }}

{% endif %} + {% if body %}
{{ body|safe }}
{% endif %} + {% if ctaUrl and ctaLabel %}{{ ctaLabel }} →{% endif %} +
+
+ {% if media %}
{% img media alt=mediaAlt class="w-full h-auto object-cover" %}
{% endif %} +
+
+
diff --git a/templates/overrides/brutalist/rich-text.ninjatpl b/templates/overrides/brutalist/rich-text.ninjatpl new file mode 100644 index 0000000..87f2ac2 --- /dev/null +++ b/templates/overrides/brutalist/rich-text.ninjatpl @@ -0,0 +1,2 @@ +{# brutalist rich-text override — imported HTML content. Field: html. #} +{% if html %}
{{ html|safe }}
{% endif %} diff --git a/templates/overrides/brutalist/sidebar-nav.ninjatpl b/templates/overrides/brutalist/sidebar-nav.ninjatpl new file mode 100644 index 0000000..7793514 --- /dev/null +++ b/templates/overrides/brutalist/sidebar-nav.ninjatpl @@ -0,0 +1,13 @@ +{# brutalist sidebar-nav override — vertical menu from the `menus` provider. Variants default | compact. highlight-current script kept verbatim (toggles text-muted-foreground → text-foreground/bg-accent on data-bn-sidebar-link). Fields: template, showBorder, title, menu.items[], highlightCurrent. #} +{% set compact = template == "compact" %} + +{% if highlightCurrent %}{% endif %} diff --git a/templates/overrides/brutalist/social-links.ninjatpl b/templates/overrides/brutalist/social-links.ninjatpl new file mode 100644 index 0000000..f646151 --- /dev/null +++ b/templates/overrides/brutalist/social-links.ninjatpl @@ -0,0 +1,14 @@ +{# brutalist social-links override — bordered square chips (widget, not a full section). Fields: heading, style, links[] (url, label, network). Keeps builtin icon split on network + literal conditional style classes. #} + diff --git a/templates/overrides/brutalist/stats.ninjatpl b/templates/overrides/brutalist/stats.ninjatpl new file mode 100644 index 0000000..a4932b0 --- /dev/null +++ b/templates/overrides/brutalist/stats.ninjatpl @@ -0,0 +1,49 @@ +{# brutalist stats override — bordered stat tiles with hard offset, count-up script kept verbatim. Fields: heading, intro, columns, countUp, items[] (prefix, value, suffix, label). #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+ {% for item in items %} +
+
{% if item.prefix %}{{ item.prefix }}{% endif %}{{ item.value }}{% if item.suffix %}{{ item.suffix }}{% endif %}
+ {% if item.label %}
{{ item.label }}
{% endif %} +
+ {% endfor %} +
+
+
+{% if countUp %}{% endif %} diff --git a/templates/overrides/brutalist/team.ninjatpl b/templates/overrides/brutalist/team.ninjatpl new file mode 100644 index 0000000..145b651 --- /dev/null +++ b/templates/overrides/brutalist/team.ninjatpl @@ -0,0 +1,22 @@ +{# brutalist team override — bordered member slabs. Fields: heading, intro, layout, columns, members[] (photo, name, role, bio, socials[] {url, icon}). Keeps builtin icon split + literal conditional column classes. #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
+ {% for member in members %} +
+ {% if member.photo %}{% img member.photo alt=member.name class="h-full w-full object-cover" %}{% endif %} +
+ {% if member.name %}

{{ member.name }}

{% endif %} + {% if member.role %}

{{ member.role }}

{% endif %} + {% if member.bio %}

{{ member.bio }}

{% endif %} + {% if member.socials %}
+ {% for social in member.socials %}{% if social.url %}{% endif %}{% endfor %} +
{% endif %} +
+
+ {% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/testimonial.ninjatpl b/templates/overrides/brutalist/testimonial.ninjatpl new file mode 100644 index 0000000..1ab2bf7 --- /dev/null +++ b/templates/overrides/brutalist/testimonial.ninjatpl @@ -0,0 +1,27 @@ +{# brutalist testimonial override — bordered quote slabs with hard offset. Fields: heading, layout, quotes[] (rating, quote, avatar, name, role). Keeps builtin's 5 literal rating-star comparisons. #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} +
+ {% for q in quotes %} +
+ {% if q.rating %}
+ + + + + +
{% endif %} +
{% if q.quote %}“{{ q.quote }}”{% endif %}
+
+ {% if q.avatar %}{% img q.avatar alt=q.name class="h-full w-full object-cover" %}{% endif %} + + {% if q.name %}{{ q.name }}{% endif %} + {% if q.role %}{{ q.role }}{% endif %} + +
+
+ {% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/text.ninjatpl b/templates/overrides/brutalist/text.ninjatpl index a5b0597..883be08 100644 --- a/templates/overrides/brutalist/text.ninjatpl +++ b/templates/overrides/brutalist/text.ninjatpl @@ -1 +1,2 @@ -
{{ text|safe }}
+{# brutalist text override — body copy, generous measure. Fields: text, proseClass. #} +
{{ text|safe }}
diff --git a/templates/overrides/brutalist/timeline.ninjatpl b/templates/overrides/brutalist/timeline.ninjatpl new file mode 100644 index 0000000..ca00d11 --- /dev/null +++ b/templates/overrides/brutalist/timeline.ninjatpl @@ -0,0 +1,22 @@ +{# brutalist timeline override — square step markers + hard rule. Fields: heading, intro, orientation, marker, steps[] (label, title, text, media). Keeps forloop.counter, marker enum branch, and literal conditional orientation classes. #} +
+
+ {% if heading %}

{{ heading }}

{% endif %} + {% if intro %}

{{ intro }}

{% endif %} +
    + {% for step in steps %} +
  1. + + {% if marker == "numbered" %}{{ forloop.counter }}{% elif marker == "dot" %}{% else %}{% endif %} + +
    + {% if step.label %}

    {{ step.label }}

    {% endif %} + {% if step.title %}

    {{ step.title }}

    {% endif %} + {% if step.text %}

    {{ step.text }}

    {% endif %} + {% if step.media %}
    {% img step.media alt=step.title class="w-full h-auto object-cover" %}
    {% endif %} +
    +
  2. + {% endfor %} +
+
+
diff --git a/templates/overrides/brutalist/utility-bar.ninjatpl b/templates/overrides/brutalist/utility-bar.ninjatpl new file mode 100644 index 0000000..56c39e5 --- /dev/null +++ b/templates/overrides/brutalist/utility-bar.ninjatpl @@ -0,0 +1,10 @@ +{# brutalist utility-bar override — mono uppercase meta strip. Fields: leftItems[], rightItems[] (.icon,.label,.link), variant, showOnMobile. #} +{% set ubstyle = "background:hsl(var(--background));color:hsl(var(--muted-foreground));border-bottom:1px solid hsl(var(--border))" %} +{% if variant == "primary" %}{% set ubstyle = "background:hsl(var(--accent));color:hsl(var(--accent-foreground))" %}{% elif variant == "dark" %}{% set ubstyle = "background:hsl(var(--foreground));color:hsl(var(--background))" %}{% endif %} +{% macro ubitem(it) %}{% if it.link %}{% if it.icon %}::{{ it.icon }}:sm::{% endif %}{% if it.label %}{{ it.label }}{% endif %}{% else %}{% if it.icon %}::{{ it.icon }}:sm::{% endif %}{% if it.label %}{{ it.label }}{% endif %}{% endif %}{% endmacro %} +
+
+
{% for it in leftItems %}{{ ubitem(it) }}{% endfor %}
+
{% for it in rightItems %}{{ ubitem(it) }}{% endfor %}
+
+
diff --git a/templates/overrides/brutalist/video-embed.ninjatpl b/templates/overrides/brutalist/video-embed.ninjatpl new file mode 100644 index 0000000..a15670f --- /dev/null +++ b/templates/overrides/brutalist/video-embed.ninjatpl @@ -0,0 +1,23 @@ +{# brutalist video-embed override — hard-bordered click-to-play facade. Fields: url, media, poster, title, caption, aspect. #} +{% with aspect=aspect|default:"16:9" %}
{% if caption %}
{{ caption }}
{% endif %}
{% endwith %}
{% if address and showAddress != "false" and showAddress != false %}
{{ address }}
{% endif %}
{% if email %}{{ email }}{% endif %}{% for link in social %}{{ link.label }}{% endfor %}
© {% now "2006" %}