Storefront inventory¶
What the Nova-family storefront themes share, and what each one has copied. Measured on
2026-10-28 at development commit 3a72258d7. Use it to decide which components are worth
sharing; it records facts, not decisions.
Themes covered: nova, brock, atelier, depot, pop, spec, ridge, diorama, bistro. Every theme except Bistro is layered directly on Nova; Bistro is layered on Brock (Bistro, Brock, Nova), so it inherits Brock's fragments. The legacy Bootstrap theme is out of scope. How a template is found is in Theme resolution.
How the numbers were taken¶
- Changed lines is
diff a b | grep -c '^[<>]': lines removed plus lines added, so a one-line edit counts 2. - vs Nova compares a theme's copy with
nova/<same path>. vs Brock compares withbrock/<same path>. Brock is the baseline for the copies because the other layered themes were built from it. - Residual (written
n→r) is the Brock diff after normalising each theme's class prefix toTHEMEin both files (brock-,at-,depot-,pop-,spec-,rg-,dio-and the matching message-key prefix, plus the shortb-,d-,p-,sp-forms). A residual of 0 to 4 is the same markup with a rename. The short-prefix rule also rewrites Bootstrap'sd-flex, so residuals on pages that use it (merchandisingNode,product,searchResults) are inflated by 2 to 4 lines of rename noise, not real differences. - CSS counts include every
.cssfile under the theme'scss/folder. Nova's folder includes itsextensions/styles.
1. Fragment fork matrix¶
Each cell is changed lines vs Nova / changed lines vs Brock→residual. A dash means the theme
ships no copy. Brock's cell shows only the Nova diff. Template length is Brock's line count.
Chrome fragments (fragment/)¶
| File (Brock lines) | Brock | Atelier | Depot | Pop | Spec | Ridge | Diorama | Bistro |
|---|---|---|---|---|---|---|---|---|
pagination (55) |
98 | 98 / 40→2 | 98 / 40→2 | 98 / 40→2 | 98 / 40→2 | - | - | - |
sort-dropdown (15) |
27 | 27 / 14→4 | 27 / 14→2 | 27 / 14→2 | 27 / 14→2 | - | - | - |
category-nav (31) |
70 | 64 / 40→38 | 70 / 22→0 | 70 / 22→0 | 70 / 22→0 | - | - | - |
account-status (18) |
32 | 27 / 15→15 | 32 / 14→0 | 32 / 14→0 | 32 / 14→0 | - | - | - |
mini-basket (178) |
221 | 200 / 175→81 | 213 / 150→16 | 213 / 150→18 | 213 / 150→16 | - | - | - |
facet-rail (85) |
150 | 153 / 97→55 | 150 / 68→2 | 147 / 67→5 | 150 / 68→2 | - | - | - |
footer (101) |
86 | 81 / 81→49 | 83 / 61→7 | 83 / 61→7 | 83 / 61→7 | 73 / 81→77 | 59 / 73→71 | - |
auth-head (260) |
88 | 109 / 45→25 | 88 / 22→2 | - | 101 / 39→27 | - | 114 / 56→46 | - |
head (153) |
19 | 68 / 69→63 | 106 / 107→101 | 58 / 59→53 | 76 / 77→71 | 78 / 81→75 | 69 / 72→66 | - |
nav (170) |
491 | 523 / 264→232 | 529 / 196→90 | 537 / 236→152 | 529 / 192→82 | 461 / 226→208 | 463 / 234→232 | 500 / 257→259 |
collection-product-grid (67) |
91 | - | - | - | - | - | - | - |
promoCodeStyles (51) |
64 | - | - | - | - | - | - | - |
Notes on the rows:
- Pagination is five copies of the same file. The residual of 2 is one comment line that names the theme. Nothing else differs.
- Category nav, account status: Depot, Pop and Spec are the same file as Brock after a rename (residual 0). Atelier's copy is a different design.
- Sort dropdown: the only non-rename difference is Atelier's no-JS Apply button, which uses
at-btn--ghostwhere the others use--outline. - Mini basket: Depot, Pop and Spec match Brock apart from the quantity stepper's class names
(
THEME-mini__stepperagainstTHEME-stepper) and a clear-basket block Brock has and they lack (see "Behaviour that has drifted"). - Facet rail: Depot and Spec match Brock (residual 2, comments). Pop renders each value as a pill and drops the checkbox glyph, which is a real design difference (residual 5). Atelier's rail differs in structure.
- Footer: Depot, Pop and Spec match Brock except for Brock's
footerNoticehook (for Bistro) and itscommerceChromeEnabledguard on the payments row. - Auth head: a copy of Nova's with the theme's own stylesheet and tokens. Brock and Depot are the same file after the rename (residual 2); Atelier and Spec each add about 25 lines.
- Head: Brock's differs from Nova's by only 19 lines (it keeps Nova's structure); every other
theme differs from Nova by 58 to 106. The copies agree on the shared parts (viewport,
bdgr.css, view transitions, canonical,shop-currency,pageTitles, theme colour) and differ in fonts, stylesheets and theme-specific scripts. - Nav is the one chrome fragment that is genuinely a per-theme design. Depot and Spec are the closest to Brock (residual 90 and 82 of about 210 lines).
Listing and page templates (top level and blog/)¶
| File (Brock lines) | Brock | Atelier | Depot | Pop | Spec | Ridge | Diorama |
|---|---|---|---|---|---|---|---|
page.html (32) |
13 | 13 / 12→2 | 13 / 12→4 | 13 / 12→2 | 13 / 12→4 | 13 / 12→6 | 14 / 13→9 |
product.html (41) |
39 | 39 / 10→0 | 39 / 10→2 | 39 / 10→0 | 39 / 10→0 | - | - |
searchResults.html (51) |
90 | 80 / 44→38 | 90 / 20→2 | 90 / 20→0 | 90 / 20→0 | - | - |
merchandisingNode.html (61) |
88 | 108 / 62→56 | 92 / 34→12 | 88 / 28→0 | 88 / 28→0 | - | - |
collection.html (43) |
69 | 146 / 95→89 | 180 / 125→121 | 135 / 80→74 | 198 / 143→137 | - | - |
blog/blogList.html (none in Brock) |
- | - | - | - | - | 68 | 68 |
blog/blogPost.html (none in Brock) |
- | - | - | - | - | 80 | 78 |
page.html,product.html,searchResults.htmlandmerchandisingNode.htmlare thin shells (30 to 60 lines) that pick a layout and include the theme's listing or rail fragment. Four to six copies each are the same file after a rename.collection.htmlis the one top-level template that differs a lot per theme (Spec carries the showcase layout, Depot a list view).- Ridge's and Diorama's blog templates differ from each other by 16 (list) and 30 (post) lines out of 37 and 46, so they are close to each other as well as to Nova's.
- Nova's own
page-3-9.html/page-9-3.html/page-empty.htmlare forked only by Ridge (page-3-9,page-9-3) and Brock (page-9-3).
Nova fragments no theme forks¶
breadcrumb, checkoutStyles, commerceTokens, content-results, facet-limit,
facet-search, flags, gallery-labels, handoverItems, icons, landing-links,
quick-filters, responsive-image, search-banner, search-form, search-scope,
themeSelect, and all of nova/fragments/ (donationOptions, eventCardLine,
fundraiserProgress, lineItemAttributes, quantitySelector).
Forks outside the requested scope¶
The same pattern repeats under productFragment/ and extensions/. Columns are vs Brock→residual.
| File (lines in Brock) | Atelier | Depot | Pop | Spec | Ridge | Diorama | Bistro |
|---|---|---|---|---|---|---|---|
extensions/menuGeneratorExtension/menu (102) |
66→4 | 66→4 | 66→4 | 66→4 | 145→129 | 153→147 | 147→147 |
extensions/collectionChooser/menu (76) |
56→2 | 56→2 | 56→2 | 56→2 | 88→74 | 87→81 | - |
extensions/searchBar/main (54) |
24→2 | 24→2 | 24→2 | 24→2 | - | - | - |
extensions/featuredProduct/main (9) |
4→2 | 4→2 | 4→2 | 4→2 | 33→33 | - | - |
extensions/trendingProducts/trendingProducts (9) |
4→2 | 4→2 | 4→2 | 4→2 | - | - | - |
extensions/recentlyViewedProducts/... (8) |
4→2 | 4→2 | 4→2 | 4→2 | - | - | - |
productFragment/productDetail (294) |
298→182 | 318→288 | 185→53 | 332→302 | - | - | - |
productFragment/listingPageProduct (123) |
150→126 | 128→100 | 84→50 | 131→105 | - | - | - |
productFragment/railCard (36) |
39→29 | 19→7 | 23→9 | 22→12 | - | - | - |
2. Theme-only fragments¶
Fragments that exist in a theme and have no Nova counterpart.
| Fragment | Lines | What it is |
|---|---|---|
brock/fragment/brock-icons |
33 | Inline stroke icons for the chrome, 1em square, currentColor |
brock/fragment/brock-listing |
106 | Shared body of search results and merchandising nodes (grid, rail, pager, sort, category nav) |
brock/fragment/brock-rail |
18 | Titled row of product cards, scroll-snap on phones |
brock/fragment/added-basket |
59 | "Added to your basket" pop-over, split out so Bistro can include it |
brock/fragment/footerNotice |
8 | Empty hook at the top of Brock's footer; Bistro fills it |
brock/fragment/themeAssets |
9 | Empty hook for extra stylesheets and scripts in a theme layered on Brock |
atelier/fragment/atelier-icons, -listing (95), -rail (19) |
33 | Atelier's icons, listing body and rail |
depot/fragment/depot-icons, -listing (132), -rail (18) |
35 | Depot's icons, listing body (with its category rail) and rail |
pop/fragment/pop-icons, -listing (103), -rail (18) |
33 | Pop's icons, listing body and rail |
spec/fragment/spec-icons, -listing (107), -rail (18) |
35 | Spec's icons, listing body and rail |
spec/fragment/spec-showcase |
66 | One row of Spec's collection showcase: product on a spotlight, words beside it, rows alternate sides |
ridge/fragment/ridge-icons |
24 | Ridge's chrome icons |
diorama/fragment/diorama-icons |
22 | Diorama's chrome icons (header, menu, drawer) |
diorama/fragment/diorama-cards |
26 | Post card shared by the latest-posts and related-posts blocks |
bistro/fragment/footerNotice |
20 | Bistro's kitchen phone and allergen band, overriding Brock's empty hook |
bistro/fragment/themeAssets |
22 | Bistro's menu stylesheet and script, loaded after Brock's |
The -listing, -rail and -icons fragments are forks of Brock's under another name. Changed
lines against Brock's after normalising the prefix:
| Fragment | Atelier | Depot | Pop | Spec |
|---|---|---|---|---|
*-rail |
3 | 0 | 0 | 0 |
*-icons |
6 | 10 | 6 | 8 |
*-listing |
153 (different layout) | 42 | 9 | 21 |
The icon files differ mainly in the stroke path data. Ridge and Diorama have no listing, rail or pager fragments.
3. Component families by class¶
Counts are distinct class names in the theme's own CSS folder and occurrences in its own template folder (the prefix is in brackets).
Buttons¶
| Family | Where | Modifiers defined | -btn uses in templates |
.x-btn rules in CSS |
|---|---|---|---|---|
nova-btn |
Nova and every layered theme's shared pages | -primary, -secondary, -outline, -error, -block, -sm, -lg, -icon (BEM-less, hyphenated) |
328 in 46 files | 44 |
brock-btn |
Brock, Bistro | --block --buy --ink --lg --outline --quiet --sm (7) |
121 in 15 files | 23 |
depot-btn |
Depot | --block --buy --dark --ink --lg --outline --pri --quiet --sm (9) |
58 in 8 files | 24 |
pop-btn |
Pop | --block --buy --ink --lg --outline --paper --quiet --sm --tone (9) |
58 in 8 files | 46 |
spec-btn |
Spec | --block --buy --dark --ink --lg --outline --pri --quiet --sm (9) |
60 in 9 files | 42 |
at-btn |
Atelier | --block --ghost --sm --text (4) |
22 in 5 files | 10 |
rg-btn |
Ridge | --block --cta --ghost --light --line (5) |
25 in 3 files | 18 |
dio-btn |
Diorama | --accent --block (2) |
5 in 1 file | 8 |
bi-btn |
Bistro | none | 8 in 1 file | 7 |
tb-btn |
Booking pages and booking extensions in Nova | n/a | 35 (25 in booking/manage.html) |
|
le-btn |
Login error page | n/a | 19 | |
ho-btn |
Basket handover extension | n/a | 13 |
Every layered theme's stylesheet also restyles .nova-btn (6 to 18 rules each, Diorama 18),
because Nova's checkout, account and extension templates use nova-btn whatever the theme.
Brock, Depot, Pop and Spec share a modifier vocabulary (--buy, --ink, --outline, --quiet,
--lg, --sm, --block); Depot and Spec also share --pri and --dark.
Cards, chips, badges, inputs, pagers, drawers¶
Distinct classes whose name contains the word (any BEM part), then template occurrences in the theme's own folder.
| Family | Nova | Brock | Atelier | Depot | Pop | Spec | Ridge | Diorama |
|---|---|---|---|---|---|---|---|---|
| card | 27 / 247 | 17 / 30 | 17 / 32 | 16 / 23 | 17 / 27 | 16 / 21 | 1 / 1 | 9 / 14 |
| badge | 6 / 8 | 5 / 8 | 5 / 12 | 5 / 8 | 5 / 2 | 5 / 8 | 0 | 0 |
| chip | 4 / 4 | 4 / 6 | 4 / 12 | 2 / 2 | 4 / 6 | 2 / 2 | 0 | 0 |
| pill | 6 / 59 | 0 | 1 / 1 | 0 | 0 | 1 / 2 | 0 | 0 |
| input | 6 / 108 | 6 / 23 | 4 / 5 | 4 / 5 | 4 / 5 | 4 / 5 | 0 | 0 |
| field | 5 / 52 | 5 / 35 | 1 / 2 | 1 / 2 | 1 / 2 | 1 / 2 | 0 | 0 |
| select | 6 / 7 | 4 / 7 | 4 / 7 | 4 / 7 | 4 / 7 | 4 / 7 | 0 | 0 |
| pager | 1 / 5 | 6 / 11 | 6 / 11 | 6 / 11 | 6 / 11 | 6 / 11 | 0 | 0 |
| drawer | 3 / 4 | 10 / 17 | 9 / 18 | 10 / 17 | 10 / 17 | 10 / 17 | 11 / 19 | 6 / 11 |
| stepper | 0 | 4 / 10 | 1 / 1 | 1 / 1 | 1 / 1 | 1 / 1 | 0 | 0 |
Total distinct own-prefix classes in CSS: Nova 491, Brock 409, Depot 288, Atelier 275, Pop 294, Spec 309, Ridge 149, Diorama 68, Bistro 55. CSS lines: Nova 7,272, Brock 2,373, Atelier 1,732, Depot 2,241, Pop 2,624, Spec 2,933, Ridge 860, Diorama 1,722, Bistro 254.
Reading the table: Brock, Atelier, Depot, Pop and Spec carry the same block set (pager, drawer, select, card, badge, chip) with the same counts, which is what a rename of one design looks like. Ridge and Diorama are content-site themes: no shop widgets, but each has its own drawer and buttons.
4. Tokens per theme¶
"Semantic" means the 79 tokens Nova defines on :root (--color-* 37, --font-* 18,
--space-* 13, --radius-* 6, --shadow-* 5). "Re-pointed" means set again on :root, html or
body in the theme's stylesheet. The --nb-* basket tokens are the public component tokens
declared in nova/fragment/commerceTokens.html (35) plus seven read directly by the full basket and
unified checkout templates (--nb-bar-bg, --nb-item-title-size, --nb-item-title-size-lg,
--nb-item-title-weight, --nb-legend-size, --nb-sticky-top, --nb-total-weight).
| Theme | Private prefix (distinct props defined) | Distinct custom props defined | Semantic re-pointed (of 79) | color / font / radius / shadow / space |
--nb-* set |
var() uses of own prefix |
|---|---|---|---|---|---|---|
| nova | (defines them all) | 105 | 79 | 37 / 18 / 6 / 5 / 13 | 0 | n/a |
| brock | --b- (17) |
75 | 32 | 21 / 1 / 5 / 5 / 0 | 12 | 531 |
| atelier | --at- (27) |
107 | 37 | 24 / 3 / 5 / 5 / 0 | 34 | 456 |
| depot | --d- (29) |
106 | 35 | 21 / 4 / 5 / 5 / 0 | 26 | 498 |
| pop | --p- (19), --pop- (9) |
101 | 37 | 24 / 3 / 5 / 5 / 0 | 18 | 477 + 232 |
| spec | --sp- (39), --bs- (34) |
156 | 45 | 31 / 4 / 5 / 5 / 0 | 22 | 800 |
| ridge | --rg- (27), --bs- (17) |
96 | 37 | 24 / 3 / 5 / 5 / 0 | 0 | 271 |
| diorama | --dio- (16), --bs- (27) |
126 | 47 | 33 / 4 / 5 / 5 / 0 | 18 | 222 |
| bistro | --bi- (9), --rm- (11), --tb- (11) |
40 | 0 | 0 / 0 / 0 / 0 / 0 | 3 (--nb-ink, --nb-line, --nb-muted) |
89 |
- No theme re-points any
--space-*token, and none re-points--font-size-*,--font-weight-bold/medium/normal/semiboldor--radius-full. These are the tokens Nova's own templates use most (549--space-*and 190--font-*uses in Nova's CSS). - Every theme re-points the colour ramp (
--color-primary*,--color-gray-*, status colours), the--shadow-*set and five of six radii. The font family tokens are set by Atelier, Depot, Pop, Spec, Ridge and Diorama. - Own-prefix styling dominates: the theme's own listing, chrome and card CSS reads its private tokens (222 to 800 uses), not Nova's semantic ones. Ridge's own CSS uses semantic tokens twice.
- Bistro re-points nothing, so it takes Brock's values, and its
--nb-ink,--nb-lineand--nb-mutedare read by no template or stylesheet. - Public basket tokens (the
--nb-*column counts every--nb-*a theme sets, of the 42 above): Atelier 34, Depot 26, Spec 22, Pop and Diorama 18, Brock 12. Ridge sets none (it has no basket). Of the 35 declared incommerceTokens.html, three are set by no theme:--nb-cta-shadow,--nb-image-ratioand--nb-title-font.
5. Inline styles and raw colours¶
Template counts cover the theme's own template folder (comments excluded). Raw hex is
#rgb, #rgba, #rrggbb or #rrggbbaa. CSS hex is split into custom-property definitions
(the palette; expected) and everything else (colours written straight into rules).
| Theme | Template files | style=" attributes |
Hex in templates | CSS hex, total | CSS hex outside token definitions | CSS hex in token definitions |
|---|---|---|---|---|---|---|
| nova | 193 | 1,206 | 282 | 200 | 148 | 52 |
| brock | 47 | 66 | 12 | 33 | 13 | 20 |
| atelier | 27 | 12 | 6 | 48 | 13 | 35 |
| depot | 28 | 12 | 6 | 29 | 2 | 27 |
| pop | 26 | 10 | 4 | 47 | 14 | 33 |
| spec | 29 | 14 | 6 | 75 | 13 | 62 |
| ridge | 21 | 4 | 4 | 80 | 43 | 37 |
| diorama | 15 | 1 | 6 | 55 | 21 | 34 |
| bistro | 5 | 0 | 0 | 11 | 6 | 5 |
Nova holds nearly all inline styling (1,206 of 1,334 attributes, 90 percent). Depot is the cleanest theme (two hex values outside its palette); Ridge writes the most colour directly into rules.
6. Duplicated theme message keys¶
messages.properties holds 625 theme-prefixed keys: Brock 155, Depot 129, Spec 116, Atelier 109,
Pop 108, Bistro 8. Ridge and Diorama have none. Of 191 distinct suffixes, 115 appear under more
than one theme, covering 549 keys; in 90 of those suffixes the English text is identical in every
theme that has it.
Largest groups (suffix prefix, number of suffixes in 2+ themes, themes, how many are identical text):
| Group | Suffixes | Themes | Identical text |
|---|---|---|---|
basket.* |
16 | brock, atelier, depot, pop, spec (Bistro 1) | 12 |
filters.* |
14 | brock, depot, pop, spec (Atelier 13) | 12 |
pdp.* |
13 | brock, depot, spec (pop 12, atelier 10) | 11 |
card.* |
10 | depot, spec (9); pop, atelier 5; brock 4 | 10 |
search.* |
10 | all five | 6 |
added.* |
9 | all five | 5 |
plp.* |
9 | all five (brock, pop, atelier 8) | 5 |
nav.* |
7 | all five (Bistro 1) | 6 |
sort.* |
6 | all five | 6 |
mini.* |
5 | all five | 5 |
pager.* |
5 | all five | 5 |
promise.* |
4 | all five | 3 |
account.* |
3 | brock, depot, pop, spec (Atelier 2) | 2 |
rail.* |
3 | all five | 1 |
footer.* |
1 | all five | 1 |
The pager, sort and account keys in full (every theme with the key; text identical unless noted):
| Key suffix | Themes | Text |
|---|---|---|
pager.label, pager.next, pager.page, pager.previous, pager.summary |
atelier, brock, depot, pop, spec | same |
sort.featured, sort.nameAsc, sort.nameDesc, sort.priceAsc, sort.priceDesc, sort.rating |
atelier, brock, depot, pop, spec | same |
account.signIn |
atelier, brock, depot, pop, spec | same |
account.greeting |
brock, depot, pop, spec | same |
account.yourAccount |
atelier, brock, depot, pop, spec | differs |
plp.apply, plp.categoriesHeading, plp.emptyCta, plp.subcategories |
atelier, brock, depot, pop, spec | same |
plp.categoriesButton |
depot, spec | same |
plp.count, plp.emptyBody, plp.emptyTitle, plp.sortBy |
atelier, brock, depot, pop, spec | differs |
Merchants can override any of these in Site Text, so the prefixed names are part of the data a
shared component has to keep working. Depot's merchandisingNode.html also reads
depot.plp.searchScope, depot.plp.searchAll and depot.plp.searchIn where Brock, Pop and Spec
read the shared search.inCategory.* keys.
7. Behaviour that has drifted¶
These are differences in what the page does, not in how it looks.
| Where | Finding |
|---|---|
Language switcher and hreflang |
Fixed. languageSites (site config storefront-language-sites) was rendered only by Nova's nav and head, so a multi-language shop on Brock, Atelier, Depot, Pop, Spec, Ridge, Diorama or Bistro got neither the switcher nor the rel="alternate" hreflang links. Both are now ui/language-menu, called by every theme's nav and head. |
Commerce chrome guard (commerceChromeEnabled) |
Fixed: every theme's header bar and drawer now hide the account and basket controls (Bistro's account links too), Atelier's footer hides its payment marks, and absent still means a shop (StorefrontChromeRenderTest). It was: on a site that sells nothing, Nova's nav hides the account and basket controls and its footer hides the payments strip. Brock does the same in nav (header, drawer and basket panel) and in the footer's payments row, and Diorama guards its nav controls. Atelier, Depot, Pop and Spec guard only the basket panel at the foot of nav: their header account and basket buttons and their drawer account and basket links are not guarded. None of Atelier, Depot, Pop, Spec, Ridge or Diorama guards the footer's payments row. Ridge's nav has no guard at all and always links to /p/basket. |
| Mini basket | Brock's has a clear-basket confirmation (basket.clear.*); the Atelier, Depot, Pop and Spec copies do not. |
| "Added to basket" pop-over | Brock moved it to fragment/added-basket (also used by Bistro). Atelier, Depot, Pop and Spec still define it inline in nav with their own added.* keys. |
| Accessibility | aria-current appears in Nova's nav only, among the nav fragments. |
| Dead tokens | Bistro sets --nb-ink, --nb-line and --nb-muted; nothing reads them. |
8. Candidates to share¶
Ranked by near-identical copies times lines. "Near-identical" means a residual of at most about 10 percent of the file against Brock's copy. Lines are Brock's.
| # | Component | Near-identical copies | Lines | Score | What genuinely differs between themes |
|---|---|---|---|---|---|
| 1 | fragment/auth-head |
4 (Brock, Depot, Atelier, Spec) | about 265 | about 1,060 | Stylesheet link and token names; Atelier and Spec add about 25 lines of their own styling hooks |
| 2 | fragment/mini-basket |
4 (Brock, Depot, Pop, Spec) | 170 to 178 | about 690 | Stepper class names; Brock's clear-basket block; icon set and message-key prefix |
| 3 | extensions/menuGeneratorExtension/menu |
5 (Brock, Atelier, Depot, Pop, Spec) | 102 | 510 | Class prefix only (residual 4) |
| 4 | fragment/footer |
4 (Brock, Depot, Pop, Spec) | 98 to 101 | about 400 | Brock's footerNotice hook and payments-row guard; icon set |
| 5 | extensions/collectionChooser/menu |
5 | 76 | 380 | Class prefix only (residual 2) |
| 6 | fragment/facet-rail |
4 (Brock, Depot, Pop, Spec) | 82 to 85 | about 340 | Pop shows values as pills and drops the checkbox glyph; the rest is a rename |
| 7 | *-listing |
3 (Brock, Pop, Spec; Depot is 42 away) | 103 to 107 | about 315 | Depot's category rail beside the grid; Spec's showcase rows; Atelier is a different layout |
| 8 | fragment/pagination |
5 | 55 | 275 | Nothing but the prefix, icon file and message keys (residual 2, a comment) |
| 9 | extensions/searchBar/main |
5 | 54 | 270 | Class prefix only (residual 2) |
| 10 | merchandisingNode.html |
4 (Brock, Depot, Pop, Spec) | 61 | 244 | Depot's own search-scope message keys; otherwise a rename |
Next in line:
| Component | Near-identical copies | Lines | What differs |
|---|---|---|---|
product.html |
5 | 41 | Nothing (residual 0 to 2) |
searchResults.html |
4 | 51 | Nothing (residual 0 to 2) |
fragment/category-nav |
4 (Brock, Depot, Pop, Spec) | 31 | Nothing (residual 0); Atelier is a different design |
page.html |
6 | 32 | Class prefix and the body class (residual 2 to 9) |
productFragment/railCard |
4 | 36 | Small markup differences (residual 7 to 12) |
*-rail |
4 | 18 | Nothing (residual 0), Atelier 3 |
fragment/account-status |
4 | 18 | Nothing (residual 0); Atelier is a different design |
fragment/sort-dropdown |
5 | 15 | Atelier's Apply button style (residual 2 to 4) |
*-icons |
4 | 33 to 35 | Icon path data (residual 6 to 10) |
extensions/featuredProduct, trendingProducts, recentlyViewedProducts |
5 each | 8 to 9 | Nothing (residual 2) |
Not worth sharing yet: nav (a different design in every theme), head (stylesheets and fonts
per theme), collection.html and productFragment/productDetail (layouts differ), and Ridge's and
Diorama's blog templates (they differ from Nova's by 68 to 80 lines and from each other by 16 to
30).