{%- comment -%} MIT License · (c) 2026 Lintel · https://lintelagency.com/resources/shopify-sections {%- endcomment -%} {%- comment -%} Rich text: eyebrow, headings, text and buttons as blocks in any order, centred or aligned per device, at a narrow, medium or wide measure. Plain background, gradient, or a desktop and mobile background image (each with its focal point) under a colour overlay. No JavaScript. Depends on: snippets/lib-image.liquid, snippets/lib-button.liquid {%- endcomment -%} {%- liquid assign s = section.settings assign eager = false if section.index <= 2 assign eager = true endif assign has_image = false if s.image != blank or s.image_mobile != blank assign has_image = true endif -%}
{%- if has_image -%} {%- endif -%}
{%- for block in section.blocks -%} {%- assign b = block.settings -%} {%- case block.type -%} {%- when 'eyebrow' -%} {%- if b.text != blank -%}

{{ b.text | escape }}

{%- endif -%} {%- when 'heading' -%} {%- if b.heading != blank -%} {%- assign tag = b.heading_tag | default: 'h2' -%} <{{ tag }} class="lib-rich-text__heading lib-rich-text__heading--{{ b.heading_size }}" {{ block.shopify_attributes }}> {{- b.heading -}} {%- endif -%} {%- when 'text' -%} {%- if b.text != blank -%}
{{ b.text }}
{%- endif -%} {%- when 'buttons' -%} {%- if b.button_label != blank or b.button2_label != blank -%}
{%- render 'lib-button', label: b.button_label, url: b.button_url, style: b.button_style, new_tab: b.button_new_tab -%} {%- render 'lib-button', label: b.button2_label, url: b.button2_url, style: b.button2_style, new_tab: b.button2_new_tab, arrow: false -%}
{%- endif -%} {%- endcase -%} {%- endfor -%}
{% stylesheet %} .lib-rich-text { color: var(--lib-text); padding: var(--lib-pt) 1rem var(--lib-pb); } .lib-rich-text__frame { position: relative; isolation: isolate; max-width: 1200px; margin: 0 auto; border-radius: var(--lib-radius); overflow: hidden; background-color: var(--lib-bg); background-image: var(--lib-bg-image, none); } .lib-rich-text--full { padding-inline: 0; } .lib-rich-text--full .lib-rich-text__frame { max-width: none; border-radius: 0; } /* Without an image the background belongs to the whole section, edge to edge. */ .lib-rich-text:not([data-image]) { background-color: var(--lib-bg); background-image: var(--lib-bg-image, none); } .lib-rich-text:not([data-image]) .lib-rich-text__frame { background: none; overflow: visible; } .lib-rich-text[data-image] .lib-rich-text__frame { padding: clamp(3rem, 8vw, 7rem) clamp(1.25rem, 5vw, 4rem); } .lib-rich-text__media { position: absolute; inset: 0; z-index: -1; } .lib-rich-text__media::after { content: ''; position: absolute; inset: 0; background: var(--lib-overlay); opacity: var(--lib-overlay-opacity); } .lib-rich-text__img { display: block; width: 100%; height: 100%; object-fit: cover; } .lib-rich-text__content { position: relative; display: flex; flex-direction: column; align-items: center; max-width: 40rem; margin: 0 auto; text-align: center; } .lib-rich-text[data-measure='medium'] .lib-rich-text__content { max-width: 52rem; } .lib-rich-text[data-measure='wide'] .lib-rich-text__content { max-width: 68rem; } .lib-rich-text__content[data-align='left'] { align-items: flex-start; text-align: left; margin-inline: 0 auto; } .lib-rich-text__content[data-align='right'] { align-items: flex-end; text-align: right; margin-inline: auto 0; } @media (max-width: 749px) { .lib-rich-text { padding-top: var(--lib-pt-m); padding-bottom: var(--lib-pb-m); } .lib-rich-text[data-show='desktop'] { display: none; } .lib-rich-text__content[data-align-m='left'] { align-items: flex-start; text-align: left; } .lib-rich-text__content[data-align-m='center'] { align-items: center; text-align: center; } .lib-rich-text__content[data-align-m='right'] { align-items: flex-end; text-align: right; } } @media (min-width: 750px) { .lib-rich-text[data-show='mobile'] { display: none; } } .lib-rich-text__content > * { margin: 0; } .lib-rich-text__content > * + * { margin-top: 1.25rem; } .lib-rich-text__content > .lib-rich-text__eyebrow + * { margin-top: 0.875rem; } .lib-rich-text__content > .lib-rich-text__actions { margin-top: 2rem; } .lib-rich-text__eyebrow { font-size: 0.8rem; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--lib-accent); } .lib-rich-text[data-image] .lib-rich-text__eyebrow { color: inherit; opacity: 0.85; } .lib-rich-text__heading { font-size: clamp(2rem, 4vw, 3.25rem); line-height: 1.1; letter-spacing: -0.025em; text-wrap: balance; } .lib-rich-text__heading--small { font-size: clamp(1.5rem, 2.5vw, 2rem); } .lib-rich-text__heading--medium { font-size: clamp(1.75rem, 3vw, 2.5rem); } .lib-rich-text__heading--xlarge { font-size: clamp(2.5rem, 6vw, 4.5rem); } .lib-rich-text__text { font-size: 1.0625rem; line-height: 1.7; text-wrap: pretty; } .lib-rich-text__text--small { font-size: 0.9375rem; } .lib-rich-text__text--large { font-size: clamp(1.125rem, 1.6vw, 1.3125rem); line-height: 1.6; } .lib-rich-text__text > :first-child { margin-top: 0; } .lib-rich-text__text > :last-child { margin-bottom: 0; } .lib-rich-text__text a { color: inherit; text-underline-offset: 0.2em; } .lib-rich-text__actions { display: flex; flex-wrap: wrap; gap: 0.75rem 1.25rem; justify-content: center; } .lib-rich-text__content[data-align='left'] .lib-rich-text__actions { justify-content: flex-start; } .lib-rich-text__content[data-align='right'] .lib-rich-text__actions { justify-content: flex-end; } @media (max-width: 749px) { .lib-rich-text__content[data-align-m='left'] .lib-rich-text__actions { justify-content: flex-start; } .lib-rich-text__content[data-align-m='center'] .lib-rich-text__actions { justify-content: center; } .lib-rich-text__content[data-align-m='right'] .lib-rich-text__actions { justify-content: flex-end; } } /* Motion: blocks rise in as the section scrolls into view (scroll-driven animations only). */ @supports (animation-timeline: view()) { @media (prefers-reduced-motion: no-preference) { .lib-rich-text[data-animate] .lib-rich-text__content > * { animation: lib-rich-text-rise linear both; animation-timeline: view(); animation-range: entry 0% entry 55%; } } } @keyframes lib-rich-text-rise { from { opacity: 0; transform: translateY(20px); } } {% endstylesheet %} {% schema %} { "name": "Lib · Rich text", "tag": "section", "class": "lib-section", "max_blocks": 8, "settings": [ { "type": "header", "content": "Layout" }, { "type": "select", "id": "content_width", "label": "Text width", "options": [ { "value": "narrow", "label": "Narrow" }, { "value": "medium", "label": "Medium" }, { "value": "wide", "label": "Wide" } ], "default": "narrow" }, { "type": "select", "id": "section_width", "label": "Width", "options": [ { "value": "page", "label": "Page width" }, { "value": "full", "label": "Full width" } ], "default": "page" }, { "type": "text_alignment", "id": "text_alignment", "label": "Text alignment on desktop", "default": "center" }, { "type": "select", "id": "text_alignment_mobile", "label": "Text alignment on mobile", "options": [ { "value": "left", "label": "Left" }, { "value": "center", "label": "Center" }, { "value": "right", "label": "Right" } ], "default": "center" }, { "type": "header", "content": "Background image" }, { "type": "paragraph", "content": "Optional. With an image the text sits on it inside a framed panel." }, { "type": "image_picker", "id": "image", "label": "Desktop image" }, { "type": "image_picker", "id": "image_mobile", "label": "Mobile image", "info": "Optional. Shown below 750px." }, { "type": "color", "id": "overlay_color", "label": "Overlay", "default": "#1C1917" }, { "type": "range", "id": "overlay_opacity", "label": "Overlay opacity", "min": 0, "max": 90, "step": 5, "unit": "%", "default": 45 }, { "type": "range", "id": "corner_radius", "label": "Panel corner radius", "info": "Page width only.", "min": 0, "max": 40, "step": 2, "unit": "px", "default": 16 }, { "type": "header", "content": "Colors" }, { "type": "color", "id": "color_bg", "label": "Background", "default": "#F6F1EA" }, { "type": "color_background", "id": "color_bg_gradient", "label": "Background gradient", "info": "Optional. Covers the background color." }, { "type": "color", "id": "color_text", "label": "Text", "info": "Use a light text color on a dark image.", "default": "#231F1B" }, { "type": "color", "id": "color_accent", "label": "Accent (solid button, eyebrow)", "default": "#7A5A3A" }, { "type": "color", "id": "color_accent_text", "label": "Text on accent", "default": "#FFFFFF" }, { "type": "header", "content": "Spacing and visibility" }, { "type": "range", "id": "padding_top", "label": "Top padding on desktop", "min": 0, "max": 200, "step": 4, "unit": "px", "default": 96 }, { "type": "range", "id": "padding_bottom", "label": "Bottom padding on desktop", "min": 0, "max": 200, "step": 4, "unit": "px", "default": 96 }, { "type": "range", "id": "padding_top_mobile", "label": "Top padding on mobile", "min": 0, "max": 160, "step": 4, "unit": "px", "default": 56 }, { "type": "range", "id": "padding_bottom_mobile", "label": "Bottom padding on mobile", "min": 0, "max": 160, "step": 4, "unit": "px", "default": 56 }, { "type": "select", "id": "show_on", "label": "Show on", "options": [ { "value": "all", "label": "All devices" }, { "value": "desktop", "label": "Desktop only" }, { "value": "mobile", "label": "Mobile only" } ], "default": "all" }, { "type": "text", "id": "anchor_id", "label": "Anchor ID", "info": "Optional. Link to this section with #your-id." }, { "type": "header", "content": "Motion" }, { "type": "checkbox", "id": "animate", "label": "Fade in on scroll", "info": "Only in browsers that support scroll-driven animations; never when reduced motion is on.", "default": false } ], "blocks": [ { "type": "eyebrow", "name": "Eyebrow", "settings": [ { "type": "text", "id": "text", "label": "Text", "default": "Our promise" } ] }, { "type": "heading", "name": "Heading", "settings": [ { "type": "inline_richtext", "id": "heading", "label": "Heading", "default": "Made to be used, every day" }, { "type": "select", "id": "heading_tag", "label": "Heading tag", "info": "Use H1 only when this is the page's main heading.", "options": [ { "value": "h1", "label": "H1" }, { "value": "h2", "label": "H2" }, { "value": "h3", "label": "H3" }, { "value": "p", "label": "Paragraph" } ], "default": "h2" }, { "type": "select", "id": "heading_size", "label": "Heading size", "options": [ { "value": "small", "label": "Small" }, { "value": "medium", "label": "Medium" }, { "value": "large", "label": "Large" }, { "value": "xlarge", "label": "Extra large" } ], "default": "large" } ] }, { "type": "text", "name": "Text", "settings": [ { "type": "richtext", "id": "text", "label": "Text", "default": "

Share your brand's story, a care note or a short introduction to a collection. Text keeps a comfortable reading width on every screen.

" }, { "type": "select", "id": "text_size", "label": "Text size", "options": [ { "value": "small", "label": "Small" }, { "value": "medium", "label": "Medium" }, { "value": "large", "label": "Large" } ], "default": "medium" } ] }, { "type": "buttons", "name": "Buttons", "limit": 2, "settings": [ { "type": "text", "id": "button_label", "label": "First button label", "default": "Shop the collection" }, { "type": "url", "id": "button_url", "label": "First button link" }, { "type": "select", "id": "button_style", "label": "First button style", "options": [ { "value": "primary", "label": "Solid" }, { "value": "outline", "label": "Outline" }, { "value": "text", "label": "Text link" } ], "default": "primary" }, { "type": "checkbox", "id": "button_new_tab", "label": "Open first link in a new tab", "default": false }, { "type": "text", "id": "button2_label", "label": "Second button label" }, { "type": "url", "id": "button2_url", "label": "Second button link" }, { "type": "select", "id": "button2_style", "label": "Second button style", "options": [ { "value": "primary", "label": "Solid" }, { "value": "outline", "label": "Outline" }, { "value": "text", "label": "Text link" } ], "default": "text" }, { "type": "checkbox", "id": "button2_new_tab", "label": "Open second link in a new tab", "default": false } ] } ], "presets": [ { "name": "Lib · Rich text", "blocks": [ { "type": "eyebrow" }, { "type": "heading" }, { "type": "text" }, { "type": "buttons" } ] } ] } {% endschema %}