← 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:

  • Copy surfaces (article body, hero title, hero subtitle, section eyebrows, callout body, pull-quote content, related-articles teasers, empty-state prose) — brand voice welcome. Warm cinematic workshop metaphor allowed. First-person to the reader in the hero. Section eyebrows can lean poetic.
  • Chrome surfaces (byline label "Written by", "Read time", category chip, tag chips, "Related reading", "Share", "Continue reading", pagination labels) — plain English, no clever renames. A customer skimming has to understand instantly what each label means.

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

  • Same pattern as MAS52 verbatim: dark carbon background (NOT panel-tone), ember bottom border, ember drop-shadow glow, generous internal padding.
  • Eyebrow (ember display, letter-spaced uppercase): EDITORIAL PATTERNS · v1.0
  • Title (Space Grotesk display): The reading-surface pattern library.
  • Sub-line body (Manrope, muted): "Every ARTSABERS blog article inherits from this spec. Two body-density modes — announcement + long-form — share the same DOM. Every pattern below composes freely."
  • Small metadata line at the bottom right (muted): "Ref MAS?? · Kyber Hull v4.2.1 · Manrope + Space Grotesk"

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:

  • Typography scale — one panel showing H1, H2, H3, H4, body large, body regular, body small, caption, all with pixel sizes + line-heights annotated in the margin (muted display type notes).
  • Pull-quote — large — full-width variant, 40px display type, ember hairline top + bottom, cinematic centred layout.
  • Pull-quote — inline — half-width variant, sits pulled to the right or left within body flow, 26px display, ember-hairline side border.
  • Blockquote — attributed + unattributed variants side-by-side. Manrope body, left indent, ember hairline left border.
  • Callout box — ember-bordered card with ember icon chip top-left, uppercase display eyebrow (e.g. "KEY TAKEAWAY"), one-paragraph body. Three variants: KEY TAKEAWAY, DID YOU KNOW, CAUTION (forge-red hairline instead of ember for the CAUTION variant).
  • Inline image + caption — image at body max-width, caption below in small muted body, ember eyebrow "Fig. 1" style.
  • Image pair — two images side-by-side at body max-width, gutter between, one caption per image, mobile stacks vertically.
  • Full-bleed image break — image at 100vw, breaks out of body max-width, subtle ember hairline top + bottom, optional muted caption below at body max-width.
  • Drop-cap — Space Grotesk display, ember, 5 lines tall, letter-spaced. Implemented via Gutenberg core dropCap paragraph attribute; theme styles .has-drop-cap p::first-letter. Writer applies at their discretion when authoring — no template-level automation, no per-article enforcement.
  • Section break — ember hairline, 60px vertical margin, no text. Alternate variant: small "· · ·" ember dots.
  • Bulleted list — ember bullet marker.
  • Numbered list — ember number, Space Grotesk display, letter-spaced.
  • Byline row — avatar (36×36 circle) + author name (display) + separator dot + date (muted body) + separator dot + reading time (muted body) + separator dot + category chip.
  • Tag chip row — 4–6 tag chips, uppercase Manrope small, ember hairline border, chrome-warm text on carbon ground.
  • Share row — four buttons horizontal: X (Twitter), Facebook, Reddit, Copy link. Icon-only on desktop, native share overlay on mobile via Web Share API. NO LinkedIn, NO WhatsApp, NO SMS separate button.
  • Related-articles card — 3-up card, each card = featured image + category chip + title + reading time. Ember-hairline separators. Section eyebrow: "MORE FROM THE BLOG".

Two body-density modes — how they differ

Announcement mode (used for News):

  • Hero: compact panel-joint variant, ~360px
  • Byline: appears IN hero
  • Body: ~200–400 words typical
  • Drop-cap available via Gutenberg dropCap attribute — writer applies on the opening paragraph when appropriate
  • No pull-quote
  • No inline callout box
  • No inline images (or one at most)
  • Related-articles card ON by default (per-post override via _hide_related postmeta — backend-dev wires the admin toggle at build-out)
  • No author profile card
  • No advert block — announcement mode never renders inline adverts (too short + timely for conversion moments)
  • Footer: tag row + share row + related-articles card

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

  • Hero: compact panel-joint (Guides ~460px) OR full-bleed atmospheric (Lore & Short Stories ~700px)
  • Byline: below hero (long-form) or after scroll (full-bleed atmospheric)
  • Body: 1,000–2,500 words typical
  • Drop-cap available via Gutenberg dropCap attribute — writer applies on the opening paragraph when appropriate
  • Pull-quotes available
  • Callout boxes available
  • Inline images / image pairs / full-bleed breaks available
  • Related-articles card ON by default (per-post override same postmeta as announcement mode)
  • No author profile card
  • Inline advert block available — writer inserts at editorial discretion, typical placement every ~600-800 words, never immediately after an H2, never before the final section
  • Footer: tag row + share row + related-articles card

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

  • Byline label: no explicit "Written by" — just avatar + name.
  • Reading time: enabled — auto-calc from word count (200 wpm baseline). Label: "8 min read" (plain).
  • Category chip: category name in uppercase display, letter-spaced, ember hairline. Not a prefix like "Category: Guides".
  • Tag chip row: uppercase Manrope small, plain tag names.
  • Share row buttons: icon-only on desktop, no labels. Native share on mobile.
  • Related-articles section eyebrow: MORE FROM THE BLOG (plain).
  • Comment section: explicitly omitted from spec. Never appears in any worked example. Never in the appendix. Article template does not render a comment section under any mode.
  • Author profile card: explicitly omitted from spec. Byline row in the hero + related-articles card are the article’s chrome — no expanded author biography anywhere on the article page.

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

  • Spec-header pattern — MAS52 verbatim (dark carbon + ember-glow bottom border + ember drop-shadow + generous padding)
  • Panel-joint hairline background — MAS51/MAS57 (for section grounds under the worked examples)
  • Fieldset border content-group — MAS52 (framing the pattern appendix panels)
  • Ember hairline separator — MAS43/44/51/57/60/62 (section break pattern)
  • Full-bleed atmospheric hero — MAS62 verbatim (real Kyber Hull hull-plate imagery + dark overlay stack + corner ember bloom, overflow: visible on the hero container)
  • Compact page header — MAS51/MAS57 (announcement + Guides & Tips heroes)
  • Ember display type + chrome-warm body — SAS1
  • Site nav + footer — MAS51 (worked examples show full page chrome to demonstrate context)

What this spec deliberately does NOT include

  • NO comment section — anywhere. Not in worked examples, not in appendix, not in any pattern.
  • NO share-count numbers on the share row — clean icon-only buttons, no vanity numbers.
  • NO estimated reading progress bar at the top of the article. Reading time in byline is enough.
  • NO email newsletter signup inline in the article body — email capture lives in the site footer (per audit finding #5).
  • NO ad slots — ARTSABERS blog is owned content, no third-party ads planned.
  • NO cross-sell product strips inline in the article body — cross-sell belongs on product + cart, not editorial. Related-content ties to other articles only.
  • NO "trending" or "most-read" widget in the article chrome. Related-articles card is enough.
  • NO brand-voice renames of chrome — categories, tags, share labels, "Related" all stay plain English (per the chrome-vs-copy rule).

Copy locks (worked examples — verbatim)

Announcement mode worked example

  • Title: Order Delay Update: Production & Fulfilment Status
  • Category chip: ARTSABERS News
  • Byline: Chloe · 8 Jul 2026 · 3 min read
  • Subtitle: "A candid update on where your order sits and when you’ll hear from us next."
  • Body: two ~120-word sections — Section 1 titled "Where we are right now", Section 2 titled "What happens next". Sign-off: "Signed, Matthew (ARTSABERS)".

Guides & Tips worked example

  • Title: Forged in Fire and Beskar: Why You Need Both a Saber and a Helmet
  • Category chip: Lightsaber Guides & Tips
  • Byline: Chloe · 12 Jun 2026 · 8 min read
  • Subtitle: "The blade tells one side of the story. The helmet tells the other. Here’s why the pair is more than the sum of its parts."
  • Body sections: "The blade alone" · "The helmet alone" · "Why the pair works" · "Three pairings we love". Callout at mid-body: "KEY TAKEAWAY — A helmet turns a saber from a solo prop into a costume. Costume-ready shifts your collection from displayable to wearable."
  • Sign-off: "May the force be with you both."

Lore & Short Stories worked example

  • Title: Claim the Blade. Wear the Mask. Live the Myth.
  • Category chip: Lore & Short Stories
  • Byline: Chloe · 3 May 2026 · 12 min read
  • Hero subtitle: "One night. One choice. One decision that would change everything."
  • Drop-cap paragraph opener: The workshop smelled of ozone and warm metal…
  • Pull-quote (~40% scroll): "You do not choose the blade. The blade chooses the hand that carries it."
  • Blockquote (~85% scroll, attributed): "The Kyber sings to those who listen." — Ancient Jedi Codex, unnumbered fragment
  • Sign-off: — Chloe

Placeholder imagery for the spec artefact

  • Worked example 3’s full-bleed hero — use one of the accepted Kyber Hull hull-plate variants OR a new Nano generation using the locked style-frame ("Cinematic sci-fi photograph, moody atmospheric lighting with warm orange ember accents from one side, matte carbon-black tones, editorial magazine composition, no visible text or logos, no bright highlights, subtle depth, Bloomberg feature magazine style. [+ narrative-appropriate scene]").
  • Guides & Tips worked example inline image — a real ARTSABERS saber + helmet product image pair from live catalogue (via switch_to_blog(10)).
  • Related-articles cards — pull three real live posts from the ARTSABERS blog by title + featured image URL. Fetch these fresh at authoring time.
  • Author avatar (Chloe) in byline row — placeholder circle with initial "C" in ember on carbon; real avatar goes in at build-out.

Kyber Hull styling notes

  • Ember accent on: category chip hairline, pull-quote hairline, callout ember-bordered card, drop-cap, list markers, section-break hairline, hero eyebrow, related-articles card hairlines, tag chip hairline.
  • Forge-red (#E63929, from MAS52) reserved for CAUTION callout variant only. Not otherwise used in editorial context.
  • Zero border-radius everywhere.
  • Body ground: #131313 (SAS1 background). Sections alternate between plain carbon + panel-joint hairline pattern (rest surface) and delicate hull-plate atmospheric imagery (hero + full-bleed image breaks).
  • Panel-joint hairline background under the pattern appendix section grounds.

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)

  • core/pullquoteinline-left, inline-right variations
  • core/separatorember-hairline (default), is-style-dots (core-provided)
  • core/list → ember-marker (may auto-apply via theme CSS on base class; if not, register variation)

Theme support declarations (functions.php)

  • add_theme_support( 'align-wide' ) — enables alignwide + alignfull on core/image (needed for full-bleed image break)
  • add_theme_support( 'wp-block-styles' ) — inherits sensible core block defaults; brand CSS overrides
  • add_theme_support( 'editor-styles' ) + add_editor_style() — writer sees the Kyber Hull typography in the editor preview

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.