Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ Spark follows human-readable release notes rather than a package-manager version

The GitHub release body is a summary, not a copy of the changelog section. Write one sentence framing the release, then a `### Highlights` list of at most five bullets, then a link to `CHANGELOG.md` at the release tag for the full record. A changelog entry stays as long as the change needs it to be, but the release page is scanned rather than read, so pasting a long entry into it produces notes nobody can follow. That is what happened to 1.3.0 and 1.4.0, both since rewritten. Use the 1.2.0 release as the reference format.

## Unreleased

- Fixed custom Pages rendering empty titles, breadcrumbs, and content because the page template referenced `flatpage` instead of the platform-provided `page` object. This also restores page content in Account Only mode.

## 1.4.0 - 2026-09-08

- Theme Settings > Style gained nine token-shaped settings: Layout holds `body_bg_color`, `border_color`, `radius_control`, `radius_card`, `section_padding`, `content_gap` and `container_max_width`; Type Scale holds `heading_scale` and `body_size`. `layouts/base.html` bridges them into `:root` with the same guarded pattern the font and colour settings use (noun-first properties such as `--control-radius` and `--section-padding-y`), and `css/input.css` registers namespace-first `@theme` keys that read them with today's values as fallbacks (`--radius-control: var(--control-radius, 4px)`); the names differ on purpose, because a key that reads a property of its own name is a self-reference and the bridge disconnects. The default option of `section_padding`, `content_gap`, `heading_scale` and `body_size` emits nothing. Component rules now read the bridge directly: body background and font-size, `.btn` radius, `.btn-secondary` and `.product-card-bordered` border colour, `.container` max-width, `.product-card` radius (with `overflow: hidden` so a rounded card clips its image), and the `.product-grid` / `.category-grid` gaps. In the six homepage sections the live branches swap design-decision literals for token utilities: `py-section-y md:py-section-y-md` on the four standard sections and `py-band-y md:py-band-y-md` on the promo band, `gap-content-md md:gap-content-lg` on the featured product columns, `text-display md:text-display-md` on the hero heading, `text-h1 md:text-h1-md` / `text-h2` / `text-h3` on the section headings, promo heading and featured product title, and `rounded-card` on the featured image and category tiles. Every `--text-*` key carries Tailwind's own line-height ratio, so the swap changes neither size nor leading. Placeholder and empty-state chrome stays literal because it signals missing configuration rather than the merchant-facing design language. A fixture render of the homepage before and after, at default settings, shows 0 computed-style differences and 0 differing pixels at 1280 and 375, for both a populated homepage and a fresh store rendering only `settings_data.json`. `tests/test_style_tokens.py` pins the fallbacks, the bridge conditions, the live-versus-placeholder split and the nine setting ids. `assets/main.css` grew from 48219 to 50298 bytes (#56).
Expand Down
8 changes: 4 additions & 4 deletions templates/pages/page.html
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{% extends 'layouts/base.html' %}

{% block title %}{{ flatpage.title }} | {{ block.super }}{% endblock %}
{% block title %}{{ page.title }} | {{ block.super }}{% endblock %}

{% block breadcrumbs %}
<div class="container py-3">
<nav aria-label="{% t 'navigation.breadcrumb' %}">
<ol class="flex items-center gap-2 text-xs text-slate-400">
<li><a href="{{ homepage_url }}" class="hover:text-slate-600">{% t "navigation.main.home" %}</a></li>
<li>/</li>
<li class="text-slate-600">{{ flatpage.title }}</li>
<li class="text-slate-600">{{ page.title }}</li>
</ol>
</nav>
</div>
Expand All @@ -17,9 +17,9 @@
{% block content %}
<div class="container py-8 md:py-12">
<div class="max-w-2xl">
<h1 class="text-2xl md:text-3xl font-semibold text-slate-800 mb-8">{{ flatpage.title }}</h1>
<h1 class="text-2xl md:text-3xl font-semibold text-slate-800 mb-8">{{ page.title }}</h1>
<div class="text-sm text-slate-600 leading-relaxed">
{{ flatpage.content|safe }}
{{ page.content|safe }}
</div>
</div>
</div>
Expand Down
Loading