Concept v6.0.1 — authoritative census
Census
The authoritative census of the installed Concept theme. Ground truth is the
installed theme, pulled read-only: live theme
RT-C-V2 — Site Wide & Product Page Fixes. #160946684156 on
kixf4x-8m.myshopify.com. Version from
config/settings_schema.json → theme_version: "6.0.1".
This page supersedes every earlier count. Where another document in this system states a theme total, this one wins.
- The five layers
- Counting rule
- A · Sections
- B · Blocks
- C · JS elements
- D · Keyframes
- E · Motion settings
- F · Snippets
- Method
- 366native items enumerated
- 208missing from our inventory
- 222names listed in the delta
- 1 of 5layers we had actually ingested
The five layers
The section layer alone would have read as COMPLETE — 101 found, 101 recorded. It is the four layers we never enumerated — blocks, snippets, JS elements, keyframes — that carry the gap.
| Layer | Installed | Ingested | Missing |
|---|---|---|---|
Sections (sections/*) — 98 .liquid + 3 .json section groups |
101 | 98 | 4 |
Theme blocks (blocks/*.liquid) |
22 | 16 | 6 |
Snippets (snippets/*.liquid) |
98 | 17 | 81 |
JS interaction/motion elements (customElements.define) |
116 | 18 | 98 |
CSS @keyframes families |
19 | 2 | 17 |
CSS --animation-* transition tokens |
6 | 6 | 0 |
Theme-level motion toggles (settings_schema.json) |
4 | 2 | 2 |
| Marketing-page features absent from code | 0 | — | 0 |
| 4 + 6 + 81 + 98 + 17 + 2 | 208 |
The --animation-* token layer is the one layer that was already
complete. All six — fast, nav, nav-delay,
primary, short, smooth — were named and carry their
theme values in tokens.css.
Counting rule — read before citing any number
The delta list below enumerates 222 named items, not 208. The difference is not an error and not padding.
| Layer | Names enumerated | Set-difference (missing) | Relisted for correction/context |
|---|---|---|---|
| A. Sections | 5 | 4 | 1 |
| B. Theme blocks | 6 | 6 | 0 |
| C. JS elements | 107 | 98 | 9 |
| D. Keyframes | 19 | 17 | 2 |
| E. Motion settings | 2 | 2 | 0 |
| F. Snippets | 83 | 81 | 2 |
| Total | 222 | 208 | 14 |
222 − 208 = 14, and the per-layer residuals sum to 14 exactly. Those 14 are items
already in our inventory that were relisted because they carry a correction or
the surrounding context needed to read the group — countdown-timer and
hover-button are clear examples: both were known, both were described wrongly.
Cite 208 as the gap and 222 as the enumeration. They are different questions.
CANNOT-VERIFY: which specific 14 items are the relisted overlap. LAR-1415 does not itemize them, and the strict word-boundary match that produced "18/116 named" was not published per-name. Anyone re-deriving the 208 must redo that match rather than subtract from this page.
A · Sections — 4 missing (5 enumerated)
| Item | What it does | Candidate |
|---|---|---|
| main-activate-account | Account-activation page section, 8 schema settings | no — customer-account plumbing |
| main-giftcard-header | Gift-card page header, 3 settings. Our inventory recorded it as main-giftcard, which does not exist | no — naming drift to fix |
| header-group | Shopify section group — decides which sections may be placed in the header slot | yes (structural) |
| footer-group | Section group for the footer slot | yes (structural) |
| overlay-group | Section group for the overlay slot. This is what makes drawers and popups placeable. | yes (structural) |
Section groups were never enumerated by us at all. They are not sections;
they are the containers that decide what may go where. Any giveaway popup must be
registered in overlay-group.json or it cannot be added in the theme
editor.
Phantom entries — in our inventory, not in the theme:
main-giftcard and main-password do not exist. The real files are
main-giftcard-header, main-password-header,
main-password-footer.
B · Theme blocks — 6 missing (6 enumerated)
Drag-and-drop, reusable in any section that accepts blocks. All six are candidates — full component entries are on Motion § 2.
| Item | Settings | What it does |
|---|---|---|
| popup-link | 14, accepts nested blocks | A link that opens an arbitrary modal built from nested blocks |
| spacer | 8 | Explicit vertical rhythm control inside a section |
| subheading | 10 | Eyebrow / kicker text above a heading |
| social-icons | 14 | Social account icon row; ships accessible labels |
| _accordion-row | 9 | One row inside an accordion block |
| _custom-field | 12 | An arbitrary extra field on a contact form |
C · JS interaction + motion elements — 98 missing (107 enumerated)
The theme registers 116 elements via customElements.define. Our
docs named 18, abstracted to "nine engine families". The families are not
wrong — they are too coarse. Each hides 3–15 distinct components with their own durations and
triggers.
C1 — Outside all nine families (13) — the highest-value gap
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| mouse-cursor theme.js:1117 | Custom cursor following the pointer with a 1/4 lag factor per throttled mousemove, writing --x/--y; disabled on touch | yes |
| magnet-element theme.js:1424 | Spring-eased translate toward the pointer — Motion.spring(), duration 1.5s, magnet = 10; returns to zero on pointerleave | yes |
| magnet-button theme.js:1404 | HoverButton + the same pointer magnet spring | yes |
| magnet-link theme.js:1329 | HoverLink + pointer magnet spring | yes |
| spinning-text theme.js:7383 | Lays characters around a circle using CSS sin(); infinite CSS rotation; in-view at 600px margin | yes |
| overlay-element theme.js:1866 · 40 uses | Toggles active/pressed on mouse-cursor over a media region | yes |
| gesture-element theme.js:1773 · 32 uses | Vertical swipe detection; fires gesture:swipeup/swipedown past max(25px, 15vh) with velocity > 10; longpress at 500ms | no — infrastructure drawers already consume |
| loading-bar theme.js:1104 | Page-transition progress bar; fades opacity → 0 over 1s on page:loaded | yes (already on) — the system must specify its colour or it renders unstyled |
| progress-bar theme.js:4877 | On in-view sets --progress to (value × 0.75 × 100 / max)%; pure CSS fill | yes |
| scroll-shadow theme.js:4230 · 11 uses | Shadow-DOM edge-fade so cut-off content reads as scrollable | yes — the horizontal roster rail needs this affordance |
| scrolled-images theme.js:3045 | 3 rows of shuffled images; alternating rows translate opposite directions on scroll (Motion.ScrollOffset.Any, linear); min 8 per row | yes |
| icons-carousel theme.js:8720 | On mouseenter scrolls the full scrollWidth smoothly, returns to 0 on mouseleave; touch excluded | no |
| comparison-highlight theme.js:8944 | Checkbox toggling .info row highlighting on a comparison-table | no |
C2 — Family 1, scroll-reveal (6)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| animate-element theme.js:1434 · 16 uses | The actual reveal engine. Four variants: fade-in 1.5s, fade-up 1.5s (translateY(min(2rem,90%))→0), fade-up-large 1.0s (90%), zoom-out 1.3s (scale 1.3→1) — all on [0.16,1,0.3,1]. Waits for image load, resolves after 500ms | yes — correction C-0a |
| animate-picture theme.js:1475 · 7 uses | Same engine on <picture>, no 500ms resolve delay | yes — responsive rider portraits reveal through this |
| motion-list theme.js:4099 · 17 uses | Grid cascade from translateY/opacity 0: desktop 50px / 0.5s / 0.1s stagger; mobile 30px / 0.3s / 0.05s stagger | yes — correction C-0a; our docs recorded 75ms |
| split-words theme.js:2871 · 11 uses | Splitting.js word split; each word wrapped in animate-element, 30ms per-word stagger | yes |
| reveal-banner theme.js:7902 | Scroll-driven clip-path inset(20% 35% 0% 35% round var(--rounded-block)) → inset(0%), linear; second tracker fades overlay + slides content translateY(10%)→0 | yes |
| splitting-banner theme.js:7949 | Per-character opacity 0.3 → 1 with Motion.stagger(0.1) on enter; wrapper fades to 0 on exit; button wrapper slides translateY(100%)→0 | yes |
C3 — Family 2, scroll-linked continuous (5)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| parallax-element theme.js:3717 · 6 uses | Scroll-driven translateY(data-start→data-stop), Motion.ScrollOffset.Any; auto-disabled on matchSmall | yes |
| parallax-overlay theme.js:3756 | Animates an arbitrary CSS property named by data-target from data-start to data-stop, bound to ScrollOffset.Enter | yes — the generic form is undocumented |
| footer-parallax theme.js:3787 | translateY(-50%→0) on ScrollOffset.Enter; desktop-only | no |
| testimonial-parallax theme.js:7941 | ParallaxElement with mobileDisabled = true | no |
| slideshow-parallax theme.js:7684 | translateY bound to ScrollOffset.Exit; always active, mobile included | no |
C4 — Family 3, hover micro-interactions (10 elements on 9 lines)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| hover-button theme.js:1339 · 95 uses | Hover fill-slide over 0.6s. On aria-busy="true": text fades out 0.15s, pulsing loader dots scale(1.6↔0.6) at 0.35s with 0.175s stagger, infinite alternate. The single most-used element in the theme. | yes — correction C-0c |
| hover-link theme.js:1319 · 39 uses | Anchor form; [data-fill] child y: 76%→0% on enter, →−76% on leave, 0.6s | yes |
| hover-element theme.js:1414 · 14 uses | Generic [data-fill] slide, same 0.6s | yes |
| reveal-link theme.js:1309 | Pointer-tracking reveal of a [data-reveal] child, 0.2s steps(2, start); leave easing [0.61,1,0.88,1] 0.2s | yes |
| media-hover-button theme.js:6748 | Click (non-touch) builds a 2× zoom overlay at background-size: width×2px; mousemove tracks the cursor | no — wrong semantics for editorial portraits |
| secondary-media theme.js:3966 | Flickity, no drag; mousemove picks a slide by horizontal thirds of card width (2 media → always 1; 3 → halves; 4 → thirds); returns to 0 on leave | yes |
| secondary-video theme.js:8618 | Plays an autoplay video-media on mouseenter, pauses on leave; skipped on touch and reduced-motion | yes |
| next-button theme.js:4521 · 18 uses | HoverButton subclass dispatching slider:next; self-disables from slider:*Status | yes |
| previous-button theme.js:4471 · 18 uses | HoverButton subclass dispatching slider:previous; self-disables | yes |
| control-button theme.js:7716 | Toggles paused, dispatches slider:play/slider:pause, updates aria-label | yes — accessibility floor for any autoplaying carousel |
LAR-1415 heads this group "9 undocumented components" while listing
next-button / previous-button on a shared line.
10 distinct elements. Counted as 10 here.
C5 — Family 4, looping tickers (1)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| marquee-element theme.js:2934 · 6 uses | Sets CSS --duration to (33 − speed) × min(2.5, ceil(width / parentWidth)) seconds; optional scroll-driven translateX(parallax%→0) linear; IntersectionObserver pauses offscreen | yes |
The marquee duration is COMPUTED at runtime.
--duration-marquee: 1.5s in tokens.css does not describe the theme
marquee and never did. It is ours, and is relabelled as ours in
tokens.css.
C6 — Family 5, carousels (8)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| slider-element theme.js:4571 · 15 uses | Native scrollLeft slider; prev/next move perPage × itemOffset; 50ms debounced scroll, 75ms scrollend fallback | yes — native scroll = free touch + keyboard |
| carousel-element theme.js:3865 | Flickity wrapAround + adaptiveHeight; skips animation when jumping > 3 slides; fires carousel:change | yes |
| slideshow-element theme.js:7448 | Flickity, wrapAround, optional autoplay at autoplaySpeed × 1000ms; refreshes animate-element in the incoming slide | no |
| slideshow-hero theme.js:7587 | SlideshowElement + adaptiveHeight; adds hero-scrolled when the next section top crosses −30px | no |
| slideshow-words theme.js:7630 | On slide change resets and refreshes word animate-elements after 500 + (30 × wordCount)ms | no |
| slider-dots theme.js:4800 | Scrolls the dot list to centre the active dot (smooth unless reduced-motion) | yes |
| media-dots theme.js:6830 | SliderDots + re-indexes on matchSmall/unmatchSmall | no |
| tabs-element theme.js:7027 | Panel out translateY(0→2rem)/opacity 1→0 in 0.15s, then in translateY(2rem→0)/opacity 0→1 in 0.15s; fires motion-list.load() if the panel holds one | yes |
C7 — Family 6, overlay enter/exit (9)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| modal-element theme.js:1898 · 7 uses | Base modal: adds active after a 75ms delay, waits for CSS transitionend on .fixed-modal; swipe-down feedback transform .1s linear | yes |
| x-modal theme.js:6869 · 13 uses | ModalElement + body-lock + append-to-body; pan-gesture close at 30% drag | yes |
| drawer-element theme.js:2245 · 5 uses | ModalElement + lock + append-to-body; swipe-down past 30% of layer height dismisses | yes |
| share-drawer theme.js:2292 | On show, list items translateY(2.5rem→0)/opacity 0→1 in 0.6s [0.075,0.82,0.165,1] with 0.1s stagger after a 300ms delay; uses navigator.share | yes |
| quick-view theme.js:7766 | XModal fetching ?view=modal product HTML, injected after 200ms | yes |
| back-in-stock-drawer theme.js:2335 | DrawerElement auto-showing after 1000ms if an .alert result is present | no |
| media-lightbox-button theme.js:6726 | Dispatches lightbox:open with the current slider index | yes |
| social-feed theme.js:8650 | XModal with shouldCloseAll; on show, in-view triggers lookbook.animate(); arrow keys navigate posts | yes |
| social-feed-button 2 uses | Opens the social-feed modal at a given post | yes |
C8 — Family 7, text reveal (2)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| highlighted-text theme.js:2914 | Waits for the parent split-words load promise, then adds animated. The animation itself is CSS-only | yes — this is the element behind the 7 highlight styles. Our docs describe the styles but never the element, so a build cannot wire it |
| text-scrolling theme.js:7006 | Each child .heading gets scroll-driven opacity [0,0,1,1,1,0,0] across viewport offsets 33vh–66vh | yes — distinct from all nine families |
C9 — Family 8, countdown (2 enumerated, 1 correction, 0 genuinely new)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| number-counter theme.js:8468 | Counts up 0 → target via Motion.animate progress callback; duration from data-duration; easing [0.16,1,0.3,1] | yes — correction C-0b: count-up is a separate, tenth engine |
| countdown-timer theme.js:7128 | setInterval at 1000ms re-rendering days/hours/mins/secs; hides on expiry. No animation | n/a — a text re-render, not a motion engine |
C10 — Family 9, sticky chrome (4)
| Element | Behavior + measured timings | Candidate |
|---|---|---|
| sticky-element theme.js:3631 · 13 uses | Adjusts --inset per requestAnimationFrame so a tall column follows scroll within header-height and bottom-gap bounds; default gap 20px, threshold 0.5px | yes |
| sticky-header theme.js:1201 | Throttled scroll: header-scrolled at headerHeight + 10px, header-nav-scrolled at 2 × headerHeight, header-hidden past headerBottom + 100px on scroll-down | yes (already on) — three states designers must draw |
| custom-header theme.js:1141 | Sets --header-height via ResizeObserver; applies header-transparent when the first section allows it, removing no-animate after 500ms | yes — transparent-over-hero is a per-section capability we never recorded |
| scroll-spy theme.js:8968 | Smooth-scrolls to a target offset by header height, tracks the active link; back-to-top scrolls to 0; smooth unless reduced-motion | yes |
C11 — Non-motion plumbing (47 enumerated)
LAR-1415 heads this group "24 items, listed for completeness" while enumerating 47 names. Counted as 47 here. This is the largest single arithmetic slip in the source and is the main contributor to the 222-vs-208 spread.
api-button · lazy-background · cart-count · custom-select (18 uses) · quantity-input (11 uses) · quantity-label · variant-picker · product-info · product-form · product-card-info · product-buy-price · product-complementary · product-sticky-form · product-bundle-details · product-bundle-form · product-bundle-picker · product-bundle-remove-button · product-bundle-toggle-button · media-element (26 uses) · media-gallery · video-media · model-media · filters-toggle · dropdown-element · dropdown-localization · localization-form · localization-listbox · menu-details · menu-drawer · menu-toggle · details-dropdown · details-mega · accordion-details · accordions-details · footer-details · password-header · password-footer · password-main · password-modal · copy-button · qr-code · g-map · g-map-locations · testimonials-element · lookbook-element · shop-the-look · image-comparison
accordion-details, details-dropdown and
details-mega carry real, specified motion — accordion opens height
summaryHeight→scrollHeight in 0.25s ease then fades content in
over 0.15s at a −0.1s offset; the dropdowns slide
translateY(-105%)→0 in 0.6s [0.7,0,0.2,1]. They
are filed as plumbing only because they are chrome rather than page components.
If the rider pages ship an FAQ or a filter, their durations belong in the
spec.
copy-button and qr-code are defined in
assets/giftcard.js, not theme.js.
D · CSS @keyframes families — 17 missing (19 enumerated)
The three the system MUST specify
| Keyframe | Timing | Why it is required |
|---|---|---|
| hotspot | 2s ease infinite | The pulsing ring on lookbook / shop-the-look hotspot markers. The Addendum-B lookbook port depends on it and it has no colour specified. |
| preloading | 1.2s infinite ease · 4 call sites | The theme-wide loading placeholder pulse. Governs perceived load on image-heavy rider pages. |
| placeholder-shimmer | 1.3s linear infinite | Skeleton shimmer — same surfaces, same reason. Grouped with preloading: they are one loading state. |
| strokeAnimation | 1.3s cubic-bezier(0.65,0,0.35,1) forwards · 2 call sites | SVG stroke draw-on. This is how the five scribble highlight variants DRAW. The system names the variants but never the draw-on. |
The rest
| Keyframe | Timing | Candidate |
|---|---|---|
| scrolling-left / scrolling-right | Marquee translation, driven via animation-name + the JS-computed --duration | yes — the actual marquee mechanism |
| appear-up / appear-down | Entry keyframes applied via animation-name, not shorthand | yes — used by dropdown/overlay entries |
| fade-in | .6s cubic-bezier(.7,0,.2,1) | yes — a second, distinct fade curve from the reveal engine's [0.16,1,0.3,1]. Do not merge them |
| fade-out | Exit counterpart, applied via animation-name | yes |
| beat | .6s infinite ease | no — model-viewer AR affordance |
| blink | 0.7s infinite | no — caret/indicator |
| dash | 1.4s infinite ease | no — spinner stroke |
| rotator | 1.4s infinite linear | no — spinner rotation |
| spin | 1s linear infinite · 2 sites | no — spinner |
| search-voice-pulse | 1.2s ease-in-out infinite | no — voice-search mic affordance |
| pswp-clockwise | .6s linear infinite | no — PhotoSwipe vendor spinner |
| airReviewsShowModal / airReviewsCloseModal | .6s cubic-bezier(.7,0,.2,1) | no — NOT NATIVE. Air Reviews third-party app. Flagged so they are never ingested as theme motion |
E · Theme-level motion toggles — 2 missing (2 enumerated)
The theme ships 4 motion-gating settings in
config/settings_schema.json; our docs named 2.
| Setting | Type / default | Why it matters |
|---|---|---|
| enable_lazy_image | default true | Gates lazy image loading; interacts with animate-element's wait-for-image-load. This is why cascades can stagger unevenly. Must be in the spec |
| buttons_hover | select, default standard | Theme-level selector deciding which hover-button behavior renders site-wide. The system's "invert on hover" rule is only reachable if this setting is correct. Confirm the intended value before any button spec is signed off |
| enable_page_transition | true | Already named. The loading-bar renders on every navigation and needs a specified colour |
| enable_heading_reveal | true | Already named, recorded for the full picture |
F · Snippets — 81 missing (83 enumerated)
The theme ships 98 snippets; our docs named 17. None are individually
addressable in the theme editor, but each is the actual implementation of a designed
surface — a spec that names a component without naming its snippet cannot be built
mechanically. All paths are snippets/<name>.liquid.
Design-bearing — candidate yes (50)
product-card-horizontal · product-card-bundle · product-card-placeholder · collection-card · article-card · promotion-card · social-feed-card · product-badges · product-price · product-rating · product-inventory · product-thumbnail · product-media-gallery · product-video · product-breadcrumb · product-variant-picker · product-variant-picker-button · product-variant-picker-dropdown · product-variant-picker-swatch · product-variant-picker-variant · product-variants · product-bundle-variant-picker · product-complementary · buy-buttons · swatch · unit-price · free-shipping-bar · back-in-stock · newsletter-form · alert · announcements-marquee · announcements-carousel · highlighted-text · mouse-cursor · loading-bar · heading-content · section-heading · social-icons · social-sharing · social-feed-heading · background-image · background-media · background-video · corner · icon-scribble · icon-accordion · icon-announcement · icon-brand · icon-dock · icon-guarantee
Layout / plumbing — candidate no (33)
Internal, but they define the spacing and colour contract every section obeys.
section-border-style · section-gap-style · section-layout-class · section-overlay · section-size-style · section-spacing-style · js-variables · direction · facets · facets-active · facets-drawer · facets-sticky · footer-contact · footer-logo · footer-menu · footer-text · header-drawer · header-icons · header-logo · header-nav-desktop · header-nav-drawer · header-nav-mega · gift-card-recipient-form · gift-wrap-item · gift-wrap-selector · gift-wrapping · gift-wrapping-list · gift-wrapping-list-horizontal · quick-order-list-row · article-comment · subcollections · social-meta-tags · product-placeholder
The six section-*-style snippets are the highest-value item in this
group. They are the single source of truth for how every section's padding, gap,
border, overlay and size settings become CSS. Our token sheet was derived from
theme.css and css-variables.liquid without them — which is
why nine token values were wrong at authorship.
Provenance and method
Ground truth: the installed theme, pulled read-only.
shopify theme list → live theme #160946684156. Pulled with
shopify theme pull --theme 160946684156 --path <scratch>.
No push, no theme edit, no shopify theme dev. No credential
values read or recorded.
Vault-search-first: local copies searched before any pull.
find /Users/driftwood/CODE -maxdepth 3 -name settings_schema.json → no results;
no local theme checkout existed.
Reproducible enumeration commands
| Claim | Command |
|---|---|
| 101 sections | ls <theme>/sections | wc -l → 101 (98 .liquid, 3 .json) |
| 22 blocks / 98 snippets / 43 assets / 43 templates | ls <theme>/{blocks,snippets,assets,templates} | wc -l |
| 2357 section settings, 368 block types, 61 presets | Python parse of every {% schema %} in sections/*.liquid; 97/98 parsed — pickup-availability.liquid has no schema |
| 116 custom elements | grep -ohE "customElements\.define\('[a-zA-Z0-9_-]+'" <theme>/assets/*.js | sed | sort -u | wc -l → 116. Per-file: theme.js 110, collection.js 11, cart.js 10, gift-wrapping.js 6, search.js 5, password.js/quick-order-list.js 4, others 1–2 |
| 19 @keyframes | grep -ohE "@keyframes[[:space:]]+[a-zA-Z0-9_-]+" <theme>/assets/*.css | awk '{print $2}' | sort -u |
| 6 --animation-* tokens | grep -ohE "\-\-animation-[a-zA-Z0-9-]+" <theme>/assets/*.css <theme>/snippets/*.liquid | sort -u → fast, nav, nav-delay, primary, short, smooth |
| 184 theme settings, 4 motion-gating | Python scan of config/settings_schema.json |
Marketing cross-check — roartheme.co/pages/concept
The page advertises 14 named features + "2 presets" + "50+ designed sections".
All 14 verified present in the installed code by grep: size chart 9 · sibling
products 4 · cart notes 3 · free-shipping message 6 · smart search 8 · advanced filtering 11 ·
RTL 16 · selling internationally 11 · multi-image variant 6 · quick view 9 · mega menu 8 ·
colour swatches 56 · sticky ATC 4 · cart recommendations confirmed at
sections/cart-drawer.liquid:469.
Marketing-only phantom features: 0. Marketing understates the theme — 50+ advertised vs 98 sections installed.
Non-native content — do not ingest as Concept theme motion
assets/apps.css— third-party app CSS.airReviewsShowModal/airReviewsCloseModalbelong to the Air Reviews app.assets/photoswipe.min.js+pswp-clockwise— PhotoSwipe vendor lightbox.assets/swagmag-editorial.css— SWAGTRON-added, referenced only fromsections/main-article-overlay.liquid. Ours, not Roar's.assets/tab-attention.js— a tab-title attention-grabber. Present but not in our inventory; not proposed for the rider pages.
A note on the false positive
A first pass over a wider 530-file / 234M-char corpus returned "116/116
named", which was a false positive — bare substring matching hit map,
icon, group, video etc. inside unrelated prose and raw
conversation JSON. The strict scoped result (18/116 named) is the one
reported. Both runs are recorded so the number is not mistaken for a re-count.
Matching used a word-boundary regex
(?<![a-z0-9-])name(?![a-z0-9-]) over a concatenated corpus of exactly seven
inventory-side files.
CANNOT-VERIFY
CANNOT-VERIFY: that the live theme RT-C-V2 is byte-identical to a pristine
Roar Concept v6.0.1 download. RT-C-V2 is the SWAGTRON working theme and carries at least one
confirmed local modification (swagmag-editorial.css). Every enumeration here is
"what is installed", which is what the brief asked for as ground truth. A
delta against a pristine vendor copy was not performed.
CANNOT-VERIFY: which specific 14 enumerated items are the already-named overlap between the 222 names listed and the 208 set-difference.
DISCHARGED 2026-08-30 — was: CANNOT-VERIFY that the settings-backed tokens
still hold under v6.0.1. Retained rather than deleted, because the register is the history.
The settings-backed tokens were re-read against the installed Concept v6.0.1 on
2026-08-30: 44 tokens traceable to a key in the live
config/settings_data.json, all unchanged, zero drift. The long-quoted count of
38 was an undercount and was never enumerated. --radius-badge has no settings
key and is a repo-side alias of --radius-button. The enum-to-value mapping in
snippets/css-variables.liquid has not been re-read against v6.0.1 — that part
of C-0d stays open.