Appearance
Talamh Preset Support Pack
Diagnostic and troubleshooting reference for the Talamh garden preset — planting calendar, plant care cards, seasonal highlights, and plant metafields.
FAQ
Q: The planting calendar grid is not rendering correctly on mobile.
A: The planting calendar grid wraps — it never scrolls horizontally. With the Talamh preset active the 12 month tiles lay out 3 per row on mobile, 6 per row from 480px, and 12 per row from 768px (the base theme uses 6 per row on mobile and 12 from 768px). If the layout looks wrong:
- Check for custom CSS overriding
grid-template-columnson.planting-calendar__grid— the breakpoint rules live inevent-calendar.cssandtalamh-visual-ext.css. - Confirm the Talamh preset is active: the
<body>element should carry thepreset-talamhclass. Without it, the 3-column mobile layout does not apply.
Q: The hardiness zone dropdown shows the wrong zones, or selecting a zone changes nothing.
A: The zone dropdown is populated from the section-level zones setting on the Event calendar section — a comma-separated list of zone values (default 5,6,7,8,9), shown when the layout is set to Planting zones. There are no per-block zone settings and no "All zones" option.
Selecting a zone does not filter or hide anything: the script only writes the selection to the grid's data-zone attribute (a styling hook). All 12 month cells always render.
- Wrong zones listed? Edit the
zonescomma-separated value on the section in the theme editor. - Zone values render as literal strings, so use one zone system (USDA numbers or RHS H-codes) per store to avoid a confusing mixed list.
Q: Hardiness zone badges are not showing.
A: Two separate surfaces render hardiness zones, and they read from different places:
- The PDP hardiness-zone block reads only the
hardiness_zone_minmetafield in theuisce_<preset>namespace, derived from thesettings.presettheme setting (uisce_talamhwhen the Talamh preset is active). The block has no settings and renders nothing when the metafield is blank. - The Plant Care section's zone chip reads only that plant block's
hardiness_zonetext setting — it never reads metafields.
Check:
- PDP badge: is the metafield definition created in Shopify Admin → Settings → Custom data → Products, and is the value populated on the product?
- PDP badge: is Theme settings → preset set to
talamh? The namespace is derived from it — the section-levelniche_metafield_namespacesetting does not affect the badge. - Plant Care chip: is the
hardiness_zonetext setting filled in on the plant block?
Q: Seasonal highlights tabs are not switching.
A: The tabs layout is server-rendered. The active season is set by the block marked active: true in the theme editor at page load. Switching to a different season requires selecting the block in the theme editor and saving — there is no built-in client-side tab switching.
If only one tab is showing, add more Season blocks — each block contributes one tab, labelled by its title setting (blocks have no season value setting). The tab navigation renders whenever the tabs layout is selected, regardless of how many blocks exist.
Q: The Event JSON-LD is missing or malformed.
A: Event JSON-LD is emitted on product pages only, and only when BOTH the uisce_talamh.planting_start_date and uisce_talamh.planting_end_date date metafields are populated on the product — it is suppressed when either is blank, to avoid Google Rich Results "missing required field" errors. To fix:
- Create both date metafield definitions and populate calendar-day values on each plant product; the emitter renders them as ISO 8601
YYYY-MM-DDstartDate/endDate. planting_windowis human-readable display text only — it never feeds the JSON-LD.
Decision Tree: "Why is my planting calendar empty?"
Symptom: Planting calendar page does not show the 12-month grid
-> Is the event-calendar section layout set to 'Planting zones'?
-> Check in theme editor: Sections → Event calendar → Layout setting
-> If 'Timeline (default)': the section renders Event blocks as a timeline instead of the grid
-> If 'Planting zones': Continue
-> Planting zones layout: the grid always renders all 12 month cells
-> It takes no blocks — Event blocks only render in the Timeline layout
-> The zone dropdown never hides cells (it only sets data-zone on the grid)
-> If no cells render: confirm the section is present in the page template and
check the browser console for custom CSS/JS errors
-> Timeline layout showing nothing instead?
-> Add at least one 'Event' block (the only block type) and populate its
date / title / description fieldsValidator Interpretation
"Lighthouse: planting-calendar has accessibility warning on grid pattern"
The planting calendar grid uses role="grid", role="gridcell", and aria-current="date". A Lighthouse warning may indicate:
aria-currentvalue is notdate— the theme usesdateper ARIA spec for calendar grids- Missing
aria-labelon the grid container — the theme ships anaria-labelfrom thesections.planting_calendar.grid_labellocale key; check a custom edit has not removed it
"axe: color-contrast on planting calendar text fails WCAG AA"
This can occur when the planting-calendar color token applies a background tint that reduces contrast for text in some combinations. To fix:
- Navigate to Theme settings → Color schemes and ensure the scheme applied to the planting calendar section has sufficient text-to-background contrast (≥4.5:1 for body text, ≥3:1 for large text / UI components).
- Use the browser DevTools Accessibility panel to check the contrast ratio on the affected element.
"Google Search Console: Event structured data has missing required field"
Required Event fields: name, startDate. The theme's Event JSON-LD reads product metafields — never calendar blocks — and is suppressed unless both uisce_talamh.planting_start_date and planting_end_date are populated, so it always emits name, startDate, and endDate together. A missing-field report usually means a custom edit to snippets/json-ld.liquid.
Console Diagnostic Snippet
js
(function talamhDiagnostic() {
'use strict';
const grid = document.querySelector('[role="grid"]');
const seasonal = document.querySelector('.seasonal-highlights');
const r = {
presetBodyClass: document.body.classList.contains('preset-talamh'),
plantingCalendar: {
present: !!grid,
monthCellCount: document.querySelectorAll('[role="gridcell"]').length,
selectedZone: grid?.dataset?.zone ?? 'none',
currentMonthMarked: !!document.querySelector('[aria-current="date"]'),
},
plantCare: {
present: !!document.querySelector('.plant-care'),
cardCount: document.querySelectorAll('.plant-care__card').length,
zoneChips: document.querySelectorAll('.plant-care__zone-chip').length,
},
seasonalHighlights: {
present: !!seasonal,
layout:
[...(seasonal?.classList ?? [])]
.find((c) => c.startsWith('seasonal-highlights--'))
?.replace('seasonal-highlights--', '') ?? 'unknown',
panelCount: document.querySelectorAll('.seasonal-highlights__panel, .seasonal-highlights__season').length,
},
pdpZoneBadges: document.querySelectorAll('.pdp-block__badge--zone').length,
presetCSS: !!document.querySelector('link[href*="preset-talamh"]'),
nicheNamespace: document.querySelector('[data-niche-namespace]')?.dataset?.nicheNamespace ?? 'not found',
};
console.group('%cTalamh Diagnostic Report', 'color:#2d6a4f;font-weight:bold;font-size:14px');
console.table(r.plantingCalendar);
console.log('Plant care:', r.plantCare);
console.log('Seasonal highlights:', r.seasonalHighlights);
console.log('PDP zone badges (meaningful on product pages only):', r.pdpZoneBadges);
console.log('Preset CSS:', r.presetCSS);
console.groupEnd();
return r;
})();Accessibility Diagnostic
Planting calendar ARIA grid check
js
(function checkPlanningCalendarA11y() {
const grid = document.querySelector('[role="grid"]');
if (!grid) {
console.warn('No ARIA grid found for planting calendar');
return;
}
const gridcells = grid.querySelectorAll('[role="gridcell"]');
const currentDate = grid.querySelector('[aria-current="date"]');
const gridLabel = grid.getAttribute('aria-labelledby')
? document.getElementById(grid.getAttribute('aria-labelledby'))?.textContent
: grid.getAttribute('aria-label');
console.log({
gridPresent: true,
gridcellCount: gridcells.length,
currentMonthMarked: !!currentDate,
gridLabel: gridLabel ?? 'MISSING — add aria-label or aria-labelledby',
});
})();Expected: gridcellCount > 0, currentMonthMarked: true, gridLabel present.
Hardiness zone badge check
js
// PDP badge (run on a product page) — reads uisce_talamh.hardiness_zone_min
const pdpBadges = document.querySelectorAll('.pdp-block__badge--zone');
console.log(pdpBadges.length + ' PDP zone badges found');
pdpBadges.forEach((b, i) => {
console.log('Badge', i + 1, {
text: b.textContent.trim(),
hasAriaLabel: !!b.getAttribute('aria-label'),
});
});
// Plant Care chip (run on the plant-care page) — reads the block's hardiness_zone setting
const chips = document.querySelectorAll('.plant-care__zone-chip');
console.log(chips.length + ' plant-care zone chips found');Localization Notes
Planting calendar month names
Month labels in the planting calendar come from 12 dedicated locale keys — sections.planting_calendar.month_jan through sections.planting_calendar.month_dec — translated in all 50 locales.
Hardiness zone labels
RHS zone labels (H1–H7) are not localized — they are an English standard recognized internationally. USDA zone numbers are numeric. These do not require translation.
Seasonal highlights season labels
Season labels are merchant-entered block titles (each Season block's title setting), not locale keys. Translate them per market with Shopify's content translation tools (e.g. Translate & Adapt).
Curl Cheat-Sheet
bash
# Verify Event JSON-LD on a plant product page (requires both planting date metafields)
curl -s "https://your-store.myshopify.com/products/your-plant-handle" \
| grep -A 10 '"@type":"Event"'
# Check uisce_talamh namespace on plant care page
curl -s "https://your-store.myshopify.com/pages/plant-care" \
| grep 'data-niche-namespace'
# Verify seasonal-highlights section is on homepage
curl -s "https://your-store.myshopify.com" \
| grep -c 'seasonal-highlights'
# Check preset-talamh.css is linked
curl -s "https://your-store.myshopify.com" \
| grep 'preset-talamh'Deployment Checklist
Before going live with the Talamh preset:
- [ ]
settings.presetset totalamhin Theme settings - [ ] At least 4 products have
uisce_talamh.hardiness_zone_minpopulated - [ ] Planting calendar page exists with
page.planting-calendartemplate, handleplanting-calendar; the 12-month grid renders with the current month marked - [ ] Plant care page exists with
page.plant-caretemplate, handleplant-care; at least 3 plant-care-card blocks with non-empty content - [ ] Event-calendar section
layoutis set toplanting_zones(the schema default isdefault, the Timeline layout) - [ ]
planting_start_dateandplanting_end_datedate metafields populated on plant products (both required for Event JSON-LD);planting_windowis optional display text - [ ] Seasonal highlights section has at least 2 season blocks
- [ ] ARIA grid attributes present on planting calendar (run diagnostic snippet)
- [ ]
aria-current="date"on current month column - [ ] Event JSON-LD appears on plant product pages (curl check above)
- [ ]
preset-talamh.csslinked in page head - [ ] Color contrast passes WCAG AA on seasonal tinting sections (check with axe)
- [ ] Header menu includes "Planting Calendar" and "Plant Care" links
Support pack last updated: 2026-05-03 (Phase 06.10 closeout)