Studio Nope Official - design system reference

Introduction

Studio Nope Official is a HubSpot CMS theme built as a design system. One set of tokens - colour, type, spacing, radius, shadow - is defined once in theme settings and consumed by every template and by every module in the theme. Change the accent colour and the buttons, links, icon washes and highlighted pricing card all move together.

This page is the reference for that system. It is not a manual of screenshots: every module below is rendered live, on this page, in each of the variations a buyer chooses between - full width and contained, square and rounded, light ground and dark, with media and without. Under each preview is the HubL that produced it, and under that the complete field list read straight out of the module source.

How to read a module chapter

  1. What it is for - one paragraph on the job the module does.
  2. Worth knowing - the behaviour that is not obvious from the field names.
  3. Variations - the module rendered live, once per meaningful setting combination, each with the HubL that made it.
  4. Fields - every field, grouped as the editor groups them, marked Content or Style, with its type, its choices and its default.
Back to top

Requirements

  • A HubSpot account with CMS Hub Starter or above. Themes and custom modules are not available on the free tier.
  • Marketing Hub or Free forms for the hero form and modal form options.
  • A Google Maps JavaScript API key if you use the Google Map module. Every other module works with no third-party account.
  • An icon library, chosen in theme settings. Material Symbols is the default and loads from Google Fonts; nine libraries are supported.
  • No build step, no npm, no external CSS framework. The theme is plain HubL and CSS and can be edited in the HubSpot design manager.

Browser support follows HubSpot: current versions of Chrome, Edge, Firefox and Safari. Scroll reveals use IntersectionObserver and degrade to visible content where it is absent.

Back to top

Getting started

  1. 1
    Install the theme. From the marketplace listing, or upload the folder with the HubSpot CLI: hs upload studio-nope-theme studio-nope-theme.
  2. 2
    Pick a preset. Settings, then Content, then Themes. Open Studio Nope Official and set Theme Preset. Six ship with the theme; Custom unlocks every token individually.
  3. 3
    Set the header and footer. Navigation Pro and Footer Pro are global partials - edit them once and every page follows. Republish existing pages after editing a partial.
  4. 4
    Create a page. Content, then Website Pages, then Create. Pick a template from the template list.
  5. 5
    Drag modules in. Every module in this reference is available in the page editor sidebar. The variations below tell you which settings produce which look.
Back to top

Presets

A preset is a complete set of token values. Switching preset restyles the whole site in one publish - it is not a colour swatch, it changes type, radius, shadow and spacing as well.

PresetType GroundAccentCharacter
LightGeistWhiteNear black Tight radii, hairline borders, almost no shadow.
DarkInterCharcoalOff white Elevation by glow rather than drop shadow.
MidnightInterWhiteBlue Corporate. Soft shadows, medium radii.
WarmPlayfair Display and Source Sans 3Cream TerracottaEditorial. Serif headings, generous spacing.
ForestDM SansOff whiteTeal Softest of the six. Larger radii, gentle shadows.
CustomYour choiceYour choice Your choiceEvery token below becomes an individual setting.
Worth knowing
  • Start on the preset closest to your brand, then switch to Custom. Custom inherits nothing, so switching first means filling in every value from scratch.
  • The values shown throughout this page are read live from the preset this page is published on, so they follow whatever you have set.
  • Presets are site-wide. There is no per-page preset - use the colour scheme field on individual modules for a dark section on a light site.
Back to top

Colour tokens

Every colour in the theme resolves to one of these custom properties. Modules never hardcode a hex value - a field either picks a token by name or writes a custom value into one. The swatches below are painted with the live variable, and the value beside each one is read out of the page at runtime, so this table is always current.

--color-primary Buttons, headings, primary surfaces
--color-secondary Supporting fills and subtle elements
--color-accent The one colour that says this is the brand
--color-background Page ground
--color-body-bg Body surface behind sections
--color-cards-bg Card fill, used by every card style group
--color-foreground Body text
--color-muted Secondary text, captions, disabled states
--color-border Hairlines, table rules, card borders
--color-success Tick marks in pricing and comparison tables
--color-warning Partial marks, caution states
--color-error Form validation, destructive actions

Gradients

--gradient-1
--gradient-2
--gradient-3
Worth knowing
  • Brand Colors in theme settings writes these tokens. General Style writes an older, overlapping set kept for backward compatibility - prefer Brand Colors.
  • Card style groups on modules offer theme or custom. Theme means --color-cards-bg; custom writes a per-module value and stops following the preset.
  • Accent Wash is a low-opacity accent used behind circular icons and highlighted table columns. Set it whenever you change the accent.
Back to top

Typography

Two families - a heading face and a body face - plus a monospace face for code. Each heading level has its own size, weight, line height and letter spacing, set per level in theme settings rather than derived from a ratio, so a preset can break the scale where it needs to.

h1 / --font-size-h1

The quick brown fox

h2 / --font-size-h2

The quick brown fox

h3 / --font-size-h3

The quick brown fox

h4 / --font-size-h4

The quick brown fox

h5 / --font-size-h5
The quick brown fox
h6 / --font-size-h6
The quick brown fox
body / --font-size-body

The quick brown fox jumps over the lazy dog. Body copy sets the reading measure for every module that carries a paragraph.

small / --font-size-sm

The quick brown fox jumps over the lazy dog.

TokenLive value Used by
--font-family-headingEvery heading tag and module heading field
--font-family-bodyBody copy, buttons, form labels
--font-family-monoInline code and code blocks
--font-size-displayHero Heading Size display
--font-size-h1h1
--font-size-h2h2
--font-size-h3h3
--font-size-bodyParagraphs
--font-size-smCaptions, badges, table cells
--font-size-xsEyebrows, chips
--line-height-tightHeadings
--line-height-normalBody
--line-height-relaxedLong-form article bodies
--letter-spacing-tightLarge headings
--letter-spacing-wideEyebrows and uppercase labels
Worth knowing
  • Modules that expose a Heading Tag field change the tag only. The size follows the theme scale for that tag, which is how the theme keeps one h1 per page without changing how the page looks.
  • Heading Size on the hero is a separate override that decouples visual size from tag.
  • Custom preset loads the two Google fonts you pick. The five named presets load a fixed pair, so switching preset changes the faces.
Back to top

Spacing, radius and shadow

One nine-step spacing ramp drives every gap, padding and margin choice in the theme. Module fields never take pixels for spacing - they take a step on this ramp, so a preset can retune the whole site density in one place.

--space-xs
--space-sm
--space-md
--space-lg
--space-xl
--space-2xl
--space-3xl
--space-4xl
--space-5xl

Six semantic aliases sit on top of the ramp so a section can ask for the right rhythm rather than the right number: --space-section, --space-module, --space-component, --space-element, --space-tight and --space-micro.

Radius

Every module that offers a Border Radius field maps none, sm, md, lg, xl onto these. That is why the same module looks square on the Light preset and soft on Forest without any per-page change.

none
sm
md
lg
xl
2xl
full

Shadow

sm
md
lg
xl
2xl
inner
Back to top

Buttons and forms

Five button styles are defined once in theme settings and used by every module that has a button field - heroes, CTA banners, pricing cards, resource cards, navigation. A button in a hero and a button in a table are the same object.

Each style carries its own background, text colour, border, radius and hover pair, and a small and large padding set. Form inputs share the radius and border tokens, so a field next to a button lines up without any per-page correction.

Worth knowing
  • Module button fields offer a subset of the five - a hero exposes primary, secondary and tertiary; the standalone Buttons module exposes all five.
  • Buttons on a section marked dark invert against the section rather than following the page-level button colours. That is deliberate: on most presets the primary fill is near black, which would vanish on a dark band.
  • Forms inherit input, checkbox and radio styling from theme settings. Embedded HubSpot forms are restyled by the theme, not left in HubSpot default styling.
Back to top

Icon library

Icons are a theme-level choice, not a per-module one. Settings, then Icon Fonts, then Icon Font Library. Nine libraries are wired into the layouts, and the loader in templates/layouts/base.html pulls only the one you pick.

LibraryLoaded from Notes
Material Symbols (default)Google Fonts Three optical styles - outlined, rounded, sharp - plus fill, weight, grade and optical size sliders in theme settings.
Font Awesome 6cdnjsFree set only.
PhosphorunpkgOutline and fill are two separate faces; both are loaded.
Lucideunpkg, as scriptRendered as inline SVG after load.
HeroiconsnoneInline SVG from the icon partial - no network request.
Bootstrap IconsjsDelivr
Remix IconjsDelivr
TablerjsDelivr
HugeIconsofficial CDNFree stroke face only; solid variants fall back to stroke.
Worth knowing
  • Icon fields take a name, and the names differ between libraries. Switching library after filling in icons means revisiting those fields.
  • Icons are hidden until the webfont has applied, so ligature names never flash as raw text. The guard fails open after three seconds and is skipped entirely without JavaScript.
  • Material Symbols is loaded as a fallback alongside every other library, so a module that has not been migrated still renders.
  • Only Material Symbols exposes the fill, weight, grade and optical size controls - they are properties of that variable font.
Back to top

Page templates

Start a page from the template closest to what you need - each one is a section layout of the modules below, already wired up, in a drag and drop area you can rearrange.

GroupTemplates
Website pagesHomepage and two alternates, About, Services and Service detail, Product, Features, Pricing, Portfolio, Case study detail, Team, Testimonials, Contact, Appointment, Demo, Partners, Integrations, Comparison, Resources, Events, Press, Jobs and Job detail, Course, Changelog, FAQs, Legal, Pillar, Video library, Documentation, Theme demo.
Landing pagesThree conversion layouts, Ebook, Free trial, Waitlist, Webinar. These extend the landing page layout, which drops the site navigation.
BlogBlog listing and Blog post.
System404, 500, Search results, Password prompt, Subscription preferences, Subscription confirmation, Backup unsubscribe.
LayoutsBase, Landing page base, Docs. Every template extends one of these; the head, the icon loader and the token stylesheet live there.
Worth knowing
  • Templates are starting points, not fixed layouts. Everything inside a drag and drop area can be reordered, removed or added to in the page editor.
  • Landing page templates deliberately have no header module, so a visitor has nowhere to go except the form.
  • System page copy is editable because it routes through a module - HubSpot theme fields cannot hold editable text.
Back to top

Module reference

Every module in the theme is rendered live below, in the variations a buyer chooses between, with the HubL that produced it and the complete field list read out of the module source.

Heroes and banners

The first screen of a page: headline, supporting copy, calls to action, and optional media or a form.

Banner (hero)

modules/Banner.moduleLanding pagesWebsite pagesBlog listingBlog posts234 fields4 content groups1 style group

The main hero. One module covers seven layouts - text only, text with buttons, text with a form, text beside an image, text beside a video, and the two combinations of media plus form - in one or two columns, on a solid, gradient, image or video background. Set Hero Mode to Slider and the same content model repeats as slides.

Worth knowing
  • Hero Mode sits at the top level of the module, so it is the one field that cannot be set from a template override. Choose it in the page editor.
  • Layout Type decides which media and form blocks are used. Turning on Media - Image without setting Layout Type to a text_image variant will not show the image.
  • Height full_viewport locks the hero to 100vh. Use auto when the hero sits above a sticky header on short screens.
  • Colour Scheme light or dark only swaps text colours. The ground itself comes from the Background group.

Variations

1Centred, text and buttonsThe default shape. Single column, centred, no media - the fastest hero to fill in.
Design system

Every page starts from the same tokens.

Change a colour in theme settings and the whole site moves with it.

HubL for this variation
{% module 'd01_banner_1'
  path='../../modules/Banner.module',
  single={
    'social_links': {
      'enable': False
    },
    'content': {
      'eyebrow_text': 'Design system',
      'heading_text': 'Every page starts from the same tokens.',
      'heading_tag': 'h3',
      'subheading_text': 'Change a colour in theme settings and the whole site moves with it.'
    },
    'cta': {
      'primary_label': 'Browse modules',
      'primary_url': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'primary_button_style': 'primary',
      'primary_action': 'link',
      'secondary_enable': True,
      'secondary_label': 'Read the tokens',
      'secondary_url': {
        'url': {
          'href': '#foundations-colour',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'cta_layout': 'row',
      'cta_alignment': 'center'
    },
    'layout': {
      'layout_type': 'text_buttons',
      'layout_columns': 'single_column',
      'text_alignment': 'center',
      'vertical_alignment': 'middle',
      'height': 'auto',
      'full_width': False
    },
    'media_image': {
      'enable': False
    },
    'media_video': {
      'enable': False
    },
    'form': {
      'enable': False
    },
    'overlay': {
      'enable': False
    },
    'social_proof': {
      'enable': False
    },
    'features': {
      'enable': False
    },
    'background': {
      'type': 'none'
    },
    'style': {
      'color_scheme': 'light',
      'heading_size_variant': 'h2',
      'padding_top': 'lg',
      'padding_bottom': 'lg'
    }
  }
%}
2Two column, text beside an imageLayout Type text_image with Columns two_column. Swap the sides with Desktop Column Order.
Two column

Copy on the left, artwork on the right.

Column Order flips the pair on desktop without touching the content.

Hero artwork
HubL for this variation
{% module 'd01_banner_2'
  path='../../modules/Banner.module',
  single={
    'social_links': {
      'enable': False
    },
    'content': {
      'eyebrow_text': 'Two column',
      'heading_text': 'Copy on the left, artwork on the right.',
      'heading_tag': 'h3',
      'subheading_text': 'Column Order flips the pair on desktop without touching the content.'
    },
    'cta': {
      'primary_label': 'See the fields',
      'primary_url': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'primary_button_style': 'primary',
      'secondary_enable': False,
      'cta_layout': 'row',
      'cta_alignment': 'left'
    },
    'layout': {
      'layout_type': 'text_image',
      'layout_columns': 'two_column',
      'text_alignment': 'left',
      'vertical_alignment': 'middle',
      'column_order_desktop': 'text_left',
      'column_order_mobile': 'text_first',
      'height': 'auto',
      'full_width': False
    },
    'media_image': {
      'enable': True,
      'file': {
        'src': get_asset_url("../../images/templates/helper-img-1.jpg"),
        'alt': 'Hero artwork',
        'size_type': 'auto',
        'loading': 'lazy'
      },
      'position': 'right',
      'fit': 'cover'
    },
    'media_video': {
      'enable': False
    },
    'form': {
      'enable': False
    },
    'overlay': {
      'enable': False
    },
    'social_proof': {
      'enable': False
    },
    'features': {
      'enable': False
    },
    'background': {
      'type': 'none'
    },
    'style': {
      'color_scheme': 'light',
      'heading_size_variant': 'h2',
      'padding_top': 'lg',
      'padding_bottom': 'lg'
    }
  }
%}
3Image background, dark scheme, overlayBackground image plus a solid overlay, with Colour Scheme dark so the type stays legible.
On an image

A scrim keeps the headline readable.

Overlay opacity is a percentage, so you can tune it per page.

HubL for this variation
{% module 'd01_banner_3'
  path='../../modules/Banner.module',
  single={
    'social_links': {
      'enable': False
    },
    'content': {
      'eyebrow_text': 'On an image',
      'heading_text': 'A scrim keeps the headline readable.',
      'heading_tag': 'h3',
      'subheading_text': 'Overlay opacity is a percentage, so you can tune it per page.'
    },
    'cta': {
      'primary_label': 'Get started',
      'primary_url': {
        'url': {
          'href': '#getting-started',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'primary_button_style': 'primary',
      'secondary_enable': False,
      'cta_layout': 'row',
      'cta_alignment': 'center'
    },
    'layout': {
      'layout_type': 'text_buttons',
      'layout_columns': 'single_column',
      'text_alignment': 'center',
      'vertical_alignment': 'middle',
      'height': 'short',
      'full_width': True
    },
    'media_image': {
      'enable': False
    },
    'media_video': {
      'enable': False
    },
    'form': {
      'enable': False
    },
    'social_proof': {
      'enable': False
    },
    'features': {
      'enable': False
    },
    'background': {
      'type': 'image',
      'image_file': {
        'src': get_asset_url("../../images/templates/helper-img-6.jpg"),
        'alt': 'Background',
        'size_type': 'auto',
        'loading': 'lazy'
      },
      'image_focal_point': 'center',
      'image_fit': 'cover'
    },
    'overlay': {
      'enable': True,
      'type': 'solid',
      'color': {
        'color': '#0B0B0F',
        'opacity': 100
      },
      'opacity': 62
    },
    'style': {
      'color_scheme': 'dark',
      'heading_size_variant': 'h2',
      'padding_top': 'xl',
      'padding_bottom': 'xl'
    }
  }
%}
4Text beside a lead capture formLayout Type text_form with the built-in email capture. Switch Form Type to hubspot_form to use a real form.
Lead capture

Put the form in the hero.

Three form types ship with the module: email capture, a short lead form, or any HubSpot form.

Get the changelog

One mail per release.

HubL for this variation
{% module 'd01_banner_4'
  path='../../modules/Banner.module',
  single={
    'social_links': {
      'enable': False
    },
    'content': {
      'eyebrow_text': 'Lead capture',
      'heading_text': 'Put the form in the hero.',
      'heading_tag': 'h3',
      'subheading_text': 'Three form types ship with the module: email capture, a short lead form, or any HubSpot form.'
    },
    'cta': {
      'primary_label': '',
      'secondary_enable': False
    },
    'layout': {
      'layout_type': 'text_form',
      'layout_columns': 'two_column',
      'text_alignment': 'left',
      'vertical_alignment': 'middle',
      'height': 'auto',
      'full_width': False
    },
    'media_image': {
      'enable': False
    },
    'media_video': {
      'enable': False
    },
    'form': {
      'enable': True,
      'position': 'media_column',
      'form_type': 'email_capture',
      'title': 'Get the changelog',
      'description': 'One mail per release.',
      'cta_label': 'Subscribe'
    },
    'overlay': {
      'enable': False
    },
    'social_proof': {
      'enable': False
    },
    'features': {
      'enable': False
    },
    'background': {
      'type': 'none'
    },
    'style': {
      'color_scheme': 'light',
      'heading_size_variant': 'h2',
      'padding_top': 'lg',
      'padding_bottom': 'lg'
    }
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

234 fields across 5 groups - the groups below are collapsed. Click a group to open it.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
Hero Modehero_modeChoicesingle, slider-
Slider SettingsContent tab7 fieldsslider_settings
FieldNameTypeOptionsDefault
Autoplayslider_settings.autoplayToggleon
Autoplay Speed (ms)slider_settings.autoplay_speedNumber5000
Show Navigation Arrowsslider_settings.show_arrowsToggleon
Show Pagination Dotsslider_settings.show_dotsToggleon
Pause on Hoverslider_settings.pause_on_hoverToggleon
Transition Effectslider_settings.transition_effectChoicefade, slidefade
Transition Speed (ms)slider_settings.transition_speedNumber500
Hero ContentContent tab134 fieldssingle
FieldNameTypeOptionsDefault
Logosingle.logoGroup-
Show Logo in Herosingle.logo.showToggleoff
Logo Imagesingle.logo.imageImage-
Logo Linksingle.logo.linkLink-
Logo Max Height (px)single.logo.max_heightNumber40
Contentsingle.contentGroup-
Eyebrow Textsingle.content.eyebrow_textText-
Headingsingle.content.heading_textTextYour Bold Statement Here
Heading Tagsingle.content.heading_tagChoiceh1, h2, h3h1
Subheadingsingle.content.subheading_textText-
Supporting Labelsingle.content.supporting_labelText-
Body textsingle.content.body_textRich text-
Headline measure (characters)single.content.heading_measureNumber-
Feature Listsingle.featuresGroup-
Show feature listsingle.features.enableToggleoff
Columnssingle.features.columnsChoiceone, twoone
Icon size (px)single.features.icon_sizeNumber24
Icon colorsingle.features.icon_colorColour-
Text colorsingle.features.text_colorColour-
Itemssingle.features.itemsRepeaterrepeats-
Iconsingle.features.items.iconTextcheck_circle
Textsingle.features.items.textRich textFeature line
Icon color (override)single.features.items.icon_colorColour-
Call to Actionsingle.ctaGroup-
Primary Button Labelsingle.cta.primary_labelTextGet Started
Primary Button URLsingle.cta.primary_urlLink-
Open in New Tabsingle.cta.primary_new_tabToggleoff
Primary Button Actionsingle.cta.primary_actionChoicelink, scroll_to_anchor, open_modallink
Primary Button Stylesingle.cta.primary_button_styleChoiceprimary, secondary, tertiaryprimary
Primary Button Iconsingle.cta.primary_iconText-
Icon Positionsingle.cta.primary_icon_positionChoiceleft, rightright
Scroll Target IDsingle.cta.primary_scroll_targetText-
Modal IDsingle.cta.primary_modal_targetText-
Show Secondary Buttonsingle.cta.secondary_enableToggleoff
Secondary Button Labelsingle.cta.secondary_labelTextLearn More
Secondary Button URLsingle.cta.secondary_urlLink-
Open in New Tabsingle.cta.secondary_new_tabToggleoff
Secondary Button Actionsingle.cta.secondary_actionChoicelink, scroll_to_anchor, open_modallink
Scroll Target IDsingle.cta.secondary_scroll_targetText-
Modal IDsingle.cta.secondary_modal_targetText-
Secondary Button Iconsingle.cta.secondary_iconText-
Icon Positionsingle.cta.secondary_icon_positionChoiceleft, rightright
Button Layoutsingle.cta.cta_layoutChoicerow, stackedrow
Button Alignmentsingle.cta.cta_alignmentChoiceleft, centerleft
Social Linkssingle.social_linksGroup-
Show social linkssingle.social_links.enableToggleoff
Label before the iconssingle.social_links.textText-
Icon shapesingle.social_links.shapeChoicecircle, rounded, square, barecircle
Button size (px)single.social_links.button_sizeNumber40
Icon size (px)single.social_links.icon_sizeNumber18
Gap between icons (px)single.social_links.gapNumber8
Linkssingle.social_links.itemsRepeaterrepeats-
Platformsingle.social_links.items.platformChoicelinkedin, twitter, facebook, instagram, youtube, github, dribbble, behance, tiktok, threads, bluesky, mastodon, pinterest, medium, substack, slack, discord, telegram, whatsapp, spotify, twitch, vimeo, soundcloud, reddit, tumblr, flickr, email, rsslinkedin
URLsingle.social_links.items.urlLink-
Accessible namesingle.social_links.items.aria_textText-
Open in a new tabsingle.social_links.items.new_tabToggleon
Social Proofsingle.social_proofGroup-
Show Social Proofsingle.social_proof.enableToggleoff
Social Proof Textsingle.social_proof.textTextTrusted by 500+ companies
Logossingle.social_proof.logosRepeaterrepeats-
Logosingle.social_proof.logos.logo_imageImage-
Logo Link (optional)single.social_proof.logos.logo_linkLink-
Layoutsingle.layoutGroup-
Layout Typesingle.layout.layout_typeChoicetext_only, text_buttons, text_form, text_image, text_video, text_image_form, text_video_formtext_buttons
Columnssingle.layout.layout_columnsChoicesingle_column, two_columnsingle_column
Text Alignmentsingle.layout.text_alignmentChoiceleft, center, rightcenter
Vertical Alignmentsingle.layout.vertical_alignmentChoicetop, middle, bottommiddle
Desktop Column Ordersingle.layout.column_order_desktopChoicetext_left, media_lefttext_left
Mobile Column Ordersingle.layout.column_order_mobileChoicetext_first, media_firsttext_first
Heightsingle.layout.heightChoiceauto, short, regular, tall, full_viewportregular
Full-bleed bandsingle.layout.full_widthToggleon
Gutter around the hero (px)single.layout.shell_insetNumber-
Corner radius of the hero (px)single.layout.shell_radiusNumber-
Media - Imagesingle.media_imageGroup-
Enable Imagesingle.media_image.enableToggleoff
Imagesingle.media_image.fileImage-
Image Positionsingle.media_image.positionChoiceleft, right, backgroundright
Image Fitsingle.media_image.fitChoicecover, containcover
Enable Parallaxsingle.media_image.parallax_enableToggleoff
Media - Videosingle.media_videoGroup-
Enable Videosingle.media_video.enableToggleoff
Video Modesingle.media_video.modeChoiceside_media, backgroundside_media
Video Typesingle.media_video.typeChoicefile, embedfile
Video Filesingle.media_video.fileFile-
Video URLsingle.media_video.urlText-
Autoplaysingle.media_video.autoplayToggleon
Loopsingle.media_video.loopToggleon
Mutedsingle.media_video.mutedToggleon
Show Controlssingle.media_video.show_controlsToggleoff
Mobile Fallback Imagesingle.media_video.mobile_fallback_imageImage-
Backgroundsingle.backgroundGroup-
Background Typesingle.background.typeChoicenone, solid, gradient, image, carousel, videosolid
Background Colorsingle.background.solid_colorColour#0a0a0b
Gradient Stylesingle.background.gradient_styleChoicelinear, radiallinear
Gradient Start Colorsingle.background.gradient_start_colorColour#0a0a0b
Gradient End Colorsingle.background.gradient_end_colorColour#1a1a1a
Gradient Directionsingle.background.gradient_directionChoiceto_top, to_bottom, to_left, to_right, to_top_right, to_bottom_rightto_bottom
Background Imagesingle.background.image_fileImage-
Focal Pointsingle.background.image_focal_pointChoicecenter, top, bottom, left, rightcenter
Image Fitsingle.background.image_fitChoicecover, containcover
Enable Parallaxsingle.background.image_parallaxToggleoff
Carousel Imagessingle.background.carousel_imagesRepeaterrepeats-
Imagesingle.background.carousel_images.imageImage-
Carousel: seconds per imagesingle.background.carousel_intervalNumber6
Carousel: crossfade (ms)single.background.carousel_fade_msNumber800
Carousel: transitionsingle.background.carousel_transitionChoicefade, slidefade
Carousel: pause on hoversingle.background.carousel_pause_on_hoverToggleon
Carousel: show dotssingle.background.carousel_show_dotsToggleoff
Carousel: dot sizesingle.background.carousel_dot_sizeNumber8
Carousel: dot hairlinesingle.background.carousel_dot_borderNumber1
Background Video Filesingle.background.video_fileFile-
Background Video URLsingle.background.video_urlText-
Autoplaysingle.background.video_autoplayToggleon
Loopsingle.background.video_loopToggleon
Mutedsingle.background.video_mutedToggleon
Mobile Fallback Imagesingle.background.video_mobile_fallbackImage-
Overlaysingle.overlayGroup-
Enable Overlaysingle.overlay.enableToggleoff
Overlay Typesingle.overlay.typeChoicesolid, gradientsolid
Overlay Colorsingle.overlay.colorColour#000000
Gradient Startsingle.overlay.gradient_start_colorColour#000000
Gradient Endsingle.overlay.gradient_end_colorColour#000000
Gradient Directionsingle.overlay.gradient_directionChoiceto_top, to_bottom, to_left, to_rightto_bottom
Overlay Opacity (%)single.overlay.opacityNumber50
Formsingle.formGroup-
Enable Formsingle.form.enableToggleoff
Form Positionsingle.form.positionChoiceunder_text, media_columnmedia_column
Form Titlesingle.form.titleTextGet Started
Form Descriptionsingle.form.descriptionText-
Form Typesingle.form.form_typeChoiceemail_capture, mini_lead, hubspot_formemail_capture
Submit Button Labelsingle.form.cta_labelTextSubscribe
HubSpot Formsingle.form.hubspot_formForm-
Style & Spacingsingle.styleGroup-
Color Schemesingle.style.color_schemeChoicelight, dark, customdark
Custom Text Colorsingle.style.custom_text_colorColour#ffffff
Heading Sizesingle.style.heading_size_variantChoiceauto, h3, h2, h1, displayauto
Gap: eyebrow to headingsingle.style.stack_eyebrow_gapChoicenone, 2xs, xs, sm, md, lg, xl, 2xl, 3xlsm
Gap: heading to descriptionsingle.style.stack_lede_gapChoicenone, 2xs, xs, sm, md, lg, xl, 2xl, 3xlxl
Gap: text to buttonssingle.style.stack_actions_gapChoicenone, 2xs, xs, sm, md, lg, xl, 2xl, 3xl2xl
Gap: buttons to social rowsingle.style.stack_social_gapChoicenone, 2xs, xs, sm, md, lg, xl, 2xl, 3xl2xl
Extra clearance under the floating navsingle.style.nav_clearance_gapChoicenone, 2xs, xs, sm, md, lg, xl, 2xl, 3xlnone
Description Sizesingle.style.desc_size_variantChoiceregular, largeregular
Hero padding (top and bottom)single.style.padding_blockChoicenone, xs, sm, md, lg, xl, 2xl, 3xlxl
Allow different top and bottom paddingsingle.style.padding_asymmetricToggleoff
Top padding (only when uneven padding is on)single.style.padding_topChoicenone, xs, sm, md, lg, xl, 2xl, 3xlxl
Bottom padding (only when uneven padding is on)single.style.padding_bottomChoicenone, xs, sm, md, lg, xl, 2xl, 3xlxl
Visibilitysingle.visibilityGroup-
Show on Desktopsingle.visibility.show_on_desktopToggleon
Show on Tabletsingle.visibility.show_on_tabletToggleon
Show on Mobilesingle.visibility.show_on_mobileToggleon
Advancedsingle.advancedGroup-
Anchor IDsingle.advanced.anchor_idText-
Animationsingle.advanced.animationChoicenone, fade, slide_upfade
SlidesContent tabrepeater90 fieldsslides
FieldNameTypeOptionsDefault
Contentslides.contentGroup-
Eyebrow Textslides.content.eyebrow_textText-
Headingslides.content.heading_textTextSlide Heading
Heading Tagslides.content.heading_tagChoiceh1, h2, h3h2
Subheadingslides.content.subheading_textText-
Supporting Labelslides.content.supporting_labelText-
Call to Actionslides.ctaGroup-
Primary Button Labelslides.cta.primary_labelTextGet Started
Primary Button URLslides.cta.primary_urlLink-
Open in New Tabslides.cta.primary_new_tabToggleoff
Primary Button Actionslides.cta.primary_actionChoicelink, scroll_to_anchor, open_modallink
Primary Button Iconslides.cta.primary_iconText-
Icon Positionslides.cta.primary_icon_positionChoiceleft, rightright
Scroll Target IDslides.cta.primary_scroll_targetText-
Modal IDslides.cta.primary_modal_targetText-
Show Secondary Buttonslides.cta.secondary_enableToggleoff
Secondary Button Labelslides.cta.secondary_labelTextLearn More
Secondary Button URLslides.cta.secondary_urlLink-
Open in New Tabslides.cta.secondary_new_tabToggleoff
Secondary Button Actionslides.cta.secondary_actionChoicelink, scroll_to_anchor, open_modallink
Scroll Target IDslides.cta.secondary_scroll_targetText-
Modal IDslides.cta.secondary_modal_targetText-
Secondary Button Iconslides.cta.secondary_iconText-
Icon Positionslides.cta.secondary_icon_positionChoiceleft, rightright
Button Layoutslides.cta.cta_layoutChoicerow, stackedrow
Button Alignmentslides.cta.cta_alignmentChoiceleft, centercenter
Social Proofslides.social_proofGroup-
Show Social Proofslides.social_proof.enableToggleoff
Social Proof Textslides.social_proof.textTextTrusted by 500+ companies
Logosslides.social_proof.logosRepeaterrepeats-
Logoslides.social_proof.logos.logo_imageImage-
Logo Linkslides.social_proof.logos.logo_linkLink-
Layoutslides.layoutGroup-
Layout Typeslides.layout.layout_typeChoicetext_only, text_buttons, text_form, text_image, text_video, text_image_form, text_video_formtext_buttons
Columnsslides.layout.layout_columnsChoicesingle_column, two_columnsingle_column
Text Alignmentslides.layout.text_alignmentChoiceleft, center, rightcenter
Vertical Alignmentslides.layout.vertical_alignmentChoicetop, middle, bottommiddle
Desktop Column Orderslides.layout.column_order_desktopChoicetext_left, media_lefttext_left
Mobile Column Orderslides.layout.column_order_mobileChoicetext_first, media_firsttext_first
Heightslides.layout.heightChoiceauto, short, regular, tall, full_viewportregular
Media - Imageslides.media_imageGroup-
Enable Imageslides.media_image.enableToggleoff
Imageslides.media_image.fileImage-
Image Positionslides.media_image.positionChoiceleft, right, backgroundright
Image Fitslides.media_image.fitChoicecover, containcover
Enable Parallaxslides.media_image.parallax_enableToggleoff
Media - Videoslides.media_videoGroup-
Enable Videoslides.media_video.enableToggleoff
Video Modeslides.media_video.modeChoiceside_media, backgroundside_media
Video Typeslides.media_video.typeChoicefile, embedfile
Video Fileslides.media_video.fileFile-
Video URLslides.media_video.urlText-
Autoplayslides.media_video.autoplayToggleon
Loopslides.media_video.loopToggleon
Mutedslides.media_video.mutedToggleon
Show Controlsslides.media_video.show_controlsToggleoff
Mobile Fallbackslides.media_video.mobile_fallback_imageImage-
Backgroundslides.backgroundGroup-
Background Typeslides.background.typeChoicenone, solid, gradient, image, videosolid
Background Colorslides.background.solid_colorColour#0a0a0b
Gradient Styleslides.background.gradient_styleChoicelinear, radiallinear
Start Colorslides.background.gradient_start_colorColour#0a0a0b
End Colorslides.background.gradient_end_colorColour#1a1a1a
Directionslides.background.gradient_directionChoiceto_top, to_bottom, to_left, to_right, to_top_right, to_bottom_rightto_bottom
Background Imageslides.background.image_fileImage-
Focal Pointslides.background.image_focal_pointChoicecenter, top, bottom, left, rightcenter
Image Fitslides.background.image_fitChoicecover, containcover
Enable Parallaxslides.background.image_parallaxToggleoff
Background Videoslides.background.video_fileFile-
Video URLslides.background.video_urlText-
Autoplayslides.background.video_autoplayToggleon
Loopslides.background.video_loopToggleon
Mutedslides.background.video_mutedToggleon
Mobile Fallbackslides.background.video_mobile_fallbackImage-
Overlayslides.overlayGroup-
Enable Overlayslides.overlay.enableToggleoff
Overlay Typeslides.overlay.typeChoicesolid, gradientsolid
Overlay Colorslides.overlay.colorColour#000000
Start Colorslides.overlay.gradient_start_colorColour#000000
End Colorslides.overlay.gradient_end_colorColour#000000
Directionslides.overlay.gradient_directionChoiceto_top, to_bottom, to_left, to_rightto_bottom
Opacity (%)slides.overlay.opacityNumber50
Formslides.formGroup-
Enable Formslides.form.enableToggleoff
Form Positionslides.form.positionChoiceunder_text, media_columnmedia_column
Form Titleslides.form.titleTextGet Started
Form Descriptionslides.form.descriptionText-
Form Typeslides.form.form_typeChoiceemail_capture, mini_lead, hubspot_formemail_capture
Submit Buttonslides.form.cta_labelTextSubscribe
HubSpot Formslides.form.hubspot_formForm-
Style & Spacingslides.styleGroup-
Color Schemeslides.style.color_schemeChoicelight, dark, customdark
Custom Text Colorslides.style.custom_text_colorColour#ffffff
Heading Sizeslides.style.heading_size_variantChoiceauto, h3, h2, h1, displayauto
Description Sizeslides.style.desc_size_variantChoiceregular, largeregular
Padding Topslides.style.padding_topChoicenone, xs, sm, md, lg, xllg
Padding Bottomslides.style.padding_bottomChoicenone, xs, sm, md, lg, xllg
Visibilityslides.visibilityGroup-
Show on Desktopslides.visibility.show_on_desktopToggleon
Show on Tabletslides.visibility.show_on_tabletToggleon
Show on Mobileslides.visibility.show_on_mobileToggleon
Advancedslides.advancedGroup-
Anchor IDslides.advanced.anchor_idText-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Banner slider

modules/Banner slider.moduleLanding pagesWebsite pagesBlog listingBlog posts41 fields1 content group2 style groups

A rotating banner. Each slide carries its own background - image, video or colour - its own alignment and its own buttons. Use it where a single hero has to carry more than one message.

Worth knowing
  • Layout Mode full_width lets the slide bleed to the window edge; contained keeps it inside the page container so a corner radius is visible.
  • Autoplay is set in seconds, not milliseconds.
  • Every slide sets its own vertical and horizontal alignment - they do not have to match.

Variations

1Contained, rounded cornersLayout Mode contained with Border Radius lg. The slider reads as a card inside the page.
HubL for this variation
{% module 'd02_banner_slider_1'
  path='../../modules/Banner slider.module',
  style={
    'layout_mode': 'contained',
    'max_width': 'container',
    'border_radius': 'lg',
    'autoplay_timeout_seconds': 6
  }
%}
2Full width, square cornersThe same slides edge to edge, radius none - the shape used for a landing page hero.
HubL for this variation
{% module 'd02_banner_slider_2'
  path='../../modules/Banner slider.module',
  style={
    'layout_mode': 'full_width',
    'max_width': 'full',
    'border_radius': 'none',
    'autoplay_timeout_seconds': 6
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

StyleStyle tab12 fieldsstyle
FieldNameTypeOptionsDefault
Spacing desktopstyle.spacing_desktopSpacing-
Spacing tabletstyle.spacing_tabletSpacing-
Spacing mobilestyle.spacing_mobileSpacing-
Borderstyle.borderBorder-
Make the banner window heightstyle.make_the_banner_window_heightToggleoff
Layout modestyle.layout_modeChoicefull_width, containedcontained
Max widthstyle.max_widthChoicefull, container, themefull
Border radiusstyle.border_radiusChoicenone, sm, md, lg, xlnone
Controls colorstyle.controls_colorGroup-
Background color - defaultstyle.controls_color.color_fieldColour#ffffff
Background color - hoverstyle.controls_color.background_color_hoverColour#ffffff
Icon colorstyle.controls_color.icon_colorColour#fff
Autoplay timeout - secondsstyle.autoplay_timeout_secondsNumber5
SlideContent tabrepeater27 fieldsslide
FieldNameTypeOptionsDefault
Title labelslide.title_labelTextTitle label
Titleslide.titleTextTitle
Heading typeslide.heading_typeChoiceh1, h2, h3, h4, h5, h6h2
Buttonsslide.buttonsRepeaterrepeats-
Display textslide.buttons.display_textTextLearn more
Iconslide.buttons.iconText-
Icon Positionslide.buttons.icon_positionChoiceleft, rightright
Linkslide.buttons.linkLink-
Styleslide.buttons.styleChoiceprimary, secondary, tertiary, ghost, linksecondary
Actionslide.buttons.actionChoicelink, scroll_to_anchor, open_modalopen_modal
Anchor nameslide.buttons.anchor_nameText-
Modal nameslide.buttons.modal_nameText-
Styleslide.styleGroup-
Background typeslide.style.background_typeChoiceimage, video, colorimage
Background videoslide.style.background_videoFile../../images/templates/video-1.mp4
Background imageslide.style.background_imageImageimage
Background colorslide.style.background_colorGroup-
Colorslide.style.background_color.colorColour#000
Gradient angleslide.style.background_color.gradient_angleNumber135
Overlay colorslide.style.overlay_colorGroup-
Colorslide.style.overlay_color.colorColour#000
Gradient angleslide.style.overlay_color.gradient_angleNumber135
Title label colorslide.style.title_label_colorColour#ff7960
Title colorslide.style.title_colorColour#fff
Description colorslide.style.description_colorColour#fff
Link color - defaultslide.style.link_color_defaultColour#fff
Link color - hoverslide.style.link_color_hoverColour#fff
Text alignmentslide.style.text_alignmentChoiceleft, center, rightleft
Vertical alignmentslide.style.vertical_alignmentChoiceflex-start, center, flex-endflex-end
Horizontal alignmentslide.style.horizontal_alignmentChoiceflex-start, center, flex-endflex-start
Descriptionslide.descriptionRich text<p>Your slide description goes here. Add compelling copy to engage visitors.</p>
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

CTA Banner

modules/CTA Banner.moduleLanding pagesWebsite pagesBlog listingBlog posts69 fields2 content groups3 style groups

A closing call to action. Heading, optional subheading and up to two buttons, on a band you can set to light, dark, accent, gradient or an image.

Worth knowing
  • Layout Style inline puts the buttons on the same row as the heading, stacked centres everything, split pushes the buttons to the far edge.
  • Full Width off keeps the band inside the container so the corner radius shows. On, the band bleeds and the radius has no visible effect.
  • Colour Scheme image needs a Background Image; Overlay Opacity controls the scrim over it.

Variations

1Inline, dark, roundedThe default. Heading and buttons on one row, dark band, radius xl.
Limited offer

Ready to build the site?

Every template in the theme is on the same tokens.

  • check_circle Every template and module
  • check_circle Free updates
  • check_circle Support from the people who built it
HubL for this variation
{% module 'd03_cta_banner_1'
  path='../../modules/CTA Banner.module',
  content={
    'heading': 'Ready to build the site?',
    'subheading': 'Every template in the theme is on the same tokens.',
    'heading_tag': 'h3'
  },
  buttons={
    'primary_text': 'Start a page',
    'primary_link': {
      'url': {
        'href': '#getting-started',
        'type': 'CONTENT'
      },
      'open_in_new_tab': False
    },
    'primary_style': 'primary',
    'secondary_enable': True,
    'secondary_text': 'See modules',
    'secondary_link': {
      'url': {
        'href': '#modules',
        'type': 'CONTENT'
      },
      'open_in_new_tab': False
    },
    'secondary_style': 'secondary'
  },
  layout={
    'style': 'inline',
    'size': 'h2',
    'density': 'default',
    'full_width': False
  },
  style={
    'color_scheme': 'dark',
    'radius': 'xl',
    'shadow': 'none',
    'border_enabled': False
  }
%}
2Stacked, gradient, squareCentred stack on the gradient scheme with radius none - a harder, more graphic band. Colour Scheme accent behaves the same way but paints the band in the accent token.
Limited offer

One accent colour, applied everywhere.

Set it once in theme settings.

  • check_circle Every template and module
  • check_circle Free updates
  • check_circle Support from the people who built it
HubL for this variation
{% module 'd03_cta_banner_2'
  path='../../modules/CTA Banner.module',
  content={
    'heading': 'One accent colour, applied everywhere.',
    'subheading': 'Set it once in theme settings.',
    'heading_tag': 'h3'
  },
  buttons={
    'primary_text': 'Open theme settings',
    'primary_link': {
      'url': {
        'href': '#foundations-presets',
        'type': 'CONTENT'
      },
      'open_in_new_tab': False
    },
    'primary_style': 'primary',
    'secondary_enable': False
  },
  layout={
    'style': 'stacked',
    'size': 'h2',
    'density': 'large',
    'full_width': False
  },
  style={
    'color_scheme': 'gradient',
    'radius': 'none',
    'shadow': 'none',
    'border_enabled': False
  }
%}
3Split, light, borderedText left, buttons hard right, on a light ground with a border instead of a fill.
Limited offer

A quieter band for mid-page.

  • check_circle Every template and module
  • check_circle Free updates
  • check_circle Support from the people who built it
HubL for this variation
{% module 'd03_cta_banner_3'
  path='../../modules/CTA Banner.module',
  content={
    'heading': 'A quieter band for mid-page.',
    'subheading': '',
    'heading_tag': 'h3'
  },
  buttons={
    'primary_text': 'Read the docs',
    'primary_link': {
      'url': {
        'href': '#introduction',
        'type': 'CONTENT'
      },
      'open_in_new_tab': False
    },
    'primary_style': 'secondary',
    'secondary_enable': False
  },
  layout={
    'style': 'split',
    'size': 'h3',
    'density': 'compact',
    'full_width': False
  },
  style={
    'color_scheme': 'light',
    'radius': 'lg',
    'shadow': 'none',
    'border_enabled': True
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

69 fields across 5 groups - the groups below are collapsed. Click a group to open it.

ContentContent tab16 fieldscontent
FieldNameTypeOptionsDefault
Headingcontent.headingTextReady to get started?
Subheadingcontent.subheadingTextJoin thousands of happy customers today.
Heading Tagcontent.heading_tagChoiceh2, h3, h4, ph2
Badgecontent.badgeTextLimited offer
Offer linecontent.offerText-
Offer notecontent.offer_noteText-
What they getcontent.pointsRepeaterrepeats-
Iconcontent.points.iconTextcheck_circle
Textcontent.points.textTextIncluded
Footnotecontent.footnoteText-
Offer — original pricecontent.offer_wasText-
Deadlinecontent.deadlineText-
Deadline labelcontent.deadline_labelTextOffer ends in
Countdown label — dayscontent.deadline_days_labelTextDays
Countdown label — hourscontent.deadline_hours_labelTextHrs
Countdown label — minutescontent.deadline_minutes_labelTextMin
Countdown label — secondscontent.deadline_seconds_labelTextSec
ButtonsContent tab14 fieldsbuttons
FieldNameTypeOptionsDefault
Primary Button Textbuttons.primary_textTextGet Started
Primary Button Iconbuttons.primary_iconText-
Icon Positionbuttons.primary_icon_positionChoiceleft, rightright
Primary Button Linkbuttons.primary_linkLink-
Primary Actionbuttons.primary_actionChoicelink, scroll_to_anchor, open_modallink
Anchor Namebuttons.primary_anchorText-
Modal Namebuttons.primary_modalText-
Primary Button Stylebuttons.primary_styleChoiceprimary, secondary, tertiaryprimary
Show Secondary Buttonbuttons.secondary_enableToggleon
Secondary Button Textbuttons.secondary_textTextLearn More
Secondary Button Iconbuttons.secondary_iconText-
Icon Positionbuttons.secondary_icon_positionChoiceleft, rightright
Secondary Button Linkbuttons.secondary_linkLink-
Secondary Button Stylebuttons.secondary_styleChoicesecondary, tertiary, primarysecondary
LayoutStyle tab11 fieldslayout
FieldNameTypeOptionsDefault
Surfacelayout.surfaceChoiceshell, componentshell
Layout Stylelayout.styleChoiceinline, stacked, splitinline
Heading Sizelayout.sizeChoiceauto, h3, h2auto
Band Densitylayout.densityChoicecompact, default, largedefault
Full Widthlayout.full_widthToggleoff
Band padding, top and bottom (px)layout.padding_yNumber-
Band padding, left and right (px)layout.padding_xNumber-
Content column width (px)layout.content_max_widthNumber-
Gap inside a group (px)layout.rhythm_tightNumber-
Gap between groups (px)layout.rhythm_groupNumber-
Gap before the buttons (px)layout.rhythm_askNumber-
StyleStyle tab26 fieldsstyle
FieldNameTypeOptionsDefault
Color Schemestyle.color_schemeChoicelight, dark, accent, gradient, imagedark
Background Imagestyle.background_imageImage-
Overlay Opacity (%)style.overlay_opacityNumber60
Gradient Start Colorstyle.gradient_startColour#6d28d9
Gradient End Colorstyle.gradient_endColour#0b0a1f
Gradient Anglestyle.gradient_angleNumber135
Borderstyle.border_enabledToggleoff
Border Radiusstyle.radiusChoicenone, sm, md, lg, xl, 2xlxl
Shadowstyle.shadowChoicenone, sm, md, lgnone
Badge surfacestyle.badge_bgColour#ffffff
Badge textstyle.badge_inkColour#ffffff
Surface patternstyle.patternChoicenone, dots, grid, diagonal, glowdots
Pattern colourstyle.pattern_colorColour#ffffff
Pattern opacity (%)style.pattern_opacityNumber10
Pattern scale (px)style.pattern_scaleNumber22
Sheen colour, top rightstyle.sheen_colorColour#6d28d9
Sheen colour, bottom leftstyle.sheen_color_2Colour#0f766e
Sheen strength (%)style.sheen_opacityNumber28
Countdown box surfacestyle.countdown_box_bgColour#ffffff
Countdown box size (px)style.countdown_box_sizeNumber-
Countdown box corner radius (px)style.countdown_box_radiusNumber-
Badge height (px)style.badge_heightNumber-
Badge padding, left and right (px)style.badge_padding_xNumber-
Badge corner radius (px)style.badge_radiusNumber-
Badge text size (px)style.badge_font_sizeNumber-
Badge in capitalsstyle.badge_uppercaseToggleoff
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Blog Hero

modules/Blog Hero.moduleBlog listing16 fields4 content groups1 style group

The header of the blog listing page: eyebrow, heading, description, a native HubSpot search field and the topic filters.

Worth knowing
  • Content type is blog listing only. It is rendered by templates/blog/blog_listing.html.
  • Search uses HubSpot native site search, so results come back on the search results system page - there is no configuration to do.
  • Topic filters read the blog tags of the blog the page belongs to, so they are empty on any page that is not a blog listing.

Variations

1Gradient ground, centredThe default: gradient background, centred text, search on.
Journal

Notes on building for HubSpot

Short pieces on templates, modules and the CMS.

HubL for this variation
{% module 'd04_blog_hero_1'
  path='../../modules/Blog Hero.module',
  content={
    'eyebrow': 'Journal',
    'heading': 'Notes on building for HubSpot',
    'description': 'Short pieces on templates, modules and the CMS.'
  },
  search={
    'enable': True,
    'placeholder': 'Search articles'
  },
  topics={
    'show': False,
    'topics_label': 'Topics'
  },
  style={
    'bg_type': 'gradient',
    'text_alignment': 'center',
    'padding_top': 'lg',
    'padding_bottom': 'md'
  }
%}
2Flat ground, left alignedBackground none and text left - the quieter option for a content-heavy blog.

Journal

Everything we publish, newest first.

HubL for this variation
{% module 'd04_blog_hero_2'
  path='../../modules/Blog Hero.module',
  content={
    'eyebrow': '',
    'heading': 'Journal',
    'description': 'Everything we publish, newest first.'
  },
  search={
    'enable': True,
    'placeholder': 'Search'
  },
  topics={
    'show': False,
    'topics_label': 'Topics'
  },
  style={
    'bg_type': 'none',
    'text_alignment': 'left',
    'padding_top': 'md',
    'padding_bottom': 'sm'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

ContentContent tab3 fieldscontent
FieldNameTypeOptionsDefault
Eyebrowcontent.eyebrowTextBlog
Headingcontent.headingTextInsights & Resources
Descriptioncontent.descriptionTextDiscover articles, guides, and insights to help you grow.
SearchContent tab5 fieldssearch
FieldNameTypeOptionsDefault
Enable searchsearch.enableToggleon
Placeholder textsearch.placeholderTextSearch articles...
Search coverssearch.scopeChoiceBLOG_POST, BLOG_POST,SITE_PAGE,LANDING_PAGE, BLOG_POST
Suggest results as the visitor typessearch.suggestionsToggleon
Search results pagesearch.results_urlText-
TopicsContent tab2 fieldstopics
FieldNameTypeOptionsDefault
Show topic filterstopics.showToggleon
Topics labeltopics.topics_labelTextBrowse by topic:
StyleContent tab4 fieldsstyle
FieldNameTypeOptionsDefault
Background typestyle.bg_typeChoicegradient, solid, nonegradient
Text alignmentstyle.text_alignmentChoiceleft, centercenter
Padding topstyle.padding_topChoicesm, md, lg, xlxl
Padding bottomstyle.padding_bottomChoicesm, md, lg, xllg
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Blog post header

modules/Blog post header.moduleBlog posts17 fields0 content groups2 style groups

The masthead of a single blog post. It pulls the post title, author, date and featured image from the post itself, then applies spacing, an optional gradient overlay and a parallax effect.

Worth knowing
  • Content type is blog post only. It is rendered by templates/blog/blog_post.html through templates/partials/blog_post_header.html.
  • There is no content to fill in - every string comes from the post record. The whole field set is on the Style tab.
  • Window Height on makes the masthead 100vh; turn it off for short posts.
Not previewed here. This module reads the blog post it is rendered on. Outside a blog post template it has no title, author or image to show, so it is documented here rather than rendered. See it live on any post in the blog.

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

StyleStyle tab15 fieldsstyle
FieldNameTypeOptionsDefault
Spacing desktopstyle.spacing_desktopSpacing-
Spacing tabletstyle.spacing_tabletSpacing-
Spacing mobilestyle.spacing_mobileSpacing-
Borderstyle.borderBorder-
Add a custom gradient overlay?style.add_a_custom_gradient_overlay_Toggleoff
Overlay gradientstyle.overlay_gradientGradient-
Text alignmentstyle.text_alignmentText alignment-
Title label colorstyle.title_label_colorColour#ff7960
Title colorstyle.title_colorColour#fff
Description colorstyle.description_colorColour#fff
Link color - defaultstyle.link_color_defaultColour#fff
Link color - hoverstyle.link_color_hoverColour#fff
Make the banner window heightstyle.make_the_banner_window_heightToggleon
Content alignmentstyle.content_alignmentAlignment-
Enable parallax effectstyle.enable_parallax_effectToggleoff
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Content sections

The body of a page. Text, feature grids, steps, stats, tabs, accordions and tables.

Text section with buttons

modules/Text section with buttons.moduleLanding pagesWebsite pagesBlog listingBlog posts12 fields2 content groups2 style groups

A label, a heading, a paragraph and a row of buttons. The workhorse for section introductions.

Worth knowing
  • Heading Type sets the tag only - the visual size follows the theme type scale for that tag. Use it to keep one h1 per page.
  • Buttons is a repeater; leave it empty for a plain section intro.
  • Text alignment lives on the Style tab as a text alignment field, so it is set per breakpoint in the editor.

Variations

1Centred introLabel, heading, paragraph, no buttons. What sits above most grids in the theme.
Modules

Every module, one set of tokens.

Each one exposes its layout, card and icon choices as fields.

HubL for this variation
{% module 'd06_text_section_with_buttons_1'
  path='../../modules/Text section with buttons.module',
  style={
    'text_alignment': {
      'text_align': 'CENTER'
    }
  },
  title_label='Modules',
  title='Every module, one set of tokens.',
  description='Each one exposes its layout, card and icon choices as fields.',
  heading_type='h3',
  buttons=[]
%}
2Left aligned with two buttonsThe same module with the buttons repeater filled and alignment left.
Getting started

Install, pick a preset, publish.

Three steps before you touch a single field.

HubL for this variation
{% module 'd06_text_section_with_buttons_2'
  path='../../modules/Text section with buttons.module',
  style={
    'text_alignment': {
      'text_align': 'LEFT'
    }
  },
  title_label='Getting started',
  title='Install, pick a preset, publish.',
  description='Three steps before you touch a single field.',
  heading_type='h3',
  buttons=[
    {
      'display_text': 'Quick start',
      'link': {
        'url': {
          'href': '#getting-started',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'style': 'primary',
      'action': 'link',
      'icon': 'arrow_forward',
      'icon_position': 'right'
    },
    {
      'display_text': 'Requirements',
      'link': {
        'url': {
          'href': '#requirements',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'style': 'secondary',
      'action': 'link',
      'icon': '',
      'icon_position': 'right'
    }
  ]
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab4 fields
FieldNameTypeOptionsDefault
Title labeltitle_labelText-
TitletitleText-
DescriptiondescriptionText-
Heading typeheading_typeChoiceh1, h2, h3, h4, h5, h6-
StyleStyle tab1 fieldstyle
FieldNameTypeOptionsDefault
Text alignmentstyle.text_alignmentText alignment-
ButtonsContent tabrepeater5 fieldsbuttons
FieldNameTypeOptionsDefault
Display textbuttons.display_textTextLearn more
Linkbuttons.linkLink-
Stylebuttons.styleChoiceprimary, secondary, linksecondary
Iconbuttons.iconText-
Icon Positionbuttons.icon_positionChoiceleft, rightright
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Text section rich

modules/Text section rich.moduleLanding pagesWebsite pagesBlog listingBlog posts12 fields2 content groups2 style groups

The same section intro, but the body is a rich text field - so it takes lists, links, tables and inline formatting.

Worth knowing
  • The body field is named body_text, not body. body is a reserved word in HubL and a field called body silently fails.
  • Use this instead of Text section with buttons whenever an editor needs lists or links inside the paragraph.

Variation

1Rich body with a listA heading and a formatted body. Everything inside body_text is editable inline.
What is inside

The theme ships with:

  • Website, landing, blog and system page templates
  • Drag and drop modules for every section of a page
  • Theme presets, and a custom one
  • Design tokens exposed as CSS custom properties
HubL for this variation
{% module 'd07_text_section_rich_1'
  path='../../modules/Text section rich.module',
  style={
    'text_alignment': {
      'text_align': 'LEFT'
    }
  },
  title_label='What is inside',
  title='The theme ships with:',
  heading_type='h3',
  body_text='<ul><li>Website, landing, blog and system page templates</li><li>Drag and drop modules for every section of a page</li><li>Theme presets, and a custom one</li><li>Design tokens exposed as CSS custom properties</li></ul>',
  buttons=[]
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab4 fields
FieldNameTypeOptionsDefault
Title labeltitle_labelText-
TitletitleText-
Body textbody_textRich text-
Heading typeheading_typeChoiceh1, h2, h3, h4, h5, h6-
StyleStyle tab1 fieldstyle
FieldNameTypeOptionsDefault
Text alignmentstyle.text_alignmentText alignment-
ButtonsContent tabrepeater5 fieldsbuttons
FieldNameTypeOptionsDefault
Display textbuttons.display_textTextLearn more
Linkbuttons.linkLink-
Stylebuttons.styleChoiceprimary, secondary, linksecondary
Iconbuttons.iconText-
Icon Positionbuttons.icon_positionChoiceleft, rightright
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Feature Grid

modules/Feature Grid.moduleLanding pagesWebsite pagesBlog listingBlog posts35 fields1 content group4 style groups

An icon, title and description repeated across a grid. The most reused section type in the theme.

Worth knowing
  • Columns is set separately for desktop, tablet and mobile.
  • Card Styling and Icon Style are independent - you can have plain text features with circled icons, or full cards with no icon at all.
  • Icon names follow whichever icon library is selected in theme settings. Switching library changes the names the module expects.

Variations

1Three columns, cards, circled iconsThe default. Bordered cards, radius lg, accent-washed circular icons, lift on hover.
speed

Lightning Fast

Optimized for performance with sub-second load times.

security

Enterprise Security

Bank-level encryption and security protocols.

cloud_sync

Real-time Sync

Automatic synchronization across all devices.

support_agent

24/7 Support

Expert support team available around the clock.

analytics

Advanced Analytics

Powerful insights and reporting dashboards.

integration_instructions

Easy Integration

Connect with your favorite tools in minutes.

HubL for this variation
{% module 'd08_feature_grid_1'
  path='../../modules/Feature Grid.module',
  layout={
    'columns': '3',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md',
    'alignment': 'left',
    'vertical_alignment': 'stretch'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'none',
    'padding': 'md',
    'hover': 'lift'
  },
  icon_settings={
    'show': True,
    'style': 'circle',
    'size': 'md',
    'container_size': 'md',
    'color_source': 'accent',
    'bg_source': 'accent_light'
  }
%}
2Four columns, no cards, plain iconsCard background and border off, icons plain. The grid reads as a list, not a set of boxes.
speed

Lightning Fast

Optimized for performance with sub-second load times.

security

Enterprise Security

Bank-level encryption and security protocols.

cloud_sync

Real-time Sync

Automatic synchronization across all devices.

support_agent

24/7 Support

Expert support team available around the clock.

analytics

Advanced Analytics

Powerful insights and reporting dashboards.

integration_instructions

Easy Integration

Connect with your favorite tools in minutes.

HubL for this variation
{% module 'd08_feature_grid_2'
  path='../../modules/Feature Grid.module',
  layout={
    'columns': '4',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'lg',
    'alignment': 'left',
    'vertical_alignment': 'start'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'sm',
    'hover': 'none'
  },
  icon_settings={
    'show': True,
    'style': 'plain',
    'size': 'lg',
    'container_size': 'md',
    'color_source': 'accent'
  }
%}
3Two columns, square cards, shadowRadius none with a medium shadow and square icon plates - a harder, denser card.
speed

Lightning Fast

Optimized for performance with sub-second load times.

security

Enterprise Security

Bank-level encryption and security protocols.

cloud_sync

Real-time Sync

Automatic synchronization across all devices.

support_agent

24/7 Support

Expert support team available around the clock.

analytics

Advanced Analytics

Powerful insights and reporting dashboards.

integration_instructions

Easy Integration

Connect with your favorite tools in minutes.

HubL for this variation
{% module 'd08_feature_grid_3'
  path='../../modules/Feature Grid.module',
  layout={
    'columns': '2',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md',
    'alignment': 'left',
    'vertical_alignment': 'stretch'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'md',
    'padding': 'lg',
    'hover': 'shadow'
  },
  icon_settings={
    'show': True,
    'style': 'square',
    'size': 'md',
    'container_size': 'lg',
    'color_source': 'text',
    'bg_source': 'theme'
  }
%}
4Centred, no iconsIcons off and alignment centre - for feature lists that are purely typographic.

Lightning Fast

Optimized for performance with sub-second load times.

Enterprise Security

Bank-level encryption and security protocols.

Real-time Sync

Automatic synchronization across all devices.

24/7 Support

Expert support team available around the clock.

Advanced Analytics

Powerful insights and reporting dashboards.

Easy Integration

Connect with your favorite tools in minutes.

HubL for this variation
{% module 'd08_feature_grid_4'
  path='../../modules/Feature Grid.module',
  layout={
    'columns': '3',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'xl',
    'alignment': 'center',
    'vertical_alignment': 'start'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'sm',
    'hover': 'none'
  },
  icon_settings={
    'show': False
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab6 fieldslayout
FieldNameTypeOptionsDefault
Columns (Desktop)layout.columnsChoice2, 3, 4, 53
Columns (Tablet)layout.columns_tabletChoice1, 2, 3, 42
Columns (Mobile)layout.columns_mobileChoice1, 21
Gaplayout.gapChoicesm, md, lg, xlmd
Content Alignmentlayout.alignmentChoiceleft, centerleft
Card Heightlayout.vertical_alignmentChoicestretch, startstretch
Card StylingStyle tab10 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Custom backgroundcard_style.bg_customColour#FFFFFF
Text Color (all cards)card_style.text_colorColour-
Icon Color (all cards)card_style.icon_colorColour-
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Hover effectcard_style.hoverChoicenone, lift, shadow, borderborder
Content spacingcard_style.content_spacingChoicexs, sm, md, lgmd
Icon SettingsStyle tab6 fieldsicon_settings
FieldNameTypeOptionsDefault
Show iconsicon_settings.showToggleon
Icon styleicon_settings.styleChoiceplain, circle, square, outlinecircle
Icon sizeicon_settings.sizeChoicesm, md, lgmd
Container sizeicon_settings.container_sizeChoicesm, md, lgmd
Icon coloricon_settings.color_sourceChoiceaccent, text, customaccent
Icon backgroundicon_settings.bg_sourceChoiceaccent_light, accent, theme, customaccent_light
FeaturesContent tabrepeater11 fieldsfeatures
FieldNameTypeOptionsDefault
Iconfeatures.iconTextcheck_circle
Image (optional)features.imageImage-
Titlefeatures.titleTextFeature Title
Descriptionfeatures.descriptionTextBrief description of this feature and its benefits.
Enable Linkfeatures.link_enabledToggleoff
Link Textfeatures.link_textTextLearn more
Linkfeatures.linkLink-
Card Background (override)features.bg_overrideColour-
Text Color (override)features.text_overrideColour-
Icon Color (override)features.icon_overrideColour-
Icon Background (override)features.icon_bg_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

List with icons

modules/List with icons.moduleLanding pagesWebsite pagesBlog listingBlog posts47 fields1 content group7 style groups

A richer relative of Feature Grid: every item can carry an icon or an image, a title, a description and its own link, and the whole card can be made clickable.

Worth knowing
  • Icon Position top, left or inline changes the card from a stacked block to a row.
  • Turn on Image Settings to replace the icon with a picture, either above the text or behind it as a background.
  • Card Clickable makes the whole card the link and hides the button.

Variations

1Four columns, boxed icons on topThe default shape: icon plate above the title, bordered card, link-style button.
HubL for this variation
{% module 'd09_list_with_icons_1'
  path='../../modules/List with icons.module',
  layout={
    'columns': '4',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md',
    'text_alignment': 'left',
    'vertical_alignment': 'stretch'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'none',
    'padding': 'md',
    'hover': 'lift'
  },
  icon_settings={
    'show': True,
    'style': 'box',
    'position': 'top',
    'color_source': 'accent',
    'bg_source': 'accent_light'
  },
  image_settings={
    'show': False
  },
  button_settings={
    'show': True,
    'style': 'link',
    'card_clickable': False
  }
%}
2Two columns, icon on the left, transparentIcon Position left with the card background off - a compact reference list.
lightbulb

Strategy

Define your goals and create a roadmap.

palette

Design

Beautiful designs that tell your story.

code

Development

Clean code with modern practices.

trending_up

Growth

Strategies to scale your business.

HubL for this variation
{% module 'd09_list_with_icons_2'
  path='../../modules/List with icons.module',
  layout={
    'columns': '2',
    'columns_tablet': '1',
    'columns_mobile': '1',
    'gap': 'lg',
    'text_alignment': 'left',
    'vertical_alignment': 'start'
  },
  card_style={
    'enable_bg': False,
    'bg_source': 'transparent',
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'none',
    'hover': 'none'
  },
  icon_settings={
    'show': True,
    'style': 'circle',
    'position': 'left',
    'color_source': 'accent',
    'bg_source': 'accent_light'
  },
  image_settings={
    'show': False
  },
  button_settings={
    'show': False,
    'card_clickable': False
  }
%}
3Three columns, pill cards, shadowRadius 2xl with a shadow and no border - a softer card for consumer sites.
lightbulb

Strategy

Define your goals and create a roadmap.

palette

Design

Beautiful designs that tell your story.

code

Development

Clean code with modern practices.

trending_up

Growth

Strategies to scale your business.

HubL for this variation
{% module 'd09_list_with_icons_3'
  path='../../modules/List with icons.module',
  layout={
    'columns': '3',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md',
    'text_alignment': 'center',
    'vertical_alignment': 'stretch'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': False,
    'radius': '2xl',
    'shadow': 'md',
    'padding': 'lg',
    'hover': 'shadow'
  },
  icon_settings={
    'show': True,
    'style': 'circle',
    'position': 'top',
    'color_source': 'accent',
    'bg_source': 'accent_solid'
  },
  image_settings={
    'show': False
  },
  button_settings={
    'show': True,
    'style': 'ghost',
    'card_clickable': True
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

47 fields across 8 groups - the groups below are collapsed. Click a group to open it.

LayoutStyle tab6 fieldslayout
FieldNameTypeOptionsDefault
Columns (Desktop)layout.columnsChoice1, 2, 3, 4, 5, 64
Columns (Tablet)layout.columns_tabletChoice1, 2, 3, 42
Columns (Mobile)layout.columns_mobileChoice1, 21
Gaplayout.gapChoicesm, md, lg, xlmd
Text alignmentlayout.text_alignmentChoiceleft, centerleft
Card heightlayout.vertical_alignmentChoicestretch, startstretch
Card StylingStyle tab10 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, transparent, customtheme
Custom backgroundcard_style.bg_customColour#FFFFFF
Bordercard_style.border_enabledToggleon
Border colorcard_style.border_sourceChoicetheme, customtheme
Custom bordercard_style.border_customColour#E4E4E7
Border radiuscard_style.radiusChoicenone, sm, md, lg, xl, 2xllg
Shadowcard_style.shadowChoicenone, sm, md, lg, xlnone
Hover effectcard_style.hoverChoicenone, lift, shadow, borderborder
Content spacingcard_style.content_spacingChoicexs, sm, md, lgmd
IconStyle tab9 fieldsicon_settings
FieldNameTypeOptionsDefault
Show iconicon_settings.showToggleon
Container styleicon_settings.styleChoiceplain, box, circlebox
Icon size (px)icon_settings.sizeNumber28
Container size (px)icon_settings.container_sizeNumber56
Positionicon_settings.positionChoicetop, left, inlinetop
Icon coloricon_settings.color_sourceChoiceaccent, primary, text, customaccent
Custom coloricon_settings.color_customColour#18181B
Container backgroundicon_settings.bg_sourceChoiceaccent_light, accent_solid, primary_light, transparent, customaccent_light
Custom backgroundicon_settings.bg_customColour#18181B
ImageStyle tab4 fieldsimage_settings
FieldNameTypeOptionsDefault
Show imageimage_settings.showToggleoff
Positionimage_settings.positionChoicetop, backgroundtop
Height (px)image_settings.heightNumber200
Aspect ratioimage_settings.ratioChoiceauto, 1/1, 4/3, 16/9, 3/2auto
TextStyle tab2 fieldstext_settings
FieldNameTypeOptionsDefault
Title sizetext_settings.title_sizeChoicesm, md, lgmd
Description sizetext_settings.desc_sizeChoicexs, sm, mdsm
Link / ButtonStyle tab3 fieldsbutton_settings
FieldNameTypeOptionsDefault
Show link/buttonbutton_settings.showToggleon
Stylebutton_settings.styleChoicelink, primary, secondary, ghostlink
Entire card clickablebutton_settings.card_clickableToggleoff
CardsContent tabrepeater11 fieldsitems
FieldNameTypeOptionsDefault
Icon (Material Symbols)items.iconTextstar
Imageitems.imageImage-
Titleitems.headingTextCard Title
Descriptionitems.descriptionTextCard description text goes here.
Enable linkitems.link_enabledToggleon
Link textitems.link_textTextLearn more
Link URLitems.linkLink-
Card Background (override)items.bg_overrideColour-
Text Color (override)items.text_overrideColour-
Icon Color (override)items.icon_overrideColour-
Icon Background (override)items.icon_bg_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Steps

modules/Steps.moduleLanding pagesWebsite pagesBlog listingBlog posts31 fields1 content group5 style groups

A numbered process. Horizontal for a three or four step overview, vertical for a longer sequence.

Worth knowing
  • The connector line is drawn between markers; turn it off when the steps sit in cards.
  • Number Style type icon replaces the digits with the icon set on each step.
  • Card Styling is off by default - the steps read as text on the page ground.

Variations

1Horizontal, filled numbers, connectorThe default overview shape.
1

Sign Up

Create your account in minutes. No credit card required.

2

Configure

Set up your preferences and connect your tools.

3

Launch

Go live and start seeing results immediately.

4

Grow

Scale your success with our powerful features.

HubL for this variation
{% module 'd10_steps_1'
  path='../../modules/Steps.module',
  layout={
    'direction': 'horizontal',
    'columns': 'auto',
    'alignment': 'center',
    'gap': 'md'
  },
  number_style={
    'type': 'number',
    'style': 'filled',
    'size': 'md',
    'color_source': 'accent'
  },
  connector_style={
    'show': True,
    'style': 'solid',
    'color': 'border'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'padding': 'none'
  }
%}
2Vertical, outlined numbers, dashed connectorDirection vertical with an outline marker. Reads as a checklist down the page.
1

Sign Up

Create your account in minutes. No credit card required.

2

Configure

Set up your preferences and connect your tools.

3

Launch

Go live and start seeing results immediately.

4

Grow

Scale your success with our powerful features.

HubL for this variation
{% module 'd10_steps_2'
  path='../../modules/Steps.module',
  layout={
    'direction': 'vertical',
    'columns': 'auto',
    'alignment': 'left',
    'gap': 'lg'
  },
  number_style={
    'type': 'number',
    'style': 'outline',
    'size': 'lg',
    'color_source': 'text'
  },
  connector_style={
    'show': True,
    'style': 'dashed',
    'color': 'accent'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'padding': 'none'
  }
%}
3Horizontal in cards, no connectorCard background and border on, connector off - each step becomes a tile.
1

Sign Up

Create your account in minutes. No credit card required.

2

Configure

Set up your preferences and connect your tools.

3

Launch

Go live and start seeing results immediately.

4

Grow

Scale your success with our powerful features.

HubL for this variation
{% module 'd10_steps_3'
  path='../../modules/Steps.module',
  layout={
    'direction': 'horizontal',
    'columns': '4',
    'alignment': 'left',
    'gap': 'md'
  },
  number_style={
    'type': 'number',
    'style': 'square',
    'size': 'md',
    'color_source': 'accent'
  },
  connector_style={
    'show': False
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'padding': 'lg'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab4 fieldslayout
FieldNameTypeOptionsDefault
Directionlayout.directionChoicehorizontal, verticalhorizontal
Columns (Horizontal)layout.columnsChoiceauto, 2, 3, 4, 5auto
Text Alignmentlayout.alignmentChoiceleft, centercenter
Gap between stepslayout.gapChoicesm, md, lg, xlmd
Step Number/IconStyle tab8 fieldsnumber_style
FieldNameTypeOptionsDefault
Indicator Typenumber_style.typeChoicenumber, icon, nonenumber
Stylenumber_style.styleChoicefilled, outline, square, plainfilled
Sizenumber_style.sizeChoicesm, md, lgmd
Colornumber_style.color_sourceChoiceaccent, text, customaccent
Custom colornumber_style.custom_colorColour#262626
Indicator sizenumber_style.indicator_sizeNumber56
Indicator text sizenumber_style.indicator_font_sizeNumber20
Mobile scalenumber_style.mobile_scaleNumber0.86
Connector LineStyle tab5 fieldsconnector_style
FieldNameTypeOptionsDefault
Show connector lineconnector_style.showToggleon
Line styleconnector_style.styleChoicesolid, dashed, dottedsolid
Line colorconnector_style.colorChoiceborder, accent, customborder
Connector thicknessconnector_style.thicknessNumber2
Dash lengthconnector_style.dash_lengthNumber8
Card StylingStyle tab5 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleoff
Background colorcard_style.bg_sourceChoicetheme, customtheme
Bordercard_style.border_enabledToggleoff
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Paddingcard_style.paddingChoicenone, sm, md, lg, xlnone
StepsContent tabrepeater7 fieldssteps
FieldNameTypeOptionsDefault
Titlesteps.titleTextStep title
Descriptionsteps.descriptionTextStep description goes here.
Icon (if using icons)steps.iconTextcheck_circle
Card Background (override)steps.bg_overrideColour-
Text Color (override)steps.text_overrideColour-
Icon / Number Color (override)steps.icon_overrideColour-
Icon / Number Background (override)steps.icon_bg_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Stats

modules/Stats.moduleANY15 fields1 content group2 style groups

A row of numbers with labels. Counts animate up when the section scrolls into view.

Worth knowing
  • Layout row spreads the stats on one line with optional dividers; grid wraps them into the column count you set.
  • Number Size is a token choice, not a pixel value, so it tracks the theme type scale.

Variations

1Row with dividers, extra large numbersThe default banner of figures.
200+
Projects Delivered
50+
Happy Clients
15
Team Members
8
Years Experience
HubL for this variation
{% module 'd11_stats_1'
  path='../../modules/Stats.module',
  style={
    'layout': 'row',
    'columns': '4',
    'text_alignment': 'center',
    'dividers': True,
    'number_size': 'xl'
  }
%}
2Grid, three columns, no dividersLayout grid with dividers off and a smaller number size - for stats inside a section.
200+
Projects Delivered
50+
Happy Clients
15
Team Members
8
Years Experience
HubL for this variation
{% module 'd11_stats_2'
  path='../../modules/Stats.module',
  style={
    'layout': 'grid',
    'columns': '3',
    'text_alignment': 'left',
    'dividers': False,
    'number_size': 'lg'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

StyleStyle tab8 fieldsstyle
FieldNameTypeOptionsDefault
Layoutstyle.layoutChoicerow, gridrow
Columns (grid layout)style.columnsChoice2, 3, 4, 54
Text alignmentstyle.text_alignmentChoiceleft, centercenter
Show dividersstyle.dividersToggleon
Number sizestyle.number_sizeChoicemd, lg, xllg
Gap between statsstyle.gapChoicesm, md, lg, xlmd
Content spacingstyle.content_spacingChoicexs, sm, md, lgxs
Tinted item paddingstyle.item_paddingChoicesm, md, lg, xlmd
StatsContent tabrepeater5 fieldsstats
FieldNameTypeOptionsDefault
Number/Valuestats.numberText100+
Labelstats.stat_labelTextStat Label
Description (optional)stats.descriptionText-
Card Background (override)stats.bg_overrideColour-
Text Color (override)stats.text_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Tabs

modules/Tabs.moduleLanding pagesWebsite pagesBlog listingBlog posts27 fields2 content groups4 style groups

Tabbed panels. Each tab has an icon, a label and a rich text body.

Worth knowing
  • Layout Style changes the tab strip itself: underline, pills, buttons or minimal.
  • Vertical on moves the strip to the left of the panel.
  • Content Animation fade or slide runs on tab change; set none if the panels are tall enough that motion is distracting.

Variations

1Underline tabs, left alignedThe default. A thin indicator under the active tab.

Overview content goes here. Describe the main points and key information.

Features content goes here. List out the features and benefits.

Specifications content goes here. Include technical details and requirements.

HubL for this variation
{% module 'd12_tabs_1'
  path='../../modules/Tabs.module',
  layout={
    'style': 'underline',
    'alignment': 'left',
    'vertical': False,
    'icon_position': 'left'
  },
  tab_style={
    'bg_active': 'none',
    'text_color_active': 'accent',
    'indicator_color': 'accent',
    'radius': 'sm',
    'gap': 'sm'
  },
  content_style={
    'enable_bg': False,
    'border': False,
    'padding': 'md',
    'animation': 'fade'
  }
%}
2Pills, centred, panel on a cardRounded pills on the accent wash with the panel given its own background and border.

Overview content goes here. Describe the main points and key information.

Features content goes here. List out the features and benefits.

Specifications content goes here. Include technical details and requirements.

HubL for this variation
{% module 'd12_tabs_2'
  path='../../modules/Tabs.module',
  layout={
    'style': 'pills',
    'alignment': 'center',
    'vertical': False,
    'icon_position': 'left'
  },
  tab_style={
    'bg_active': 'accent_light',
    'text_color_active': 'accent',
    'indicator_color': 'accent',
    'radius': 'full',
    'gap': 'sm'
  },
  content_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border': True,
    'padding': 'lg',
    'animation': 'fade'
  }
%}
3Vertical stripVertical on - the tab list runs down the left, the panel fills the rest.

Overview content goes here. Describe the main points and key information.

Features content goes here. List out the features and benefits.

Specifications content goes here. Include technical details and requirements.

HubL for this variation
{% module 'd12_tabs_3'
  path='../../modules/Tabs.module',
  layout={
    'style': 'minimal',
    'alignment': 'left',
    'vertical': True,
    'icon_position': 'left'
  },
  tab_style={
    'bg_active': 'theme',
    'text_color_active': 'text',
    'indicator_color': 'accent',
    'radius': 'md',
    'gap': 'xs'
  },
  content_style={
    'enable_bg': False,
    'border': False,
    'padding': 'md',
    'animation': 'none'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab4 fieldslayout
FieldNameTypeOptionsDefault
Tab Stylelayout.styleChoiceunderline, pills, buttons, minimalunderline
Tab Alignmentlayout.alignmentChoiceleft, center, stretchleft
Vertical tabs (desktop)layout.verticalToggleoff
Icon Positionlayout.icon_positionChoiceleft, top, noneleft
Tab Button StylingStyle tab9 fieldstab_style
FieldNameTypeOptionsDefault
Active tab backgroundtab_style.bg_activeChoicenone, theme, accent, accent_lightnone
Active tab text colortab_style.text_color_activeChoiceaccent, text, whiteaccent
Indicator colortab_style.indicator_colorChoiceaccent, text, customaccent
Custom indicator colortab_style.indicator_customColour#3B82F6
Tab border radiustab_style.radiusChoicenone, sm, md, lg, fullsm
Gap between tabstab_style.gapChoicenone, xs, sm, md, lgsm
Tab strip tracktab_style.track_surfaceChoicemuted, card, nonemuted
Track paddingtab_style.track_padChoicenone, xs, sm, mdxs
Active tab surfacetab_style.indicator_surfaceChoicecard, accent, nonecard
Content Panel StylingStyle tab8 fieldscontent_style
FieldNameTypeOptionsDefault
Content backgroundcontent_style.enable_bgToggleoff
Background colorcontent_style.bg_sourceChoicetheme, customtheme
Content bordercontent_style.borderToggleoff
Content paddingcontent_style.paddingChoicenone, sm, md, lg, xlmd
Transition animationcontent_style.animationChoicenone, fade, slidefade
Join strip to panelcontent_style.attach_panelToggleon
Container radiuscontent_style.shell_radiusChoicenone, sm, md, lg, xllg
Panel reading measurecontent_style.panel_measureChoicenone, prose, wideprose
TabsContent tabrepeater3 fieldstabs
FieldNameTypeOptionsDefault
Tab Labeltabs.titleTextTab
Icontabs.iconText-
Contenttabs.contentRich text<p>Tab content goes here.</p>
AccessibilityContent tab1 fielda11y
FieldNameTypeOptionsDefault
Tab strip descriptiona11y.tablist_labelTextContent sections
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Accordion

modules/Accordion.moduleLanding pagesWebsite pagesBlog listingBlog posts20 fields1 content group3 style groups

Collapsible rows. Use it for anything long that a reader should be able to skip.

Worth knowing
  • Accordion Style separated draws each row as its own card, connected joins them into one bordered stack, minimal removes the card entirely.
  • Allow Multiple Open off closes the previous row when a new one opens.
  • For question and answer content use the FAQs module instead - it adds schema markup and a column layout.

Variations

1Separated cards, chevron rightThe default. Each row is its own card with radius lg.

Our package includes everything you need to get started. This includes setup, onboarding, and ongoing support.

Simply sign up, complete the onboarding process, and you're ready to go. Our team will guide you through each step.

Yes, you can cancel your subscription at any time. No long-term contracts or hidden fees.

HubL for this variation
{% module 'd13_accordion_1'
  path='../../modules/Accordion.module',
  layout={
    'style': 'separated',
    'allow_multiple': False,
    'first_open': True,
    'gap': 'md'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'none',
    'padding': 'md',
    'hover': 'none'
  },
  icon_style={
    'type': 'chevron',
    'position': 'right',
    'style': 'plain',
    'color_source': 'text'
  }
%}
2Connected list, plus icon on the leftOne bordered stack, no gap, with the toggle marker before the heading.

Our package includes everything you need to get started. This includes setup, onboarding, and ongoing support.

Simply sign up, complete the onboarding process, and you're ready to go. Our team will guide you through each step.

Yes, you can cancel your subscription at any time. No long-term contracts or hidden fees.

HubL for this variation
{% module 'd13_accordion_2'
  path='../../modules/Accordion.module',
  layout={
    'style': 'connected',
    'allow_multiple': True,
    'first_open': False,
    'gap': 'none'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': True,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'md',
    'hover': 'none'
  },
  icon_style={
    'type': 'plus',
    'position': 'left',
    'style': 'plain',
    'color_source': 'accent'
  }
%}
3Minimal, circled chevron, shadow on hoverNo card, a circled marker and a hover shadow - the lightest of the three.

Our package includes everything you need to get started. This includes setup, onboarding, and ongoing support.

Simply sign up, complete the onboarding process, and you're ready to go. Our team will guide you through each step.

Yes, you can cancel your subscription at any time. No long-term contracts or hidden fees.

HubL for this variation
{% module 'd13_accordion_3'
  path='../../modules/Accordion.module',
  layout={
    'style': 'minimal',
    'allow_multiple': False,
    'first_open': False,
    'gap': 'sm'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'xl',
    'shadow': 'none',
    'padding': 'sm',
    'hover': 'shadow'
  },
  icon_style={
    'type': 'chevron',
    'position': 'right',
    'style': 'circle',
    'color_source': 'accent'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab4 fieldslayout
FieldNameTypeOptionsDefault
Accordion Stylelayout.styleChoiceseparated, connected, minimalminimal
Allow multiple openlayout.allow_multipleToggleoff
First item open by defaultlayout.first_openToggleoff
Gap between itemslayout.gapChoicenone, sm, md, lg, xlnone
Card StylingStyle tab9 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Custom backgroundcard_style.bg_customColour#FFFFFF
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Paddingcard_style.paddingChoicesm, md, lg, xlmd
Hover effectcard_style.hoverChoicenone, shadow, bordernone
Body line heightcard_style.desc_leadingNumber1.625
Icon StyleStyle tab4 fieldsicon_style
FieldNameTypeOptionsDefault
Icon typeicon_style.typeChoicechevron, plus, arrow, nonechevron
Icon positionicon_style.positionChoiceright, leftright
Icon styleicon_style.styleChoiceplain, circleplain
Icon coloricon_style.color_sourceChoicetext, accent, customtext
Accordion ItemsContent tabrepeater3 fieldsitems
FieldNameTypeOptionsDefault
Headingitems.headingTextAccordion heading
Icon (optional)items.iconText-
Contentitems.contentRich text<p>Accordion content goes here.</p>
Back to top

FAQs

modules/FAQs.moduleLanding pagesWebsite pagesBlog listingBlog posts69 fields6 content groups6 style groups

Questions and answers. Same interaction as the Accordion, plus a column layout and structured data for search engines.

Worth knowing
  • Columns above one splits the list into balanced columns on desktop and collapses to one on mobile.
  • Max Width caps the list even when the section is wide - long answers get hard to read past about 70 characters a line.
  • Prefer this over Accordion for anything phrased as a question.

Variations

1One column, cards with a shadowThe default, capped at max width lg so the lines stay readable.

We offer a full range of digital services including web design, development, branding, and digital marketing.

Project timelines vary based on scope and complexity. A typical website project takes 4-8 weeks from kickoff to launch.

Yes, we offer various support and maintenance packages to keep your website running smoothly after launch.

HubL for this variation
{% module 'd14_faqs_1'
  path='../../modules/FAQs.module',
  layout={
    'columns': '1',
    'columns_tablet': '1',
    'columns_mobile': '1',
    'max_width': 'lg',
    'gap': 'md'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'sm',
    'padding': 'md',
    'hover': 'shadow'
  },
  icon_style={
    'type': 'circle',
    'color_source': 'accent'
  }
%}
2Two columns, flat, full widthColumns two with the card fill and shadow off - a denser block for a support page.

We offer a full range of digital services including web design, development, branding, and digital marketing.

Project timelines vary based on scope and complexity. A typical website project takes 4-8 weeks from kickoff to launch.

Yes, we offer various support and maintenance packages to keep your website running smoothly after launch.

HubL for this variation
{% module 'd14_faqs_2'
  path='../../modules/FAQs.module',
  layout={
    'columns': '2',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'max_width': 'full',
    'gap': 'lg'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': True,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'sm',
    'hover': 'none'
  },
  icon_style={
    'type': 'plain',
    'color_source': 'text'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

69 fields across 12 groups - the groups below are collapsed. Click a group to open it.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
ModemodeChoicefaq, accordion-
HeaderContent tab4 fieldsheader
FieldNameTypeOptionsDefault
Eyebrowheader.eyebrowText-
Headingheader.headingText-
Heading tagheader.heading_tagChoiceh1, h2, h3, h4h2
Subtitleheader.subtitleText-
Q&AContent tabrepeater7 fieldsq_a
FieldNameTypeOptionsDefault
Questionq_a.questionTextWhat is your question?
Answerq_a.answerRich text<p>This is the answer to your question.</p>
Categoryq_a.categoryText-
Leading icon (optional)q_a.iconText-
Card Background (override)q_a.bg_overrideColour-
Text Color (override)q_a.text_overrideColour-
Icon Color (override)q_a.icon_overrideColour-
Search & filtersContent tab15 fieldsfilters
FieldNameTypeOptionsDefault
Category filter buttonsfilters.enable_categoriesToggleoff
All-categories button textfilters.all_labelTextAll
All-categories headingfilters.all_titleText-
All-categories descriptionfilters.all_descriptionText-
Filter column headingfilters.rail_titleTextTopics
Search boxfilters.enable_searchToggleoff
Search placeholderfilters.search_placeholderTextSearch questions
Search field screen-reader labelfilters.search_labelTextSearch questions
Result countfilters.show_countToggleoff
Result count textfilters.count_labelTextShowing {shown} of {total}
Empty state headingfilters.empty_titleTextNo questions match
Empty state textfilters.empty_bodyTextTry a different word, or clear the filters to see everything.
Empty state button textfilters.reset_labelTextClear filters
Remember filters in the URLfilters.url_stateToggleon
URL parameter prefixfilters.url_paramTextfaq
Category titlesContent tabrepeater4 fieldscategory_meta
FieldNameTypeOptionsDefault
Category keycategory_meta.cat_keyText-
Category headingcategory_meta.cat_titleText-
Category descriptioncategory_meta.cat_descText-
Filter button text (optional)category_meta.cat_chipText-
SEOContent tab1 fieldseo
FieldNameTypeOptionsDefault
FAQPage structured dataseo.enable_json_ldToggleon
LayoutStyle tab8 fieldslayout
FieldNameTypeOptionsDefault
Arrangementlayout.styleChoicestacked, split, railstacked
Side column ratiolayout.split_ratioChoice1-1, 1-2, 1-3, 2-31-2
Sticky offsetlayout.sticky_topNumber96
Columnslayout.columnsChoice1, 2, 3, 4, 51
Columns (Tablet)layout.columns_tabletChoice1, 21
Columns (Mobile)layout.columns_mobileChoice11
Max Widthlayout.max_widthChoicesm, md, lg, fulllg
Gap between itemslayout.gapChoicenone, sm, md, lg, xlsm
BehaviourStyle tab4 fieldsbehavior
FieldNameTypeOptionsDefault
Open the first itembehavior.open_firstToggleoff
Allow several open at oncebehavior.allow_multipleToggleon
Animate openingbehavior.animateToggleon
Open/close speedbehavior.durationNumber260
Card StylingStyle tab10 fieldscard_style
FieldNameTypeOptionsDefault
Card treatmentcard_style.variantChoiceseparated, connected, minimalseparated
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Custom backgroundcard_style.bg_customColour#FFFFFF
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Card padding — sidescard_style.padding_xNumber22
Card padding — top and bottomcard_style.padding_yNumber16
Hover effectcard_style.hoverChoicenone, tint, lift, shadow, bordertint
Icon StyleStyle tab6 fieldsicon_style
FieldNameTypeOptionsDefault
Expand iconicon_style.glyphChoicechevron, plus, arrow, nonechevron
Icon positionicon_style.positionChoiceleft, rightright
Icon shapeicon_style.typeChoicecircle, plainplain
Icon coloricon_style.color_sourceChoiceaccent, text, customtext
Custom icon coloricon_style.custom_colorColour#000000
Icon sizeicon_style.sizeNumber22
TypographyStyle tab7 fieldstypography
FieldNameTypeOptionsDefault
Question sizetypography.question_sizeNumber17
Answer sizetypography.answer_sizeNumber16
Category heading sizetypography.cathead_sizeNumber20
Question line heighttypography.question_line_heightNumber1.4
Answer line heighttypography.answer_line_heightNumber1.65
Tablet type scaletypography.tablet_scaleNumber0.95
Mobile type scaletypography.mobile_scaleNumber0.9
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Timeline

modules/Timeline.moduleLanding pagesWebsite pagesBlog listingBlog posts15 fields1 content group2 style groups

A dated sequence alternating left and right of a centre line. For company history, roadmaps and case study narratives.

Worth knowing
  • Each event can carry a featured image, which appears at the top of its card.
  • Dates use a HubSpot date field - the stored value is a timestamp, and the module formats it for display.
  • Add Link turns the whole card into a link.

Variation

1Alternating cardsThe module has one layout. Content and images are per event.
1

Company founded

Our journey began with a vision to transform the industry.

2

First major milestone

We achieved our first significant goal and expanded operations.

3

Looking to the future

Continuing to innovate and grow with our customers.

HubL for this variation
{% module 'd15_timeline_1' path='../../modules/Timeline.module' %}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

EventContent tabrepeater8 fieldsevent
FieldNameTypeOptionsDefault
Titleevent.titleTextEvent title
Descriptionevent.descriptionTextBrief description of this event or milestone.
Featured imageevent.featured_imageImage-
Dateevent.date_fieldDate1638248400000
Add link?event.add_link_Toggleoff
Linkevent.linkURL-
Card Background (override)event.bg_overrideColour-
Text Color (override)event.text_overrideColour-
Timeline StylingStyle tab5 fieldstimeline_style
FieldNameTypeOptionsDefault
Rail weighttimeline_style.rail_weightChoicehairline, doublehairline
Rail colourtimeline_style.rail_colorChoiceborder, accentborder
Dot sizetimeline_style.dot_sizeChoicesm, md, lgmd
Space between eventstimeline_style.gapChoicelg, xl, 2xl2xl
Event image heighttimeline_style.image_heightChoicesm, md, lgmd
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Changelog Entry

modules/Changelog Entry.moduleLanding pagesWebsite pagesBlog listingBlog posts26 fields1 content group4 style groups

Release notes. Each entry has a version, a date and a list of changes tagged new, improved, fixed or deprecated.

Worth knowing
  • Layout Style timeline runs a rail down the left; cards gives each release its own panel; simple is plain text.
  • Date Format relative renders as time since release, which goes stale on a cached page - prefer full or short for pages that are not rebuilt often.

Variations

1Timeline railThe default. A dated rail with the change list beside it.
v2.1.0

Dashboard Redesign

Major update to the dashboard with new analytics features.

  • add_circle New New analytics dashboard with real-time metrics
  • add_circle New Custom report builder
  • upgrade Improved Faster page load times
  • build Fixed Fixed chart rendering on mobile
v2.0.0

Major Release

Complete platform overhaul with new features.

  • add_circle New Brand new user interface
  • add_circle New Team collaboration features
  • upgrade Improved Enhanced security protocols
  • remove_circle Deprecated Removed legacy API v1
HubL for this variation
{% module 'd16_changelog_entry_1'
  path='../../modules/Changelog Entry.module',
  layout={
    'style': 'timeline',
    'date_format': 'full',
    'show_version': True
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'none',
    'padding': 'md'
  }
%}
2Cards, square, shadowLayout cards with radius none and a shadow - the shape used on a product updates page.
v2.1.0

Dashboard Redesign

Major update to the dashboard with new analytics features.

  • add_circle New New analytics dashboard with real-time metrics
  • add_circle New Custom report builder
  • upgrade Improved Faster page load times
  • build Fixed Fixed chart rendering on mobile
v2.0.0

Major Release

Complete platform overhaul with new features.

  • add_circle New Brand new user interface
  • add_circle New Team collaboration features
  • upgrade Improved Enhanced security protocols
  • remove_circle Deprecated Removed legacy API v1
HubL for this variation
{% module 'd16_changelog_entry_2'
  path='../../modules/Changelog Entry.module',
  layout={
    'style': 'cards',
    'date_format': 'short',
    'show_version': True
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'md',
    'padding': 'lg'
  }
%}
3SimpleNo card at all. Version, date and the changes as plain text.
v2.1.0

Dashboard Redesign

Major update to the dashboard with new analytics features.

  • add_circle New New analytics dashboard with real-time metrics
  • add_circle New Custom report builder
  • upgrade Improved Faster page load times
  • build Fixed Fixed chart rendering on mobile
v2.0.0

Major Release

Complete platform overhaul with new features.

  • add_circle New Brand new user interface
  • add_circle New Team collaboration features
  • upgrade Improved Enhanced security protocols
  • remove_circle Deprecated Removed legacy API v1
HubL for this variation
{% module 'd16_changelog_entry_3'
  path='../../modules/Changelog Entry.module',
  layout={
    'style': 'simple',
    'date_format': 'full',
    'show_version': True
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'sm'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab8 fieldslayout
FieldNameTypeOptionsDefault
Layout Stylelayout.styleChoicetimeline, cards, simpletimeline
Date Formatlayout.date_formatChoicefull, short, relativefull
Show Version Badgelayout.show_versionToggleon
Timeline rail columnlayout.marker_widthChoicesm, md, lgmd
Timeline dot sizelayout.dot_sizeChoicesm, md, lgsm
Rail weightlayout.rail_weightChoicehairline, doublehairline
Space between entrieslayout.entry_gapChoicemd, lg, xl, 2xlxl
Change badge stylelayout.badge_styleChoicecoss, tintcoss
Card StylingStyle tab6 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, mdnone
Paddingcard_style.paddingChoicesm, md, lg, xlmd
Badge ColorsStyle tab4 fieldsbadge_colors
FieldNameTypeOptionsDefault
New Featurebadge_colors.newColour#171717
Improvementbadge_colors.improvedColour#404040
Bug Fixbadge_colors.fixedColour#525252
Deprecatedbadge_colors.deprecatedColour#737373
Changelog EntriesContent tabrepeater6 fieldsentries
FieldNameTypeOptionsDefault
Versionentries.versionText1.0.0
Release Dateentries.dateDate-
Release Title (optional)entries.titleText-
Release Summary (optional)entries.descriptionText-
Changesentries.changesRepeaterrepeats-
Typeentries.changes.typeChoicenew, improved, fixed, deprecatednew
Descriptionentries.changes.textTextDescription of the change
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Comparison Table

modules/Comparison Table.moduleLanding pagesWebsite pagesBlog listingBlog posts45 fields5 content groups5 style groups

A feature matrix. Rows are features, columns are plans or products, and each cell can be a tick, a cross, a partial mark or free text.

Worth knowing
  • Sticky Header and Sticky First Column keep the plan names and the feature names on screen while a long table scrolls.
  • One column can be highlighted; the highlight colour and its badge are set in Highlight Styling.
  • The tick, cross and partial colours map to the theme success, muted and warning tokens by default.

Variations

1Standard table, sticky, highlighted columnThe default. Bordered, radius lg, with the middle column marked.
Feature
Recommended Us Best choice
Competitor A
Unlimited users
Included
Not included
Priority support info
Included
Not applicable
Advanced analytics
Included
Not included
Recommended Us Best choice
  • Unlimited users
  • Priority support
  • Advanced analytics
Competitor A
  • Unlimited users
  • Priority support
  • Advanced analytics

The same in every column

  • Custom integrations Included
  • API access Included
HubL for this variation
{% module 'd17_comparison_table_1'
  path='../../modules/Comparison Table.module',
  layout={
    'style': 'standard',
    'sticky_header': True,
    'sticky_first_col': True
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'sm'
  },
  highlight_style={
    'bg_source': 'accent_light',
    'badge': True
  },
  icons_style={
    'check_color': 'success',
    'cross_color': 'muted',
    'partial_color': 'warning'
  }
%}
2Minimal, no cardLayout minimal with the surrounding card removed - rules only.
Feature
Us Best choice
Competitor A
Unlimited users
Included
Not included
Priority support info
Included
Not applicable
Advanced analytics
Included
Not included
Us Best choice
  • Unlimited users
  • Priority support
  • Advanced analytics
Competitor A
  • Unlimited users
  • Priority support
  • Advanced analytics

The same in every column

  • Custom integrations Included
  • API access Included
HubL for this variation
{% module 'd17_comparison_table_2'
  path='../../modules/Comparison Table.module',
  layout={
    'style': 'minimal',
    'sticky_header': False,
    'sticky_first_col': True
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none'
  },
  highlight_style={
    'bg_source': 'accent_light',
    'badge': False
  },
  icons_style={
    'check_color': 'accent',
    'cross_color': 'muted',
    'partial_color': 'warning'
  }
%}
3Card columnsLayout cards turns each column into a standalone panel - better on narrow screens.
Feature
Recommended Us Best choice
Competitor A
Unlimited users
Included
Not included
Priority support info
Included
Not applicable
Advanced analytics
Included
Not included
Recommended Us Best choice
  • Unlimited users
  • Priority support
  • Advanced analytics
Competitor A
  • Unlimited users
  • Priority support
  • Advanced analytics

The same in every column

  • Custom integrations Included
  • API access Included
HubL for this variation
{% module 'd17_comparison_table_3'
  path='../../modules/Comparison Table.module',
  layout={
    'style': 'cards',
    'sticky_header': False,
    'sticky_first_col': False
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'xl',
    'shadow': 'md'
  },
  highlight_style={
    'bg_source': 'accent',
    'badge': True
  },
  icons_style={
    'check_color': 'success',
    'cross_color': 'muted',
    'partial_color': 'warning'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab11 fieldslayout
FieldNameTypeOptionsDefault
Table Stylelayout.styleChoicestandard, cards, minimalstandard
Highlight Columnlayout.highlight_columnNumber1
Sticky Header Rowlayout.sticky_headerToggleon
Sticky First Columnlayout.sticky_first_colToggleon
Cell paddinglayout.cell_paddingChoicesm, md, lg, xlmd
Content spacinglayout.content_spacingChoicexs, sm, md, lgsm
Feature column widthlayout.feature_col_widthChoiceequal, wide, widerwide
Minimum column widthlayout.min_column_widthChoicesm, md, lgmd
Grid lineslayout.grid_linesChoicehorizontal, bothhorizontal
Header row surfacelayout.header_bandChoicemuted, nonemuted
Switch to cards belowlayout.card_switchChoicemobile, tablettablet
Card StylingStyle tab6 fieldscard_style
FieldNameTypeOptionsDefault
Table backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Custom backgroundcard_style.bg_customColour#FFFFFF
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Highlight Column StyleStyle tab4 fieldshighlight_style
FieldNameTypeOptionsDefault
Backgroundhighlight_style.bg_sourceChoiceaccent_light, accent, customaccent_light
Custom backgroundhighlight_style.bg_customColour-
Show 'Recommended' badgehighlight_style.badgeToggleon
Column subheading tonehighlight_style.subheading_toneChoicestrong, mutedstrong
Highlight BadgeContent tab1 fieldhighlight_content
FieldNameTypeOptionsDefault
Badge texthighlight_content.badge_textTextRecommended
Icon ColorsStyle tab6 fieldsicons_style
FieldNameTypeOptionsDefault
Check coloricons_style.check_colorChoicesuccess, accent, customaccent
Custom check coloricons_style.check_customColour#22C55E
Cross coloricons_style.cross_colorChoicemuted, error, custommuted
Custom cross coloricons_style.cross_customColour#EF4444
Partial coloricons_style.partial_colorChoicewarning, accent, customaccent
Custom partial coloricons_style.partial_customColour#F59E0B
Icon NamesContent tab3 fieldsicons
FieldNameTypeOptionsDefault
Check iconicons.check_iconTextcheck_circle
Cross iconicons.cross_iconTextcancel
Partial iconicons.partial_iconTextremove
ColumnsContent tabrepeater8 fieldscolumns
FieldNameTypeOptionsDefault
Column Headingcolumns.headingTextProduct
Subheading (optional)columns.subheadingText-
Logo (optional)columns.logoImage-
CTA Button Textcolumns.cta_textText-
CTA Button Linkcolumns.cta_linkLink-
CTA Button Stylecolumns.cta_styleChoiceprimary, secondary, ghost, linkprimary
Card Background (override)columns.bg_overrideColour-
Text Color (override)columns.text_overrideColour-
Feature RowsContent tabrepeater3 fieldsrows
FieldNameTypeOptionsDefault
Feature Namerows.featureTextFeature name
Tooltip (optional)rows.tooltipText-
Valuesrows.valuesText-, yes, no
AccessibilityContent tab1 fielda11y
FieldNameTypeOptionsDefault
Table descriptiona11y.scroll_labelTextPlan comparison
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Pillar Content

modules/Pillar Content.moduleLanding pagesWebsite pagesBlog listingBlog posts25 fields2 content groups3 style groups

A long pillar page with a sticky topic selector. Each section gets an anchor and the selector scrolls to it.

Worth knowing
  • Sections are a repeater; the selector is built from their titles, so there is nothing to keep in sync by hand.
  • Each section can carry its own list of links.
  • Pair it with templates/website-pages/pillar.html, which is laid out for this module.

Variation

1Sticky topic selectorThe module has one layout; the content is the repeater.

Section Title

Add your section content here.

HubL for this variation
{% module 'd18_pillar_content_1' path='../../modules/Pillar Content.module' %}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
Table of Contents texttable_of_contents_textText-
SectionContent tabrepeater7 fieldssection
FieldNameTypeOptionsDefault
Section titlesection.section_titleTextSection Title
Section contentsection.section_contentRich text<p>Add your section content here.</p>
Add links to this section?section.add_links_to_this_section_Toggleoff
Linkssection.linksGroup-
Titlesection.links.titleText-
Linkssection.links.linksRepeaterrepeats-
Display textsection.links.links.display_textTextLink text
URLsection.links.links.urlURL-
Open link in a new tab?section.links.links.open_link_in_a_new_tab_Toggleoff
Table of contentsStyle tab9 fieldstoc
FieldNameTypeOptionsDefault
Show table of contentstoc.enableToggleon
Positiontoc.positionChoiceleft, right, topleft
Sidebar widthtoc.widthNumber260
Gap between sidebar and contenttoc.gapNumber56
Sticky offsettoc.sticky_offsetNumber32
Number the entriestoc.show_numbersToggleon
Also list headings from the contenttoc.heading_levelsChoicenone, h2, h2,h3, h2,h3,h4h2,h3
On mobiletoc.mobile_behaviorChoiceaccordion, drawer, hiddenaccordion
Space between entriestoc.entry_gapNumber7
Reading columnStyle tab6 fieldsreading
FieldNameTypeOptionsDefault
Prose measurereading.content_max_widthNumber680
Space between sectionsreading.section_gapNumber80
Rule between sectionsreading.show_dividersToggleon
Space between paragraphsreading.paragraph_gapNumber20
Space above a headingreading.heading_gapNumber36
Space under a section titlereading.title_gapNumber20
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Cards, media and people

Repeating card layouts: work, resources, video, logos, galleries, team and testimonials.

Full-width cards

modules/Full-width cards.moduleLanding pagesWebsite pagesBlog listingBlog posts24 fields1 content group2 style groups

Large image cards with the text either over the picture or underneath it. Grid, featured and masonry layouts.

Worth knowing
  • Text Position overlay needs a dark enough image; the Overlay Style choice sets whether the scrim is always on, only on hover, or a gradient from the bottom.
  • Image Ratio crops every card to the same shape, so mixed source images still line up.
  • Layout featured makes the first card span two columns.

Variations

1Featured, overlay text, roundedThe default. First card double width, gradient scrim, zoom on hover.
Mobile App
Development

FinFlow Mobile App

E-commerce
E-commerce

Artisan Marketplace

SaaS Platform
SaaS

CloudSync Dashboard

HubL for this variation
{% module 'd19_full_width_cards_1'
  path='../../modules/Full-width cards.module',
  style={
    'layout': 'featured',
    'columns': '2',
    'image_ratio': '4/3',
    'text_position': 'overlay',
    'overlay_style': 'gradient',
    'show_label': True,
    'show_description': False,
    'gap': 'md',
    'rounded': True,
    'hover_effect': 'zoom'
  }
%}
2Grid, text below, square cornersText Position below with rounded off - a plainer, more editorial card.
Brand Redesign
Branding

Nexus Tech Brand Redesign

Complete brand identity overhaul for a leading tech company.

Mobile App
Development

FinFlow Mobile App

Award-winning fintech application with 100k+ downloads.

E-commerce
E-commerce

Artisan Marketplace

Custom e-commerce platform connecting artisans globally.

SaaS Platform
SaaS

CloudSync Dashboard

Enterprise SaaS dashboard serving Fortune 500 companies.

HubL for this variation
{% module 'd19_full_width_cards_2'
  path='../../modules/Full-width cards.module',
  style={
    'layout': 'grid',
    'columns': '3',
    'image_ratio': '16/9',
    'text_position': 'below',
    'overlay_style': 'gradient',
    'show_label': True,
    'show_description': True,
    'gap': 'lg',
    'rounded': False,
    'hover_effect': 'lift'
  }
%}
3Masonry, square images, no gapMasonry with ratio 1/1 and gap none - the cards form one continuous block.
Brand Redesign

Nexus Tech Brand Redesign

Mobile App

FinFlow Mobile App

E-commerce

Artisan Marketplace

SaaS Platform

CloudSync Dashboard

HubL for this variation
{% module 'd19_full_width_cards_3'
  path='../../modules/Full-width cards.module',
  style={
    'layout': 'masonry',
    'columns': '3',
    'image_ratio': '1/1',
    'text_position': 'overlay',
    'overlay_style': 'always',
    'show_label': False,
    'show_description': False,
    'gap': 'none',
    'rounded': False,
    'hover_effect': 'both'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

StyleStyle tab14 fieldsstyle
FieldNameTypeOptionsDefault
Layoutstyle.layoutChoicegrid, featured, masonryfeatured
Columnsstyle.columnsChoice2, 3, 4, 52
Image ratiostyle.image_ratioChoice16/9, 4/3, 1/1, 3/44/3
Text positionstyle.text_positionChoiceoverlay, belowoverlay
Overlay stylestyle.overlay_styleChoicegradient, full, alwaysgradient
Show category labelstyle.show_labelToggleon
Show descriptionstyle.show_descriptionToggleoff
Gap between itemsstyle.gapChoicenone, sm, md, lg, xlmd
Rounded cornersstyle.roundedToggleon
Hover effectstyle.hover_effectChoicenone, zoom, lift, bothzoom
Content spacingstyle.content_spacingChoicexs, sm, md, lgxs
Overlay colourstyle.overlay_colorColour-
Card title sizestyle.title_sizeChoicexs, sm, body, lg, h5, h4, h3, h2h3
Body line heightstyle.desc_leadingNumber1.45
ProjectsContent tabrepeater8 fieldspost
FieldNameTypeOptionsDefault
Project imagepost.imageImage-
Categorypost.post_labelTextCategory
Titlepost.post_titleTextProject Title
Descriptionpost.post_short_descriptionText-
Add linkpost.add_link_to_the_card_Toggleon
Link URLpost.linkLink-
Card Background (override)post.bg_overrideColour-
Text Color (override)post.text_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Portfolio Grid

modules/Portfolio Grid.moduleLanding pagesWebsite pagesBlog listingBlog posts23 fields3 content groups1 style group

Project cards with a category, a year, a title, a description and tags.

Worth knowing
  • Columns is the only layout control. Everything else - image, tags, link - is per project.
  • A card opens the project in place by default: a drawer that rises from the bottom edge, or one that slides in from the left. There is no right-hand drawer, by design.
  • The close control sits in the panel top-right corner in every mode, Escape closes the panel, and focus is held inside it while it is open.
  • Detail panel content is per project rich text. Left empty, the panel falls back to the short description.
  • Set Interaction to Follow the project link to go back to plain navigating cards.
  • Per-card background and text colour overrides are available on each project for one-off treatments.

Variations

1Three columnsThe default density for a work page.
Brand Strategy 2024

TechFlow SaaS Rebrand

Complete brand transformation for a B2B SaaS company, including visual identity and messaging framework.

Branding Strategy
Web Design 2024

Vertex Financial Platform

Modern web platform design for a fintech startup, focusing on user experience and conversion optimization.

UI/UX Web Design
Development 2023

GreenLeaf E-commerce

Full-stack e-commerce development with custom CMS integration and payment processing.

Development E-commerce
Brand Identity 2023

Nova Healthcare Identity

Healthcare brand identity system including logo, guidelines, and marketing collateral.

Identity Healthcare
Digital Marketing 2023

Summit Education Campaign

Integrated digital marketing campaign driving 150% increase in enrollment inquiries.

Marketing Education
Web Development 2023

CloudSync Dashboard

Enterprise dashboard development with real-time data visualization and analytics integration.

Development Dashboard
HubL for this variation
{% module 'd20_portfolio_grid_1'
  path='../../modules/Portfolio Grid.module',
  style={
    'columns': '3'
  }
%}
2Two columnsFewer, larger cards - for a small body of work.
Brand Strategy 2024

TechFlow SaaS Rebrand

Complete brand transformation for a B2B SaaS company, including visual identity and messaging framework.

Branding Strategy
Web Design 2024

Vertex Financial Platform

Modern web platform design for a fintech startup, focusing on user experience and conversion optimization.

UI/UX Web Design
Development 2023

GreenLeaf E-commerce

Full-stack e-commerce development with custom CMS integration and payment processing.

Development E-commerce
Brand Identity 2023

Nova Healthcare Identity

Healthcare brand identity system including logo, guidelines, and marketing collateral.

Identity Healthcare
Digital Marketing 2023

Summit Education Campaign

Integrated digital marketing campaign driving 150% increase in enrollment inquiries.

Marketing Education
Web Development 2023

CloudSync Dashboard

Enterprise dashboard development with real-time data visualization and analytics integration.

Development Dashboard
HubL for this variation
{% module 'd20_portfolio_grid_2'
  path='../../modules/Portfolio Grid.module',
  style={
    'columns': '2'
  }
%}
3Four columnsA denser index.
Brand Strategy 2024

TechFlow SaaS Rebrand

Complete brand transformation for a B2B SaaS company, including visual identity and messaging framework.

Branding Strategy
Web Design 2024

Vertex Financial Platform

Modern web platform design for a fintech startup, focusing on user experience and conversion optimization.

UI/UX Web Design
Development 2023

GreenLeaf E-commerce

Full-stack e-commerce development with custom CMS integration and payment processing.

Development E-commerce
Brand Identity 2023

Nova Healthcare Identity

Healthcare brand identity system including logo, guidelines, and marketing collateral.

Identity Healthcare
Digital Marketing 2023

Summit Education Campaign

Integrated digital marketing campaign driving 150% increase in enrollment inquiries.

Marketing Education
Web Development 2023

CloudSync Dashboard

Enterprise dashboard development with real-time data visualization and analytics integration.

Development Dashboard
HubL for this variation
{% module 'd20_portfolio_grid_3'
  path='../../modules/Portfolio Grid.module',
  style={
    'columns': '4'
  }
%}
4Left drawerThe same grid, opening its projects into a drawer at the left edge instead of a bottom sheet.
Brand Strategy 2024

TechFlow SaaS Rebrand

Complete brand transformation for a B2B SaaS company, including visual identity and messaging framework.

Branding Strategy
Web Design 2024

Vertex Financial Platform

Modern web platform design for a fintech startup, focusing on user experience and conversion optimization.

UI/UX Web Design
Development 2023

GreenLeaf E-commerce

Full-stack e-commerce development with custom CMS integration and payment processing.

Development E-commerce
Brand Identity 2023

Nova Healthcare Identity

Healthcare brand identity system including logo, guidelines, and marketing collateral.

Identity Healthcare
Digital Marketing 2023

Summit Education Campaign

Integrated digital marketing campaign driving 150% increase in enrollment inquiries.

Marketing Education
Web Development 2023

CloudSync Dashboard

Enterprise dashboard development with real-time data visualization and analytics integration.

Development Dashboard
HubL for this variation
{% module 'd20_portfolio_grid_4'
  path='../../modules/Portfolio Grid.module',
  interaction={
    'click_action': 'drawer',
    'open_from': 'left',
    'panel_size': 'md'
  },
  style={
    'columns': '3'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

ProjectsContent tabrepeater11 fieldsprojects
FieldNameTypeOptionsDefault
Project Imageprojects.imageImage-
Categoryprojects.categoryTextBrand Strategy
Yearprojects.yearText2024
Project Titleprojects.titleTextProject Name
Short Descriptionprojects.descriptionTextBrief description of this project and what was delivered.
Tagsprojects.tagsRepeaterrepeats-
Tagprojects.tags.tagTextTag
Detail panel contentprojects.detail_contentRich text<p>Describe the brief, what was built and what changed. This body is what a reader sees when the card opens.</p>
Detail panel button labelprojects.detail_cta_textText-
Project Linkprojects.linkLink-
Card Background (override)projects.bg_overrideColour-
Text Color (override)projects.text_overrideColour-
InteractionContent tab9 fieldsinteraction
FieldNameTypeOptionsDefault
What a card does when clickedinteraction.click_actionChoicedrawer, modal, linkdrawer
Drawer opens frominteraction.open_fromChoicebottom, leftbottom
Panel sizeinteraction.panel_sizeChoicesm, md, lgmd
Panel corner radiusinteraction.panel_radiusChoicenone, lg, xl, 2xllg
Close button sizeinteraction.close_sizeNumber40
Close button labelinteraction.close_labelTextClose
Default panel button labelinteraction.cta_labelTextRead the full case study
Card hintinteraction.open_hintTextOpen project
Backdrop colourinteraction.scrim_colorColour-
StyleContent tab1 fieldstyle
FieldNameTypeOptionsDefault
Columnsstyle.columnsChoice2, 3, 4, 53
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Resource Card

modules/Resource Card.moduleLanding pagesWebsite pagesBlog listingBlog posts188 fields5 content groups8 style groups

A downloads library. Every resource has a type - ebook, guide, template, report and so on - a badge, an image and its own call to action, with an optional filter bar across the top.

Worth knowing
  • Show Filter builds the filter buttons from the resource types present on the page, so there is no separate list to maintain.
  • Is Gated marks a resource as behind a form; it changes the badge, not the behaviour - point the CTA at a landing page with the form on it.
  • CTA Type button, link or icon changes every card at once.

Variations

1Grid with filtersThe default: three columns, filter bar on, badges over the image.
search

3 resources

HubL for this variation
{% module 'd21_resource_card_1'
  path='../../modules/Resource Card.module',
  layout={
    'style': 'grid',
    'columns': '3',
    'columns_tablet': '2',
    'gap': 'md',
    'show_filter': True
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'sm',
    'hover': 'lift',
    'image_ratio': '16/9'
  },
  badge_style={
    'show': True,
    'position': 'overlay',
    'style': 'filled'
  },
  cta_style={
    'type': 'link'
  }
%}
2List, no filter, squareLayout list with filters off - a compact index for a sidebar or a narrow column.
search

3 resources

HubL for this variation
{% module 'd21_resource_card_2'
  path='../../modules/Resource Card.module',
  layout={
    'style': 'list',
    'columns': '2',
    'columns_tablet': '1',
    'gap': 'sm',
    'show_filter': False
  },
  card_style={
    'enable_bg': False,
    'border_enabled': True,
    'radius': 'none',
    'shadow': 'none',
    'hover': 'border',
    'image_ratio': '1/1'
  },
  badge_style={
    'show': True,
    'position': 'below',
    'style': 'outline'
  },
  cta_style={
    'type': 'icon'
  }
%}
3Featured first cardLayout featured promotes the first resource and drops the rest into a grid beneath.
search

3 resources

HubL for this variation
{% module 'd21_resource_card_3'
  path='../../modules/Resource Card.module',
  layout={
    'style': 'featured',
    'columns': '3',
    'columns_tablet': '2',
    'gap': 'lg',
    'show_filter': False
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': False,
    'radius': 'xl',
    'shadow': 'md',
    'hover': 'shadow',
    'image_ratio': '4/3'
  },
  badge_style={
    'show': True,
    'position': 'overlay',
    'style': 'subtle'
  },
  cta_style={
    'type': 'button'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

188 fields across 13 groups - the groups below are collapsed. Click a group to open it.

Layout & toolbarStyle tab11 fieldslayout
FieldNameTypeOptionsDefault
Layout Stylelayout.styleChoicegrid, list, featuredgrid
Columnslayout.columnsChoice2, 3, 4, 53
Columns (Tablet)layout.columns_tabletChoice1, 22
Gaplayout.gapChoicesm, md, lg, xlmd
Show Category Filterlayout.show_filterToggleon
Show grid / list togglelayout.show_view_toggleToggleon
Show searchlayout.show_searchToggleon
Show result countlayout.show_countToggleon
Search matcheslayout.search_scopeChoicetitle, title_desc, allall
Toolbar layoutlayout.toolbar_layoutChoicesplit, stacked, centeredsplit
Remember filter in the URLlayout.url_stateToggleon
Card StylingStyle tab16 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Hover effectcard_style.hoverChoicenone, lift, shadow, borderborder
Image Aspect Ratiocard_style.image_ratioChoice16/9, 4/3, 3/2, 1/116/9
List view thumbnail widthcard_style.list_thumb_widthNumber280
Card paddingcard_style.content_paddingNumber24
Image hover zoomcard_style.image_hover_zoomNumber105
Hover lift distancecard_style.hover_liftNumber4
Transition speedcard_style.transition_msNumber300
Title lines before truncatingcard_style.title_line_clampNumber0
Description lines before truncatingcard_style.desc_line_clampNumber3
Hairline widthcard_style.border_widthNumber1
Content spacingcard_style.content_spacingChoicexs, sm, md, lgmd
Badge StylingStyle tab10 fieldsbadge_style
FieldNameTypeOptionsDefault
Show Type Badgebadge_style.showToggleon
Badge Positionbadge_style.positionChoiceoverlay, belowoverlay
Badge Stylebadge_style.styleChoicefilled, outline, subtlefilled
Show gated / free badgebadge_style.show_accessToggleon
Badge corner radiusbadge_style.radiusNumber6
Badge padding (vertical)badge_style.padding_vNumber4
Badge padding (horizontal)badge_style.padding_hNumber8
Badge text sizebadge_style.font_sizeNumber12
Badge letter spacingbadge_style.letter_spacingNumber0
Badge icon sizebadge_style.icon_sizeNumber14
CTA StylingStyle tab6 fieldscta_style
FieldNameTypeOptionsDefault
CTA Typecta_style.typeChoicebutton, link, iconlink
CTA button padding (vertical)cta_style.btn_padding_vNumber8
CTA button padding (horizontal)cta_style.btn_padding_hNumber16
CTA button corner radiuscta_style.btn_radiusNumber6
CTA text sizecta_style.font_sizeNumber14
CTA icon sizecta_style.icon_sizeNumber18
CTA DefaultsContent tab3 fieldscta_defaults
FieldNameTypeOptionsDefault
Default CTA Textcta_defaults.textTextDownload Now
Default Button Iconcta_defaults.iconText-
Default Icon Positioncta_defaults.icon_positionChoiceleft, rightright
Library labelsContent tab12 fieldslibrary
FieldNameTypeOptionsDefault
Search placeholderlibrary.search_placeholderTextSearch resources
All-categories buttonlibrary.all_labelTextAll
Gated badge textlibrary.gated_labelTextGated
Free badge textlibrary.free_labelTextFree
URL parameter prefixlibrary.url_keyTextrc
Count wording (one result)library.count_suffix_oneTextresource
Count wording (several results)library.count_suffix_manyTextresources
Empty state headinglibrary.empty_titleTextNo resources match
Empty state textlibrary.empty_bodyTextNothing here matches that search and filter together. Clear one of them to see more.
Empty state buttonlibrary.empty_actionTextClear search and filters
Grid view button labellibrary.grid_view_labelTextGrid view
List view button labellibrary.list_view_labelTextList view
Detail viewContent tab10 fieldsdetail
FieldNameTypeOptionsDefault
Open a detail windowdetail.enableToggleon
Opened bydetail.triggerChoicecard, buttoncard
Details button textdetail.button_labelTextDetails
Detail window buttondetail.cta_labelText-
Close button labeldetail.close_labelTextClose
Author row labeldetail.author_labelTextAuthor
Date row labeldetail.date_labelTextDate
Category row labeldetail.category_labelTextCategory
Format row labeldetail.format_labelTextFormat
Window positiondetail.positionChoiceright, centerright
PaginationContent tab7 fieldspagination
FieldNameTypeOptionsDefault
Paginatepagination.enableToggleoff
Resources per pagepagination.per_pageNumber9
Stylepagination.modeChoicepages, morepages
Load more buttonpagination.more_labelTextLoad more
Previous page buttonpagination.prev_labelTextPrevious
Next page buttonpagination.next_labelTextNext
Page counter wordingpagination.page_statusTextPage {current} of {total}
ResourcesContent tabrepeater19 fieldsresources
FieldNameTypeOptionsDefault
Thumbnail Imageresources.imageImage-
Resource Typeresources.typeChoiceebook, whitepaper, guide, template, checklist, toolkit, report, case_study, infographic, videoebook
Categoryresources.categoryTextMarketing
Titleresources.titleTextResource Title
Descriptionresources.descriptionTextBrief description of what this resource covers.
Detail view contentresources.long_descriptionRich text<p>Add the longer write-up that appears when a visitor opens this resource.</p>
Authorresources.authorText-
Date or yearresources.date_textText-
Formatresources.file_infoText-
Gated Contentresources.is_gatedToggleoff
Resource Link / Landing Pageresources.linkLink-
Direct Download Fileresources.fileFile-
Custom CTA Text (optional)resources.cta_textText-
Button Iconresources.cta_iconText-
Icon Positionresources.cta_icon_positionChoiceleft, rightright
Card Background (override)resources.bg_overrideColour-
Text Color (override)resources.text_overrideColour-
Icon Color (override)resources.icon_overrideColour-
Icon Background (override)resources.icon_bg_overrideColour-
ColoursStyle tab51 fieldscolors
FieldNameTypeOptionsDefault
Card backgroundcolors.card_bgColour-
Card bordercolors.card_borderColour-
Card border on hovercolors.card_hover_borderColour-
Card titlecolors.titleColour-
Card descriptioncolors.descriptionColour-
Category linecolors.categoryColour-
Call to actioncolors.ctaColour-
CTA button backgroundcolors.cta_btn_bgColour-
CTA button textcolors.cta_btn_textColour-
Type badge backgroundcolors.type_badge_bgColour-
Type badge textcolors.type_badge_textColour-
Gated badge backgroundcolors.gated_badge_bgColour-
Gated badge textcolors.gated_badge_textColour-
Free badge backgroundcolors.free_badge_bgColour-
Free badge textcolors.free_badge_textColour-
Lock chip backgroundcolors.lock_bgColour-
Lock iconcolors.lock_iconColour-
Image placeholder gradient startcolors.placeholder_fromColour-
Image placeholder gradient endcolors.placeholder_toColour-
Image placeholder iconcolors.placeholder_iconColour-
Search backgroundcolors.search_bgColour-
Search bordercolors.search_borderColour-
Search border on focuscolors.search_focus_borderColour-
Search textcolors.search_textColour-
Search iconcolors.search_iconColour-
Filter pill backgroundcolors.filter_bgColour-
Filter pill textcolors.filter_textColour-
Filter pill bordercolors.filter_borderColour-
Active filter backgroundcolors.filter_active_bgColour-
Active filter textcolors.filter_active_textColour-
View toggle backgroundcolors.toggle_bgColour-
View toggle iconcolors.toggle_iconColour-
View toggle bordercolors.toggle_borderColour-
Active view backgroundcolors.toggle_active_bgColour-
Active view iconcolors.toggle_active_iconColour-
Result count textcolors.count_textColour-
Empty state headingcolors.empty_title_colorColour-
Empty state textcolors.empty_body_colorColour-
Detail window backgroundcolors.modal_bgColour-
Behind the detail windowcolors.modal_scrimColour-
Detail window titlecolors.modal_title_colorColour-
Detail window textcolors.modal_textColour-
Detail window row labelcolors.modal_meta_labelColour-
Detail window close iconcolors.modal_closeColour-
Detail window button backgroundcolors.modal_btn_bgColour-
Detail window button textcolors.modal_btn_textColour-
Pagination backgroundcolors.page_bgColour-
Pagination textcolors.page_textColour-
Pagination bordercolors.page_borderColour-
Current page backgroundcolors.page_active_bgColour-
Current page textcolors.page_active_textColour-
Text sizesStyle tab14 fieldstypography
FieldNameTypeOptionsDefault
Card titletypography.title_sizeNumber18
Card descriptiontypography.desc_sizeNumber14
Category linetypography.category_sizeNumber12
Category letter spacingtypography.category_trackingNumber0
Search fieldtypography.search_sizeNumber15
Filter pillstypography.filter_sizeNumber14
Result counttypography.count_sizeNumber14
Empty state headingtypography.empty_title_sizeNumber20
Empty state texttypography.empty_body_sizeNumber15
Detail window titletypography.modal_title_sizeNumber26
Detail window texttypography.modal_text_sizeNumber15
Detail window rowstypography.modal_meta_sizeNumber13
Paginationtypography.page_sizeNumber14
Image placeholder icontypography.placeholder_icon_sizeNumber64
Sizes and spacingStyle tab27 fieldsdimensions
FieldNameTypeOptionsDefault
Gap inside the toolbardimensions.toolbar_gapNumber16
Gap below the toolbardimensions.toolbar_bottomNumber32
Search field widthdimensions.search_widthNumber280
Search corner radiusdimensions.search_radiusNumber8
Search padding (vertical)dimensions.search_padding_vNumber10
Search padding (horizontal)dimensions.search_padding_hNumber14
Search icon sizedimensions.search_icon_sizeNumber18
Filter pill corner radiusdimensions.filter_radiusNumber999
Filter pill padding (vertical)dimensions.filter_padding_vNumber8
Filter pill padding (horizontal)dimensions.filter_padding_hNumber16
Gap between filter pillsdimensions.filter_gapNumber8
View toggle button sizedimensions.toggle_sizeNumber38
View toggle corner radiusdimensions.toggle_radiusNumber8
View toggle icon sizedimensions.toggle_icon_sizeNumber18
Lock chip sizedimensions.lock_sizeNumber32
Lock icon sizedimensions.lock_icon_sizeNumber16
Empty state paddingdimensions.empty_paddingNumber56
Detail window widthdimensions.modal_widthNumber480
Detail window corner radiusdimensions.modal_radiusNumber0
Detail window paddingdimensions.modal_paddingNumber32
Detail window image heightdimensions.modal_thumb_heightNumber220
Detail window close buttondimensions.modal_close_sizeNumber40
Detail window button radiusdimensions.modal_btn_radiusNumber6
Detail window button padding (vertical)dimensions.modal_btn_padding_vNumber12
Gap above paginationdimensions.page_gapNumber40
Pagination button heightdimensions.page_btn_sizeNumber38
Pagination corner radiusdimensions.page_radiusNumber6
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Video library

modules/Video library.moduleLanding pagesWebsite pagesBlog listingBlog posts33 fields1 content group5 style groups

A grid of videos grouped into sections. Each video can be a hosted file, a YouTube link or a Vimeo link, and opens in a lightbox.

Worth knowing
  • Show Sections on renders the section title and description above each group; off merges every video into one grid.
  • Source Type is per video, so a hosted file and a YouTube embed can sit side by side.
  • A video with no thumbnail falls back to the platform still for YouTube and Vimeo, and to a blank plate for hosted files - set one.

Variations

1Three columns, 16:9, solid play buttonThe default library grid.
Getting started video thumbnail
5:32

Getting Started Guide

Learn the basics and get up to speed quickly with our platform.

Advanced features video thumbnail
12:18

Advanced Features

Dive deeper into advanced capabilities and power features.

Tips and tricks video thumbnail
8:45

Tips & Best Practices

Expert tips to help you get the most out of your experience.

Loading video...
HubL for this variation
{% module 'd22_video_library_1'
  path='../../modules/Video library.module',
  layout={
    'columns': '3',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md',
    'show_sections': False
  },
  card_style={
    'enable_bg': True,
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'none',
    'hover': 'lift'
  },
  thumbnail_settings={
    'aspect_ratio': '16/9'
  },
  play_button_settings={
    'style': 'solid',
    'size': 'md',
    'color': 'white'
  }
%}
2Two columns, cinematic crop, minimal play buttonRatio 21/9 with a minimal marker - for a showreel rather than a course.
Getting started video thumbnail
5:32

Getting Started Guide

Learn the basics and get up to speed quickly with our platform.

Advanced features video thumbnail
12:18

Advanced Features

Dive deeper into advanced capabilities and power features.

Tips and tricks video thumbnail
8:45

Tips & Best Practices

Expert tips to help you get the most out of your experience.

Loading video...
HubL for this variation
{% module 'd22_video_library_2'
  path='../../modules/Video library.module',
  layout={
    'columns': '2',
    'columns_tablet': '1',
    'columns_mobile': '1',
    'gap': 'lg',
    'show_sections': False
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none',
    'hover': 'none'
  },
  thumbnail_settings={
    'aspect_ratio': '21/9'
  },
  play_button_settings={
    'style': 'minimal',
    'size': 'lg',
    'color': 'white'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab5 fieldslayout
FieldNameTypeOptionsDefault
Columns (Desktop)layout.columnsChoice2, 3, 4, 53
Columns (Tablet)layout.columns_tabletChoice1, 2, 32
Columns (Mobile)layout.columns_mobileChoice1, 21
Gaplayout.gapChoicesm, md, lg, xlmd
Group videos in sectionslayout.show_sectionsToggleoff
Card StylingStyle tab5 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Hover effectcard_style.hoverChoicenone, lift, shadow, borderborder
Thumbnail SettingsStyle tab3 fieldsthumbnail_settings
FieldNameTypeOptionsDefault
Aspect ratiothumbnail_settings.aspect_ratioChoice16/9, 4/3, 1/1, 21/916/9
Overlay colorthumbnail_settings.overlay_colorColour#000000
Overlay hover opacitythumbnail_settings.overlay_hover_opacityNumber50
Play ButtonStyle tab6 fieldsplay_button_settings
FieldNameTypeOptionsDefault
Styleplay_button_settings.styleChoicesolid, outline, minimalsolid
Sizeplay_button_settings.sizeChoicesm, md, lgmd
Button colorplay_button_settings.colorChoicewhite, accentwhite
Play button corner radiusplay_button_settings.radiusChoicenone, sm, md, lg, fullmd
Lightbox close button sizeplay_button_settings.close_sizeNumber40
Lightbox maximum widthplay_button_settings.modal_max_widthNumber1000
Video SectionsContent tabrepeater12 fieldssections
FieldNameTypeOptionsDefault
Section titlesections.section_titleTextFeatured Videos
Section descriptionsections.section_descriptionText-
Videossections.videosRepeaterrepeats-
Titlesections.videos.titleTextVideo Title
Descriptionsections.videos.descriptionText-
Thumbnailsections.videos.thumbnailImageimage
Video sourcesections.videos.source_typeChoicefile, youtube, vimeofile
Video filesections.videos.video_fileFile../../images/templates/video-1.mp4
YouTube URLsections.videos.youtube_urlText-
Vimeo URLsections.videos.vimeo_urlText-
Durationsections.videos.durationText-
Card Background (override)sections.videos.bg_overrideColour-
Text Color (override)sections.videos.text_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Images list

modules/Images list.moduleLanding pagesWebsite pagesBlog listingBlog posts12 fields1 content group2 style groups

A logo strip. Inline for a single scrolling row, grid for a block of columns.

Worth knowing
  • Grayscale on desaturates the logos so mismatched brand colours do not fight the page; the hover effect restores colour.
  • Logo Height is a pixel cap - set it once and every logo lines up regardless of its own dimensions.

Variations

1Inline, greyscaleThe default strip: one row, desaturated, colour on hover.
Meridian Finance
Nova Outdoor
Apex Consulting
FinFlow
CloudSync
TechFlow
HubL for this variation
{% module 'd24_images_list_1'
  path='../../modules/Images list.module',
  style={
    'layout': 'inline',
    'columns': '5',
    'grayscale': True,
    'hover_effect': True,
    'show_borders': False,
    'logo_height': 36,
    'opacity': 60
  }
%}
2Grid with bordersLayout grid with cell borders and full colour - a customers page rather than a hero strip.
Meridian Finance
Nova Outdoor
Apex Consulting
FinFlow
CloudSync
TechFlow
HubL for this variation
{% module 'd24_images_list_2'
  path='../../modules/Images list.module',
  style={
    'layout': 'grid',
    'columns': '4',
    'grayscale': False,
    'hover_effect': False,
    'show_borders': True,
    'logo_height': 44,
    'opacity': 100
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab2 fields
FieldNameTypeOptionsDefault
Title (optional)titleText-
Logosimage_fieldImage-
StyleStyle tab8 fieldsstyle
FieldNameTypeOptionsDefault
Layoutstyle.layoutChoiceinline, gridinline
Columns (grid)style.columnsChoice3, 4, 5, 65
Logo height (px)style.logo_heightNumber40
Grayscale logosstyle.grayscaleToggleon
Logo opacity (%)style.opacityNumber60
Hover effectstyle.hover_effectToggleon
Show bordersstyle.show_bordersToggleoff
Narrow breakpointstyle.breakpoint_narrowNumber480
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Team members

modules/Team members.moduleLanding pagesWebsite pagesBlog listingBlog posts21 fields1 content group3 style groups

People cards: photo, name, role, bio and social links.

Worth knowing
  • A member with no photo falls back to their initials, so the grid still lines up while portraits are being collected.
  • Show Bio and Show Social switch the whole grid, not individual cards.
  • Avatar Size md, lg or xl changes the portrait, not the card.

Variations

1Four columns with biosThe default team page grid.
person

Alex Morgan

CEO & Founder

Visionary leader with 15+ years building digital products.

person

Sarah Chen

Head of Design

Award-winning designer focused on user-centered experiences.

person

James Wilson

Lead Developer

Full-stack engineer passionate about clean, scalable code.

person

Emily Park

Marketing Director

Growth strategist driving brand awareness and engagement.

HubL for this variation
{% module 'd25_team_members_1'
  path='../../modules/Team members.module',
  layout={
    'columns': '4',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md'
  },
  card_style={
    'avatar_size': 'lg',
    'show_bio': True,
    'show_social': True
  }
%}
2Three columns, names onlyBio and social off with a larger portrait - a leadership strip.
person

Alex Morgan

CEO & Founder

person

Sarah Chen

Head of Design

person

James Wilson

Lead Developer

person

Emily Park

Marketing Director

HubL for this variation
{% module 'd25_team_members_2'
  path='../../modules/Team members.module',
  layout={
    'columns': '3',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'xl'
  },
  card_style={
    'avatar_size': 'xl',
    'show_bio': False,
    'show_social': False
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab4 fieldslayout
FieldNameTypeOptionsDefault
Columns (Desktop)layout.columnsChoice3, 4, 54
Columns (Tablet)layout.columns_tabletChoice2, 3, 42
Columns (Mobile)layout.columns_mobileChoice1, 21
Gaplayout.gapChoicesm, md, lg, xlmd
Card StyleStyle tab5 fieldscard_style
FieldNameTypeOptionsDefault
Avatar sizecard_style.avatar_sizeChoicemd, lg, xllg
Show biocard_style.show_bioToggleon
Show social linkscard_style.show_socialToggleon
Card paddingcard_style.card_paddingChoicetheme, sm, md, lg, xltheme
Content spacingcard_style.content_spacingChoicexs, sm, md, lgmd
Team MembersContent tabrepeater10 fieldsmembers
FieldNameTypeOptionsDefault
Photomembers.photoImage-
Namemembers.member_nameTextTeam Member
Role / Titlemembers.roleTextPosition
Short Biomembers.bioText-
Social Linksmembers.socialGroup-
LinkedIn URLmembers.social.linkedinText-
X (Twitter) URLmembers.social.twitterText-
Instagram URLmembers.social.instagramText-
Emailmembers.social.emailText-
Card Background (override)members.bg_overrideColour-
Text Color (override)members.text_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Reviews

modules/Reviews.moduleLanding pagesWebsite pagesBlog listingBlog posts29 fields1 content group4 style groups

Testimonial cards: quote, author, role, company and an optional star rating.

Worth knowing
  • Show Rating adds stars above the quote; the value is per testimonial.
  • Columns one turns the module into a single wide pull quote.
  • The quote mark is decorative and can be switched off in Style.

Variations

1Three columns, cards, quote markThe default wall of testimonials.
format_quote
Working with this team transformed our entire digital presence. They understood our vision immediately and delivered beyond expectations.
Sarah Chen CEO, Meridian Finance
format_quote
The strategic thinking they brought to our rebrand was invaluable. They gave us a complete brand system that has become the foundation of our growth.
Marcus Williams Founder, Nova Outdoor
format_quote
Professional, creative, and incredibly easy to work with. They delivered a website that truly represents who we are.
Jennifer Park Marketing Director, Apex
HubL for this variation
{% module 'd26_reviews_1'
  path='../../modules/Reviews.module',
  layout={
    'columns': '3',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'md',
    'vertical_alignment': 'stretch'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': True,
    'radius': 'lg',
    'shadow': 'none',
    'padding': 'md',
    'hover': 'none'
  },
  style={
    'show_quote_icon': True,
    'show_rating': False
  }
%}
2Single wide quote, no cardColumns one with the card off - one testimonial used as a divider between sections.
format_quote
Working with this team transformed our entire digital presence. They understood our vision immediately and delivered beyond expectations.
Sarah Chen CEO, Meridian Finance
format_quote
The strategic thinking they brought to our rebrand was invaluable. They gave us a complete brand system that has become the foundation of our growth.
Marcus Williams Founder, Nova Outdoor
format_quote
Professional, creative, and incredibly easy to work with. They delivered a website that truly represents who we are.
Jennifer Park Marketing Director, Apex
HubL for this variation
{% module 'd26_reviews_2'
  path='../../modules/Reviews.module',
  layout={
    'columns': '1',
    'columns_tablet': '1',
    'columns_mobile': '1',
    'gap': 'md',
    'vertical_alignment': 'start'
  },
  card_style={
    'enable_bg': False,
    'border_enabled': False,
    'radius': 'none',
    'shadow': 'none',
    'padding': 'lg',
    'hover': 'none'
  },
  style={
    'show_quote_icon': True,
    'show_rating': False
  }
%}
3Two columns with ratings and shadowRatings on, border off, shadow md - the shape used on a reviews page.
Working with this team transformed our entire digital presence. They understood our vision immediately and delivered beyond expectations.
Sarah Chen CEO, Meridian Finance
The strategic thinking they brought to our rebrand was invaluable. They gave us a complete brand system that has become the foundation of our growth.
Marcus Williams Founder, Nova Outdoor
Professional, creative, and incredibly easy to work with. They delivered a website that truly represents who we are.
Jennifer Park Marketing Director, Apex
HubL for this variation
{% module 'd26_reviews_3'
  path='../../modules/Reviews.module',
  layout={
    'columns': '2',
    'columns_tablet': '2',
    'columns_mobile': '1',
    'gap': 'lg',
    'vertical_alignment': 'stretch'
  },
  card_style={
    'enable_bg': True,
    'bg_source': 'theme',
    'border_enabled': False,
    'radius': 'xl',
    'shadow': 'md',
    'padding': 'lg',
    'hover': 'lift'
  },
  style={
    'show_quote_icon': False,
    'show_rating': True
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LayoutStyle tab5 fieldslayout
FieldNameTypeOptionsDefault
Columns (Desktop)layout.columnsChoice1, 2, 3, 4, 53
Columns (Tablet)layout.columns_tabletChoice1, 22
Columns (Mobile)layout.columns_mobileChoice11
Gaplayout.gapChoicesm, md, lg, xlmd
Card heightlayout.vertical_alignmentChoicestretch, startstretch
Card StylingStyle tab8 fieldscard_style
FieldNameTypeOptionsDefault
Card backgroundcard_style.enable_bgToggleon
Background colorcard_style.bg_sourceChoicetheme, customtheme
Custom backgroundcard_style.bg_customColour#FFFFFF
Bordercard_style.border_enabledToggleon
Border radiuscard_style.radiusChoicenone, sm, md, lg, xllg
Shadowcard_style.shadowChoicenone, sm, md, lgnone
Hover effectcard_style.hoverChoicenone, lift, shadownone
Content spacingcard_style.content_spacingChoicexs, sm, md, lgmd
Content OptionsStyle tab5 fieldsstyle
FieldNameTypeOptionsDefault
Show quote iconstyle.show_quote_iconToggleon
Show star ratingstyle.show_ratingToggleoff
Star colourstyle.star_colorColour-
Empty star colourstyle.star_empty_colorColour-
Star sizestyle.star_sizeChoicesm, md, lgmd
ReviewsContent tabrepeater9 fieldstestimonial
FieldNameTypeOptionsDefault
Review texttestimonial.storyTextThis is an amazing product/service. Highly recommended!
Rating (1-5)testimonial.ratingNumber5
Author nametestimonial.authorTextJohn Doe
Author title/companytestimonial.author_jobTextCEO, Company Name
Author phototestimonial.author_avatarImage-
Card Background (override)testimonial.bg_overrideColour-
Text Color (override)testimonial.text_overrideColour-
Icon / Star Color (override)testimonial.icon_overrideColour-
Icon Background (override)testimonial.icon_bg_overrideColour-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Filtered Listing

modules/Filtered Listing.moduleLanding pagesWebsite pagesBlog listingBlog posts177 fields8 content groups0 style groups

A filterable index of anything that comes in a list - a menu, a directory, a catalogue, a body of work. Entries carry an image, a title, a summary, a value, tags and their own rich-text body, and the search box, the filter pills and the pager are all built from the entries themselves.

Worth knowing
  • Preset sits at the top level of the module, so it is the one field that cannot be set from a template override. Choose catalogue, directory or portfolio in the page editor.
  • Filters are declared once in the Filters group as a key and a label, and each entry names the option values it matches. Nothing has to be kept in sync by hand.
  • Filter mode multi lets several options in one facet be active at once; single behaves like a radio group.
  • URL state on writes the current search and filters into the address bar, so a filtered view can be linked to and survives a reload.
  • Opening an entry is a modal, a drawer from either side, a lightbox, or a plain link out. The panel reads the entry rich text; with no body it falls back to the summary.

Variations

1Catalogue grid, search and pillsThe default: three columns, a search box, filter pills across the top, and an entry opening in a modal.

Our menu

Everything we serve

Filter by course, or search for a dish by name.


Course

Dietary

Starter

Charred leek and hazelnut

9.00

Grilled leeks, brown butter, toasted hazelnut, aged sheep's cheese.

  • Vegetarian
  • Seasonal

Starter

Cured trout, dill oil

11.50

Beetroot-cured trout, creme fraiche, dill oil, rye crumb.

  • Cold

Starter

Whipped cod roe

8.00

Smoked cod roe, sourdough crisps, lemon.

  • To share

Main

Roast celeriac steak

19.00

Whole roast celeriac, green peppercorn, capers.

  • Vegan
  • Gluten free

Main

Cornish hake

26.00

Hake fillet, mussels, saffron, sea vegetables.

  • Day boat

Main

Pappardelle, wild mushroom

21.00

Hand-cut pappardelle, girolles, thyme, parmesan.

  • Vegetarian

Main

Half roast chicken

23.00

Brined half chicken, tarragon jus, burnt lemon.

  • Grill
For two

Main

Lamb shoulder, to share

58.00

Six-hour lamb shoulder, anchovy, rosemary.

  • To share

Main

Cacio e pepe

17.00

Tonnarelli, pecorino, black pepper.

  • Vegetarian

Side

Triple-cooked chips

6.00

Beef dripping or vegetable oil.

  • Classic

Side

Hispi cabbage

7.50

Charred hispi, anchovy cream, breadcrumb.

Side

Heritage tomato salad

8.00

Heritage tomatoes, basil oil, sourdough.

  • Vegan

Side

Buttered new potatoes

6.50

Jersey royals, mint, salted butter.

  • Vegetarian

Side

Green salad

5.50

Little gem, herbs, mustard dressing.

  • Vegan
  • Gluten free

Side

Grilled sprouting broccoli

7.00

Chilli, garlic, lemon.

  • Vegan
Popular

Dessert

Burnt basque cheesecake

9.00

Baked cheesecake, poached rhubarb.

  • Vegetarian

Dessert

Chocolate delice

10.00

Dark chocolate delice, salted caramel, creme fraiche.

Dessert

Poached pear

8.50

Red wine poached pear, almond, sorbet.

  • Vegan

Dessert

Affogato

6.00

Vanilla ice cream, double espresso.

  • Vegetarian
  • Gluten free

Dessert

Seasonal sorbet

7.00

Three scoops, changes weekly.

  • Vegan
  • Gluten free

Dessert

British cheese board

14.00

Four cheeses, quince, oat biscuits.

  • To share

Dessert

Sticky toffee pudding

9.50

Date sponge, toffee sauce, clotted cream.

  • Vegetarian

Starter

Sourdough and cultured butter

5.00

Baked daily, cultured butter, sea salt.

  • Vegetarian
  • To share

Starter

Oysters, half dozen

18.00

Rock oysters, shallot vinegar, lemon.

  • Cold
  • Gluten free

Starter

Salt cod croquettes

9.50

Four croquettes, aioli.

  • Fried
HubL for this variation
{% module 'd27_filtered_listing_1'
  path='../../modules/Filtered Listing.module',
  settings={
    'layout': 'grid',
    'columns': 3,
    'columns_tablet': 2,
    'columns_mobile': 1,
    'image_ratio': '4-3',
    'pagination': 'pages',
    'page_size': 6,
    'show_summary': True,
    'show_tags': True
  },
  filters={
    'show_search': True,
    'show_filters': True,
    'filter_mode': 'multi',
    'show_count': True,
    'show_clear': True
  },
  detail={
    'presentation': 'modal',
    'show_media': True,
    'show_nav': True
  }
%}
2List rows, drawer detailOne column of wide rows, with the entry sliding in from the right instead of opening over the page.

Our menu

Everything we serve

Filter by course, or search for a dish by name.


Course

Dietary

Starter

Charred leek and hazelnut

9.00

Grilled leeks, brown butter, toasted hazelnut, aged sheep's cheese.

  • Vegetarian
  • Seasonal

Starter

Cured trout, dill oil

11.50

Beetroot-cured trout, creme fraiche, dill oil, rye crumb.

  • Cold

Starter

Whipped cod roe

8.00

Smoked cod roe, sourdough crisps, lemon.

  • To share

Main

Roast celeriac steak

19.00

Whole roast celeriac, green peppercorn, capers.

  • Vegan
  • Gluten free

Main

Cornish hake

26.00

Hake fillet, mussels, saffron, sea vegetables.

  • Day boat

Main

Pappardelle, wild mushroom

21.00

Hand-cut pappardelle, girolles, thyme, parmesan.

  • Vegetarian

Main

Half roast chicken

23.00

Brined half chicken, tarragon jus, burnt lemon.

  • Grill
For two

Main

Lamb shoulder, to share

58.00

Six-hour lamb shoulder, anchovy, rosemary.

  • To share

Main

Cacio e pepe

17.00

Tonnarelli, pecorino, black pepper.

  • Vegetarian

Side

Triple-cooked chips

6.00

Beef dripping or vegetable oil.

  • Classic

Side

Hispi cabbage

7.50

Charred hispi, anchovy cream, breadcrumb.

Side

Heritage tomato salad

8.00

Heritage tomatoes, basil oil, sourdough.

  • Vegan

Side

Buttered new potatoes

6.50

Jersey royals, mint, salted butter.

  • Vegetarian

Side

Green salad

5.50

Little gem, herbs, mustard dressing.

  • Vegan
  • Gluten free

Side

Grilled sprouting broccoli

7.00

Chilli, garlic, lemon.

  • Vegan
Popular

Dessert

Burnt basque cheesecake

9.00

Baked cheesecake, poached rhubarb.

  • Vegetarian

Dessert

Chocolate delice

10.00

Dark chocolate delice, salted caramel, creme fraiche.

Dessert

Poached pear

8.50

Red wine poached pear, almond, sorbet.

  • Vegan

Dessert

Affogato

6.00

Vanilla ice cream, double espresso.

  • Vegetarian
  • Gluten free

Dessert

Seasonal sorbet

7.00

Three scoops, changes weekly.

  • Vegan
  • Gluten free

Dessert

British cheese board

14.00

Four cheeses, quince, oat biscuits.

  • To share

Dessert

Sticky toffee pudding

9.50

Date sponge, toffee sauce, clotted cream.

  • Vegetarian

Starter

Sourdough and cultured butter

5.00

Baked daily, cultured butter, sea salt.

  • Vegetarian
  • To share

Starter

Oysters, half dozen

18.00

Rock oysters, shallot vinegar, lemon.

  • Cold
  • Gluten free

Starter

Salt cod croquettes

9.50

Four croquettes, aioli.

  • Fried
HubL for this variation
{% module 'd27_filtered_listing_2'
  path='../../modules/Filtered Listing.module',
  settings={
    'layout': 'list',
    'columns': 1,
    'columns_tablet': 1,
    'columns_mobile': 1,
    'image_ratio': '3-2',
    'pagination': 'more',
    'page_size': 4,
    'summary_lines': 3
  },
  filters={
    'show_search': True,
    'show_filters': True,
    'filter_mode': 'single',
    'show_count': True
  },
  detail={
    'presentation': 'drawer',
    'drawer_side': 'right',
    'show_nav': True
  }
%}
3Compact, search onlyNo images and no filter pills - a dense index where the search box does the work.

Our menu

Everything we serve

Filter by course, or search for a dish by name.


Starter

Charred leek and hazelnut

9.00

  • Vegetarian
  • Seasonal

Starter

Cured trout, dill oil

11.50

  • Cold

Starter

Whipped cod roe

8.00

  • To share

Main

Roast celeriac steak

19.00

  • Vegan
  • Gluten free

Main

Cornish hake

26.00

  • Day boat

Main

Pappardelle, wild mushroom

21.00

  • Vegetarian

Main

Half roast chicken

23.00

  • Grill
For two

Main

Lamb shoulder, to share

58.00

  • To share

Main

Cacio e pepe

17.00

  • Vegetarian

Side

Triple-cooked chips

6.00

  • Classic

Side

Hispi cabbage

7.50

Side

Heritage tomato salad

8.00

  • Vegan

Side

Buttered new potatoes

6.50

  • Vegetarian

Side

Green salad

5.50

  • Vegan
  • Gluten free

Side

Grilled sprouting broccoli

7.00

  • Vegan
Popular

Dessert

Burnt basque cheesecake

9.00

  • Vegetarian

Dessert

Chocolate delice

10.00

Dessert

Poached pear

8.50

  • Vegan

Dessert

Affogato

6.00

  • Vegetarian
  • Gluten free

Dessert

Seasonal sorbet

7.00

  • Vegan
  • Gluten free

Dessert

British cheese board

14.00

  • To share

Dessert

Sticky toffee pudding

9.50

  • Vegetarian

Starter

Sourdough and cultured butter

5.00

  • Vegetarian
  • To share

Starter

Oysters, half dozen

18.00

  • Cold
  • Gluten free

Starter

Salt cod croquettes

9.50

  • Fried
HubL for this variation
{% module 'd27_filtered_listing_3'
  path='../../modules/Filtered Listing.module',
  settings={
    'layout': 'compact',
    'columns': 1,
    'show_image': False,
    'show_summary': False,
    'show_value': True,
    'pagination': 'none'
  },
  filters={
    'show_search': True,
    'show_filters': False,
    'show_count': True,
    'show_clear': False
  },
  detail={
    'presentation': 'lightbox',
    'show_media': False
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

177 fields across 8 groups - the groups below are collapsed. Click a group to open it.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
PresetpresetChoicecatalogue, directory, portfolio-
HeadingContent tab6 fieldsheading
FieldNameTypeOptionsDefault
Eyebrowheading.eyebrowTextOur menu
Headingheading.headlineTextEverything we serve
Sub headingheading.subheadingTextFilter by course, or search for a dish by name.
Heading levelheading.headline_tagChoiceh1, h2, h3, h4h2
Alignmentheading.alignmentChoiceleft, centerleft
Show a rule under the headingheading.show_ruleToggleon
FiltersContent tabrepeater5 fieldsfacets
FieldNameTypeOptionsDefault
Keyfacets.facet_keyText-
Filter namefacets.facet_labelText-
Controlfacets.facet_styleChoicepills, dropdownpills
Optionsfacets.optionsRepeaterrepeats-
Valuefacets.options.option_valueText-
Shown asfacets.options.option_labelText-
EntriesContent tabrepeater19 fieldsentries
FieldNameTypeOptionsDefault
Pictureentries.media_typeChoiceimage, noneimage
Imageentries.imageImage-
Picture is decorationentries.media_decorativeToggleoff
Eyebrowentries.eyebrowText-
Titleentries.titleText-
Summaryentries.summaryText-
Write-upentries.body_textRich text-
Valueentries.primary_valueText-
Value noteentries.value_noteText-
Badgeentries.badgeText-
Featuredentries.featuredToggleoff
Filter valuesentries.facet_valuesRepeaterrepeats-
Filter keyentries.facet_values.facet_keyText-
Valueentries.facet_values.facet_valueText-
Detailsentries.specsRepeaterrepeats-
Iconentries.specs.spec_iconIcon-
Detail nameentries.specs.spec_labelText-
Detail valueentries.specs.spec_valueText-
Tagsentries.tagsRepeaterrepeats-
Tagentries.tags.tag_textText-
Link textentries.link_textText-
Linkentries.link_urlLink-
Search and filteringContent tab15 fieldsfilters
FieldNameTypeOptionsDefault
Show the search boxfilters.show_searchToggleon
Search placeholderfilters.search_placeholderTextSearch the menu
Search label for screen readersfilters.search_ariaTextSearch entries
Search inside the details toofilters.search_specsToggleon
Show the filtersfilters.show_filtersToggleon
Choosing within one filterfilters.filter_modeChoicesingle, multimulti
Wording for no choicefilters.all_textTextAll
Show the result countfilters.show_countToggleon
Count, one resultfilters.count_oneText1 result
Count, many resultsfilters.count_manyText{n} results
Show a clear buttonfilters.show_clearToggleon
Clear buttonfilters.clear_textTextClear all
Keep the filters in the page addressfilters.url_stateToggleon
Nothing-found headingfilters.blank_titleTextNothing matches
Nothing-found textfilters.blank_textTextTry a different search, or clear the filters.
LayoutContent tab25 fieldssettings
FieldNameTypeOptionsDefault
Layoutsettings.layoutChoicegrid, list, compactgrid
Columnssettings.columnsNumber3
Columns, tabletsettings.columns_tabletNumber2
Columns, mobilesettings.columns_mobileNumber1
Clicking a cardsettings.card_clickChoicedetail, link, nonedetail
Show picturessettings.show_imageToggleon
Picture shapesettings.image_ratioChoice4-3, 3-2, 16-9, 1-1, 3-44-3
Picture fitsettings.image_fitChoicecover, containcover
Show the eyebrowsettings.show_eyebrowToggleon
Show the summarysettings.show_summaryToggleon
Summary line limitsettings.summary_linesNumber2
Show the valuesettings.show_valueToggleon
Show the badgesettings.show_badgeToggleon
Show the details on the cardsettings.show_specsToggleoff
Details shownsettings.specs_maxNumber3
Show the tags on the cardsettings.show_tagsToggleon
Tags shownsettings.tags_maxNumber3
Show the entry link on the cardsettings.show_card_linkToggleoff
Featured entries take two columnssettings.featured_spanToggleoff
Long listssettings.paginationChoicenone, pages, morepages
Entries per pagesettings.page_sizeNumber12
Load more buttonsettings.more_textTextLoad more
Previous pagesettings.prev_page_textTextPrevious
Next pagesettings.next_page_textTextNext
Fade the cards insettings.revealToggleon
Opening an entryContent tab16 fieldsdetail
FieldNameTypeOptionsDefault
How an entry opensdetail.presentationChoicemodal, drawer, lightbox, linkmodal
Drawer sidedetail.drawer_sideChoiceleft, rightleft
Card call to actiondetail.open_textTextView
Show the picturedetail.show_mediaToggleon
Show the write-updetail.show_bodyToggleon
Show the details blockdetail.show_metaToggleon
Details headingdetail.meta_titleTextDetails
Show the tagsdetail.show_detail_tagsToggleon
Tags headingdetail.tags_titleTextTags
Show the entry linkdetail.show_ctaToggleon
Previous and nextdetail.show_navToggleon
Previousdetail.prev_textTextPrevious
Nextdetail.next_textTextNext
Show the counterdetail.show_counterToggleon
Counter separatordetail.counter_separatorText/
Close label for screen readersdetail.close_ariaTextClose
StylingContent tab90 fieldsstyle
FieldNameTypeOptionsDefault
Brandstyle.brandGroup-
Accent colourstyle.brand.accentColour#171717
Base fontstyle.brand.base_fontFont#262626
Section backgroundstyle.brand.surfaceColour#FFFFFF
Hairline colourstyle.brand.hairlineColour#E5E5E5
Muted text colourstyle.brand.muted_textColour#737373
Sectionstyle.sectionGroup-
Padding topstyle.section.pad_topNumber72
Padding bottomstyle.section.pad_bottomNumber72
Padding sidesstyle.section.pad_xNumber24
Maximum widthstyle.section.max_widthNumber1200
Corner radiusstyle.section.section_radiusNumber0
Headingstyle.heading_styleGroup-
Eyebrowstyle.heading_style.eyebrow_fontFont#737373
Eyebrow letter spacingstyle.heading_style.eyebrow_trackingNumber0
Eyebrow in capitalsstyle.heading_style.eyebrow_capsToggleoff
Headingstyle.heading_style.headline_fontFont#171717
Sub headingstyle.heading_style.sub_fontFont#737373
Space under the headingstyle.heading_style.heading_gapNumber32
Search and filtersstyle.controls_styleGroup-
Space under the controlsstyle.controls_style.controls_gapNumber28
Space between control rowsstyle.controls_style.control_row_gapNumber16
Search box heightstyle.controls_style.search_heightNumber42
Search box radiusstyle.controls_style.search_radiusNumber10
Search box borderstyle.controls_style.search_borderNumber1
Search box backgroundstyle.controls_style.search_bgColour#FFFFFF
Search box textstyle.controls_style.search_fontFont#262626
Filter namestyle.controls_style.facet_label_fontFont#737373
Pill radiusstyle.controls_style.pill_radiusNumber6
Pill padding sidesstyle.controls_style.pill_pad_xNumber10
Pill padding top and bottomstyle.controls_style.pill_pad_yNumber3
Pill borderstyle.controls_style.pill_borderNumber1
Pill backgroundstyle.controls_style.pill_bgColour#FFFFFF
Pill textstyle.controls_style.pill_fontFont#525252
Pill background, chosenstyle.controls_style.pill_active_bgColour#171717
Pill text, chosenstyle.controls_style.pill_active_textColour#FFFFFF
Result countstyle.controls_style.count_fontFont#737373
Clear buttonstyle.controls_style.clear_fontFont#171717
Cardstyle.card_styleGroup-
Space between cardsstyle.card_style.card_gapNumber20
Backgroundstyle.card_style.card_bgColour#FFFFFF
Border colourstyle.card_style.card_borderColour#E5E5E5
Borderstyle.card_style.card_border_widthNumber1
Corner radiusstyle.card_style.card_radiusNumber10
Paddingstyle.card_style.card_padNumber16
Padding, mobilestyle.card_style.card_pad_mobileNumber14
Shadow sizestyle.card_style.card_shadow_sizeNumber0
Lift on hoverstyle.card_style.card_liftNumber0
Border colour, hoverstyle.card_style.card_hover_borderColour#171717
Shadow size, hoverstyle.card_style.card_hover_shadowNumber0
Picture radiusstyle.card_style.image_radiusNumber8
Space between linesstyle.card_style.card_text_gapNumber6
Eyebrowstyle.card_style.card_eyebrow_fontFont#737373
Titlestyle.card_style.card_title_fontFont#171717
Summarystyle.card_style.card_summary_fontFont#737373
Valuestyle.card_style.card_value_fontFont#171717
Detailsstyle.card_style.card_spec_fontFont#737373
Tagstyle.card_style.card_tag_fontFont#525252
Tag backgroundstyle.card_style.card_tag_bgColour#F5F5F5
Tag radiusstyle.card_style.card_tag_radiusNumber6
Badge backgroundstyle.card_style.card_badge_bgColour#171717
Badge text colourstyle.card_style.card_badge_textColour#FFFFFF
Badge radiusstyle.card_style.card_badge_radiusNumber6
Entry linkstyle.card_style.card_link_fontFont#171717
Modal, drawer and lightboxstyle.panel_styleGroup-
Overlay colourstyle.panel_style.overlayColour#171717
Panel backgroundstyle.panel_style.panel_bgColour#FFFFFF
Panel radiusstyle.panel_style.panel_radiusNumber12
Panel paddingstyle.panel_style.panel_padNumber28
Modal widthstyle.panel_style.panel_max_widthNumber720
Drawer widthstyle.panel_style.drawer_widthNumber460
Picture heightstyle.panel_style.panel_media_heightNumber320
Titlestyle.panel_style.panel_title_fontFont#171717
Write-upstyle.panel_style.panel_body_fontFont#525252
Block headingsstyle.panel_style.panel_meta_title_fontFont#171717
Detail namestyle.panel_style.panel_meta_label_fontFont#737373
Detail valuestyle.panel_style.panel_meta_value_fontFont#262626
Close button backgroundstyle.panel_style.close_bgColour#F5F5F5
Close button colourstyle.panel_style.close_colorColour#171717
Close button sizestyle.panel_style.close_sizeNumber36
Close button radiusstyle.panel_style.close_radiusNumber10
Previous and next backgroundstyle.panel_style.nav_bgColour#FFFFFF
Previous and next colourstyle.panel_style.nav_colorColour#171717
Entry linkstyle.panel_style.panel_cta_fontFont#FFFFFF
Entry link backgroundstyle.panel_style.panel_cta_bgColour#171717
Entry link radiusstyle.panel_style.panel_cta_radiusNumber8
Pagingstyle.pager_styleGroup-
Space above the pagingstyle.pager_style.pager_gapNumber32
Button sizestyle.pager_style.pager_sizeNumber36
Button radiusstyle.pager_style.pager_radiusNumber8
Button backgroundstyle.pager_style.pager_bgColour#FFFFFF
Button textstyle.pager_style.pager_fontFont#525252
Button background, currentstyle.pager_style.pager_active_bgColour#171717
Button text, currentstyle.pager_style.pager_active_textColour#FFFFFF
Nothing foundstyle.blank_styleGroup-
Headingstyle.blank_style.blank_title_fontFont#171717
Textstyle.blank_style.blank_text_fontFont#737373
Icon colourstyle.blank_style.blank_iconColour#D4D4D4
Back to top

Recent blog posts

modules/Recent blog posts.moduleLanding pagesWebsite pagesBlog listingBlog posts11 fields1 content group1 style group

Pulls the latest posts from a blog and renders them as cards, with optional filters by author, tag or date range.

Worth knowing
  • Leave Blog empty to use the portal default blog.
  • The filters are toggles first: turn Filter by Tag on before the tag name field is read.
  • Number of Posts caps the list; there is no pagination - link to the blog listing for that.

Variation

1Latest postsReads the default blog of the portal it is published in.
HubL for this variation
{% module 'd28_recent_blog_posts_1'
  path='../../modules/Recent blog posts.module',
  number_of_posts=3,
  filter_by_author_=False,
  filter_by_tag_=False,
  filter_by_date_=False
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab9 fields
FieldNameTypeOptionsDefault
Blogblog_fieldBlog-
Number of postsnumber_of_postsNumber-
Filter by author?filter_by_author_Toggle-
Author nameauthor_nameText-
Filter by tag?filter_by_tag_Toggle-
Tag nametag_nameText-
Filter by date?filter_by_date_Toggle-
Start datestart_dateText-
End dateend_dateText-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Conversion and utility

Pricing, buttons, countdowns, modals, sticky CTAs and maps.

Pricing Cards

modules/Pricing Cards.moduleLanding pagesWebsite pagesBlog listingBlog posts31 fields4 content groups3 style groups

Plan cards with a price, a feature list, a call to action and an optional monthly and yearly toggle.

Worth knowing
  • Enable Toggle adds the billing switch; each plan then needs both prices filled in.
  • Is Featured lifts one plan and applies the Featured Accent colour. Set it on one plan only.
  • Each feature row has an Included toggle - off renders the cross icon rather than hiding the row, so plans stay aligned.

Variations

1Three plans, elevated cards, one featuredThe default. Middle plan featured on the accent colour.
HubL for this variation
{% module 'd29_pricing_cards_1'
  path='../../modules/Pricing Cards.module',
  style={
    'columns': '3',
    'alignment': 'center',
    'featured_accent': 'accent',
    'card_style': 'elevated'
  },
  icon_style={
    'check_color': 'success',
    'cross_color': 'muted'
  }
%}
2Bordered, flat, left alignedCard Style bordered with alignment left - a denser table-like set of plans.
HubL for this variation
{% module 'd29_pricing_cards_2'
  path='../../modules/Pricing Cards.module',
  style={
    'columns': '3',
    'alignment': 'left',
    'featured_accent': 'primary',
    'card_style': 'bordered'
  },
  icon_style={
    'check_color': 'accent',
    'cross_color': 'muted'
  }
%}
3Two plans, flatCard Style flat and two columns - for a simple free and paid split.
HubL for this variation
{% module 'd29_pricing_cards_3'
  path='../../modules/Pricing Cards.module',
  style={
    'columns': '2',
    'alignment': 'center',
    'featured_accent': 'gradient',
    'card_style': 'flat'
  },
  icon_style={
    'check_color': 'success',
    'cross_color': 'text'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
Enable billing toggleenable_toggleToggle-
Toggle labelsContent tab3 fieldstoggle_labels
FieldNameTypeOptionsDefault
Monthly labeltoggle_labels.monthly_labelTextMonthly
Yearly labeltoggle_labels.yearly_labelTextYearly
Yearly discount labeltoggle_labels.yearly_discount_labelTextSave 20%
Pricing plansContent tabrepeater14 fieldsplans
FieldNameTypeOptionsDefault
Plan nameplans.plan_nameTextStarter
Featured plan (highlight)plans.is_featuredToggleoff
Badge text (e.g., Most Popular)plans.badge_textText-
Monthly priceplans.price_monthlyText$29
Yearly priceplans.price_yearlyText$290
Price suffixplans.price_suffixText/month
Descriptionplans.descriptionTextPerfect for getting started
Featuresplans.featuresRepeaterrepeats-
Featureplans.features.textTextFeature item
Includedplans.features.includedToggleon
CTA button textplans.cta_textTextGet Started
CTA button linkplans.cta_linkURL-
CTA button styleplans.cta_styleChoiceprimary, secondary, ghostprimary
Card Background (override)plans.bg_overrideColour-
Text Color (override)plans.text_overrideColour-
StyleStyle tab7 fieldsstyle
FieldNameTypeOptionsDefault
Columnsstyle.columnsChoice2, 3, 4, 53
Text alignmentstyle.alignmentChoiceleft, centercenter
Featured card accent colorstyle.featured_accentChoiceaccent, primary, gradientaccent
Card stylestyle.card_styleChoiceflat, bordered, elevatedbordered
Gap between cardsstyle.gapChoicesm, md, lg, xlmd
Content spacingstyle.content_spacingChoicexs, sm, md, lglg
Body line heightstyle.desc_leadingNumber1.45
Feature IconsContent tab2 fieldsicon_names
FieldNameTypeOptionsDefault
Check icon (Material Symbol)icon_names.check_iconTextcheck
Cross icon (Material Symbol)icon_names.cross_iconTextclose
Icon ColorsStyle tab2 fieldsicon_style
FieldNameTypeOptionsDefault
Check icon coloricon_style.check_colorChoicesuccess, accent, textsuccess
Cross icon coloricon_style.cross_colorChoiceerror, muted, textmuted
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Buttons

modules/Buttons.moduleLanding pagesWebsite pagesBlog listingBlog posts12 fields1 content group2 style groups

A standalone row of buttons. Five styles, an icon on either side, and three actions: follow a link, scroll to an anchor, or open a modal.

Worth knowing
  • Action open_modal expects the Modal Name of a Modal module placed on the same page.
  • Action scroll_to_anchor expects the id without the hash.
  • The five styles are the same tokens every other module uses, so a button here matches a button in a hero.

Variations

1All five stylesprimary, secondary, tertiary, ghost and link, side by side.
HubL for this variation
{% module 'd30_buttons_1'
  path='../../modules/Buttons.module',
  style={
    'text_alignment': {
      'text_align': 'LEFT'
    }
  },
  button=[
    {
      'display_text': 'Primary',
      'style': 'primary',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': '',
      'icon_position': 'right'
    },
    {
      'display_text': 'Secondary',
      'style': 'secondary',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': '',
      'icon_position': 'right'
    },
    {
      'display_text': 'Tertiary',
      'style': 'tertiary',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': '',
      'icon_position': 'right'
    },
    {
      'display_text': 'Ghost',
      'style': 'ghost',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': '',
      'icon_position': 'right'
    },
    {
      'display_text': 'Link',
      'style': 'link',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': 'arrow_forward',
      'icon_position': 'right'
    }
  ]
%}
2Centred with iconsThe same module centred, with an icon before and after the label.
HubL for this variation
{% module 'd30_buttons_2'
  path='../../modules/Buttons.module',
  style={
    'text_alignment': {
      'text_align': 'CENTER'
    }
  },
  button=[
    {
      'display_text': 'Download',
      'style': 'primary',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': 'download',
      'icon_position': 'left'
    },
    {
      'display_text': 'Continue',
      'style': 'secondary',
      'action': 'link',
      'link': {
        'url': {
          'href': '#modules',
          'type': 'CONTENT'
        },
        'open_in_new_tab': False
      },
      'icon': 'arrow_forward',
      'icon_position': 'right'
    }
  ]
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

StyleStyle tab2 fieldsstyle
FieldNameTypeOptionsDefault
Spacingstyle.spacing_fieldSpacing-
Text alignmentstyle.text_alignmentText alignment-
ButtonContent tabrepeater8 fieldsbutton
FieldNameTypeOptionsDefault
Display textbutton.display_textTextGet started
Linkbutton.linkLink-
Stylebutton.styleChoiceprimary, secondary, tertiary, ghost, linkprimary
Actionbutton.actionChoicelink, scroll_to_anchor, open_modallink
Anchor namebutton.anchor_nameText-
Modal namebutton.modal_nameText-
Iconbutton.iconText-
Icon Positionbutton.icon_positionChoiceleft, rightright
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Countdown

modules/Countdown.moduleLanding pagesWebsite pagesBlog listingBlog posts10 fields1 content group2 style groups

A live countdown to a date. Days, hours, minutes and seconds, updating in the browser.

Worth knowing
  • The target date is stored as a timestamp. Past dates render as zeros rather than counting up.
  • Colour Scheme dark is for placing the counter on a dark band; it does not change the section behind it.

Variations

1Regular, left alignedThe default size.

Doors close in

00 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
HubL for this variation
{% module 'd31_countdown_1'
  path='../../modules/Countdown.module',
  style={
    'color_scheme': 'light',
    'alignment': 'left',
    'size': 'regular'
  },
  heading='Doors close in'
%}
2Large, centredSize large, centred - for a launch page hero.

Launching in

00 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
HubL for this variation
{% module 'd31_countdown_2'
  path='../../modules/Countdown.module',
  style={
    'color_scheme': 'light',
    'alignment': 'center',
    'size': 'large'
  },
  heading='Launching in'
%}
3Small, right alignedSize small - fits inside a banner or a sticky bar.

Offer ends

00 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
HubL for this variation
{% module 'd31_countdown_3'
  path='../../modules/Countdown.module',
  style={
    'color_scheme': 'light',
    'alignment': 'right',
    'size': 'small'
  },
  heading='Offer ends'
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab2 fields
FieldNameTypeOptionsDefault
Heading (optional)headingText-
Target Date & Timetarget_datedatetime-
StyleStyle tab6 fieldsstyle
FieldNameTypeOptionsDefault
Color Schemestyle.color_schemeChoicelight, darklight
Alignmentstyle.alignmentChoiceleft, center, rightleft
Sizestyle.sizeChoicesmall, regular, largeregular
Digit box sizestyle.box_sizeNumber70
Mobile scalestyle.box_scale_mobileNumber0.8
Digit box corner radiusstyle.radiusChoicenone, sm, md, lgmd
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Modal

modules/Modal.moduleLanding pagesWebsite pagesBlog listingBlog posts11 fields1 content group2 style groups

A dialog that other modules open by name. It holds either rich text or a HubSpot form.

Worth knowing
  • The module renders nothing until something opens it. Place it anywhere on the page.
  • Give it a Modal Name, then set Action to open_modal and enter the same name on the button, hero CTA or navigation item that should open it.
  • Modal Type form embeds a HubSpot form and inherits the theme form styling.
Not previewed here. A modal is hidden until it is opened, so there is nothing to show in a static preview. Placing it and wiring a button to it is covered in the notes.

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab6 fields
FieldNameTypeOptionsDefault
Modal namemodal_nameText-
Titlemodal_titleText-
Close button labelclose_labelText-
Modal typemodal_typeChoicetext, form-
Modal textmodal_textRich text-
FormformForm-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
AppearanceStyle tab3 fieldsmodal_style
FieldNameTypeOptionsDefault
Dialog widthmodal_style.widthChoicesm, md, lgmd
Corner radiusmodal_style.radiusChoicenone, sm, md, lglg
Close button sizemodal_style.close_sizeNumber40
Back to top

Fixed button

modules/Fixed button.moduleLanding pagesWebsite pagesBlog listingBlog posts15 fields1 content group2 style groups

A button pinned to the edge of the viewport, with per-template switches for where it appears.

Worth knowing
  • It is placed in templates/partials/fixed_button.html, not in the page body.
  • The five enable toggles decide which content types show it - website pages only by default.
  • Vertical and Horizontal Position pin it to a corner or the middle of one side.
Not previewed here. This module is position fixed to the viewport. Rendering it inside this page would float it over the documentation, so it is documented rather than previewed.

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab7 fields
FieldNameTypeOptionsDefault
LinklinkLink-
IconiconText-
Enable for wesite pages?enable_for_wesite_pages_Toggle-
Enable for landing pages?enable_for_landing_pages_Toggle-
Enable for system pages?enable_for_system_pages_Toggle-
Enable for blog listing?enable_for_blog_listing_Toggle-
Enable for blog posts?enable_for_blog_posts_Toggle-
StyleStyle tab6 fieldsstyle_1
FieldNameTypeOptionsDefault
Stylestyle_1.styleChoiceprimary, secondary, tertiary, ghostprimary
Sizestyle_1.sizeNumber50
Vertical positionstyle_1.vertical_positionChoicetop, center, bottombottom
Horizontal positionstyle_1.horizontal_positionChoiceleft, rightleft
Spacingstyle_1.spacing_fieldSpacing-
Corner radiusstyle_1.radiusChoicenone, sm, md, lg, fullmd
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Google Map

modules/Google Map.moduleLanding pagesWebsite pagesBlog listingBlog posts21 fields5 content groups2 style groups

An embedded map centred on an address or a pair of coordinates, with a marker and a styled colour scheme.

Worth knowing
  • A Google Maps JavaScript API key is required. Set it in theme settings, or override it per module in the API group.
  • Scroll Zoom is off by default so the page keeps scrolling when the pointer crosses the map. Turn it on only for a full-page map.
  • Colour Scheme grayscale and dark are applied through the Maps styling API, so they need the same key.

Variation

1Roadmap, greyscale, roundedThe default treatment: a desaturated map with the controls trimmed back.
location_on

Google Maps API key required.

Click this module and add your API key in the API Settings section.
HubL for this variation
{% module 'd34_google_map_1'
  path='../../modules/Google Map.module',
  settings={
    'map_type': 'roadmap',
    'zoom': 14,
    'height': 320
  },
  controls={
    'zoom_control': True,
    'fullscreen': False,
    'street_view': False,
    'map_type_control': False,
    'scroll_zoom': False,
    'draggable': True
  },
  style_group={
    'color_scheme': 'grayscale',
    'border_radius': 'lg'
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

LocationContent tab4 fieldslocation
FieldNameTypeOptionsDefault
Location Modelocation.modeChoiceaddress, coordinatesaddress
Addresslocation.addressTextSan Francisco, CA
Latitudelocation.latitudeText37.7749
Longitudelocation.longitudeText-122.4194
MarkerContent tab3 fieldsmarker
FieldNameTypeOptionsDefault
Show Markermarker.showToggleon
Marker Titlemarker.titleTextOur Location
Custom Marker Iconmarker.custom_iconImage-
Map SettingsContent tab3 fieldssettings
FieldNameTypeOptionsDefault
Zoom Levelsettings.zoomNumber15
Map Heightsettings.heightNumber400
Map Typesettings.map_typeChoiceroadmap, satellite, hybrid, terrainroadmap
Map ControlsContent tab6 fieldscontrols
FieldNameTypeOptionsDefault
Show Zoom Controlscontrols.zoom_controlToggleon
Allow Fullscreencontrols.fullscreenToggleon
Show Street Viewcontrols.street_viewToggleoff
Show Map Type Selectorcontrols.map_type_controlToggleoff
Scroll to Zoomcontrols.scroll_zoomToggleoff
Draggablecontrols.draggableToggleon
StyleStyle tab2 fieldsstyle_group
FieldNameTypeOptionsDefault
Map Color Schemestyle_group.color_schemeChoicedefault, grayscale, dark, lightdefault
Border Radiusstyle_group.border_radiusChoicenone, sm, md, lgnone
API SettingsContent tab1 fieldapi
FieldNameTypeOptionsDefault
Google Maps API Keyapi.key_overrideText-
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Store Locator

modules/Store Locator.moduleLanding pagesWebsite pages367 fields7 content groups1 style group

A searchable list of locations beside a map. Each location carries an address, a phone number, opening hours, a category and its coordinates; the list filters by search term, by category and by distance, and selecting either a card or a pin highlights the other.

Worth knowing
  • Map Mode street draws on open tiles and needs no key - that is the default, and it is what renders below. Mode google needs a Google Maps JavaScript API key.
  • Distance sorting works from the coordinates on each location. A location with no latitude and longitude still lists, it just never sorts by distance.
  • Use my location asks the browser for permission. Refused or unavailable, the module says so and leaves the list unsorted rather than failing silently.
  • Layout covers list beside the map on either side, list above, map above, and either one on its own. Below mobile breakpoint the layout stacks in the Mobile order given.
  • Scroll wheel zoom is off by default so the page keeps scrolling when the pointer crosses the map.

Variations

1List beside the mapThe default: a scrolling list on the left, open street tiles on the right, search, category filter and distance radius above.

Where to find us

Find a store near you

Search by town or postcode, or use your own location to sort the list by distance.

  • Flagship

    24 Rivington Street

    Bike parking at the rear

    Hours

    Mon to Sat 8:00 – 19:00, Sun 9:00 – 17:00

  • Store

    61 Paddington Street

    Hours

    Mon to Fri 7:30 – 18:30, Sat 9:00 – 17:00

  • Store

    77 Grassmarket

    Step-free entrance on West Bow

    Hours

    Mon to Sat 9:00 – 18:00, Sun 10:00 – 16:00

  • Collection point

    12 Anchor Road

    Hours

    Tue to Sun 9:00 – 17:00

  • Store

    31 Talbot Street

    Hours

    Mon to Sat 9:00 – 17:30

HubL for this variation
{% module 'd35_store_locator_1'
  path='../../modules/Store Locator.module',
  heading={
    'tag': 'h3'
  },
  layout_settings={
    'layout': 'list_left',
    'list_width': 38,
    'list_columns': 1,
    'map_height': 460,
    'sticky_map': True,
    'show_details': True,
    'show_index': True,
    'show_directions': True
  },
  map_setup={
    'map_mode': 'street',
    'tile_preset': 'carto_light',
    'cluster_enabled': True,
    'scroll_wheel_zoom': False
  },
  search_controls={
    'show_search': True,
    'show_category_filter': True,
    'show_near_me': True,
    'distance_unit': 'km'
  }
%}
2List only, no mapThe same locations as a plain filterable directory - for a page that has no room for a map, or a site with no tile budget.

Where to find us

Find a store near you

Search by town or postcode, or use your own location to sort the list by distance.

  • Flagship

    24 Rivington Street

    Bike parking at the rear

    Hours

    Mon to Sat 8:00 – 19:00, Sun 9:00 – 17:00

  • Store

    61 Paddington Street

    Hours

    Mon to Fri 7:30 – 18:30, Sat 9:00 – 17:00

  • Store

    77 Grassmarket

    Step-free entrance on West Bow

    Hours

    Mon to Sat 9:00 – 18:00, Sun 10:00 – 16:00

  • Collection point

    12 Anchor Road

    Hours

    Tue to Sun 9:00 – 17:00

  • Store

    31 Talbot Street

    Hours

    Mon to Sat 9:00 – 17:30

HubL for this variation
{% module 'd35_store_locator_2'
  path='../../modules/Store Locator.module',
  heading={
    'tag': 'h3'
  },
  layout_settings={
    'layout': 'list_only',
    'list_columns': 2,
    'list_height_mode': 'natural',
    'show_details': True,
    'show_index': False,
    'show_directions': True
  },
  search_controls={
    'show_search': True,
    'show_category_filter': True,
    'show_near_me': False
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

367 fields across 8 groups - the groups below are collapsed. Click a group to open it.

Section HeadingContent tab6 fieldsheading
FieldNameTypeOptionsDefault
Show section headingheading.showToggleon
Eyebrowheading.eyebrowTextWhere to find us
Titleheading.titleTextFind a store near you
Subtitleheading.subtitleTextSearch by town or postcode, or use your own location to sort the list by distance.
Heading tagheading.tagChoiceh2, h3, h4, divh2
Heading alignmentheading.alignmentChoiceleft, centerleft
LocationsContent tabrepeater18 fieldslocations
FieldNameTypeOptionsDefault
Location namelocations.location_nameText-
Addresslocations.address_textRich text-
Town or citylocations.cityText-
Region, county or statelocations.regionText-
Postcode or ZIPlocations.postcodeText-
Countrylocations.country_textText-
Latitudelocations.latitudeNumber0
Longitudelocations.longitudeNumber0
Phonelocations.phoneText-
Emaillocations.email_addressText-
Opening hourslocations.opening_hoursRich text-
Category keylocations.category_keyText-
Photographlocations.location_imageImage-
Notelocations.location_noteText-
Detail rowslocations.detailsRepeaterrepeats-
Iconlocations.details.detail_iconIcon-
Textlocations.details.detail_textText-
Link textlocations.link_textText-
Linklocations.link_urlLink-
CategoriesContent tabrepeater3 fieldscategories
FieldNameTypeOptionsDefault
Keycategories.cat_keyText-
Shown ascategories.cat_textText-
Pin colourcategories.cat_colorColour-
Search & DistanceContent tab26 fieldssearch_controls
FieldNameTypeOptionsDefault
Show the search boxsearch_controls.show_searchToggleon
Search box placeholdersearch_controls.search_placeholderTextTown, postcode or store name
Show the category filtersearch_controls.show_category_filterToggleon
Category filter — all optionsearch_controls.category_all_textTextAll categories
Show the near-me buttonsearch_controls.show_near_meToggleon
Near-me buttonsearch_controls.near_me_textTextUse my location
Near-me button while it waitssearch_controls.near_me_busy_textTextFinding you…
Distance unitsearch_controls.distance_unitChoicekm, mikm
Kilometres shown assearch_controls.distance_km_suffixTextkm
Miles shown assearch_controls.distance_mi_suffixTextmi
Decimal places on a short distancesearch_controls.distance_decimalsNumber1
Show decimals belowsearch_controls.distance_decimal_belowNumber10
How long to wait for a positionsearch_controls.geolocation_timeoutNumber10
Radius optionssearch_controls.radiiRepeaterrepeats-
Radiussearch_controls.radii.radius_valueNumber10
Radius picked to begin withsearch_controls.default_radiusNumber25
Radius picker — no limit optionsearch_controls.radius_any_textTextAny distance
Radius picker descriptionsearch_controls.radius_aria_textTextLimit results by distance
How many nearest locations to fall back tosearch_controls.nearest_countNumber3
Show the clear buttonsearch_controls.show_clearToggleon
Clear buttonsearch_controls.clear_textTextClear
When the browser refuses the locationsearch_controls.geolocation_denied_textTextLocation was not shared, so the list is in its usual order.
When the browser has no location to givesearch_controls.geolocation_unavailable_textTextThis browser cannot report a location.
Let a search term be looked up as a placesearch_controls.geocode_enabledToggleoff
Contact address sent with the lookupsearch_controls.geocode_emailText-
When the lookup finds nothingsearch_controls.geocode_failed_textTextThat place was not found.
Hint under the search boxsearch_controls.geocode_hint_textTextPress Enter to search by place name.
WordingContent tab21 fieldslabels
FieldNameTypeOptionsDefault
Result count, more than onelabels.results_textText{count} locations
Result count, onelabels.results_one_textText1 location
Result count when sorted by distancelabels.results_near_textText{count} within {radius}{unit}
No locations added — titlelabels.empty_titleTextNo locations yet
No locations added — textlabels.empty_textTextAdd your first location in the editor and it appears here and on the map.
Nothing matched — titlelabels.no_results_titleTextNothing matched
Nothing matched — textlabels.no_results_textTextTry a shorter search term, a wider radius, or clear the filters.
When nothing is inside the radiuslabels.nearest_textTextNothing within {radius}{unit}. The closest is {name}, {distance} away.
Phone labellabels.phone_textTextPhone
Email labellabels.email_textTextEmail
Opening hours labellabels.hours_textTextHours
Directions linklabels.directions_textTextDirections
Section descriptionlabels.region_aria_textTextStore locator
List descriptionlabels.list_aria_textTextLocations
Map descriptionlabels.map_aria_textTextMap of locations
Search box descriptionlabels.search_aria_textTextSearch locations
Category filter descriptionlabels.category_aria_textTextFilter by category
Map pin descriptionlabels.pin_aria_textTextShow {name} in the list
Marker group descriptionlabels.cluster_aria_textTextZoom in to the {count} locations grouped here
Card descriptionlabels.card_aria_textTextShow {name} on the map
Resize handle descriptionlabels.resize_aria_textTextMap height
MapContent tab24 fieldsmap_setup
FieldNameTypeOptionsDefault
Mapmap_setup.map_modeChoicegoogle, streetstreet
Which basemapmap_setup.tile_presetChoiceosm, carto_voyager, carto_light, carto_dark, maptiler_streets, maptiler_outdoor, customosm
Tile provider keymap_setup.tile_keyText-
Google Maps API keymap_setup.google_api_keyText-
Google map IDmap_setup.google_map_idText-
Google map coloursmap_setup.google_style_modeChoicegoogle, customgoogle
How the map takes a scrollmap_setup.google_gesturesChoicecooperative, greedy, nonecooperative
Show shops and places Google knows aboutmap_setup.google_poiToggleoff
Tile addressmap_setup.tile_urlText-
Attribution linemap_setup.tile_attributionText-
Shown while the tile address is emptymap_setup.tile_missing_textTextAdd a tile address in the module settings to show the street map.
Furthest zoom inmap_setup.street_max_zoomNumber19
Furthest zoom outmap_setup.street_min_zoomNumber2
Starting zoommap_setup.street_zoomNumber6
Starting latitudemap_setup.street_center_latNumber54.0
Starting longitudemap_setup.street_center_lngNumber-2.5
Frame the map on the locationsmap_setup.street_fit_boundsToggleon
Zoom with the scroll wheelmap_setup.scroll_wheel_zoomToggleoff
Show the zoom buttonsmap_setup.show_zoom_controlsToggleon
Group markers that sit on top of each othermap_setup.cluster_enabledToggleon
How close before they groupmap_setup.cluster_radiusNumber56
Open the details on the map when a card is chosenmap_setup.popup_on_selectToggleon
Zoom level when a card is chosenmap_setup.focus_zoomNumber16
How long the map takes to get theremap_setup.focus_durationNumber700
Layout & BehaviourContent tab30 fieldslayout_settings
FieldNameTypeOptionsDefault
Layoutlayout_settings.layoutChoicelist_left, list_right, list_above, map_above, map_only, list_onlylist_left
List widthlayout_settings.list_widthNumber38
List columnslayout_settings.list_columnsNumber1
Street map heightlayout_settings.map_heightNumber520
Street map height on small screenslayout_settings.map_height_mobileNumber320
Keep the map in view while the list scrollslayout_settings.sticky_mapToggleon
Gap above the held maplayout_settings.sticky_map_offsetNumber16
Height of the held maplayout_settings.sticky_map_heightNumber300
Height of the held map on small screenslayout_settings.sticky_map_height_mobileNumber220
Let visitors drag the map taller or shorterlayout_settings.allow_map_resizeToggleon
Smallest height a visitor can drag tolayout_settings.resize_min_heightNumber180
Largest height a visitor can drag tolayout_settings.resize_max_heightNumber700
How far one arrow key press moves itlayout_settings.resize_stepNumber24
How long the map takes to change heightlayout_settings.map_height_transitionNumber260
List height in the side-by-side layoutslayout_settings.list_height_modeChoicematch_map, fixed, naturalmatch_map
List height in the side-by-side layoutslayout_settings.list_max_heightNumber560
Show location photographslayout_settings.show_imagesToggleoff
Show the detail rowslayout_settings.show_detailsToggleon
Number the locationslayout_settings.show_indexToggleon
Show phone numberslayout_settings.show_phoneToggleon
Show email addresseslayout_settings.show_emailToggleoff
Show opening hourslayout_settings.show_hoursToggleon
Show the category on each cardlayout_settings.show_category_chipToggleon
Show a directions linklayout_settings.show_directionsToggleon
Directions open inlayout_settings.directions_providerChoicegoogle, apple, waze, osmgoogle
Wait before filteringlayout_settings.search_debounceNumber180
Most cards shown at oncelayout_settings.max_visibleNumber0
Small screen breakpointlayout_settings.mobile_breakpointNumber900
On small screenslayout_settings.mobile_orderChoicelist_first, map_firstmap_first
Anchorlayout_settings.region_idText-
StyleStyle tab239 fieldsstyle
FieldNameTypeOptionsDefault
Typographystyle.typographyGroup-
Body fontstyle.typography.base_fontFont#262626
Heading fontstyle.typography.heading_fontFont#262626
Key Coloursstyle.colorsGroup-
Accentstyle.colors.accent_colorColour#262626
Linkstyle.colors.link_colorColour-
Sectionstyle.sectionGroup-
Section backgroundstyle.section.background_colorColour#ffffff
Padding topstyle.section.padding_topNumber64
Padding bottomstyle.section.padding_bottomNumber64
Padding top on small screensstyle.section.padding_top_mobileNumber40
Padding bottom on small screensstyle.section.padding_bottom_mobileNumber40
Containerstyle.containerGroup-
Maximum widthstyle.container.max_widthNumber1200
Horizontal paddingstyle.container.padding_horizontalNumber24
Horizontal padding on small screensstyle.container.padding_horizontal_mobileNumber16
Gap between the list and the mapstyle.container.column_gapNumber24
That gap on small screensstyle.container.column_gap_mobileNumber16
Heading, Eyebrow & Subtitlestyle.heading_styleGroup-
Eyebrow fontstyle.heading_style.eyebrow_fontFont-
Eyebrow colourstyle.heading_style.eyebrow_colorColour#737373
Eyebrow sizestyle.heading_style.eyebrow_font_sizeNumber11
Eyebrow weightstyle.heading_style.eyebrow_font_weightChoice100, 200, 300, 400, 500, 600, 700, 800600
Eyebrow letter spacingstyle.heading_style.eyebrow_letter_spacingNumber0.08
Eyebrow casestyle.heading_style.eyebrow_text_transformChoicenone, uppercase, lowercase, capitalizeuppercase
Space below the eyebrowstyle.heading_style.eyebrow_margin_bottomNumber8
Heading fontstyle.heading_style.title_fontFont-
Heading colourstyle.heading_style.title_colorColour#262626
Heading sizestyle.heading_style.title_sizeNumber32
Heading size on small screensstyle.heading_style.title_size_mobileNumber24
Heading weightstyle.heading_style.title_weightChoice100, 200, 300, 400, 500, 600, 700, 800600
Heading letter spacingstyle.heading_style.title_letter_spacingNumber-0.02
Title line heightstyle.heading_style.title_line_heightNumber1.15
Space below the headingstyle.heading_style.title_margin_bottomNumber10
Subtitle colourstyle.heading_style.subtitle_colorColour#525252
Subtitle sizestyle.heading_style.subtitle_sizeNumber15
Subtitle size on small screensstyle.heading_style.subtitle_size_mobileNumber14
Subtitle line heightstyle.heading_style.subtitle_line_heightNumber1.6
Subtitle maximum widthstyle.heading_style.subtitle_max_widthNumber680
Space below the whole blockstyle.heading_style.margin_bottomNumber28
That space on small screensstyle.heading_style.margin_bottom_mobileNumber20
Search Controlsstyle.controls_styleGroup-
Field backgroundstyle.controls_style.input_backgroundColour#ffffff
Field borderstyle.controls_style.input_borderColour#d4d4d4
Field border widthstyle.controls_style.input_border_widthNumber1
Field textstyle.controls_style.input_text_colorColour#262626
Placeholder textstyle.controls_style.input_placeholder_colorColour#a1a1a1
Field corner radiusstyle.controls_style.input_radiusNumber10
Field heightstyle.controls_style.input_heightNumber40
Field text sizestyle.controls_style.input_font_sizeNumber14
Field side paddingstyle.controls_style.input_padding_hNumber12
Focus ringstyle.controls_style.focus_ring_colorColour-
Focus ring widthstyle.controls_style.focus_ring_widthNumber3
Space between the controlsstyle.controls_style.control_gapNumber8
Smallest search box widthstyle.controls_style.field_min_widthNumber220
Smallest picker widthstyle.controls_style.control_min_widthNumber170
Focus ring offsetstyle.controls_style.focus_ring_offsetNumber2
Transition lengthstyle.controls_style.transition_msNumber150
Button backgroundstyle.controls_style.button_backgroundColour-
Button textstyle.controls_style.button_text_colorColour#fafafa
Button borderstyle.controls_style.button_borderColour-
Button corner radiusstyle.controls_style.button_radiusNumber10
Button text sizestyle.controls_style.button_font_sizeNumber14
Button text weightstyle.controls_style.button_weightChoice100, 200, 300, 400, 500, 600, 700, 800500
Button side paddingstyle.controls_style.button_padding_hNumber16
Gap between button icon and labelstyle.controls_style.button_icon_gapNumber6
Button opacity while busystyle.controls_style.button_disabled_opacityNumber60
Quiet button backgroundstyle.controls_style.ghost_backgroundColour#ffffff
Quiet button textstyle.controls_style.ghost_text_colorColour#262626
Quiet button borderstyle.controls_style.ghost_borderColour#e5e5e5
Quiet button on hoverstyle.controls_style.ghost_hover_backgroundColour#f5f5f5
Result count colourstyle.controls_style.status_colorColour#737373
Result count sizestyle.controls_style.status_sizeNumber13
Status line heightstyle.controls_style.status_line_heightNumber1.4
Space below the controlsstyle.controls_style.controls_margin_bottomNumber16
Space below the result countstyle.controls_style.status_margin_bottomNumber16
Dropdown backgroundstyle.controls_style.menu_backgroundColour#ffffff
Dropdown borderstyle.controls_style.menu_borderColour#e5e5e5
Dropdown cornerstyle.controls_style.menu_radiusNumber10
Dropdown shadowstyle.controls_style.menu_shadow_colorColour#262626
Dropdown shadow blurstyle.controls_style.menu_shadow_blurNumber24
Menu shadow dropstyle.controls_style.menu_shadow_yNumber8
Dropdown option textstyle.controls_style.menu_text_colorColour#262626
Dropdown option hoverstyle.controls_style.menu_hover_backgroundColour#fafafa
Dropdown option chosenstyle.controls_style.menu_selected_backgroundColour#f5f5f5
Dropdown option sizestyle.controls_style.menu_option_sizeNumber14
Dropdown height before it scrollsstyle.controls_style.menu_max_heightNumber280
Gap between picker and menustyle.controls_style.menu_offsetNumber6
Menu inner paddingstyle.controls_style.menu_paddingNumber4
Menu option padding, top and bottomstyle.controls_style.menu_option_padding_vNumber8
Menu option padding, left and rightstyle.controls_style.menu_option_padding_hNumber10
Gap inside a menu optionstyle.controls_style.menu_option_gapNumber8
Category dot size in the menustyle.controls_style.menu_dot_sizeNumber8
Controls fill the width on small screensstyle.controls_style.controls_full_width_mobileToggleon
Location Cardsstyle.card_styleGroup-
Card backgroundstyle.card_style.card_backgroundColour#ffffff
Card borderstyle.card_style.card_borderColour#e5e5e5
Card border widthstyle.card_style.card_border_widthNumber0
Card corner radiusstyle.card_style.card_radiusNumber10
Card paddingstyle.card_style.card_paddingNumber16
Card padding on small screensstyle.card_style.card_padding_mobileNumber14
Space between the cardsstyle.card_style.card_gapNumber8
Gap between name and distancestyle.card_style.cardhead_gapNumber10
Card on hoverstyle.card_style.card_hover_backgroundColour#fafafa
Card when it is the one on the mapstyle.card_style.card_active_backgroundColour#f5f5f5
Accent on the active cardstyle.card_style.card_accent_barToggleon
Which edge the accent sits onstyle.card_style.card_accent_sideChoicetop, right, bottom, leftleft
Active card accent colourstyle.card_style.card_accent_colorColour-
Active card accent widthstyle.card_style.card_accent_widthNumber2
Card shadowstyle.card_style.card_shadow_colorColour#0a0a0a
Card shadow blurstyle.card_style.card_shadow_blurNumber8
Card shadow dropstyle.card_style.card_shadow_yNumber2
Card shadow spreadstyle.card_style.card_shadow_spreadNumber0
Photograph positionstyle.card_style.image_positionChoiceleft, right, topleft
Photograph widthstyle.card_style.image_widthNumber72
Photograph corner radiusstyle.card_style.image_radiusNumber8
Photograph shapestyle.card_style.image_ratioChoice1 / 1, 4 / 3, 3 / 4, 16 / 91 / 1
Number backgroundstyle.card_style.index_backgroundColour#f5f5f5
Number textstyle.card_style.index_text_colorColour#525252
Number sizestyle.card_style.index_sizeNumber11
Number box sizestyle.card_style.index_boxNumber22
Number corner radiusstyle.card_style.index_radiusNumber6
Number weightstyle.card_style.index_weightChoice100, 200, 300, 400, 500, 600, 700, 800600
Category chip backgroundstyle.card_style.chip_backgroundColour#f5f5f5
Category chip textstyle.card_style.chip_text_colorColour-
Category chip sizestyle.card_style.chip_sizeNumber11
Category chip corner radiusstyle.card_style.chip_radiusNumber6
Category chip padding, top and bottomstyle.card_style.chip_padding_vNumber3
Category chip padding, left and rightstyle.card_style.chip_padding_hNumber8
Category chip line heightstyle.card_style.chip_line_heightNumber1.3
List scrollbarstyle.card_style.scrollbar_colorColour#d4d4d4
List scrollbar widthstyle.card_style.scrollbar_widthNumber8
Gap between rows of card linksstyle.card_style.links_gap_rowNumber4
Gap between card linksstyle.card_style.links_gap_colNumber14
Scrolling Liststyle.list_styleGroup-
Room for card shadowsstyle.list_style.scroll_gutterNumber16
Fade the list where it carries onstyle.list_style.scroll_fadeToggleon
Fade heightstyle.list_style.scroll_fade_heightNumber40
Fade colourstyle.list_style.scroll_fade_colorColour#ffffff
Border round the scrolling liststyle.list_style.scroll_borderToggleoff
Scrolling list border colourstyle.list_style.scroll_border_colorColour#e5e5e5
Scrolling list border widthstyle.list_style.scroll_border_widthNumber1
Scrolling list corner radiusstyle.list_style.scroll_border_radiusNumber10
Card Textstyle.card_textGroup-
Location name colourstyle.card_text.name_colorColour#262626
Location name sizestyle.card_text.name_sizeNumber15
Location name weightstyle.card_text.name_weightChoice100, 200, 300, 400, 500, 600, 700, 800600
Location name line heightstyle.card_text.name_line_heightNumber1.3
Address and details colourstyle.card_text.meta_colorColour#525252
Address and details sizestyle.card_text.meta_sizeNumber13
Address line heightstyle.card_text.meta_line_heightNumber1.6
Note colourstyle.card_text.note_colorColour#737373
Note sizestyle.card_text.note_sizeNumber12
Note line heightstyle.card_text.note_line_heightNumber1.5
Distance colourstyle.card_text.distance_colorColour#737373
Distance sizestyle.card_text.distance_sizeNumber12
Small labels colourstyle.card_text.small_label_colorColour#a1a1a1
Small labels sizestyle.card_text.small_label_sizeNumber11
Small label line heightstyle.card_text.small_label_line_heightNumber1.4
Space between the linesstyle.card_text.text_gapNumber6
Card Detail Rowsstyle.detail_styleGroup-
Icon colourstyle.detail_style.detail_icon_colorColour#737373
Icon sizestyle.detail_style.detail_icon_sizeNumber14
Gap between the icon and the textstyle.detail_style.detail_icon_gapNumber8
Gap between rowsstyle.detail_style.detail_row_gapNumber6
Gap above the rowsstyle.detail_style.detail_margin_topNumber2
Text colourstyle.detail_style.detail_text_colorColour#525252
Text sizestyle.detail_style.detail_text_sizeNumber13
Text line heightstyle.detail_style.detail_text_line_heightNumber1.5
Icon nudge downstyle.detail_style.detail_icon_offsetNumber1
Mapstyle.map_styleGroup-
Map backgroundstyle.map_style.map_backgroundColour#ffffff
Map borderstyle.map_style.map_borderColour#e5e5e5
Map border widthstyle.map_style.map_border_widthNumber1
Map corner radiusstyle.map_style.map_radiusNumber10
Padding inside the map framestyle.map_style.map_paddingNumber0
Pin shapestyle.map_style.pin_shapeChoicepin, dotpin
Pinstyle.map_style.pin_colorColour#262626
Pin when it is the one selectedstyle.map_style.pin_active_colorColour-
Pin outlinestyle.map_style.pin_stroke_colorColour#ffffff
Pin outline widthstyle.map_style.pin_stroke_widthNumber2
Pin sizestyle.map_style.pin_sizeNumber18
How far a pin liftsstyle.map_style.pin_hover_liftNumber6
Number on the pinstyle.map_style.pin_number_colorColour#ffffff
Number on the pin — sizestyle.map_style.pin_number_sizeNumber10
Pin number weightstyle.map_style.pin_number_weightChoice100, 200, 300, 400, 500, 600, 700, 800700
Pin size on hoverstyle.map_style.pin_hover_scaleNumber1.15
Pin size when chosenstyle.map_style.pin_active_scaleNumber1.25
Street map tintstyle.map_style.tile_filterChoicenone, grayscale, mutednone
Grey strengthstyle.map_style.tile_grayscaleNumber100
Muted grey strengthstyle.map_style.tile_muted_grayscaleNumber55
Muted colour strengthstyle.map_style.tile_muted_saturateNumber85
Attribution textstyle.map_style.attribution_colorColour#a1a1a1
Attribution sizestyle.map_style.attribution_sizeNumber11
Margin kept when the map frames itselfstyle.map_style.fit_paddingNumber40
Google map — landstyle.map_style.g_landColour#f5f5f5
Google map — waterstyle.map_style.g_waterColour#e5e5e5
Google map — roadsstyle.map_style.g_roadColour#ffffff
Google map — road edgesstyle.map_style.g_road_strokeColour#e5e5e5
Google map — place namesstyle.map_style.g_labelColour#737373
Google map — place name backingstyle.map_style.g_label_haloColour#ffffff
Zoom button backgroundstyle.map_style.zoom_btn_backgroundColour#ffffff
Zoom button symbolstyle.map_style.zoom_btn_colorColour#262626
Zoom button borderstyle.map_style.zoom_btn_borderColour#e5e5e5
Zoom button on hoverstyle.map_style.zoom_btn_hover_backgroundColour#f5f5f5
Zoom button when it cannot go furtherstyle.map_style.zoom_btn_disabled_colorColour#a1a1a1
Zoom button shadowstyle.map_style.zoom_btn_shadow_colorColour#000000
Zoom button sizestyle.map_style.zoom_btn_sizeNumber30
Zoom button corner radiusstyle.map_style.zoom_btn_radiusNumber8
Zoom button distance from the edgestyle.map_style.zoom_btn_gapNumber10
Resize handle backgroundstyle.map_style.resize_handle_backgroundColour#ffffff
Resize handle borderstyle.map_style.resize_handle_borderColour#e5e5e5
Resize handle gripstyle.map_style.resize_handle_gripColour#a1a1a1
Resize handle grip, pointer over itstyle.map_style.resize_handle_grip_hoverColour#525252
Resize handle heightstyle.map_style.resize_handle_heightNumber16
Resize handle corner radiusstyle.map_style.resize_handle_radiusNumber8
Resize handle grip widthstyle.map_style.resize_handle_grip_widthNumber40
Resize handle grip thicknessstyle.map_style.resize_handle_grip_thicknessNumber2
Gap between the map and the handlestyle.map_style.resize_handle_gapNumber6
Marker Groupsstyle.cluster_styleGroup-
Group backgroundstyle.cluster_style.cluster_backgroundColour#262626
Group textstyle.cluster_style.cluster_text_colorColour#fafafa
Group outlinestyle.cluster_style.cluster_borderColour#ffffff
Group outline widthstyle.cluster_style.cluster_border_widthNumber2
Group sizestyle.cluster_style.cluster_sizeNumber34
Group corner radiusstyle.cluster_style.cluster_radiusNumber17
Group text sizestyle.cluster_style.cluster_font_sizeNumber12
Marker group weightstyle.cluster_style.cluster_weightChoice100, 200, 300, 400, 500, 600, 700, 800600
Map Bubblestyle.popup_styleGroup-
Bubble backgroundstyle.popup_style.popup_backgroundColour#ffffff
Bubble textstyle.popup_style.popup_text_colorColour#262626
Bubble borderstyle.popup_style.popup_borderColour#e5e5e5
Bubble corner radiusstyle.popup_style.popup_radiusNumber10
Bubble text sizestyle.popup_style.popup_sizeNumber13
Bubble line heightstyle.popup_style.popup_line_heightNumber1.5
Bubble widthstyle.popup_style.popup_widthNumber230
Bubble paddingstyle.popup_style.popup_paddingNumber12
Bubble tip sizestyle.popup_style.popup_tip_sizeNumber12
Gap under the bubble titlestyle.popup_style.popup_title_margin_bottomNumber4
Room kept for the close buttonstyle.popup_style.popup_close_gutterNumber34
Empty and No-Result Statesstyle.empty_styleGroup-
Backgroundstyle.empty_style.empty_backgroundColour#fafafa
Borderstyle.empty_style.empty_borderColour#e5e5e5
Border widthstyle.empty_style.empty_border_widthNumber1
Corner radiusstyle.empty_style.empty_radiusNumber10
Paddingstyle.empty_style.empty_paddingNumber32
Title colourstyle.empty_style.empty_title_colorColour#262626
Title sizestyle.empty_style.empty_title_sizeNumber16
Message title weightstyle.empty_style.empty_title_weightChoice100, 200, 300, 400, 500, 600, 700, 800600
Gap under the message titlestyle.empty_style.empty_title_margin_bottomNumber6
Text colourstyle.empty_style.empty_text_colorColour#737373
Text sizestyle.empty_style.empty_text_sizeNumber14
Message line heightstyle.empty_style.empty_text_line_heightNumber1.6
Back to top

Navigation and footers

Site chrome. These render in the header and footer partials, not in the page body.

Social media sharing

modules/Social media sharing.moduleANY13 fields6 content groups1 style group

Share buttons for the current page. Facebook, X, LinkedIn and email, each switched on separately.

Worth knowing
  • Every network is off by default - turn on the ones you want.
  • The share URL is the page it renders on, so there is nothing to configure per post.
  • Size and spacing are pixel numbers.

Variation

1All four networksEvery share target enabled, centred.
HubL for this variation
{% module 'd40_social_media_sharing_1'
  path='../../modules/Social media sharing.module',
  facebook={
    'enabled': True
  },
  twitter={
    'enabled': True
  },
  linkedin={
    'enabled': True
  },
  email={
    'enabled': True
  },
  alignment='center',
  settings={
    'size': 40,
    'space_between_icons': 12
  }
%}

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
AlignmentalignmentChoiceleft, center, right-
FacebookContent tab2 fieldsfacebook
FieldNameTypeOptionsDefault
Enabled?facebook.enabledToggleoff
Linkfacebook.custom_link_formatTexthttp://www.facebook.com/share.php?u=
TwitterContent tab2 fieldstwitter
FieldNameTypeOptionsDefault
Enabled?twitter.enabledToggleoff
Linktwitter.custom_link_formatTexthttps://twitter.com/intent/tweet?original_referer=&url=&source=tweetbutton&text=
LinkedInContent tab2 fieldslinkedin
FieldNameTypeOptionsDefault
Enabled?linkedin.enabledToggleoff
Linklinkedin.custom_link_formatTexthttp://www.linkedin.com/shareArticle?mini=true&url=
EmailContent tab2 fieldsemail
FieldNameTypeOptionsDefault
Enabled?email.enabledToggleoff
Linkemail.custom_link_formatTextmailto:?subject=Check out &body=Check out
SettingsContent tab2 fieldssettings
FieldNameTypeOptionsDefault
Icon sizesettings.sizeNumber50
Space between iconssettings.space_between_iconsNumber20
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Documentation and section tools

Modules that build docs sites, and the wrapper that restyles the section around it.

Docs

modules/Docs.moduleLanding pagesWebsite pages63 fields7 content groups2 style groups

A complete documentation site in one module: a category sidebar with search, article bodies, a table of contents generated from the headings, previous and next links, and a was-this-helpful control.

Worth knowing
  • Articles are addressed by slug and switch on the hash, so every article has a shareable URL of its own.
  • Table of Contents Levels decides how deep the right-hand rail goes.
  • Pair it with templates/website-pages/documentation.html and the docs layout, which drops the site header padding.
  • This page does not use it - a rendered design system reference needs live modules rather than article bodies - but it is the right module for a written manual.
Not previewed here. Docs is a full-page application with its own sidebar and routing. Nesting it inside this page would produce two competing sidebars, so it is documented here and shown live on the theme docs template.

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

63 fields across 9 groups - the groups below are collapsed. Click a group to open it.

General SettingsContent tab2 fieldssettings
FieldNameTypeOptionsDefault
Documentation Titlesettings.docs_titleTextDocs
Default Article Slugsettings.default_articleText-
Getting startedContent tab14 fieldsgetting_started
FieldNameTypeOptionsDefault
Show a getting started pagegetting_started.enableToggleon
URL sluggetting_started.slugTextgetting-started
Sidebar labelgetting_started.nav_labelTextGetting started
Sidebar group headinggetting_started.group_labelTextStart here
Page titlegetting_started.gs_titleTextGetting started
Standfirstgetting_started.descriptionTextInstall the theme, set it up once, and build the first page.
Opening copygetting_started.introRich text-
Stepsgetting_started.stepsRepeaterrepeats-
Step titlegetting_started.steps.step_titleTextUpload the theme
Step bodygetting_started.steps.step_bodyRich text<p>Describe the step.</p>
Command or snippetgetting_started.steps.step_codeText-
Next steps headinggetting_started.next_titleTextWhere to go next
Next stepsgetting_started.next_linksRepeaterrepeats-
Labelgetting_started.next_links.next_labelTextTheme settings
Article sluggetting_started.next_links.next_slugText-
Notegetting_started.next_links.next_noteText-
Live module demosContent tab9 fieldsdemos
FieldNameTypeOptionsDefault
Mount live module demosdemos.enableToggleon
Stage bank selectordemos.bank_selectorText[data-docs-stage-bank]
Show the width and corner controlsdemos.show_controlsToggleon
Full width labeldemos.label_fullTextFull width
Contained labeldemos.label_containedTextContained
Rounded labeldemos.label_roundedTextRounded
Square labeldemos.label_squareTextSquare
Code toggle labeldemos.label_codeTextHubL for this variation
Missing stage messagedemos.label_missingTextThis demo is not on the page yet.
Sidebar NavigationContent tab22 fieldssidebar
FieldNameTypeOptionsDefault
Show Sidebarsidebar.enableToggleon
Logosidebar.logoImage-
Logo Linksidebar.logo_linkLink-
Navigation Modesidebar.modeChoicenested, flatnested
Show Searchsidebar.searchToggleon
Search Placeholdersidebar.search_placeholderTextSearch docs...
Categoriessidebar.categoriesRepeaterrepeats-
Category Titlesidebar.categories.cat_titleTextCategory
Icon Namesidebar.categories.iconTextfolder
Expanded by Defaultsidebar.categories.expanded_defaultToggleon
Articlessidebar.categories.articlesRepeaterrepeats-
Article Titlesidebar.categories.articles.article_titleTextArticle
URL Slugsidebar.categories.articles.slugTextarticle
Brief Descriptionsidebar.categories.articles.article_descriptionText-
Article Contentsidebar.categories.articles.article_contentRich text<h2>Overview</h2><p>Article content goes here.</p>
Badgesidebar.categories.articles.badgeText-
Last Updatedsidebar.categories.articles.last_updatedText-
Subcategoriessidebar.categories.subcategoriesRepeaterrepeats-
Subcategory Titlesidebar.categories.subcategories.sub_titleTextSubcategory
Articlessidebar.categories.subcategories.articlesRepeaterrepeats-
Article Titlesidebar.categories.subcategories.articles.article_titleTextArticle
URL Slugsidebar.categories.subcategories.articles.slugTextarticle
Brief Descriptionsidebar.categories.subcategories.articles.article_descriptionText-
Article Contentsidebar.categories.subcategories.articles.article_contentRich text<h2>Overview</h2><p>Article content goes here.</p>
Badgesidebar.categories.subcategories.articles.badgeText-
Last Updatedsidebar.categories.subcategories.articles.last_updatedText-
Table of ContentsContent tab3 fieldstoc
FieldNameTypeOptionsDefault
Show Table of Contentstoc.enableToggleon
TOC Titletoc.toc_titleTextOn this page
Heading Levelstoc.levelsChoiceh2, h2h3, h2h3h4h2h3
Article NavigationContent tab1 fieldpagination
FieldNameTypeOptionsDefault
Show Previous/Next Linkspagination.enableToggleon
Feedback SectionContent tab2 fieldsfeedback
FieldNameTypeOptionsDefault
Show Feedback Promptfeedback.enableToggleon
Feedback Titlefeedback.feedback_titleTextWas this page helpful?
StyleStyle tab8 fieldsstyle
FieldNameTypeOptionsDefault
Sidebar Widthstyle.sidebar_widthChoicenarrow, default, widedefault
TOC Widthstyle.toc_widthChoicenarrow, default, widedefault
Content Max Widthstyle.content_max_widthChoicenarrow, default, widedefault
Sticky Sidebar & TOCstyle.sticky_navToggleon
Demo frame paddingstyle.demo_frame_paddingNumber20
Demo frame cornersstyle.demo_frame_radiusChoicenone, sm, md, lg, xlmd
Contained demo widthstyle.demo_contained_widthNumber880
Space around a demostyle.demo_gapNumber40
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top

Extra section settings

modules/Extra section settings.moduleLanding pagesWebsite pagesBlog listingBlog posts18 fields4 content groups2 style groups

A utility that restyles the drag-and-drop section it is dropped into: background, padding, container width, corner radius, shadow and the seam between this section and the next.

Worth knowing
  • It renders no visible markup of its own - it stamps data attributes on the parent section with JavaScript.
  • Seam controls how the section meets the one after it: bond removes the gap, step keeps a small offset, chapter adds a full break, flush removes padding entirely.
  • Text Colour auto reads the background and picks the light or dark text set; force it when the background is an image.
  • It only works inside a dnd_area section, which is why it does nothing on this page.
Not previewed here. This module styles its parent drag-and-drop section and draws nothing itself. On a hardcoded page like this one there is no section for it to act on, so it is documented rather than previewed.

Fields

Generated from this module fields.json, grouped the way the page editor groups them. The tab column tells you whether the group sits under Content or Style in the sidebar.

Top levelContent tab1 field
FieldNameTypeOptionsDefault
Anchor IDanchorText-
BackgroundContent tab7 fieldsbackground
FieldNameTypeOptionsDefault
Background Typebackground.typeChoicenone, color, gradient, imagenone
Background Colorbackground.colorColour#ffffff
Gradient Startbackground.gradient_startColour#262626
Gradient Endbackground.gradient_endColour#8B5CF6
Gradient Anglebackground.gradient_angleNumber135
Background Imagebackground.imageImage-
Overlay Opacity (%)background.overlay_opacityNumber50
SpacingContent tab2 fieldsspacing
FieldNameTypeOptionsDefault
Padding Topspacing.padding_topChoicenone, sm, md, lg, xl, 2xl, 3xllg
Padding Bottomspacing.padding_bottomChoicenone, sm, md, lg, xl, 2xl, 3xllg
StyleStyle tab4 fieldsstyle
FieldNameTypeOptionsDefault
Section seamstyle.seamChoiceauto, bond, step, chapter, flushauto
Border Radiusstyle.border_radiusChoicenone, sm, md, lg, xl, 2xlnone
Shadowstyle.shadowChoicenone, sm, md, lgnone
Text Color Schemestyle.text_colorChoiceauto, light, darkauto
ContainerContent tab2 fieldscontainer
FieldNameTypeOptionsDefault
Max Widthcontainer.max_widthChoicefull, container, narrow, widecontainer
Content Alignmentcontainer.alignChoiceleft, center, rightcenter
Theme colour & fontStyle tab2 fieldsmp_theme
FieldNameTypeOptionsDefault
Accent colourmp_theme.mp_module_accentColour#171717
Base fontmp_theme.mp_module_fontFont#262626
Back to top