Operator review on tablet showed two gaps in the 2.6 ship:
- Shop home (layout 2 lanes) had no facet sidebar — only tag detail did
- Mobile lanes were horizontal Netflix-style tile rows with no
description visible at all
This batch extends the facet experience across every page where the
operator opted into categorization (home_layout >= 1):
- New templates/_facet_nav.j2 with three macros (facet_form, sidebar,
details). One source of truth for the controls, three variants of
the wrapper. shop_tag.j2 refactored to import the macro.
- home.j2 + shop.j2 now wrap content in .tag-detail-layout when
home_layout >= 1, rendering both the desktop sidebar and the mobile
<details> accordion. CSS toggles visibility per viewport.
- Each lane in layout 2 now emits BOTH horizontal tiles AND vertical
.serp-list-row markup with 6-sentence excerpts. CSS shows tiles
>=800px, SERP rows <800px. Tablet / phone shoppers see image +
title + price + description excerpt under each tag heading.
- views/shop.py: facet_tags is populated for any home_layout >= 1
(was only on ?tag= filter); sort + price now also filter the
non-tag-filtered home grid when the shopper applies them.
Native HTML. No JS dependency. Same controls everywhere.
Test: test_shop_home_lanes_renders_facet_sidebar_and_mobile_rows.
Docs: CLAUDE.md MPS-24 section, architecture matrix, ticket Phase 2.6b.