From 98293cf8ab5baa40939f5b003b4a774942acbf2e Mon Sep 17 00:00:00 2001 From: Alex Dunmow Date: Sun, 5 Jul 2026 12:38:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(magazine-bold):=20Wave=20A=20theme=20lane?= =?UTF-8?q?=20(WO-TF-021)=20=E2=80=94=20streetwear=20/=20fashion=20drops?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Full Wave A build to the OVERRIDE-CONTRACT (frozen cms a0f07e2ae): - 49 mandatory builtin overrides in templates/overrides/magazine-bold/, re-skinned to streetwear cover-story chrome (massive condensed uppercase Archivo Black headlines, heavy 2px rules, hard square edges, mono datelines, fluoro accent slabs). Every content field, provider var, custom tag and JS block preserved verbatim from the frozen builtin defaults; legacy button (link/style/label) and card (media/text) field reads already reconciled. - 7 page templates: default, full-width, landing, article, blog-index, contact, auth. - 4 persona blocks (deleted masthead/photo_essay/pull_quote/issue_archive/ colophon — now overrides of navbar/gallery/quote/post-index/footer): cover_story, lookbook, drop_calendar, credits_ticker. - 5 dual-mode presets (newsprint+voltage light / ink-black+fluoro dark), all 19 tokens, dark tuned not inverted. - Bundled OFL woff2: Archivo Black (display), Inter (body), IBM Plex Mono (labels); fonts.json + assets/fonts/LICENSES.md. All font-family via var(--font-heading|body|mono, fallback). - Themed email-safe wrapper (tables, inline styles, streetwear defaults). - Master pages (navbar/footer/slot chrome) + seed demo site (OFFCUT label: home, about, blog + 3 posts, contact with data table + row_inserted → email-admins workflow, login) in fashion-label voice. - MID motion tier: marquee ticker, scroll reveal, duotone hover, scroll progress bar — all prefers-reduced-motion honored with static fallback, no canvas. - Icon packs (lucide, simple-icons) declared in plugin.mod + RECOMMENDED_ICONS. Verified: `make build` exit 0; `check-safety` 32 checks 19 ok 13 skip -> OK. Co-Authored-By: Claude Opus 4.8 --- RECOMMENDED_FONTS.md | 80 +-- RECOMMENDED_ICONS.md | 30 + assets/fonts/LICENSES.md | 17 + 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 blocks/blocks.yaml | 66 +- blocks/colophon.ninjatpl | 4 - blocks/colophon.schema.json | 22 - blocks/cover_story.ninjatpl | 32 +- blocks/cover_story.schema.json | 19 +- blocks/credits_ticker.ninjatpl | 10 + blocks/credits_ticker.schema.json | 21 + blocks/drop_calendar.ninjatpl | 23 + blocks/drop_calendar.schema.json | 45 ++ blocks/issue_archive.ninjatpl | 4 - blocks/issue_archive.schema.json | 23 - blocks/lookbook.ninjatpl | 24 + blocks/lookbook.schema.json | 37 ++ blocks/masthead.ninjatpl | 7 - blocks/masthead.schema.json | 26 - blocks/photo_essay.ninjatpl | 6 - blocks/photo_essay.schema.json | 47 -- blocks/pull_quote.ninjatpl | 7 - blocks/pull_quote.schema.json | 28 - fonts.json | 27 +- manifest.yaml | 604 ++++++++++++------ master_pages.json | 38 +- plugin.mod | 5 +- presets.json | 176 +++-- seed/seed.json | 229 +++++++ seed/workflows.json | 19 + templates/email/magazine-bold.ninjatpl | 67 +- templates/magazine-bold/article.ninjatpl | 24 +- templates/magazine-bold/auth.ninjatpl | 18 + templates/magazine-bold/blog-index.ninjatpl | 23 + templates/magazine-bold/contact.ninjatpl | 22 + templates/magazine-bold/default.ninjatpl | 16 +- templates/magazine-bold/full-width.ninjatpl | 16 +- templates/magazine-bold/landing.ninjatpl | 16 +- .../magazine-bold/announcement-bar.ninjatpl | 21 + .../magazine-bold/audio-embed.ninjatpl | 16 + .../magazine-bold/auth-form.ninjatpl | 33 + .../magazine-bold/auth-status.ninjatpl | 31 + .../magazine-bold/author-bio-hero.ninjatpl | 22 + .../magazine-bold/author-bio.ninjatpl | 14 + .../magazine-bold/blog-hero.ninjatpl | 24 + .../magazine-bold/breadcrumbs.ninjatpl | 13 + .../overrides/magazine-bold/button.ninjatpl | 11 +- .../overrides/magazine-bold/card.ninjatpl | 4 + .../magazine-bold/category-list.ninjatpl | 18 + .../magazine-bold/contact-card.ninjatpl | 17 + .../magazine-bold/contact-form.ninjatpl | 43 ++ .../magazine-bold/countdown.ninjatpl | 48 ++ .../overrides/magazine-bold/cta.ninjatpl | 14 + .../overrides/magazine-bold/divider.ninjatpl | 12 + .../magazine-bold/event-list.ninjatpl | 41 ++ .../overrides/magazine-bold/faq.ninjatpl | 17 + .../magazine-bold/feature-grid.ninjatpl | 17 + .../magazine-bold/featured-posts.ninjatpl | 24 + .../overrides/magazine-bold/footer.ninjatpl | 40 ++ .../overrides/magazine-bold/gallery.ninjatpl | 52 ++ .../overrides/magazine-bold/heading.ninjatpl | 8 +- .../overrides/magazine-bold/hero.ninjatpl | 39 ++ .../magazine-bold/hours-location.ninjatpl | 31 + .../overrides/magazine-bold/image.ninjatpl | 12 +- .../magazine-bold/logo-strip.ninjatpl | 15 + .../magazine-bold/menu-list.ninjatpl | 30 + .../overrides/magazine-bold/navbar.ninjatpl | 104 +++ .../magazine-bold/newsletter-signup.ninjatpl | 13 + .../magazine-bold/page-suggestions.ninjatpl | 21 + .../password-reset-form.ninjatpl | 13 + .../magazine-bold/popular-posts.ninjatpl | 16 + .../magazine-bold/post-hero.ninjatpl | 23 + .../magazine-bold/post-metadata.ninjatpl | 9 + .../overrides/magazine-bold/pricing.ninjatpl | 25 + .../overrides/magazine-bold/quote.ninjatpl | 8 + .../magazine-bold/related-posts.ninjatpl | 17 + .../magazine-bold/rich-section.ninjatpl | 13 + .../magazine-bold/rich-text.ninjatpl | 2 + .../magazine-bold/sidebar-nav.ninjatpl | 13 + .../magazine-bold/social-links.ninjatpl | 13 + .../overrides/magazine-bold/stats.ninjatpl | 48 ++ .../overrides/magazine-bold/team.ninjatpl | 21 + .../magazine-bold/testimonial.ninjatpl | 27 + .../overrides/magazine-bold/text.ninjatpl | 3 +- .../overrides/magazine-bold/timeline.ninjatpl | 21 + .../magazine-bold/utility-bar.ninjatpl | 10 + .../magazine-bold/video-embed.ninjatpl | 23 + 92 files changed, 2403 insertions(+), 585 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 delete mode 100644 blocks/colophon.ninjatpl delete mode 100644 blocks/colophon.schema.json create mode 100644 blocks/credits_ticker.ninjatpl create mode 100644 blocks/credits_ticker.schema.json create mode 100644 blocks/drop_calendar.ninjatpl create mode 100644 blocks/drop_calendar.schema.json delete mode 100644 blocks/issue_archive.ninjatpl delete mode 100644 blocks/issue_archive.schema.json create mode 100644 blocks/lookbook.ninjatpl create mode 100644 blocks/lookbook.schema.json delete mode 100644 blocks/masthead.ninjatpl delete mode 100644 blocks/masthead.schema.json delete mode 100644 blocks/photo_essay.ninjatpl delete mode 100644 blocks/photo_essay.schema.json delete mode 100644 blocks/pull_quote.ninjatpl delete mode 100644 blocks/pull_quote.schema.json create mode 100644 seed/seed.json create mode 100644 seed/workflows.json create mode 100644 templates/magazine-bold/auth.ninjatpl create mode 100644 templates/magazine-bold/blog-index.ninjatpl create mode 100644 templates/magazine-bold/contact.ninjatpl create mode 100644 templates/overrides/magazine-bold/announcement-bar.ninjatpl create mode 100644 templates/overrides/magazine-bold/audio-embed.ninjatpl create mode 100644 templates/overrides/magazine-bold/auth-form.ninjatpl create mode 100644 templates/overrides/magazine-bold/auth-status.ninjatpl create mode 100644 templates/overrides/magazine-bold/author-bio-hero.ninjatpl create mode 100644 templates/overrides/magazine-bold/author-bio.ninjatpl create mode 100644 templates/overrides/magazine-bold/blog-hero.ninjatpl create mode 100644 templates/overrides/magazine-bold/breadcrumbs.ninjatpl create mode 100644 templates/overrides/magazine-bold/card.ninjatpl create mode 100644 templates/overrides/magazine-bold/category-list.ninjatpl create mode 100644 templates/overrides/magazine-bold/contact-card.ninjatpl create mode 100644 templates/overrides/magazine-bold/contact-form.ninjatpl create mode 100644 templates/overrides/magazine-bold/countdown.ninjatpl create mode 100644 templates/overrides/magazine-bold/cta.ninjatpl create mode 100644 templates/overrides/magazine-bold/divider.ninjatpl create mode 100644 templates/overrides/magazine-bold/event-list.ninjatpl create mode 100644 templates/overrides/magazine-bold/faq.ninjatpl create mode 100644 templates/overrides/magazine-bold/feature-grid.ninjatpl create mode 100644 templates/overrides/magazine-bold/featured-posts.ninjatpl create mode 100644 templates/overrides/magazine-bold/footer.ninjatpl create mode 100644 templates/overrides/magazine-bold/gallery.ninjatpl create mode 100644 templates/overrides/magazine-bold/hero.ninjatpl create mode 100644 templates/overrides/magazine-bold/hours-location.ninjatpl create mode 100644 templates/overrides/magazine-bold/logo-strip.ninjatpl create mode 100644 templates/overrides/magazine-bold/menu-list.ninjatpl create mode 100644 templates/overrides/magazine-bold/navbar.ninjatpl create mode 100644 templates/overrides/magazine-bold/newsletter-signup.ninjatpl create mode 100644 templates/overrides/magazine-bold/page-suggestions.ninjatpl create mode 100644 templates/overrides/magazine-bold/password-reset-form.ninjatpl create mode 100644 templates/overrides/magazine-bold/popular-posts.ninjatpl create mode 100644 templates/overrides/magazine-bold/post-hero.ninjatpl create mode 100644 templates/overrides/magazine-bold/post-metadata.ninjatpl create mode 100644 templates/overrides/magazine-bold/pricing.ninjatpl create mode 100644 templates/overrides/magazine-bold/quote.ninjatpl create mode 100644 templates/overrides/magazine-bold/related-posts.ninjatpl create mode 100644 templates/overrides/magazine-bold/rich-section.ninjatpl create mode 100644 templates/overrides/magazine-bold/rich-text.ninjatpl create mode 100644 templates/overrides/magazine-bold/sidebar-nav.ninjatpl create mode 100644 templates/overrides/magazine-bold/social-links.ninjatpl create mode 100644 templates/overrides/magazine-bold/stats.ninjatpl create mode 100644 templates/overrides/magazine-bold/team.ninjatpl create mode 100644 templates/overrides/magazine-bold/testimonial.ninjatpl create mode 100644 templates/overrides/magazine-bold/timeline.ninjatpl create mode 100644 templates/overrides/magazine-bold/utility-bar.ninjatpl create mode 100644 templates/overrides/magazine-bold/video-embed.ninjatpl diff --git a/RECOMMENDED_FONTS.md b/RECOMMENDED_FONTS.md index 56eff17..7265416 100644 --- a/RECOMMENDED_FONTS.md +++ b/RECOMMENDED_FONTS.md @@ -1,56 +1,44 @@ -# Magazine Bold — Recommended fonts +# Magazine Bold — fonts -Per `themes/docs/FONTS.md` (wave-1 policy), this theme ships `fonts.json = []` -and provides CSS fallback stacks via `--font-heading`, `--font-body`, -`--font-mono`. The site admin assigns real fonts via the typography settings -panel; the recommendations below match the spec §5 intent. +This theme **bundles** a Latin subset of three open-licence (SIL OFL 1.1) +families, so it looks correct the moment it is activated — no admin setup +required. The bundled faces are declared in `fonts.json` and land in the +typography picker as `source=template` rows. -## Display (heading slot) +| Slot | Bundled family | Weights / styles | Role | +|---------|----------------|------------------------|---------------------------------------------------------------| +| Heading | Archivo Black | 400 normal | Massive condensed uppercase cover headlines and the wordmark | +| Body | Inter | 400 / 500 / 700 normal | Body copy, decks and UI text | +| Mono | IBM Plex Mono | 400 / 500 normal | Kickers, datelines, folio numbers, captions and button labels | -Spec calls for **PP Editorial New** (Regular Italic + Ultralight) at 180–280pt -for cover-story hits, with **Migra** as a secondary serif drop-in. Both are -commercial; the open-source picks below render the same italic-display energy. +The bundled woff2 files and their licence record live in `assets/fonts/` +(`LICENSES.md`). Every `font-family` in the theme is routed through +`var(--font-heading, ...)`, `var(--font-body, ...)` and `var(--font-mono, ...)` +with a fallback stack, so the layout is usable before any font is assigned and +the admin font picker stays in full control. -Open-source picks (assign one to **Heading**): +## Assigning the bundled faces -- `google:Playfair Display` — the closest open-source approximation of - PP Editorial New's contrast and italic axis. Open the typography panel, - pick "Playfair Display" from the Google Fonts tab, assign to Heading. -- `google:Fraunces` — a more contemporary alternative with optical sizing; - works well as the secondary serif (`font-serif-sub`). -- `google:Cormorant Garamond` — slightly higher-contrast classic serif if - you want a more traditional broadsheet feel. +1. In the BlockNinja admin, open **Settings → Theme → Typography**. +2. In the **Bundled** tab, assign **Archivo Black** to the *Heading* slot. +3. Assign **Inter** to the *Body* slot. +4. Assign **IBM Plex Mono** to the *Mono* slot. -Commercial picks (require admin licensing + upload): +## Optional swaps (Google Fonts tab) -- `upload:PP Editorial New` — purchase from pangrampangram.com, upload via the - font picker's "Upload" tab. -- `upload:Migra` — purchase from pangrampangram.com (Migra is a sibling - family), upload via the picker. +The identity is condensed-heavy display + neutral sans body + mono details. +Any of these drop in via the CSS variables with no template change: -## Body +- **Anton** (`google:Anton`) — a taller, more condensed display face for the + *Heading* slot; the loudest cover-headline option and the WO's alternate. +- **Archivo** (`google:Archivo`) — for the *Body* slot if you want the body to + echo the display family. +- **Space Grotesk** (`google:Space Grotesk`) — an alternative body / deck face. +- **Space Mono** (`google:Space Mono`) — a chunkier mono for the *Mono* slot. -Spec calls for **Inter** 16–18px with tight leading and generous tracking on -small-caps kickers. Inter is already in the curated Google Fonts list: +## Bundling a commercial display face (out of scope for Wave A) -- `google:Inter` — open the typography panel, pick "Inter" from the Google - Fonts tab, assign to Body. Aim for weights 400 + 600. - -## Mono (captions, folios, metadata only) - -Spec calls for **JetBrains Mono** at caption sizes for kickers, folios and -the colophon strip. Curated: - -- `google:JetBrains Mono` — open the typography panel, pick "JetBrains Mono" - from the Google Fonts tab, assign to Mono. Weight 400 is enough. - -Alternates: `google:Space Mono`, `google:IBM Plex Mono`. - -## How the theme degrades when nothing is picked - -The compiled CSS shipped with this `.so` uses the variables with sensible -fallbacks so a fresh install still reads like an editorial magazine: - -- `--font-heading` falls back to `"Playfair Display", "Cormorant Garamond", Georgia, "Times New Roman", serif` -- `--font-body` falls back to `"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif` -- `--font-mono` falls back to `"JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace` +If the brand locks in a licensed display face in place of Archivo Black, licence +and subset the woff2 set, drop it in `assets/fonts/`, and add the family + +variants to `fonts.json`. The CSS does not change — the same `var(--font-heading)` +consumer picks up whichever face an admin assigns. diff --git a/RECOMMENDED_ICONS.md b/RECOMMENDED_ICONS.md new file mode 100644 index 0000000..bea1c25 --- /dev/null +++ b/RECOMMENDED_ICONS.md @@ -0,0 +1,30 @@ +# Recommended Icons — Magazine Bold + +Magazine Bold is a typographic, rule-heavy theme. It leans on condensed +headlines, mono labels and heavy rules, not iconography, so it references only +two bundled packs. `plugin.mod` declares them in `required_icon_packs`; until +the loader auto-installs declared packs, an admin should confirm they are +enabled before activation. + +## Required packs + +- **lucide** — ships bundled with the CMS (v0.460). Enabled by default. Used + for chrome and UI glyphs (arrows, chevrons, close, check, play, map-pin, + navigation, mail, rss, star, flag). If icons render as empty boxes, open + `/admin/icons` and confirm **Lucide** is installed and enabled. +- **simple-icons** — ships bundled with the CMS (v14.0). Used only for brand + glyphs in `author-bio-hero`, `author-bio` and `social-links` (x, linkedin, + github). Confirm it is enabled at `/admin/icons` if brand marks are blank. + +## Icons used by the theme chrome and overrides + +All via the sprite pipeline (`` +or the `:::::` shorthand): + +`arrow-right`, `chevron-down`, `chevron-left`, `chevron-right`, `x`, `check`, +`play`, `download`, `map-pin`, `navigation`, `mail`, `rss`, `star`, `flag`, +`diamond`, `globe` (lucide); `x`, `linkedin`, `github` (simple-icons). + +Block content that stores an icon (feature-grid items, social links, contact +channels) may reference any installed pack as a `pack:name` string; the schemas +default to `lucide` so the theme renders without extra setup. diff --git a/assets/fonts/LICENSES.md b/assets/fonts/LICENSES.md new file mode 100644 index 0000000..966ce9d --- /dev/null +++ b/assets/fonts/LICENSES.md @@ -0,0 +1,17 @@ +# 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 | +|--------|-------|---------|--------| +| 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, )`. Archivo Black +drives the condensed display headlines, Inter the body, IBM Plex Mono the +kickers, datelines and captions. 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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 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. +# Magazine Bold theme block definitions (codeless .bnp, WO-TF-021). +# +# These are the theme's TRUE persona blocks — streetwear / fashion-drop +# furniture with no builtin equivalent. Everything the theme used to ship that +# duplicated a builtin (masthead, photo essay, pull quote, issue archive, +# colophon) is now a re-skin OVERRIDE of a builtin (navbar, gallery, quote, +# post-index, footer) under templates/overrides/magazine-bold/. Keys are fully +# qualified (magazine-bold:) because the codeless loader registers +# definitions verbatim. blocks: - - key: magazine-bold:masthead - title: Issue Masthead - description: Wordmark, issue number and tagline strip — sits at the top of every page. - category: layout - schema: masthead.schema.json - template: masthead.ninjatpl - key: magazine-bold:cover_story title: Cover Story - description: 12-column asymmetric hero with kicker, oversized display headline, deck and cover image. - category: content + description: Asymmetric magazine cover — mono folio kicker, massive condensed headline, deck and a duotone cover image with a shop/read CTA. + category: theme schema: cover_story.schema.json template: cover_story.ninjatpl - - key: magazine-bold:photo_essay - title: Photo Essay - description: Numbered photo-essay with asymmetric frame spans (half / full / tall) and mono captions. - category: content - schema: photo_essay.schema.json - template: photo_essay.ninjatpl - - key: magazine-bold:pull_quote - title: Pull Quote - description: Color-block pull quote with rotating accent (pink / blue / lime). - category: content - schema: pull_quote.schema.json - template: pull_quote.ninjatpl - - key: magazine-bold:issue_archive - title: Issue Archive - description: Numbered list of back-issues driven by a bucket query. - category: navigation - schema: issue_archive.schema.json - template: issue_archive.ninjatpl - - key: magazine-bold:colophon - title: Colophon - description: Mono caption strip with credits and an optional social row. - category: layout - schema: colophon.schema.json - template: colophon.ninjatpl + - key: magazine-bold:lookbook + title: Lookbook + description: Grid of duotone look frames with mono numbering, captions and optional shop links — the drop's lookbook spread. + category: theme + schema: lookbook.schema.json + template: lookbook.ninjatpl + - key: magazine-bold:drop_calendar + title: Drop Calendar + description: Dated list of upcoming and past drops — mono datelines, condensed names and a live/soon/sold status tag. + category: theme + schema: drop_calendar.schema.json + template: drop_calendar.ninjatpl + - key: magazine-bold:credits_ticker + title: Credits Ticker + description: Marquee strip of credits (photographer, stylist, cast) — MID-motion scroll, paused on hover, static under prefers-reduced-motion. + category: theme + schema: credits_ticker.schema.json + template: credits_ticker.ninjatpl diff --git a/blocks/colophon.ninjatpl b/blocks/colophon.ninjatpl deleted file mode 100644 index 7cec6be..0000000 --- a/blocks/colophon.ninjatpl +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/blocks/colophon.schema.json b/blocks/colophon.schema.json deleted file mode 100644 index 64f3583..0000000 --- a/blocks/colophon.schema.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Colophon", - "description": "Mono caption strip with credits and optional social row.", - "type": "object", - "properties": { - "credits": { - "type": "string", - "title": "Credits", - "description": "Mono-set credits block (rich text).", - "x-editor": "richtext" - }, - "showSocial": { - "type": "string", - "title": "Show Social Row", - "description": "Toggle the social row beneath the credits.", - "enum": ["true", "false"], - "default": "false", - "x-editor": "select" - } - } -} diff --git a/blocks/cover_story.ninjatpl b/blocks/cover_story.ninjatpl index 3c48542..bf9c791 100644 --- a/blocks/cover_story.ninjatpl +++ b/blocks/cover_story.ninjatpl @@ -1,11 +1,23 @@ -
-
-
-
{% if kicker %}
{{ kicker }}
{% endif %}
-

{% if headline %}{{ headline|safe }}{% else %}Cover story{% endif %}

-
{% if deck %}
{{ deck|safe }}
{% endif %}
-
- {% if image %}
{% endif %} - {% if link %}{% endif %} -
+{# cover_story (magazine-bold) — asymmetric cover: mono folio kicker, massive condensed headline, deck, duotone cover image, shop/read CTA. Fields: kicker, headline (richtext), deck (richtext), image (media), link, linkLabel. Image via {% img %} (media filter not registered in block render path). MID motion: mb-reveal + duotone hover, reduced-motion safe. #} +
+
+
+
{% if kicker %}
{{ kicker }}
{% endif %}
+

{% if headline %}{{ headline|safe }}{% else %}Cover story{% endif %}

+
{% if deck %}
{{ deck|safe }}
{% endif %}
+
+ {% if image %}
{% img image alt="" class="h-full w-full object-cover" layout="hero" %}
{% endif %} + {% if link %}{% endif %} +
+ diff --git a/blocks/cover_story.schema.json b/blocks/cover_story.schema.json index e25bf86..3e34821 100644 --- a/blocks/cover_story.schema.json +++ b/blocks/cover_story.schema.json @@ -1,19 +1,19 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Cover Story", - "description": "12-column asymmetric hero anchoring the issue landing page.", + "description": "Asymmetric magazine cover anchoring the drop / landing page.", "type": "object", "properties": { "kicker": { "type": "string", "title": "Kicker", - "description": "Small-caps label above the headline.", + "description": "Mono label above the headline (e.g. \"Drop 04 / Spring\").", "x-editor": "text" }, "headline": { "type": "string", "title": "Headline", - "description": "Display headline (rich text — allows italics).", + "description": "Massive display headline (rich text — allows italics).", "x-editor": "richtext" }, "deck": { @@ -25,14 +25,21 @@ "image": { "type": "string", "title": "Cover Image", - "description": "Hero image for the cover story.", + "description": "Duotone-treated cover image.", "x-editor": "media" }, "link": { "type": "string", - "title": "Read Story Link", - "description": "URL to the full feature.", + "title": "CTA Link", + "description": "URL to the full feature or the shop.", "x-editor": "link" + }, + "linkLabel": { + "type": "string", + "title": "CTA Label", + "description": "Button label.", + "x-editor": "text", + "default": "Read the story" } } } diff --git a/blocks/credits_ticker.ninjatpl b/blocks/credits_ticker.ninjatpl new file mode 100644 index 0000000..456a625 --- /dev/null +++ b/blocks/credits_ticker.ninjatpl @@ -0,0 +1,10 @@ +{# credits_ticker (magazine-bold) — marquee strip of credits. Fields: items[].label. MID motion: CSS marquee, paused on hover, static under prefers-reduced-motion. The track renders the item list TWICE so the -50% translate loops seamlessly (engine can't repeat N times). #} +{% if items %} +
+
+
+ {% for item in items %}{{ item.label }}{% endfor %}{% for item in items %}{{ item.label }}{% endfor %} +
+
+
+{% endif %} diff --git a/blocks/credits_ticker.schema.json b/blocks/credits_ticker.schema.json new file mode 100644 index 0000000..f01e9be --- /dev/null +++ b/blocks/credits_ticker.schema.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Credits Ticker", + "description": "Marquee strip of credits scrolling across a fluoro accent band.", + "type": "object", + "properties": { + "items": { + "type": "array", + "title": "Credits", + "description": "The credit lines shown in the ticker.", + "default": [], + "x-editor": "array", + "items": { + "type": "object", + "properties": { + "label": { "type": "string", "title": "Credit", "description": "One credit (e.g. \"Photography — Kit Sato\").", "x-editor": "text" } + } + } + } + } +} diff --git a/blocks/drop_calendar.ninjatpl b/blocks/drop_calendar.ninjatpl new file mode 100644 index 0000000..838a6c4 --- /dev/null +++ b/blocks/drop_calendar.ninjatpl @@ -0,0 +1,23 @@ +{# drop_calendar (magazine-bold) — dated list of drops: mono datelines, condensed names, a status tag. Fields: heading, intro, drops[].date/.name/.detail/.status(live|soon|sold)/.link/.linkLabel. Static, no motion. #} +
+
+ {% if heading %}

{{ heading }}

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

{{ intro }}

{% endif %} + {% if drops %} +
    + {% for drop in drops %} +
  • +
    {{ drop.date }}
    +
    +

    {% if drop.link %}{{ drop.name }}{% else %}{{ drop.name }}{% endif %}

    + {% if drop.detail %}

    {{ drop.detail }}

    {% endif %} +
    + {% if drop.status == "live" %}Live + {% elif drop.status == "sold" %}Sold out + {% elif drop.status == "soon" %}Coming soon{% endif %} +
  • + {% endfor %} +
+ {% else %}
No drops scheduled.
{% endif %} +
+
diff --git a/blocks/drop_calendar.schema.json b/blocks/drop_calendar.schema.json new file mode 100644 index 0000000..0c4aa45 --- /dev/null +++ b/blocks/drop_calendar.schema.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Drop Calendar", + "description": "Dated list of upcoming and past drops with a status tag.", + "type": "object", + "properties": { + "heading": { + "type": "string", + "title": "Heading", + "description": "Section headline.", + "x-editor": "text" + }, + "intro": { + "type": "string", + "title": "Intro", + "description": "Optional standfirst line.", + "x-editor": "textarea" + }, + "drops": { + "type": "array", + "title": "Drops", + "description": "The scheduled drops.", + "default": [], + "x-editor": "array", + "items": { + "type": "object", + "properties": { + "date": { "type": "string", "title": "Date", "description": "Dateline (e.g. \"14 MAR\").", "x-editor": "text" }, + "name": { "type": "string", "title": "Name", "description": "Drop name.", "x-editor": "text" }, + "detail": { "type": "string", "title": "Detail", "description": "Optional one-line detail.", "x-editor": "text" }, + "status": { + "type": "string", + "title": "Status", + "description": "Availability tag.", + "enum": ["live", "soon", "sold"], + "default": "soon", + "x-editor": "select" + }, + "link": { "type": "string", "title": "Link", "description": "Optional link to the drop.", "x-editor": "link" }, + "linkLabel": { "type": "string", "title": "Link Label", "description": "Link label.", "x-editor": "text", "default": "View drop" } + } + } + } + } +} diff --git a/blocks/issue_archive.ninjatpl b/blocks/issue_archive.ninjatpl deleted file mode 100644 index 14f1bb4..0000000 --- a/blocks/issue_archive.ninjatpl +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/blocks/issue_archive.schema.json b/blocks/issue_archive.schema.json deleted file mode 100644 index 142cd3a..0000000 --- a/blocks/issue_archive.schema.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Issue Archive", - "description": "Numbered list of back-issues driven by a bucket query.", - "type": "object", - "properties": { - "bucketSlug": { - "type": "string", - "title": "Issues Bucket", - "description": "Bucket that holds the issue rows.", - "x-editor": "bucket-picker" - }, - "limit": { - "type": "integer", - "title": "Limit", - "description": "How many issues to render.", - "x-editor": "number", - "minimum": 1, - "maximum": 50, - "default": 12 - } - } -} diff --git a/blocks/lookbook.ninjatpl b/blocks/lookbook.ninjatpl new file mode 100644 index 0000000..6da4b68 --- /dev/null +++ b/blocks/lookbook.ninjatpl @@ -0,0 +1,24 @@ +{# lookbook (magazine-bold) — grid of duotone look frames with mono numbering, captions and optional shop links. Fields: heading, intro, looks[].image/.caption/.credit/.link/.linkLabel. Image via {% img %} (media filter not registered in block render path). MID motion: duotone hover + mb-reveal, reduced-motion safe. #} +
+
+ {% if heading %}

{{ heading }}

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

{{ intro }}

{% endif %} + {% if looks %} +
+ {% for look in looks %} +
+ {% if look.image %}
{% img look.image alt=look.caption|default:"" class="h-full w-full object-cover" %}
{% endif %} +
+ {{ forloop.Counter|stringformat:"%02d" }} + + {% if look.caption %}{{ look.caption }}{% endif %} + {% if look.credit %}{{ look.credit }}{% endif %} + +
+ {% if look.link %}{{ look.linkLabel|default:"Shop the look" }}{% endif %} +
+ {% endfor %} +
+ {% else %}
No looks yet.
{% endif %} +
+
diff --git a/blocks/lookbook.schema.json b/blocks/lookbook.schema.json new file mode 100644 index 0000000..5ed660e --- /dev/null +++ b/blocks/lookbook.schema.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lookbook", + "description": "Grid of duotone look frames for a drop — numbered, captioned, optionally shoppable.", + "type": "object", + "properties": { + "heading": { + "type": "string", + "title": "Heading", + "description": "Section headline.", + "x-editor": "text" + }, + "intro": { + "type": "string", + "title": "Intro", + "description": "Optional standfirst line.", + "x-editor": "textarea" + }, + "looks": { + "type": "array", + "title": "Looks", + "description": "The lookbook frames.", + "default": [], + "x-editor": "array", + "items": { + "type": "object", + "properties": { + "image": { "type": "string", "title": "Image", "description": "Look photo.", "x-editor": "media" }, + "caption": { "type": "string", "title": "Caption", "description": "Look name / description.", "x-editor": "text" }, + "credit": { "type": "string", "title": "Credit", "description": "Optional credit line (model, photographer).", "x-editor": "text" }, + "link": { "type": "string", "title": "Shop Link", "description": "Optional link to the product.", "x-editor": "link" }, + "linkLabel": { "type": "string", "title": "Link Label", "description": "Shop link label.", "x-editor": "text", "default": "Shop the look" } + } + } + } + } +} diff --git a/blocks/masthead.ninjatpl b/blocks/masthead.ninjatpl deleted file mode 100644 index c50be68..0000000 --- a/blocks/masthead.ninjatpl +++ /dev/null @@ -1,7 +0,0 @@ -
-
- {% if issueNo %}No. {{ issueNo }}{% endif %} - {% if tagline %}{{ tagline }}{% endif %} -
- {% if date %}{{ date }}{% endif %} -
diff --git a/blocks/masthead.schema.json b/blocks/masthead.schema.json deleted file mode 100644 index 446ccb3..0000000 --- a/blocks/masthead.schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Issue Masthead", - "description": "Wordmark + folio bar across the top of the page.", - "type": "object", - "properties": { - "issueNo": { - "type": "string", - "title": "Issue Number", - "description": "Folio number (e.g. \"01\").", - "x-editor": "text" - }, - "tagline": { - "type": "string", - "title": "Tagline", - "description": "Issue volume / tagline line (e.g. \"Vol. 1 / Spring\").", - "x-editor": "text" - }, - "date": { - "type": "string", - "title": "Date", - "description": "Issue date or month.", - "x-editor": "text" - } - } -} diff --git a/blocks/photo_essay.ninjatpl b/blocks/photo_essay.ninjatpl deleted file mode 100644 index f84e0b9..0000000 --- a/blocks/photo_essay.ninjatpl +++ /dev/null @@ -1,6 +0,0 @@ -
-
- {% if title %}

{{ title }}

{% endif %} - {% if frames %}
{% for frame in frames %}{% if frame.image %}
{{ frame.caption }}
{{ forloop.Counter|stringformat:"%02d" }}{% if frame.caption %}{{ frame.caption }}{% endif %}
{% endif %}{% endfor %}
{% else %}
No frames yet.
{% endif %} -
-
diff --git a/blocks/photo_essay.schema.json b/blocks/photo_essay.schema.json deleted file mode 100644 index 8fd54f3..0000000 --- a/blocks/photo_essay.schema.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Photo Essay", - "description": "Numbered photo-essay scaffolding with asymmetric frame spans.", - "type": "object", - "properties": { - "title": { - "type": "string", - "title": "Essay Title", - "description": "Essay heading shown above the frames.", - "x-editor": "text" - }, - "frames": { - "type": "array", - "title": "Frames", - "description": "Ordered list of photo frames in the essay.", - "default": [], - "x-editor": "collection", - "items": { - "type": "object", - "properties": { - "image": { - "type": "string", - "title": "Image", - "description": "Frame image.", - "x-editor": "media" - }, - "caption": { - "type": "string", - "title": "Caption", - "description": "Mono-set caption.", - "x-editor": "text" - }, - "span": { - "type": "string", - "title": "Span", - "description": "Frame layout span.", - "enum": ["half", "full", "tall"], - "default": "half", - "x-editor": "select" - } - }, - "required": ["image"] - } - } - } -} diff --git a/blocks/pull_quote.ninjatpl b/blocks/pull_quote.ninjatpl deleted file mode 100644 index 6be9546..0000000 --- a/blocks/pull_quote.ninjatpl +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/blocks/pull_quote.schema.json b/blocks/pull_quote.schema.json deleted file mode 100644 index b104c6a..0000000 --- a/blocks/pull_quote.schema.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pull Quote", - "description": "Color-block pull quote that sits in the gutter or main column.", - "type": "object", - "properties": { - "quote": { - "type": "string", - "title": "Quote", - "description": "The quote body (rich text).", - "x-editor": "richtext" - }, - "attribution": { - "type": "string", - "title": "Attribution", - "description": "Who said it.", - "x-editor": "text" - }, - "accent": { - "type": "string", - "title": "Accent", - "description": "Which rotating accent to apply.", - "enum": ["pink", "blue", "lime"], - "default": "pink", - "x-editor": "select" - } - } -} diff --git a/fonts.json b/fonts.json index fe51488..7b6f547 100644 --- a/fonts.json +++ b/fonts.json @@ -1 +1,26 @@ -[] +[ + { + "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 eefb0f5..8b67dbd 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,5 +1,14 @@ -# Magazine Bold theme — codeless .bnp manifest (WO-WZ-021 Phase B1). +# Magazine Bold theme — codeless .bnp manifest (Theme Fleet Wave A, WO-TF-021). # Synthesized into manifest.pb by `ninja plugin build` (no plugin.wasm). +# +# Persona: a streetwear label / fashion-drop publication. Print-cover energy +# translated to drops and lookbooks — massive condensed uppercase headlines +# (Archivo Black), duotone imagery, grid-breaking overlap, mono datelines and +# fluoro accent slabs. Newsprint-plus-voltage by day, ink-black-plus-fluoro by +# night. Colour ALWAYS via hsl(var(--token)); font families ALWAYS via +# var(--font-heading|body|mono, ). No literal colours, no hardcoded +# families. Motion tier MID: JS effects (marquee, scroll reveal, duotone hover), +# no canvas, prefers-reduced-motion honored with static fallbacks. theme_presets: presets.json bundled_fonts: fonts.json master_pages: master_pages.json @@ -7,212 +16,441 @@ master_pages: master_pages.json system_templates: - key: magazine-bold title: Magazine Bold - description: "Editorial-print theme with oversized display type, asymmetric grids and rotating color-block accents for fashion, streetwear and culture publications." + description: "A streetwear label's cover-story chrome: massive condensed uppercase headlines, duotone imagery, grid-breaking overlap and fluoro accent slabs. Built for fashion drops, lookbooks and culture publications." page_templates: - system: magazine-bold key: default title: Default - description: "Standard editorial page with masthead, asymmetric main, footer colophon." - slots: [masthead, main, colophon] - - system: magazine-bold - key: landing - title: Issue Landing - description: "Cover-story hero plus issue navigation strip." - slots: [cover, secondary, main, colophon] - - system: magazine-bold - key: article - title: Article / Feature - description: "Long-form feature with deck, byline rail and pull-quote gutter." - slots: [masthead, deck, main, colophon] + description: "Standard page: masthead, single reading column, colophon footer." + slots: [header, main, footer] - system: magazine-bold key: full-width title: Full Bleed - description: "Edge-to-edge photo-essay layout." - slots: [masthead, main, colophon] + description: "Edge-to-edge for lookbooks, cover images and photo essays." + slots: [header, main, footer] + - system: magazine-bold + key: landing + title: Cover / Drop + description: "Cover-story stack: masthead, lead drop, river of stories, colophon." + slots: [masthead, lead, river, footer] + - system: magazine-bold + key: article + title: Feature + description: "Long-form feature: byline, drop-cap opener, reading column with a marginalia rail." + slots: [header, byline, main, marginalia, footer] + - system: magazine-bold + key: blog-index + title: Archive + description: "Drop archive: masthead, featured drop, and a river of stories." + slots: [header, featured, main, footer] + - system: magazine-bold + key: contact + title: Studio + description: "Contact layout with an optional aside for stockists, hours and location." + slots: [header, main, aside, footer] + - system: magazine-bold + key: auth + title: Members + description: "Centred members shell with wordmark and a fluoro rule." + slots: [main, footer] template_overrides: + # Chrome (4) + - { template: magazine-bold, block: navbar } + - { template: magazine-bold, block: footer } + - { template: magazine-bold, block: utility-bar } + - { template: magazine-bold, block: announcement-bar } + # Marketing (12) + - { template: magazine-bold, block: hero } + - { template: magazine-bold, block: feature-grid } + - { template: magazine-bold, block: rich-section } + - { template: magazine-bold, block: stats } + - { template: magazine-bold, block: testimonial } + - { template: magazine-bold, block: logo-strip } + - { template: magazine-bold, block: pricing } + - { template: magazine-bold, block: team } + - { template: magazine-bold, block: faq } + - { template: magazine-bold, block: timeline } + - { template: magazine-bold, block: cta } + - { template: magazine-bold, block: countdown } + # Primitives (11) - { template: magazine-bold, block: heading } - { template: magazine-bold, block: text } + - { template: magazine-bold, block: rich-text } - { template: magazine-bold, block: image } + - { template: magazine-bold, block: quote } + - { template: magazine-bold, block: divider } - { template: magazine-bold, block: button } + - { template: magazine-bold, block: card } + - { template: magazine-bold, block: gallery } + - { template: magazine-bold, block: video-embed } + - { template: magazine-bold, block: audio-embed } + # Commerce / local (6) + - { template: magazine-bold, block: menu-list } + - { template: magazine-bold, block: event-list } + - { template: magazine-bold, block: contact-form } + - { template: magazine-bold, block: contact-card } + - { template: magazine-bold, block: hours-location } + - { template: magazine-bold, block: social-links } + # Blog family (12) + - { template: magazine-bold, block: blog-hero } + - { template: magazine-bold, block: featured-posts } + - { template: magazine-bold, block: related-posts } + - { template: magazine-bold, block: popular-posts } + - { template: magazine-bold, block: category-list } + - { template: magazine-bold, block: post-hero } + - { template: magazine-bold, block: post-metadata } + - { template: magazine-bold, block: author-bio } + - { template: magazine-bold, block: author-bio-hero } + - { template: magazine-bold, block: newsletter-signup } + - { template: magazine-bold, block: breadcrumbs } + - { template: magazine-bold, block: sidebar-nav } + # Auth surface (3) + - { template: magazine-bold, block: auth-form } + - { template: magazine-bold, block: password-reset-form } + - { template: magazine-bold, block: auth-status } + # System (1) + - { template: magazine-bold, block: page-suggestions } email_wrappers: - magazine-bold css: input_css_append: | - /* =========================================================== - * Magazine Bold — theme utilities - * Appended to the Tailwind input via CSSManifest.InputCSSAppend. - * =========================================================== */ - - /* --- Font-slot classes (consume CMS-managed font variables) --- */ - .font-display { - font-family: var(--font-heading, "Playfair Display", "Cormorant Garamond", Georgia, "Times New Roman", serif); - font-feature-settings: "ss01", "ss02", "kern", "liga"; - font-optical-sizing: auto; - } - .font-serif-sub { - font-family: var(--font-heading, "Fraunces", "Playfair Display", Georgia, "Times New Roman", serif); - } - .font-sans { - font-family: var(--font-body, "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif); - } - .font-mono { - font-family: var(--font-mono, "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace); - } - - /* --- Display-size utilities ------------------------------- */ - /* text-folio: 220pt-equivalent oversized folio number / cover hit. - The clamp resolves to ~220px (~165pt) at 1440px, scaling down to 80px on mobile. */ - .text-folio { - font-family: var(--font-heading, "Playfair Display", Georgia, serif); - font-size: clamp(80px, 18vw, 240px); - line-height: 0.85; - letter-spacing: -0.04em; - font-weight: 200; - font-style: italic; - } - .text-deck { - font-family: var(--font-body, "Inter", system-ui, sans-serif); - font-size: clamp(28px, 3.2vw, 48px); - line-height: 1.15; - letter-spacing: -0.01em; - font-weight: 400; - } - .text-kicker { - font-family: var(--font-mono, "JetBrains Mono", monospace); - font-size: 12px; - text-transform: uppercase; - letter-spacing: 0.18em; - font-weight: 600; - } - - /* --- Hairline rule motif ---------------------------------- */ - .mb-hairline { border-color: hsl(var(--border)); border-width: 1px; } - .mb-hairline-top { border-top: 1px solid hsl(var(--border)); } - .mb-hairline-bottom { border-bottom: 1px solid hsl(var(--border)); } - - /* --- Asymmetric editorial grid ---------------------------- */ - .mb-grid-12 { - display: grid; - grid-template-columns: repeat(12, minmax(0, 1fr)); - gap: 1.5rem; - } - .mb-grid-asym-cover { - display: grid; - grid-template-columns: repeat(12, minmax(0, 1fr)); - gap: 2rem; - align-items: end; - } - .mb-col-folio { grid-column: 1 / span 2; } - .mb-col-headline { grid-column: 3 / span 7; } - .mb-col-deck { grid-column: 10 / span 3; } - .mb-col-image-wide { grid-column: 1 / -1; } - - @media (max-width: 1024px) { - .mb-grid-asym-cover { grid-template-columns: 1fr; gap: 1.25rem; } - .mb-col-folio, .mb-col-headline, .mb-col-deck { grid-column: 1 / -1; } - } - - /* --- Photo essay frame spans ------------------------------ */ - .mb-photo-grid { - display: grid; - grid-template-columns: repeat(12, minmax(0, 1fr)); - gap: 1.25rem; - } - .mb-frame-half { grid-column: span 6 / span 6; } - .mb-frame-full { grid-column: 1 / -1; } - .mb-frame-tall { grid-column: span 5 / span 5; grid-row: span 2; } - - @media (max-width: 768px) { - .mb-photo-grid { grid-template-columns: 1fr; } - .mb-frame-half, .mb-frame-full, .mb-frame-tall { grid-column: 1 / -1; grid-row: auto; } - } - - /* --- Color-block accent panels ---------------------------- */ - .colorblock-accent { - background-color: hsl(var(--accent)); - color: hsl(var(--accent-foreground)); - } - - /* --- Per-accent pull-quote variants ----------------------- * - * These let a pull_quote override the preset accent on a per-instance basis. - * They use literal HSL triples that match the spec §4 accent values so a - * "pink" pull-quote always reads pink even on the ink-blue preset. + /* === Magazine Bold theme — utility layer === + * + * Streetwear / fashion-drop identity: massive condensed uppercase headlines, + * heavy 2px rules, hard square edges, mono datelines and fluoro accent slabs. + * Colour is ALWAYS consumed via hsl(var(--token)); font families ALWAYS via + * var(--font-heading|body|mono, ). No literal colours, no hardcoded + * families. */ - [data-mb-accent="pink"] { --mb-accent-h: 330; --mb-accent-s: 95%; --mb-accent-l: 58%; } - [data-mb-accent="blue"] { --mb-accent-h: 220; --mb-accent-s: 100%; --mb-accent-l: 56%; } - [data-mb-accent="lime"] { --mb-accent-h: 78; --mb-accent-s: 90%; --mb-accent-l: 50%; } - [data-mb-accent] .mb-quote-bar { - background-color: hsl(var(--mb-accent-h) var(--mb-accent-s) var(--mb-accent-l)); - } - [data-mb-accent] .mb-quote-text { color: hsl(var(--foreground)); } - /* --- Drop-cap (heading override) -------------------------- */ - .mb-dropcap::first-letter { - font-family: var(--font-heading, "Playfair Display", Georgia, serif); - font-style: italic; - font-weight: 200; - float: left; - font-size: 5.5em; - line-height: 0.85; - padding-right: 0.08em; - margin-top: 0.04em; - color: hsl(var(--foreground)); - } + @layer utilities { + :root { + --mb-measure: 68ch; + --mb-rule: 2px solid hsl(var(--foreground)); + } - /* --- Body text override (Inter + margin folios) ----------- */ - .mb-body { - font-family: var(--font-body, "Inter", system-ui, sans-serif); - font-size: clamp(16px, 1.05vw, 18px); - line-height: 1.55; - letter-spacing: 0.005em; - color: hsl(var(--foreground)); - } + /* --- Font slots (consume CMS-managed font variables) --- */ + .font-display { font-family: var(--font-heading, "Archivo Black", "Arial Black", sans-serif); } + .font-sans { font-family: var(--font-body, "Inter", system-ui, sans-serif); } + .font-mono { font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); } - /* --- Squared ink button ----------------------------------- */ - .mb-button { - display: inline-flex; - align-items: center; - gap: 0.5rem; - background-color: hsl(var(--primary)); - color: hsl(var(--primary-foreground)); - font-family: var(--font-mono, "JetBrains Mono", monospace); - font-size: 12px; - letter-spacing: 0.14em; - text-transform: uppercase; - padding: 0.875rem 1.5rem; - border: 1px solid hsl(var(--primary)); - border-radius: 0; - transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease; - } - .mb-button:hover { - background-color: hsl(var(--accent)); - color: hsl(var(--accent-foreground)); - border-color: hsl(var(--accent)); - } - .mb-button:focus-visible { - outline: 2px solid hsl(var(--ring)); - outline-offset: 2px; - } + /* --- Page widths / reading measures --- */ + .mb-column { + max-width: var(--mb-measure); + margin-left: auto; margin-right: auto; + padding-left: 1rem; padding-right: 1rem; + } + .mb-wide { + max-width: 80rem; + margin-left: auto; margin-right: auto; + padding-left: 1rem; padding-right: 1rem; + } + .mb-article-grid { + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + max-width: 84rem; + margin-left: auto; margin-right: auto; + padding-left: 1rem; padding-right: 1rem; + } + @media (min-width: 1024px) { + .mb-article-grid { grid-template-columns: minmax(0, 68ch) 18rem; } + } - /* --- Caption (mono, used by image override + photo essay) -- */ - .mb-caption { - font-family: var(--font-mono, "JetBrains Mono", monospace); - font-size: 12px; - line-height: 1.45; - letter-spacing: 0.01em; - color: hsl(var(--muted-foreground)); - } + /* --- Prose reading column --- */ + .mb-prose { + max-width: var(--mb-measure); + margin-left: auto; margin-right: auto; + font-family: var(--font-body, "Inter", system-ui, sans-serif); + color: hsl(var(--foreground)); + line-height: 1.6; + } + .mb-prose p { margin: 0 0 1.15em 0; } + .mb-prose h1, .mb-prose h2, .mb-prose h3, .mb-prose h4 { + font-family: var(--font-heading, "Archivo Black", "Arial Black", sans-serif); + text-transform: uppercase; + letter-spacing: -0.01em; + line-height: 1.0; + color: hsl(var(--foreground)); + } + .mb-prose a { + color: hsl(var(--accent)); + text-decoration: underline; + text-decoration-thickness: 2px; + text-underline-offset: 2px; + } + .mb-prose blockquote { + font-weight: 500; + border-left: 4px solid hsl(var(--accent)); + padding-left: 1rem; margin-left: 0; + color: hsl(var(--foreground)); + } - /* --- Full-bleed image with numbered folio ----------------- */ - .mb-fullbleed { width: 100vw; max-width: 100vw; margin-left: 50%; transform: translateX(-50%); } - .mb-image-folio { - font-family: var(--font-mono, "JetBrains Mono", monospace); - font-size: 11px; - letter-spacing: 0.16em; - color: hsl(var(--muted-foreground)); - text-transform: uppercase; + /* --- Mono / tracked labels (kickers, eyebrows, meta) --- */ + .mb-caps { + font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); + text-transform: uppercase; + letter-spacing: 0.14em; + font-weight: 500; + font-size: 0.72rem; + line-height: 1.35; + } + + /* --- Display heading (Archivo Black, massive condensed caps) --- */ + .mb-heading { + font-family: var(--font-heading, "Archivo Black", "Arial Black", sans-serif); + text-transform: uppercase; + letter-spacing: -0.02em; + line-height: 0.95; + color: hsl(var(--foreground)); + } + .mb-underline { position: relative; padding-bottom: 0.28em; } + .mb-underline::after { + content: ""; + position: absolute; left: 0; right: 0; bottom: 0; + height: 4px; + background: hsl(var(--accent)); + } + + /* --- Heavy rules (bars, not hairlines) --- */ + hr.mb-rule, .mb-rule, .mb-hairline { + border: 0; + border-top: var(--mb-rule); + margin: 0; + } + .mb-hairline-top { border-top: var(--mb-rule); } + .mb-hairline-bottom { border-bottom: var(--mb-rule); } + + /* --- Body text override --- */ + .mb-body { + font-family: var(--font-body, "Inter", system-ui, sans-serif); + color: hsl(var(--foreground)); + line-height: 1.6; + } + + /* --- Inline accent link --- */ + .mb-link { + color: hsl(var(--accent)); + text-decoration: underline; + text-decoration-thickness: 2px; + text-underline-offset: 3px; + transition: color 120ms ease, text-decoration-color 120ms ease; + } + .mb-link:hover, .mb-link:focus-visible { color: hsl(var(--foreground)); } + + /* --- Button — fluoro / ink slab, square, uppercase mono --- */ + .mb-button, .mb-btn { + display: inline-block; + padding: 0.7rem 1.4rem; + font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); + font-size: 0.72rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.14em; + background-color: hsl(var(--foreground)); + color: hsl(var(--background)); + border: 2px solid hsl(var(--foreground)); + text-decoration: none; + cursor: pointer; + transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease; + } + .mb-button:hover, .mb-button:focus, .mb-btn:hover, .mb-btn:focus { + background-color: hsl(var(--accent)); + color: hsl(var(--accent-foreground)); + border-color: hsl(var(--accent)); + } + .mb-button:focus-visible, .mb-btn:focus-visible { + outline: 2px solid hsl(var(--ring)); + outline-offset: 2px; + } + + /* --- Panel / card — heavy 2px frame, hard edges, no shadow --- */ + .mb-panel, .mb-card { + border: 2px solid hsl(var(--foreground)); + background-color: hsl(var(--card)); + transition: border-color 120ms ease, transform 120ms ease; + } + .mb-panel:hover, .mb-card:hover { border-color: hsl(var(--accent)); } + + /* --- Form field — heavy border, square, accent focus --- */ + .mb-input { + width: 100%; + border: 2px solid hsl(var(--input)); + background-color: hsl(var(--background)); + color: hsl(var(--foreground)); + padding: 0.6rem 0.8rem; + font-family: var(--font-body, "Inter", system-ui, sans-serif); + font-size: 0.95rem; + border-radius: 0; + } + .mb-input::placeholder { color: hsl(var(--muted-foreground)); } + .mb-input:focus { + outline: none; + border-color: hsl(var(--accent)); + box-shadow: 0 0 0 2px hsl(var(--accent)); + } + + /* --- Figure / caption --- */ + .mb-figure { margin: 1.5rem 0; } + .mb-figure img { display: block; width: 100%; height: auto; } + .mb-figure figcaption { + margin-top: 0.6rem; + font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); + font-size: 0.72rem; + text-transform: uppercase; + letter-spacing: 0.08em; + color: hsl(var(--muted-foreground)); + } + .mb-caption { + font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); + font-size: 0.72rem; + line-height: 1.4; + letter-spacing: 0.04em; + color: hsl(var(--muted-foreground)); + } + + /* --- Drop cap — oversized Archivo Black accent first letter --- */ + .mb-dropcap p:first-of-type::first-letter { + font-family: var(--font-heading, "Archivo Black", "Arial Black", sans-serif); + color: hsl(var(--accent)); + float: left; + font-size: 4.6em; + line-height: 0.78; + padding-right: 0.1em; + padding-top: 0.02em; + margin-bottom: -0.08em; + } + + /* --- Marginalia rail (mono side notes, MID motion reveal) --- */ + .mb-marginalia { + font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); + font-size: 0.75rem; + line-height: 1.5; + color: hsl(var(--muted-foreground)); + } + .mb-marginalia aside { + margin: 0 0 1.5rem 0; + padding-left: 0.75rem; + border-left: var(--mb-rule); + opacity: 0; + animation: mb-fade-in 500ms ease forwards; + } + @keyframes mb-fade-in { to { opacity: 1; } } + @media (max-width: 768px) { + .mb-marginalia { + margin-top: 1.5rem; + border-top: var(--mb-rule); + padding-top: 1rem; + } + } + + /* --- Masthead wordmark --- */ + .mb-masthead-wordmark { + font-family: var(--font-heading, "Archivo Black", "Arial Black", sans-serif); + text-transform: uppercase; + letter-spacing: -0.03em; + color: hsl(var(--foreground)); + } + + /* --- Display size utilities (folio / deck / kicker) --- */ + .text-folio { + font-family: var(--font-heading, "Archivo Black", "Arial Black", sans-serif); + font-size: clamp(72px, 16vw, 220px); + line-height: 0.82; + letter-spacing: -0.04em; + text-transform: uppercase; + } + .text-deck { + font-family: var(--font-body, "Inter", system-ui, sans-serif); + font-size: clamp(24px, 3vw, 44px); + line-height: 1.12; + letter-spacing: -0.01em; + font-weight: 500; + } + .text-kicker { + font-family: var(--font-mono, "IBM Plex Mono", ui-monospace, monospace); + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.18em; + font-weight: 600; + } + + /* --- Asymmetric editorial grids (persona blocks) --- */ + .mb-grid-12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 1.5rem; } + .mb-photo-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 1.25rem; } + .mb-frame-half { grid-column: span 6 / span 6; } + .mb-frame-full { grid-column: 1 / -1; } + .mb-frame-tall { grid-column: span 5 / span 5; grid-row: span 2; } + @media (max-width: 768px) { + .mb-photo-grid { grid-template-columns: 1fr; } + .mb-frame-half, .mb-frame-full, .mb-frame-tall { grid-column: 1 / -1; grid-row: auto; } + } + + /* --- Color-block accent panel --- */ + .colorblock-accent { background-color: hsl(var(--accent)); color: hsl(var(--accent-foreground)); } + + /* --- Full-bleed image --- */ + .mb-fullbleed { width: 100vw; max-width: 100vw; margin-left: 50%; transform: translateX(-50%); } + + /* --- Duotone photo treatment (signature — persona blocks) --- */ + .mb-duotone { position: relative; } + .mb-duotone img { filter: grayscale(1) contrast(1.15); display: block; width: 100%; height: 100%; object-fit: cover; } + .mb-duotone::after { + content: ""; position: absolute; inset: 0; + background: hsl(var(--accent)); + mix-blend-mode: multiply; + opacity: 0.55; + transition: opacity 200ms ease; + pointer-events: none; + } + .mb-duotone:hover::after { opacity: 0.2; } + @media (prefers-reduced-motion: reduce) { + .mb-duotone:hover::after { opacity: 0.55; } + } + + /* --- Scroll reveal (MID motion; static fallback) --- */ + .mb-reveal { opacity: 0; transform: translateY(16px); transition: opacity 500ms ease, transform 500ms ease; } + .mb-reveal.mb-in { opacity: 1; transform: none; } + @media (prefers-reduced-motion: reduce) { + .mb-reveal { opacity: 1; transform: none; transition: none; } + } + .no-js .mb-reveal { opacity: 1; transform: none; } + + /* --- Marquee ticker (MID motion; paused on hover; static fallback) --- */ + .mb-marquee { overflow: hidden; white-space: nowrap; } + .mb-marquee-track { + display: inline-block; + will-change: transform; + animation: mb-marquee 22s linear infinite; + } + .mb-marquee:hover .mb-marquee-track { animation-play-state: paused; } + @keyframes mb-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } } + @media (prefers-reduced-motion: reduce) { + .mb-marquee-track { animation: none; } + } + + /* --- Reading-progress bar (fluoro; scroll-timeline; reduced-motion guard) --- */ + .mb-progress { + position: sticky; top: 0; + height: 4px; + background: hsl(var(--accent)); + transform-origin: 0 50%; + animation: mb-progress linear both; + animation-timeline: scroll(root block); + z-index: 50; + } + @keyframes mb-progress { from { transform: scaleX(0); } to { transform: scaleX(1); } } + @media (prefers-reduced-motion: reduce) { + .mb-progress { animation: none; transform: scaleX(0); } + } + + /* --- Per-instance pull-quote accent override (persona quote) --- */ + [data-mb-accent="pink"] { --mb-accent-h: 330; --mb-accent-s: 95%; --mb-accent-l: 58%; } + [data-mb-accent="blue"] { --mb-accent-h: 220; --mb-accent-s: 100%; --mb-accent-l: 56%; } + [data-mb-accent="lime"] { --mb-accent-h: 78; --mb-accent-s: 90%; --mb-accent-l: 50%; } + [data-mb-accent] .mb-quote-bar { background-color: hsl(var(--mb-accent-h) var(--mb-accent-s) var(--mb-accent-l)); } } diff --git a/master_pages.json b/master_pages.json index a43d8cd..ce0c3f1 100644 --- a/master_pages.json +++ b/master_pages.json @@ -1,25 +1,37 @@ [ { "key": "magazine-bold:default-master", - "title": "Magazine Bold — Default", - "page_templates": ["default", "article"], + "title": "Magazine Bold Default Master", + "page_templates": ["default", "full-width", "blog-index", "contact"], "blocks": [ - { "block_key": "navbar", "title": "Masthead Nav", "content": { "menuName": "main" }, "slot": "masthead", "sort_order": 0 }, - { "block_key": "magazine-bold:masthead", "title": "Issue Masthead", "content": { "issueNo": "01", "tagline": "Vol. 1 / Spring" }, "slot": "masthead", "sort_order": 1 }, - { "block_key": "slot", "title": "Main Slot", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 }, - { "block_key": "magazine-bold:colophon", "title": "Colophon", "content": { "showSocial": "true" }, "slot": "colophon", "sort_order": 0 } + { "block_key": "navbar", "title": "Masthead Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "OFFCUT" } }, "slot": "header", "sort_order": 0 }, + { "block_key": "slot", "title": "Featured", "content": { "slotName": "featured" }, "slot": "featured", "sort_order": 0 }, + { "block_key": "slot", "title": "Main Content", "content": { "slotName": "main", "placeholder": "Page content" }, "slot": "main", "sort_order": 0 }, + { "block_key": "slot", "title": "Aside", "content": { "slotName": "aside" }, "slot": "aside", "sort_order": 0 }, + { "block_key": "footer", "title": "Colophon", "content": { "layout": "columns", "companyName": "OFFCUT", "tagline": "A streetwear label and its cover stories.", "showNewsletter": true, "newsletterTitle": "Drop alerts", "newsletterDescription": "Get the next drop before it sells.", "copyright": "OFFCUT" }, "slot": "footer", "sort_order": 0 } ] }, { "key": "magazine-bold:landing-master", - "title": "Magazine Bold — Issue Landing", - "page_templates": ["landing", "full-width"], + "title": "Magazine Bold Cover Master", + "page_templates": ["landing"], "blocks": [ - { "block_key": "navbar", "title": "Masthead Nav", "content": { "menuName": "main" }, "slot": "masthead", "sort_order": 0 }, - { "block_key": "magazine-bold:cover_story", "title": "Cover Story", "content": { "issueNo": "01" }, "slot": "cover", "sort_order": 0 }, - { "block_key": "magazine-bold:issue_archive", "title": "Issue Archive", "content": { "bucketSlug": "issues" }, "slot": "secondary", "sort_order": 0 }, - { "block_key": "slot", "title": "Main Slot", "content": { "slotName": "main" }, "slot": "main", "sort_order": 0 }, - { "block_key": "magazine-bold:colophon", "title": "Colophon", "content": { "showSocial": "true" }, "slot": "colophon", "sort_order": 0 } + { "block_key": "navbar", "title": "Masthead Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "OFFCUT" } }, "slot": "masthead", "sort_order": 0 }, + { "block_key": "slot", "title": "Lead", "content": { "slotName": "lead", "placeholder": "Cover story" }, "slot": "lead", "sort_order": 0 }, + { "block_key": "slot", "title": "River", "content": { "slotName": "river", "placeholder": "Recent stories" }, "slot": "river", "sort_order": 0 }, + { "block_key": "footer", "title": "Colophon", "content": { "layout": "columns", "companyName": "OFFCUT", "tagline": "A streetwear label and its cover stories.", "showNewsletter": true, "newsletterTitle": "Drop alerts", "newsletterDescription": "Get the next drop before it sells.", "copyright": "OFFCUT" }, "slot": "footer", "sort_order": 0 } + ] + }, + { + "key": "magazine-bold:article-master", + "title": "Magazine Bold Feature Master", + "page_templates": ["article"], + "blocks": [ + { "block_key": "navbar", "title": "Masthead Navigation", "content": { "menuName": "main", "logoType": "text", "logoText": { "text": "OFFCUT" } }, "slot": "header", "sort_order": 0 }, + { "block_key": "slot", "title": "Byline", "content": { "slotName": "byline" }, "slot": "byline", "sort_order": 0 }, + { "block_key": "slot", "title": "Feature Body", "content": { "slotName": "main", "placeholder": "Feature body" }, "slot": "main", "sort_order": 0 }, + { "block_key": "slot", "title": "Marginalia Rail", "content": { "slotName": "marginalia" }, "slot": "marginalia", "sort_order": 0 }, + { "block_key": "footer", "title": "Colophon", "content": { "layout": "columns", "companyName": "OFFCUT", "tagline": "A streetwear label and its cover stories.", "copyright": "OFFCUT" }, "slot": "footer", "sort_order": 0 } ] } ] diff --git a/plugin.mod b/plugin.mod index e3ffb2f..bb2375d 100644 --- a/plugin.mod +++ b/plugin.mod @@ -3,7 +3,8 @@ name = "magazine-bold" display_name = "Magazine Bold" scope = "@themes" version = "0.2.0" -description = "Editorial-print theme with oversized display type, asymmetric grids and rotating color-block accents for fashion, streetwear and culture publications." +description = "A streetwear label's cover-story chrome: massive condensed uppercase headlines, duotone imagery, grid-breaking overlap and fluoro accent slabs. Newsprint plus voltage by day, ink-black plus fluoro by night. For fashion drops, lookbooks and culture publications." kind = "theme" categories = ["templates"] -tags = ["fashion", "lifestyle", "streetwear", "magazine", "bold", "display", "music", "editorial", "art"] +tags = ["fashion", "lifestyle", "streetwear", "magazine", "bold", "display", "editorial", "drops", "lookbook"] +required_icon_packs = ["lucide", "simple-icons"] diff --git a/presets.json b/presets.json index 52e8cef..b6f53ee 100644 --- a/presets.json +++ b/presets.json @@ -1,8 +1,8 @@ [ { - "id": "paper-pink", - "name": "Paper & Hot Pink", - "description": "Warm paper-tone background with a hot-pink editorial accent (default).", + "id": "newsprint-voltage", + "name": "Newsprint & Voltage", + "description": "The default. Off-white newsprint ground and near-black ink by day, ink-black with a fluoro hot-magenta accent by night.", "theme": { "mode": "both", "lightColors": { @@ -18,41 +18,41 @@ "secondaryForeground": "0 0% 8%", "muted": "38 20% 92%", "mutedForeground": "0 0% 40%", - "accent": "330 95% 58%", + "accent": "330 95% 55%", "accentForeground": "0 0% 100%", "destructive": "0 84% 55%", "destructiveForeground": "0 0% 100%", - "border": "0 0% 88%", - "input": "0 0% 88%", - "ring": "330 95% 58%" + "border": "0 0% 86%", + "input": "0 0% 86%", + "ring": "330 95% 55%" }, "darkColors": { - "background": "0 0% 8%", + "background": "0 0% 7%", "foreground": "38 30% 96%", "card": "0 0% 11%", "cardForeground": "38 30% 96%", "popover": "0 0% 11%", "popoverForeground": "38 30% 96%", "primary": "38 30% 96%", - "primaryForeground": "0 0% 8%", + "primaryForeground": "0 0% 7%", "secondary": "0 0% 14%", "secondaryForeground": "38 30% 96%", "muted": "0 0% 14%", - "mutedForeground": "38 10% 60%", - "accent": "330 95% 62%", - "accentForeground": "0 0% 8%", + "mutedForeground": "38 10% 62%", + "accent": "330 100% 64%", + "accentForeground": "0 0% 7%", "destructive": "0 84% 60%", "destructiveForeground": "0 0% 100%", - "border": "0 0% 18%", - "input": "0 0% 18%", - "ring": "330 95% 62%" + "border": "0 0% 20%", + "input": "0 0% 20%", + "ring": "330 100% 64%" } } }, { "id": "ink-blue", "name": "Ink & Electric Blue", - "description": "Same paper/ink neutrals with an electric-blue accent.", + "description": "The same newsprint/ink neutrals with an electric-blue accent — cooler, sportier drop energy.", "theme": { "mode": "both", "lightColors": { @@ -68,41 +68,41 @@ "secondaryForeground": "0 0% 8%", "muted": "38 20% 92%", "mutedForeground": "0 0% 40%", - "accent": "220 100% 56%", + "accent": "220 100% 54%", "accentForeground": "0 0% 100%", "destructive": "0 84% 55%", "destructiveForeground": "0 0% 100%", - "border": "0 0% 88%", - "input": "0 0% 88%", - "ring": "220 100% 56%" + "border": "0 0% 86%", + "input": "0 0% 86%", + "ring": "220 100% 54%" }, "darkColors": { - "background": "0 0% 8%", + "background": "0 0% 7%", "foreground": "38 30% 96%", "card": "0 0% 11%", "cardForeground": "38 30% 96%", "popover": "0 0% 11%", "popoverForeground": "38 30% 96%", "primary": "38 30% 96%", - "primaryForeground": "0 0% 8%", + "primaryForeground": "0 0% 7%", "secondary": "0 0% 14%", "secondaryForeground": "38 30% 96%", "muted": "0 0% 14%", - "mutedForeground": "38 10% 60%", - "accent": "220 100% 62%", - "accentForeground": "0 0% 8%", + "mutedForeground": "38 10% 62%", + "accent": "216 100% 66%", + "accentForeground": "0 0% 7%", "destructive": "0 84% 60%", "destructiveForeground": "0 0% 100%", - "border": "0 0% 18%", - "input": "0 0% 18%", - "ring": "220 100% 62%" + "border": "0 0% 20%", + "input": "0 0% 20%", + "ring": "216 100% 66%" } } }, { "id": "chalk-lime", "name": "Chalk & Lime", - "description": "Cooler chalk background with a lime accent — fresh, contemporary edge.", + "description": "Cooler chalk ground and an acid-lime accent — a fresh, contemporary edge. Deeper ink-black night desk.", "theme": { "mode": "both", "lightColors": { @@ -118,13 +118,13 @@ "secondaryForeground": "0 0% 8%", "muted": "60 12% 93%", "mutedForeground": "0 0% 40%", - "accent": "78 90% 50%", + "accent": "78 90% 45%", "accentForeground": "0 0% 8%", "destructive": "0 84% 55%", "destructiveForeground": "0 0% 100%", - "border": "0 0% 88%", - "input": "0 0% 88%", - "ring": "78 90% 50%" + "border": "0 0% 86%", + "input": "0 0% 86%", + "ring": "78 90% 45%" }, "darkColors": { "background": "0 0% 6%", @@ -138,14 +138,114 @@ "secondary": "0 0% 13%", "secondaryForeground": "60 15% 95%", "muted": "0 0% 13%", - "mutedForeground": "60 8% 60%", - "accent": "78 90% 55%", + "mutedForeground": "60 8% 62%", + "accent": "76 92% 56%", "accentForeground": "0 0% 8%", "destructive": "0 84% 60%", "destructiveForeground": "0 0% 100%", - "border": "0 0% 17%", - "input": "0 0% 17%", - "ring": "78 90% 55%" + "border": "0 0% 18%", + "input": "0 0% 18%", + "ring": "76 92% 56%" + } + } + }, + { + "id": "flux-green", + "name": "Flux Green", + "description": "Newsprint ground with a fluorescent green accent — rave-flyer energy. Ink-black night with a glowing lime-green pop.", + "theme": { + "mode": "both", + "lightColors": { + "background": "38 28% 95%", + "foreground": "0 0% 8%", + "card": "0 0% 100%", + "cardForeground": "0 0% 8%", + "popover": "0 0% 100%", + "popoverForeground": "0 0% 8%", + "primary": "0 0% 8%", + "primaryForeground": "38 28% 95%", + "secondary": "38 18% 90%", + "secondaryForeground": "0 0% 8%", + "muted": "38 18% 92%", + "mutedForeground": "0 0% 40%", + "accent": "150 82% 38%", + "accentForeground": "0 0% 100%", + "destructive": "0 84% 55%", + "destructiveForeground": "0 0% 100%", + "border": "0 0% 86%", + "input": "0 0% 86%", + "ring": "150 82% 38%" + }, + "darkColors": { + "background": "0 0% 7%", + "foreground": "38 28% 95%", + "card": "0 0% 11%", + "cardForeground": "38 28% 95%", + "popover": "0 0% 11%", + "popoverForeground": "38 28% 95%", + "primary": "38 28% 95%", + "primaryForeground": "0 0% 7%", + "secondary": "0 0% 14%", + "secondaryForeground": "38 28% 95%", + "muted": "0 0% 14%", + "mutedForeground": "38 10% 62%", + "accent": "146 90% 52%", + "accentForeground": "0 0% 7%", + "destructive": "0 84% 60%", + "destructiveForeground": "0 0% 100%", + "border": "0 0% 20%", + "input": "0 0% 20%", + "ring": "146 90% 52%" + } + } + }, + { + "id": "signal-orange", + "name": "Signal Orange", + "description": "Warm newsprint and a hazard-orange accent — hi-vis workwear energy. Ink-black night with a glowing tangerine pop.", + "theme": { + "mode": "both", + "lightColors": { + "background": "38 32% 95%", + "foreground": "0 0% 8%", + "card": "0 0% 100%", + "cardForeground": "0 0% 8%", + "popover": "0 0% 100%", + "popoverForeground": "0 0% 8%", + "primary": "0 0% 8%", + "primaryForeground": "38 32% 95%", + "secondary": "38 20% 90%", + "secondaryForeground": "0 0% 8%", + "muted": "38 20% 92%", + "mutedForeground": "0 0% 40%", + "accent": "18 100% 50%", + "accentForeground": "0 0% 100%", + "destructive": "0 84% 55%", + "destructiveForeground": "0 0% 100%", + "border": "0 0% 86%", + "input": "0 0% 86%", + "ring": "18 100% 50%" + }, + "darkColors": { + "background": "0 0% 7%", + "foreground": "38 32% 95%", + "card": "0 0% 11%", + "cardForeground": "38 32% 95%", + "popover": "0 0% 11%", + "popoverForeground": "38 32% 95%", + "primary": "38 32% 95%", + "primaryForeground": "0 0% 7%", + "secondary": "0 0% 14%", + "secondaryForeground": "38 32% 95%", + "muted": "0 0% 14%", + "mutedForeground": "38 10% 62%", + "accent": "22 100% 58%", + "accentForeground": "0 0% 7%", + "destructive": "0 84% 60%", + "destructiveForeground": "0 0% 100%", + "border": "0 0% 20%", + "input": "0 0% 20%", + "ring": "22 100% 58%" } } } diff --git a/seed/seed.json b/seed/seed.json new file mode 100644 index 0000000..83de4ec --- /dev/null +++ b/seed/seed.json @@ -0,0 +1,229 @@ +{ + "demo": true, + "settings": { + "merge": { + "companyName": "OFFCUT", + "tagline": "A streetwear label and its cover stories." + } + }, + "data_tables": [ + { + "key": "contact_submissions", + "name": "Studio Inbox", + "description": "Seeded contact-form submissions for the OFFCUT 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": "subject", "label": "Subject", "type": "text", "required": false }, + { "key": "message", "label": "Message", "type": "text", "required": true } + ] + } + ], + "pages": [ + { + "slug": "/", + "title": "OFFCUT", + "template_key": "landing", + "blocks": [ + { + "block_key": "magazine-bold:cover_story", + "title": "Cover", + "slot": "lead", + "sort_order": 1, + "content": { + "kicker": "Drop 04 / Spring", + "headline": "Cut from the offcuts", + "deck": "One drop. Made from last season's leftover cloth. Nothing reordered.", + "link": "/drops", + "linkLabel": "See the drop" + } + }, + { + "block_key": "magazine-bold:credits_ticker", + "title": "Credits", + "slot": "lead", + "sort_order": 2, + "content": { "items": [ { "label": "Photography Kit Sato" }, { "label": "Styling Remi Vaughn" }, { "label": "Cast Ari, Dune, Lux" }, { "label": "Set The Old Print Works" } ] } + }, + { + "block_key": "heading", + "title": "River heading", + "slot": "river", + "sort_order": 1, + "content": { "text": "From the studio", "level": 2 } + }, + { + "block_key": "card", + "title": "Story: Offcut method", + "slot": "river", + "sort_order": 2, + "content": { "layout": "vertical", "title": "The offcut method", "text": "

How we build a full drop from cloth other people threw away.

", "link": "/blog/the-offcut-method", "linkLabel": "Read the story" } + }, + { + "block_key": "card", + "title": "Story: Casting the block", + "slot": "river", + "sort_order": 3, + "content": { "layout": "vertical", "title": "Casting off the block", "text": "

We cast the drop on the street it was cut on. Here is who showed up.

", "link": "/blog/casting-off-the-block", "linkLabel": "Read the story" } + }, + { + "block_key": "card", + "title": "Story: One colour", + "slot": "river", + "sort_order": 4, + "content": { "layout": "vertical", "title": "One colour, all season", "text": "

Why the whole drop runs a single fluoro accent, and nothing else.

", "link": "/blog/one-colour-all-season", "linkLabel": "Read the story" } + }, + { + "block_key": "magazine-bold:drop_calendar", + "title": "Drops", + "slot": "river", + "sort_order": 5, + "content": { + "heading": "Drop calendar", + "intro": "Every drop is one run. When it is gone it is gone.", + "drops": [ + { "date": "14 MAR", "name": "Offcut 04", "detail": "Spring drop. Reworked shell jackets and cargo sets.", "status": "live" }, + { "date": "02 MAY", "name": "Offcut 05", "detail": "Workwear capsule. Signed up members first.", "status": "soon" }, + { "date": "09 FEB", "name": "Offcut 03", "detail": "Winter drop. Fleece and heavy cotton.", "status": "sold" } + ] + } + }, + { + "block_key": "newsletter-signup", + "title": "Drop alerts", + "slot": "river", + "sort_order": 6, + "content": { "title": "Drop alerts", "description": "One email per drop. We tell you when, and nothing else.", "listSlug": "main", "source": "home", "submitText": "Get alerts", "successMessage": "You are on the list. Watch your inbox before the next drop.", "placeholder": "you@example.com", "layout": "card" } + } + ] + }, + { + "slug": "/about", + "title": "About", + "template_key": "default", + "blocks": [ + { "block_key": "heading", "title": "Heading", "slot": "main", "sort_order": 1, "content": { "text": "About OFFCUT", "level": 1 } }, + { "block_key": "rich-text", "title": "Bio", "slot": "main", "sort_order": 2, "content": { "html": "

OFFCUT is a streetwear label built on leftover cloth. We buy end-of-run rolls that mills cannot sell and cut them into short, numbered drops.

Every drop is one run. We do not reorder. When a size is gone it stays gone. That keeps the work honest and keeps the waste down.

The studio is in an old print works. The photography, the lookbook and the label all come out of the same room.

" } }, + { + "block_key": "magazine-bold:lookbook", + "title": "Lookbook", + "slot": "main", + "sort_order": 3, + "content": { + "heading": "Drop 04 lookbook", + "intro": "Shot on the block, styled in one colour.", + "looks": [ + { "caption": "Shell jacket, offcut nylon", "credit": "On Ari" }, + { "caption": "Cargo set, reworked cotton", "credit": "On Dune" }, + { "caption": "Fleece half-zip", "credit": "On Lux" } + ] + } + }, + { "block_key": "quote", "title": "Quote", "slot": "main", "sort_order": 4, "content": { "style": "block", "align": "center", "quote": "We only make what we can cut from what is already there.", "attribution": "OFFCUT studio" } } + ] + }, + { + "slug": "/blog", + "title": "Stories", + "template_key": "blog-index", + "blocks": [ + { "block_key": "card", "title": "Featured: Offcut method", "slot": "featured", "sort_order": 1, "content": { "layout": "horizontal", "title": "The offcut method", "text": "

How we build a full drop from cloth other people threw away. The lead story this season.

", "link": "/blog/the-offcut-method", "linkLabel": "Read the story" } }, + { "block_key": "card", "title": "Post: Casting the block", "slot": "main", "sort_order": 1, "content": { "layout": "vertical", "title": "Casting off the block", "text": "

We cast the drop on the street it was cut on.

", "link": "/blog/casting-off-the-block", "linkLabel": "Read on" } }, + { "block_key": "card", "title": "Post: One colour", "slot": "main", "sort_order": 2, "content": { "layout": "vertical", "title": "One colour, all season", "text": "

Why the whole drop runs a single fluoro accent.

", "link": "/blog/one-colour-all-season", "linkLabel": "Read on" } }, + { "block_key": "card", "title": "Post: The offcut method again", "slot": "main", "sort_order": 3, "content": { "layout": "vertical", "title": "Numbering the run", "text": "

Every piece is numbered by hand. Here is why that matters.

", "link": "/blog/the-offcut-method", "linkLabel": "Read on" } } + ] + }, + { + "slug": "/blog/the-offcut-method", + "title": "The offcut method", + "template_key": "article", + "parent_slug": "/blog", + "blocks": [ + { "block_key": "text", "title": "Byline", "slot": "byline", "sort_order": 1, "content": { "text": "

By the OFFCUT studio. Drop 04.

" } }, + { "block_key": "text", "title": "Lead", "slot": "main", "sort_order": 1, "content": { "text": "

Most labels start with a colour card and a factory minimum. We start with a phone call about a roll of cloth that nobody wants. That is the whole method, and it shapes everything after it.

" } }, + { "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "

Mills end every season with rolls they cannot sell. Wrong shade, short length, last year's spec. We buy those rolls cheap and we buy them whole. Then we cut a drop around what we actually have.

That means the run is short. A roll makes forty jackets, not four hundred. When it is cut, the pattern retires. The next drop uses a different cloth and looks like a different label, because it is a different cloth.

People ask us to reorder. We cannot, and we would not. The limit is the point.

" } }, + { "block_key": "quote", "title": "Gutter quote", "slot": "marginalia", "sort_order": 1, "content": { "style": "pull", "align": "left", "quote": "A roll makes forty jackets, not four hundred.", "attribution": "Drop 04" } } + ] + }, + { + "slug": "/blog/casting-off-the-block", + "title": "Casting off the block", + "template_key": "article", + "parent_slug": "/blog", + "blocks": [ + { "block_key": "text", "title": "Byline", "slot": "byline", "sort_order": 1, "content": { "text": "

By the OFFCUT studio. Drop 04.

" } }, + { "block_key": "text", "title": "Lead", "slot": "main", "sort_order": 1, "content": { "text": "

We do not book models through an agency. We cast the drop on the street it was cut on, and we shoot the people who show up. Here is how the casting went.

" } }, + { "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "

We put up one poster outside the print works. It gave a date, a time, and nothing else. On the day, thirty people came by. Some knew the label. Most did not.

We shot everyone in the same set, in the same light, in one colour. No hair, no retouching past the basics. The clothes had to carry the frame, so we let them.

The cast in the lookbook are the people who came. That is the only rule we kept.

" } }, + { "block_key": "quote", "title": "Gutter quote", "slot": "marginalia", "sort_order": 1, "content": { "style": "pull", "align": "left", "quote": "We shoot the people who show up.", "attribution": "Casting" } } + ] + }, + { + "slug": "/blog/one-colour-all-season", + "title": "One colour, all season", + "template_key": "article", + "parent_slug": "/blog", + "blocks": [ + { "block_key": "text", "title": "Byline", "slot": "byline", "sort_order": 1, "content": { "text": "

By the OFFCUT studio. Drop 04.

" } }, + { "block_key": "text", "title": "Lead", "slot": "main", "sort_order": 1, "content": { "text": "

The whole drop runs one accent colour. It is on the labels, the site, the poster and the tape on the boxes. There is nothing else, and that is on purpose.

" } }, + { "block_key": "rich-text", "title": "Body", "slot": "main", "sort_order": 2, "content": { "html": "

A single colour makes a small label look sure of itself. It also makes the work easy to spot in a feed full of noise. One fluoro hit, black ink, newsprint paper, and you know it is us before you read a word.

Next drop the colour changes. The system stays. One accent, held all the way through, then swapped clean for the next run.

" } }, + { "block_key": "quote", "title": "Gutter quote", "slot": "marginalia", "sort_order": 1, "content": { "style": "pull", "align": "left", "quote": "One fluoro hit, black ink, newsprint paper.", "attribution": "House style" } } + ] + }, + { + "slug": "/contact", + "title": "Studio", + "template_key": "contact", + "blocks": [ + { + "block_key": "contact-form", + "title": "Write to the studio", + "slot": "main", + "sort_order": 1, + "content": { + "heading": "Write to the studio", + "description": "Stockist requests, press, or a question about a drop. We read everything.", + "submitLabel": "Send", + "successMessage": "Thank you. Your note reached the studio. We will write back.", + "fields": [ + { "name": "name", "label": "Your name", "type": "text", "required": true, "width": "half" }, + { "name": "email", "label": "Email", "type": "email", "required": true, "width": "half" }, + { "name": "subject", "label": "Subject", "type": "text", "required": false, "width": "full" }, + { "name": "message", "label": "Your note", "type": "textarea", "required": true, "width": "full" } + ], + "formConfig": { "enabled": true, "captchaEnabled": false, "targetTable": "contact_submissions" } + } + }, + { + "block_key": "contact-card", + "title": "Other ways to reach us", + "slot": "aside", + "sort_order": 1, + "content": { + "heading": "Elsewhere", + "description": "The studio inbox is best. These work too.", + "columns": 1, + "channels": [ + { "icon": "lucide:mail", "label": "Email", "value": "studio@offcut.example", "link": "mailto:studio@offcut.example" }, + { "icon": "lucide:map-pin", "label": "Studio", "value": "The Old Print Works", "link": "" } + ] + } + } + ] + }, + { + "slug": "/login", + "title": "Members", + "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": "

Members get the next drop before it goes public.

" } } + ] + } + ], + "menu_items": [ + { "menu": "main", "label": "Home", "page_slug": "/", "sort_order": 1 }, + { "menu": "main", "label": "Stories", "page_slug": "/blog", "sort_order": 2 }, + { "menu": "main", "label": "About", "page_slug": "/about", "sort_order": 3 }, + { "menu": "main", "label": "Studio", "page_slug": "/contact", "sort_order": 4 } + ] +} diff --git a/seed/workflows.json b/seed/workflows.json new file mode 100644 index 0000000..4328c35 --- /dev/null +++ b/seed/workflows.json @@ -0,0 +1,19 @@ +{ + "workflows": [ + { + "key": "contact_notify_admins", + "name": "Studio note 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/email/magazine-bold.ninjatpl b/templates/email/magazine-bold.ninjatpl index 36858d1..fc6d741 100644 --- a/templates/email/magazine-bold.ninjatpl +++ b/templates/email/magazine-bold.ninjatpl @@ -5,44 +5,59 @@ + {{ 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; } + a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; } + @media only screen and (max-width: 620px) { + .email-container { width: 100% !important; max-width: 100% !important; } + .content-padding { padding-left: 24px !important; padding-right: 24px !important; } + } + - - {% if preview_text %}
{{ preview_text }}
{% endif %} + + {% if preview_text %}
{{ preview_text }}
{% endif %} -
- - +