← ARTSABERS

ARTSABERS — Editorial Content Spec Build Brief

BBAS18 Build Brief ARTSABERS

ARTSABERS — Editorial Content Spec · Build Brief (DRAFT)

Draft for operator review before publishing to design CPT. Same shape as the MAS52 Form Component spec — standalone reference artefact, no page-level context.


Purpose

Standalone spec artefact — the reading-surface pattern library that every ARTSABERS blog/editorial template inherits from. Same role for editorial content that MAS52 plays for forms. Locks reading typography, long-form patterns (pull-quotes, callouts, inline images, drop-cap), article chrome (byline, tag row, share row, related-articles card), and the two body-density modes the single flexible article template needs to hold — announcement (short News items) vs long-form (Lore & Short Stories + editorial Guides & Tips).

Not tied to a page. New design_type = editorial-patterns term. Referenced by the article template + blog archive + (optional) category page from this spec on.

Direction

Kyber Hull — apply SAS1 tokens. Reuse the spec-header pattern from MAS52 verbatim (dark carbon + ember bottom border + ember drop-shadow glow + generous padding). Reuse the panel-joint hairline background pattern from MAS51/MAS57 for section grounds. Fieldset border pattern from MAS52 for framed pattern panels in the appendix. Zero border-radius sitewide. Manrope at body scale for the reading surface; Space Grotesk at display for hero + section eyebrows + drop-cap.

Chrome vs copy discipline (LOCKED)

Editorial content is where the Kyber Hull brand voice can breathe — but the discipline holds:

Scope — what this spec covers

  1. Reading typography scale — full type stack for the article body (H1 through small caption)
  2. Long-form content patterns — pull-quote, blockquote, callout box, inline image + caption, image pair, full-bleed image break, drop-cap, section break, lists
  3. Article chrome — hero variants, byline row, tag chip row, share row, related-articles card, author profile card
  4. Two body-density modes — announcement (compact hero, tight body, minimal chrome) vs long-form (full-bleed hero, generous imagery, all inline patterns available). Same DOM/CSS, differentiated by modifier + content authorial density.
  5. Inline advert block — long-form-only conversion pattern; writer inserts at editorial discretion. Four variants: product / category / newsletter / promotion.

Sections (top to bottom)

1. Spec header

2. Worked example — Announcement mode

Renders a compact News post using the spec. Real content, not lorem.

Title: Order Delay Update: Production & Fulfilment Status
Category chip: ARTSABERS News (ember-hairline chip, uppercase, letter-spaced)
Hero: compact panel-joint background variant (~360px), eyebrow shows category, title in ember display, one-line subtitle, byline appears IN the hero (Chloe · 8 Jul 2026 · 3 min read).
Body: ~250 words. No pull-quote, no callout, no inline images. Runs single-column, max-width 68ch. Two H2 subsections. Ends with a small "Signed, Matthew" bylined sign-off.
Footer: hairline separator → tag chip row → share row → related-articles 3-up card. No author profile card (in any mode).

3. Worked example — Long-form editorial (Guides & Tips)

Renders an educational how-to piece using the spec. Real content.

Title: Forged in Fire and Beskar: Why You Need Both a Saber and a Helmet
Category chip: Lightsaber Guides & Tips
Hero: compact panel-joint background variant (~460px — slightly taller than announcement to accommodate longer title + subtitle). Eyebrow category chip, title, two-line subtitle, byline (Chloe · 12 Jun 2026 · 8 min read).
Body: ~1,400 words. Drop-cap on opening paragraph (Space Grotesk display, ember, 5 lines tall). Section breaks with ember hairline every ~350 words. One inline callout box mid-body ("KEY TAKEAWAY — a duelling helmet complements the blade…"). One inline image + caption around the 60% scroll depth. Numbered list showing the three complementary pairings. Terminal sign-off paragraph.
Footer: hairline separator → tag chip row → share row → related-articles 3-up card.

4. Worked example — Long-form editorial (Lore & Short Stories)

Renders a narrative/lore piece using the full pattern library. Most intensive mode.

Title: Claim the Blade. Wear the Mask. Live the Myth.
Category chip: Lore & Short Stories
Hero: full-bleed atmospheric variant (~700px). Real AI-generated Kyber Hull hull-plate imagery (or narrative-appropriate scene — describe archetype, not named character), dark overlay stack (62/72/88%), corner ember bloom. Ember eyebrow category chip, title in cinematic Space Grotesk display (larger scale), one-sentence subtitle, byline row appearing after ~200px scroll (not IN hero — content-first entry).
Body: ~1,800 words. Drop-cap on first paragraph — Space Grotesk display type, 5 lines tall, ember colour, letter-spaced. Section breaks with ember hairline. One large pull-quote at ~40% scroll, one inline image pair at ~60% scroll, one full-bleed image break at ~75% scroll. Blockquote at ~85% scroll (attributed). Terminal sign-off in italic.
Footer: hairline separator → tag chip row → share row → related-articles 3-up card. Also: a subtle "Continue the story →" band at the very bottom linking to the next post in the same category (design-phase spec — implementation optional).

5. Patterns appendix

Each pattern rendered in isolation, in a bordered content-group panel (MAS52 fieldset border). Section legend on top border. Composable — any article can use any subset.

Panels:

Two body-density modes — how they differ

Announcement mode (used for News):

Long-form mode (used for Guides & Tips + Lore & Short Stories):

Same DOM. Differentiated by:

  1. .article--announcement vs .article--long-form modifier on the root
  2. Content authorial density (writer’s editorial call, not template forcing)
  3. Optional .hero--full-bleed modifier on the hero (long-form only)

Article chrome — copy decisions locked

Reading typography scale

Role Font Weight Size (desktop) Line-height
Hero display (full-bleed) Space Grotesk 500 72px 1.05
Hero display (compact) Space Grotesk 500 48px 1.1
Article body H2 Space Grotesk 500 32px 1.2
Article body H3 Space Grotesk 500 24px 1.25
Article body H4 Space Grotesk 500 20px 1.3
Body large (lead paragraph) Manrope 400 20px 1.6
Body regular Manrope 400 18px 1.65
Body small (captions, meta) Manrope 400 14px 1.5
Pull-quote large Space Grotesk 500 40px 1.2
Pull-quote inline Space Grotesk 500 26px 1.3
Drop-cap Space Grotesk 500 ~90px (5 lines tall) 1.0
Category chip Manrope 500 uppercase 12px 1.0
Tag chip Manrope 400 uppercase 11px 1.0

Body max-width: 68ch (roughly 640px at 18px body). Full-bleed images break out. Hero content max-width matches body.

Reuse from prior mockups

What this spec deliberately does NOT include

Copy locks (worked examples — verbatim)

Announcement mode worked example

Guides & Tips worked example

Lore & Short Stories worked example

Placeholder imagery for the spec artefact

Kyber Hull styling notes


Gutenberg block mapping (audit for backend-dev)

The article template is built on Gutenberg. Content patterns render from the_content() (writer inserts blocks per post); chrome patterns render from single.php around it. This audit maps every editorial pattern to its block or template-level render. Applies the no-theme.json rule from httpdocs/CLAUDE.md — all Gutenberg options via PHP filters (add_theme_support, register_block_style, register_block_type), never theme.json.

Content patterns → Gutenberg (writer inserts in post_content)

Editorial pattern Gutenberg approach Build effort
H2 / H3 / H4 core/heading none — theme CSS
Body paragraph core/paragraph none
Drop-cap opener core/paragraph with built-in dropCap attribute none — theme CSS on .has-drop-cap p::first-letter
Pull-quote large core/pullquote (default centred) none — theme CSS
Pull-quote inline core/pullquote with alignment left / right style variation via register_block_style
Blockquote (attributed / unattributed) core/quote (cite element for attribution) none
Callout box (KEY TAKEAWAY / DID YOU KNOW / CAUTION) Custom ACF block with variant dropdown one small ACF block
Inline image + caption core/image (native caption) none
Image pair core/columns with 2× core/image none
Full-bleed image break core/image with alignfull add_theme_support('align-wide') in functions.php + .alignfull CSS
Section break (ember hairline) core/separator default style variation for ember colour
Section break dots core/separator with is-style-dots (core-provided) none
Bulleted list core/list unordered none — ember bullet via theme CSS
Numbered list core/list ordered none — ember number via theme CSS
Inline advert block (4 variants: product / category / newsletter / promotion — long-form only) Custom ACF block with variant dropdown one custom block

Chrome patterns → template-level (single.php composes around post_content)

Chrome element Rendered by Data source
Hero (compact) single.php header title, excerpt, featured image, category term, post date, calculated read time
Hero (full-bleed atmospheric) single.php variant (opt-in via _hero_variant postmeta or category-conditional) same + featured image at full-bleed
Byline row (avatar + name + date + read time + category chip) single.php header get_the_author_meta(), get_the_date(), get_the_terms(cat), custom camcom_read_time()
Tag chip row single.php footer get_the_tags()
Share row (X · Facebook · Reddit · Copy link) single.php footer custom render + JS navigator.share for mobile
Related-articles 3-up card single.php footer WP_Query filtered by category, exclude current, posts_per_page=3. Bypass via _hide_related postmeta.
Continue-the-story band (Lore only, per-post opt-in) single.php footer, conditional get_adjacent_post() filtered by same category
Page nav + footer header.php + footer.php site-wide template parts

Custom build needed at conversion phase

  1. Callout box block — one custom ACF block with variant dropdown (KEY TAKEAWAY / DID YOU KNOW / CAUTION). CAUTION variant swaps ember hairline for forge-red.
  2. Advert block — one custom ACF block with variant dropdown (product / category / newsletter / promotion). Long-form only; announcement mode never renders it. Writer inserts at editorial discretion, typical placement every ~600-800 words, never immediately after an H2, never before the final section. Full-width band that slightly breaks out of the 68ch reading column. Ember hairline top + bottom + warm bloom + matte carbon ground — Bloomberg-feature "sponsored by" module character, not display advertising.

    CSS class naming — MUST avoid ad-blocker cosmetic-filter vocabulary. Locked class name: .product-feature (with variant modifiers --product, --category, --newsletter, --offer — do NOT use --promotion since promotion is a substring-matched target in some filter lists; use --offer for time-boxed offers). Do NOT use .advert-*, .ad-*, .sponsor-*, .promo-*, .banner-*, .commercial-*, .marketing-* — all common cosmetic-filter substring matches that cause the block to load then disappear on DOM-ready in browsers with uBlock Origin, AdBlock Plus, Brave Shields, or Fanboy’s Annoyances list. Rename lesson: 2026-07-10 iteration on MAS65/MAS66 discovered the .advert-block class was being hidden by ad blockers; renamed to .product-feature after operator confirmation.

    Each variant fields:

    • product: featured image + eyebrow + product name + short editorial line + price + CTA link
    • category: hero image + eyebrow + collection name + short editorial line + CTA link
    • newsletter: eyebrow + one-line editorial pitch + email input + subscribe CTA
    • promotion: eyebrow + promo copy + CTA link (timeboxed via block postmeta if needed)
  3. camcom_read_time( $post_id ) helper — word_count / 200 wpm. Reused by hero byline + related-articles card meta line.
  4. Share row partial — small PHP partial rendering X · Facebook · Reddit · Copy link buttons + inline JS navigator.share fallback for mobile.
  5. Related-articles partial — WP_Query by category, exclude current, LIMIT 3, respect _hide_related postmeta override (default: show).
  6. Continue-the-story partialget_adjacent_post() by category (per-post opt-in via _show_continue postmeta; recommended for Lore & Short Stories).
  7. _hero_variant postmeta + admin control — dropdown (compact / full-bleed) on the post editor sidebar, defaults to compact.

Style variations required (all register_block_style(), per no-theme.json rule)

Theme support declarations (functions.php)

Everything else — core blocks with theme CSS. No custom work.


Decisions locked (operator review, 2026-07-10)

  1. Drop-cap = Gutenberg core dropCap paragraph attribute — writer applies at their discretion when authoring. Theme styles .has-drop-cap p::first-letter with the Kyber Hull treatment (Space Grotesk display, ember, 5 lines tall). No template-level automation.
  2. Share row: X · Facebook · Reddit · Copy link — icon-only desktop, native share on mobile
  3. Reading time enabled in byline (auto-calc, 200 wpm baseline)
  4. No comment section anywhere in the article template
  5. Related-articles card ON by default across all modes; per-post override via _hide_related postmeta wired by backend-dev at build-out
  6. No author profile card in any mode — hero byline row is enough; expanded author bio explicitly omitted
  7. Callout box variants: KEY TAKEAWAY · DID YOU KNOW · CAUTION (CAUTION uses forge-red hairline)
  8. Category chip: uppercase name, no "Category:" prefix
  9. Inline advert block available in long-form only (custom ACF block, four variants: product / category / newsletter / promotion). Writer inserts at editorial discretion. Never rendered in announcement mode. Bloomberg-feature "sponsored by" module character, not display advertising.