# PinFlow — Full Documentation > Complete content from all pages on getpinflow.com --- title: How to Add an Image to a Shopify Accordion description: Shopify's collapsible (accordion) block only accepts text, so the dynamic source picker never offers an image. Here is the no-code-file way to show a per-product image inside an accordion row, like a size guide. --- ## The problem A merchant asked about this on the Shopify Community. They run the Trade theme and wanted to show an image inside one of the collapsible rows on a product page. An accordion, or collapsible, is one of those rows on the product page that opens when you click it. "Product features", "Materials and care", "Shipping". You click the heading and it drops open to show text. They wanted to drop an image in there instead of text. A size chart, a certificate, a care diagram. And they wanted it to be different for each product, pulled from a dynamic source. They got stuck fast. The collapsible block only lets you type text. They tried pasting code into the theme's Custom CSS box, and nothing happened. They tried switching a setting from text to liquid, and the image came out blank. I reproduced the whole thing on a test store running Trade. Every part of what they hit is expected, and the fix is small. ## Why you cannot pick an image in an accordion This is worth understanding, because it tells you why the fix has to be code. The collapsible block on the product page has one content field, and that field only accepts text or rich text. That is the whole design of it. When you click the dynamic source icon on that field, Shopify only offers you text-based metafields. There is no image option in that list, so there is nothing to pick. A rich text field will not hold an image either. So the accordion itself gives you no way in. The image has to be printed by a small piece of Liquid, the theme's template language. That is the only way to get an actual image tag inside the collapsible content. Two things the merchant tried, and why neither worked: - The Custom CSS box cannot run Liquid. It only styles what is already on the page. Pasting Liquid there does nothing. - Changing a setting from text to liquid does not, on its own, render an image. It just changes what kind of value the field expects. ## Two ways to put an image in a Shopify accordion There are two clean routes, and you almost always want the first one. **Its own collapsible row, no theme files.** You add a Custom Liquid block to the product page. Inside it you build one accordion row that holds the image. It looks exactly like the theme's other rows, and you never touch a theme code file. This is the one I recommend, and the steps below use it. **Inside an existing row.** If you want the image to sit inside one of your current rows, next to its text, that needs a small edit in the theme's code. It is doable, but it means editing a core theme file, so keep it for when you specifically need the image beside existing text. ## Step by step: add an image to a Shopify accordion This works with a File metafield and a Custom Liquid block. No theme code files are edited. I tested every step on Trade. ### 1. Create an image field Go to Settings, then Custom data, then Products, then Add definition. Name it Detail image. Set the Type to File, then choose Image. Save.  That File type is the piece the accordion's dynamic source picker never offers you. Creating it as its own field is what gives you an image to work with. ### 2. Put an image on the product Open a product. Scroll to its Metafields section and find Detail image. If you do not see it, click View all metafields. Upload the image you want for that product. Each product gets its own, so a shirt can show its size chart and a candle can show its burn guide. ### 3. Add a Custom Liquid block Go to Online Store, then Themes, then the three dots, then Customize. Open a product. In the product information area, click Add block, then Custom Liquid. Paste this and Save: ```liquid {%- assign detail_img = product.metafields.custom.detail_image.value -%} {%- if detail_img != blank -%}
{{ block.settings.quote }}
{%- if block.settings.name != blank -%}{{ block.settings.name }}
{%- endif -%}Where quality craftsmanship meets timeless design
` holding your words. So when you write `.h2 { font-size: 22px !important }`, the size does change on the outer `
` inside, not an `
` as well, so a rule aimed at `.h2` alone is overridden. - Use `.h2, .h2 *` inside a `max-width` media query, in **Theme settings > Custom CSS**. - Use 749px for the Horizon family, 768px as a generic phone breakpoint. - If desktop is wrong too, change **Theme settings > Typography** instead and skip the code. --- --- title: "How to Change Menu Font Size in Shopify: Bigger and Bold" description: Make your Shopify menu text bigger or bold with a few lines of Custom CSS. Works for normal themes and for app-built mega menus like Meteor, including the selector mistake that stops most people. --- ## The problem You want your Shopify menu text to be bigger. Or bold. Or both. You look through the theme settings and nothing changes the menu. The typography setting changes your headings and body text, but the navigation menu stays the same small size. This is one of the most common small styling questions from store owners, and the answer is almost always the same: a few lines of Custom CSS. No app, no paid tool, no developer. A store owner asked exactly this on the Shopify Community. They ran the **Meteor Mega Menu** app and wanted the top menu larger and bold. Their theme's font settings did not touch it. Someone gave them a snippet of CSS that looked right, and it did nothing. I reproduced their setup, found why it failed, and gave them the version that worked. They confirmed it "worked a treat." This article covers both cases: a normal Shopify theme menu, and a menu that an app draws for you. The second one is where people get stuck, so I will go slow there. ## The short answer Shopify menu text is controlled by CSS, the language that decides how things look on a web page. You do not need to touch your theme's real code files. Every Shopify theme has a **Custom CSS** box built for exactly this. You paste a few lines in, hit Save, and the change is live. Here is the shape of what you are pasting. The details depend on your theme, and I will give you the exact version for both cases below. ```css your-menu-links { font-size: 18px; font-weight: 700; } ``` `font-size: 18px` makes the text bigger. `font-weight: 700` makes it bold. That is the whole idea. The only hard part is naming the menu links correctly, and there is one catch that trips most people up. First, where the CSS goes. ## Where to paste it (2 steps) The Custom CSS box is in the same place for every theme. **Step 1.** Go to **Online Store > Themes**. On your live theme, click **Customize**. Newer stores show this button as **Edit theme**.  **Step 2.** In the editor, click the **gear icon (Theme settings)** on the left. Scroll down and open **Custom CSS**. Paste your code in the box, then click **Save** at the top right.  That box adds your styles to the whole store, safely. You are editing a settings field, not the theme's code, so you cannot break anything. If you ever want to undo it, come back and delete the lines. ## Case 1: a normal theme menu (Dawn and most free themes) If your menu is the built-in theme menu, the theme draws it and you target the theme's own menu links. On Dawn, the free theme most stores start with, the top menu links use the class name `header__menu-item`. So the CSS is: ```css .header__menu-item { font-size: 18px; font-weight: 700; } ``` Paste that into Custom CSS and the menu gets bigger and bold. Before you even do that, check one thing. Some themes have a menu size option built into the header. Open the theme editor, click the **Header** section, and look for a font size or menu style setting. If it is there, use it, and skip the code entirely. Custom CSS is the fallback for when the theme gives you no setting, which is most of the time. ## Case 2: a menu built by an app (Meteor Mega Menu and similar) This is the case the store owner had, and it is where the usual advice falls apart. When a menu is built by an app, the app draws its own menu with its own HTML and its own class names. Your theme is not drawing that menu at all. So your theme's font settings never reach it, and neither do the normal theme selectors from Case 1. You have to target the app's own class names. For **Meteor Mega Menu**, the class names are `Meteor-Navigation__Link__desktop` for the top bar and `Meteor-Navigation__Link__mobile` for the mobile drawer. The CSS that works is: ```css .Meteor-Navigation__Link__desktop, .Meteor-Navigation__Link__mobile { font-size: 18px !important; font-weight: 700 !important; } ``` Here is that store's menu before and after the change. The links go from small and light to bigger and bold, on the live storefront.   On the real store the desktop links went from 16px and normal weight to 18px and bold. The mobile menu changed too, because the CSS targets both classes. ### Why the "clever" selector fails The store owner was first given a catch-all selector, something like `[class*='meteor'] a`. The idea is to match any class name that contains the word meteor, then style the links inside it. It looks smart, and it saves you from finding the exact name. On this store it changed nothing. I tested both selectors on the live store to be certain. The catch-all did nothing at all. The exact-class version worked instantly. Two reasons, and both are worth knowing for any app menu: 1. **Class matching is case-sensitive.** The app's class is `Meteor` with a capital M. A selector that writes `meteor` in lowercase never matches it. A single wrong letter and the whole rule is ignored. 2. **The top links were not inside a matching container.** The "links inside it" part had nothing to find, so nothing got styled. The lesson is simple. For an app menu, do not guess a wildcard. Use the exact class name. If you do not know it, right-click a menu item, choose **Inspect**, and read the real class name on the link. Then put that in your CSS. ### Why the `!important` matters You will notice the app version has `!important` after each value, and the Dawn version does not. The app ships its own stylesheet that already sets a font size on those links. To make sure your rule wins over the app's rule, you add `!important`. Without it, your line and the app's line can carry equal weight, and the app can win depending on which stylesheet loads last. `!important` removes the guessing and makes your change stick. For a plain theme menu you usually do not need it, but adding it does no harm if a stubborn menu refuses to change. ## Make it bigger, smaller, or less heavy Once the rule is in, tuning it is easy. You are only changing two numbers. - **Size:** change `18px`. Try anywhere from 16px to 22px. Go up slowly and check the menu does not wrap onto two lines on a laptop screen. - **Weight:** `700` is bold. `600` is semi-bold, a softer look. `500` is just a touch heavier than normal. `400` is normal. Want it bigger on desktop only, and left alone on phones? Wrap the desktop rule in a screen-size check: ```css @media (min-width: 990px) { .Meteor-Navigation__Link__desktop { font-size: 20px !important; } } ``` That rule only applies on screens 990px wide and up, which is roughly laptops and desktops. ## Change the font, color, or spacing too The same rule holds more than size and weight. Add whatever you want to change: ```css .Meteor-Navigation__Link__desktop, .Meteor-Navigation__Link__mobile { font-size: 18px !important; font-weight: 700 !important; letter-spacing: 0.5px !important; text-transform: uppercase !important; } ``` - **Font family:** add `font-family: 'Georgia', serif !important;` to use a different font. Stick to fonts your theme already loads, or the browser falls back to a default. - **Color:** add `color: #ffffff !important;` and use your own hex color. Handy when a bigger, bolder menu needs a different shade to stay readable over your header background. - **Spacing:** `letter-spacing` spreads the letters out. Small values like 0.5px to 1px look intentional. Large values look broken. Change one thing at a time and Save between each, so you can see what each line does. ## Mobile and desktop are often separate This surprises people. Many menus, Meteor included, build a **separate** set of links for mobile. That is why the working CSS above lists two class names, one for desktop and one for the drawer. If you only style the desktop class, your phone menu stays small. On a normal theme menu the mobile version usually uses a different element as well. So after any menu change, open your store on your phone, or shrink the browser window narrow, and check the small-screen menu too. ## What to check if nothing changes If you pasted the CSS and the menu looks the same, run down this list. One of these is almost always the reason. - **You forgot `!important` on an app menu.** App menus need it. Add it after each value. - **Wrong class name.** Inspect a real menu link and copy the exact class. Watch the capital letters. - **You edited a draft theme, not your live one.** Make sure the theme you edited is the one that is published. - **Browser cache.** Your change is live but your browser is showing an old copy. Do a hard refresh, or check in a private window. - **The size sits on a child element.** Rare, but if the link wraps the text in another tag with its own size, target that inner element instead. ## Do you need an app or a developer for this? No For changing menu font size, you do not need either. The Custom CSS box and a few lines cover it completely, and you can undo it any time by deleting the lines. It is worth being clear about what the menu app is actually for, though, because the answer is not "styling." A mega menu app handles the mobile drawer, the dropdown behavior, keyboard access, and staying intact when you update or switch your theme. That maintenance is the product. The look is a thin layer on top, and that layer is yours to adjust with CSS whenever you like. So keep the app if you use its menu. Just remember that the font size, weight, color, and font are a five-line CSS change you own, not something you need to pay for or wait on. ## Quick recap - Menu font size is a Custom CSS change, found under **Theme settings > Custom CSS**. - A normal theme menu: target the theme's link class, like `.header__menu-item` on Dawn. - An app menu (Meteor): target the app's exact class, `.Meteor-Navigation__Link__desktop` and `.Meteor-Navigation__Link__mobile`, and add `!important`. - Avoid wildcard selectors like `[class*='meteor']`. They are case-sensitive and miss. - Change `18px` for size and `700` for weight, and always check the menu on a phone. --- --- title: "Custom Liquid Shopify: Hide the Header on One Page" --- ## The problem custom liquid actually solves A merchant posted this on the Shopify Community. They run the Taste theme, they built a separate template for one page, and they wanted that page to show without the site header. They did the obvious thing. They opened the theme editor, found the header section, and switched it off. It disappeared from every page on the store. That reaction is not a bug and it is not something you configure your way out of. It is how Shopify structures a theme, and once you see the structure the fix is one small block of CSS in a Custom Liquid section. I reproduced the whole thing on a Taste 15.5.0 store. Here is what is going on and what to paste. ## What is custom liquid in Shopify Custom Liquid is a section you can drop into a template to inject your own code. It accepts HTML, CSS, Liquid, and script tags, and it renders exactly where you place it in the template. It exists because themes cannot anticipate everything. Rather than force you to edit theme files for every small change, Shopify gives you a slot in the theme editor where your own markup goes. Two things make it more useful than it first appears. It is a **section**, so it obeys the same scoping rules as every other section. Put it in a template and it only exists in that template. It renders **inline**, so a ` ``` That is the whole fix. Because the ` ``` It looks right. It does nothing. I checked on Taste 15.5.0. `document.querySelectorAll('#shopify-section-header')` returns **zero elements**. Same for the announcement bar. Sections rendered through a section group do not get that ID. They get a generated one that includes the group's internal numeric ID: ``` shopify-section-sections--20216712724657__header ``` That number is unique to the store. It changes when the theme is duplicated, and it changes again when the theme updates. There is no value you can hardcode and rely on. The class is the stable handle. Shopify derives `shopify-section-group-header-group` from the group's filename, so it is the same on every store running any Online Store 2.0 theme, and it survives updates. It also covers both sections at once. The announcement bar and the header are both in that group, so one rule handles both. ## Hiding only part of the header group If you want the header gone but the announcement bar kept, add the header section's own class: ```liquid ``` For a true landing page with no chrome at all, hide the footer group too: ```liquid ``` One caveat on the header-only variant: `.section-header` is the class Dawn-family themes put on the header section. Most free Shopify themes are Dawn-family, so it works on Taste, Dawn, Refresh, Sense, Craft, Studio, and Origin. On a heavily customized paid theme, inspect the header element and use whatever class it actually carries. ## How to add a custom liquid block in Shopify The navigation is where people get lost, because the Add section button appears three times on the page, once per group. Go to **Online Store > Themes > Customize**, then pick the template you want from the template dropdown in the top bar. This is the step that gets skipped. If you leave it on the default, you will edit the wrong template and see no effect.  Then click **Add section** in the **Template** group, and search for `custom`.  Paste the CSS into the **Liquid code** box and save.  Position in the template does not matter for CSS. A ` ``` That is the whole thing. Save the section, then open your storefront preview and click the hamburger. You should see the Shop tab open by default. ## The result Tapping Explore swaps to the second panel, and the drawer stays open the whole time. The signup and the footer links stay pinned at the bottom on both tabs. That switch-without-closing behaviour is the part the merchant wanted, and it is the part a plain menu cannot do.  I tested this on a Horizon store on both desktop and mobile. The Shop tab shows by default, the Explore tab swaps panels without closing the drawer, and the signup and footer stay at the bottom. ## How to edit the menu in Horizon later This is the main reason to use menus rather than hardcoded links. Once the section is in, you never touch the code again to change a link. - To add, remove, or rename a link in either tab, go to Settings, then Navigation, and edit the Shop Menu or Explore Menu. - To change the footer links, edit whichever menu the `footer_handle` points at. - The change shows up in the drawer straight away. That is also the plain answer to "how do I edit the menu in the Horizon theme?" for anyone who just wants to change links. Your menus live in Settings, then Navigation, and the theme reads them. You rarely need to touch theme code for menu changes at all. ## Can I add a mega menu or drop-down in Horizon instead? Yes, and it depends on what you mean. A drop-down, where a parent link reveals child links, is native. In Settings, then Navigation, drag a link underneath another link to nest it. Horizon renders nested links as an expandable submenu with no code. A mega menu, the big multi-column panel with images, is a bigger job. Horizon's header block has some of this built in on desktop. For a full custom mega menu, you are either extending the theme or using an app. The tabbed drawer in this guide is a different pattern, aimed at the slide-out menu rather than a desktop hover panel. ## Can I put a newsletter signup in the menu? The code above already does. It uses Shopify's own customer form, so a signup creates the customer and turns on their email marketing consent. No app needed to capture the email. If you use Klaviyo or another email tool, you can swap their embed code in place of that signup block later. The tabs and the rest of the drawer are not affected, because the signup is just one part of the section. ## What to check if it did not work If you saved the section and the drawer still looks plain, run through these. - **Handles do not match.** The most common cause. The handle in the code has to match the menu handle exactly. Check Settings, then Navigation, and confirm your menu handles are `shop-menu` and `explore-menu`, or edit the handles at the top of the code to match. - **You added it to the wrong place.** The section must load site-wide. The Footer group is the safe spot. If you added it inside a single template, it will only load on that page. - **You did not Save.** The theme editor needs an explicit Save. If the button stayed greyed out, click into the box, add a space, delete it, then Save. - **Browser cache.** You saved, but your phone still shows the old drawer. Reload, or check in a private window. ## Custom Liquid vs editing theme code People often ask whether they should just edit Horizon's files instead. For this, Custom Liquid is the better tool. Editing theme code means opening the code editor and changing the drawer snippet and the header block. It works, but a theme update can overwrite those files, and a typo can break the header on every page. The Custom Liquid section is self-contained. It cannot be overwritten by a Horizon update, and if you ever want it gone, you delete the one section. Reach for theme code only when you need something Custom Liquid genuinely cannot express. For a tabbed drawer, it can. ## The no-code alternative If you would rather not paste any code, a menu or drawer app can build a tabbed navigation visually. Meteor Mega Menu, qikify Smart Menu, and Buddha Mega Menu are all popular for this. They cost more over time than a free section, but they give you a visual editor and support. For a store that wants exactly the Shop and Explore drawer, though, the two menus plus one section is hard to beat. It is free, it is fast, and everything after setup is editable from your admin. ## The short version - Horizon's drawer shows one plain menu and has no built-in tabs or signup. - Create two menus, Shop Menu and Explore Menu, in Settings, then Navigation. - Add one Custom Liquid section in the Footer group and paste the code, matching the three handles to your menus. - The section injects the tabs, signup, and footer into your existing drawer, on desktop and mobile. - Tabs switch panels without closing the drawer, and every link stays editable from your admin with no code. That is how to customize the Shopify Horizon theme menu into a proper tabbed drawer, without touching a single theme file. --- --- title: How to Customize the Shopify Inbox Chat Button description: What you can change on the Shopify Inbox chat widget today, what you cannot, and the free code and app workarounds for a custom button text, icon, and greeting. --- ## The problem A merchant asked about this on the Shopify Community. They wanted more control over the Shopify Inbox chat widget than the app seems to allow. Their list was clear: - A rich-text greeting message, not a plain box. - Their own text on the chat button, instead of picking from a fixed list. - A custom icon they could upload. - A name for the AI agent, so it feels personal. These are fair requests. If you have opened the Inbox settings and felt boxed in, you are not missing a hidden toggle. Some of this is simply not built yet. I installed Shopify Inbox on a test store and went through every chat setting it has. This post shows what you can change today, what you cannot, and the workarounds for the two that matter most: the button text and the button icon. Shopify Inbox is Shopify's free chat app. It puts a chat button on your storefront so shoppers can message you or ask its AI assistant a question. The button, the greeting, and the colors are all set in one small settings panel. ## What Shopify Inbox lets you change today Open the Inbox app in your admin. Click Edit chat settings. That opens the theme editor on the App embeds panel, under Online store chat. Everything you can change lives in that one panel. Here is the honest list. - **Greeting message.** A single plain-text box. - **Colors.** Background and font color for the chat window. - **Icon.** A dropdown of preset icons. - **Label.** A dropdown of preset button labels. - **Position.** Left, center, or right, and three height options.  That is the whole panel. No free-text label, no icon upload, no rich text, no agent name. Below I go request by request. ## How to change the Shopify Inbox chat button text You cannot type your own text on the button in the settings. The Label field is a dropdown with a fixed set of choices: Chat, Ask anything, Assistance, Contact, Help, Support, Live chat, Message us, Need help?, and No text.  If one of those fits, pick it and save. If you want wording that is not on the list, you have two routes. The free route uses a little code. You hide Shopify's own button, then add your own button with any text you like, and have it open the chat. I show the exact steps further down. The no-code route is an add-on app. More on that below too. So the short answer to "how do I change my Shopify chat button text": inside Inbox you can only pick a preset. For truly custom words, you replace the button. ## How to use a custom chat button icon Same story as the text. The Icon field is a dropdown, not an upload. Your choices are Chat bubble, Email, Question mark, Smiley face, Team, Hand wave, and No icon.  There is no way to upload your own logo or SVG in the Inbox settings. To show a custom icon, you use the same trick as the text: hide the default button and build your own, with your own image on it. ## Can you use a rich-text greeting message? Not today. The Greeting Message is one plain-text field, as the first screenshot shows. You can write the words you want. You cannot bold part of it, add a heading, add a link, or split it into styled blocks. There is no rich-text editor, and there is no reliable workaround. Anything that hacks formatting into that box tends to break the next time Shopify updates the app. If your goal was to separate information for shoppers, the closest built-in tool is Instant answers inside Inbox. That lets you set up common questions and canned replies. It is not rich text in the greeting, but it does help you present information in a tidy way. ## Can you name the Shopify Inbox AI agent? Not today. Inbox does not give the assistant a name field. You can turn the agent on or off, and you can set its tone and rules so replies sound like your brand. But you cannot label it "Ava" or "Sam" in the chat header. That is a genuine gap, not a setting you missed. ## How to change the chat button color and position Two things you asked less about are fully supported, so it is worth naming them. **Color.** The settings panel has a Background and a Font color for the chat window. There is also an Invert activator colors switch for the button itself. So the chat button color is adjustable, even though the icon and text are not. **Position.** You can set the button to the left, center, or right, and to one of three heights. That is how you move it off a menu or a cookie bar. So if your real question was how to change the Shopify chat button color or move it, that part is easy and native. Set it in the same panel and save. ## The free way to get a custom button text and icon This is the route when you want your own words and your own image, without paying for an app. The idea is simple. You hide Shopify's own chat button. You add your own button anywhere on the page. When someone clicks it, it opens the real Inbox chat. One code block does all three. Here is the button you start with. This is the default Shopify Inbox chat button.  **Where to paste it.** The chat button is added by an app, so it does not live in your theme files. To replace it on every page, put the code in your layout, not on a single page. Go to Online Store, then Themes, then the three dots, then Edit code. Open `layout/theme.liquid` and paste the block just before the closing `