About / Story
About intro as plain prose. Pick when there is editor copy or you want a simple, text-led lead with no image.
Always renders; claim-safe generated intro from name/city/areas when no copy.
{prefix}
Every section is token-driven (re-skins per archetype) and self-gating (renders real content, a claim-safe fallback, or hides — never an empty shell, never an invented fact). Pick by page, signal, and use case below.
No sections match those filters.
About intro as plain prose. Pick when there is editor copy or you want a simple, text-led lead with no image.
Always renders; claim-safe generated intro from name/city/areas when no copy.
About intro copy beside a photo. Pick for an image-led, warmer lead when a storefront/interior photo exists.
Shows a claim-safe striped photo placeholder when no image; always renders.
Generic, claim-safe value cards (clean / easy / helpful). Pick when there is no copy or photo and you want a structured, confident block (commercial / premium).
Generic-safe; invents no facts. Always renders.
Compact chip row of service-area towns. Pick for a light area touch on home/about/contact.
Hides if suds_service_areas is empty.
Multi-column town list. Pick when the area list is long and you want a denser, scannable block.
Hides if no areas.
Town list beside the map embed. Pick on location-focused pages where a map embed exists.
List-only without a map; hides if no areas.
Pricing fallback callout ("call for pricing"). Pick on Pricing when no service has public pricing rows.
Renders only when pricing is visible globally and no service has public pricing rows.
Per-service rate table. Pick on Pricing when services carry public pricing rows.
Hides unless a service has client-confirmed pricing or market-default rows marked for review.
Marketing plan cards per priced service (lowest public price + up to 3 benefits). Pick for a sales-oriented pricing presentation.
Hides when no service has client-confirmed pricing or market-default rows marked for review.
Amenities grid from the primary location. Pick to showcase confirmed amenities plainly.
Hides if location_amenities is empty.
Compact chip row of amenities. Pick for a light amenities touch (express / value).
Hides if none.
A few large amenity feature cards. Pick to spotlight 2–4 standout amenities (warm / premium / eco).
Hides if none.
Per-day hours card for a SINGLE-LOCATION shop. Pick on contact/about/location when per-day hours exist.
Renders the primary location per-day hours; falls back to the global hours summary, else hides. Self-gates OFF on MULTI-LOCATION builds (>1 published location) — there, hours are per-branch (locations_grid/locations_map <details> + Location pages), so a lone generic hours block would misrepresent branches with different hours. hours_summary_strip (a global operator one-liner) is unaffected.
One-line hours strip. Pick for a compact hours mention when only a summary line is set.
Hides if suds_hours_summary is empty.
Full-width Google map embed. Pick on contact/location when an embed is set.
Hides if no primary-location map embed.
Map beside the location name/address/phone + hours. Pick when you want the map plus confirmed contact details.
Hides if no map embed; all data confirmed.
FAQ accordion from the faq CPT. Pick for collapsible Q&A.
Hides if no faq posts.
Open two-column Q&A. Pick when you want all answers visible (dense / value / commercial).
Hides if no faq posts.
B2B card. Pick to surface commercial accounts when a commercial service exists.
Signal-gated: only renders if a commercial service exists.
Commercial benefits + photo from the commercial service. Pick for a richer B2B showcase.
Commercial-service gated.
Full-width final CTA band. The default page closer; always safe.
Always renders; label/sub are signal-aware (no pickup claim on self-service).
Two-column CTA: copy + an action card (CTA link + call/text). Pick when you want a contact-action card alongside the CTA.
Real link, no fake form; signal-aware copy. tone targets the OUTER band; the panel itself takes the cta_bg knob (ink|primary|tint|surface) — on tone=dark the default ink panel lifts to the shared card mix so it never sinks ink-on-ink.
Centered boxed CTA card. Pick for a softer, contained closer (warm / premium / eco).
Always renders; signal-aware copy.
The sub-page opener: per-PAGE eyebrow / title override / lead + a background style (none · surface · ink · gradient · image-with-scrim). Fields live on each page/post edit screen.
Always renders; blank fields fall back to the template default, the page title, and the sentence-bounded auto subtitle. Image bg falls back to the featured image, then degrades to ink (never an empty frame). Agent CLI: `wp suds field-set page_header <field> <v> --page=<type>`.
Services card grid. The default services presentation; image-friendly.
Generic claim-safe fallback cards; always renders.
Alternating-row services; a service's featured image renders beside its copy when set. Pick for dense/structured services (value / commercial).
Generic claim-safe fallback; always renders. Rows without an image stay text-only (no empty frames).
Flagship-led services: the FIRST service (menu_order) renders as a large feature (photo or icon panel + excerpt + CTA), the rest as compact rows. Pick when one service (wash & fold, pickup) leads the business.
The operator's service ORDER is the emphasis — reorder Services to change the flagship. Same claim-safe generic fallback as the other services variants.
Services card grid where each card LEADS WITH THE SERVICE FEATURED IMAGE instead of an icon. Pick for image-led services on photo-forward skins (warm / premium / eco).
Generic claim-safe fallback cards; always renders. A service with no featured image (and every fallback card) shows the claim-safe striped "add a photo" placeholder — NEVER a fabricated photo — so it looks complete during a build and swaps to real photos as service featured images are set.
Compact icon + label strip of services. Pick for a light services overview (express).
Generic fallback; always renders. `display=cards` upgrades the bare icons to tappable cards (gradient icon tile + hover lift) when the band feels too plain.
The /services/ CPT-archive grid (every published service as a card), riding the MAIN archive query. The default grid slot on the services archive — compose a services_* variant to swap it.
Archive-context section: it renders the main query, so outside /services/ it shows the empty state. Promoted from the hardcoded archive part (byte-identical).
Admin-entered third-party reviews widget. Pick only when a reviews embed is provided.
Requires suds_reviews_embed; never shows sample quotes. Hides if none.
Real reviews as cards. Pick when the suds_reviews repeater has entries.
REAL reviews only; hides if none; stars only when a rating is set.
Dense masonry wall of real reviews. Pick when there are many reviews and you want social-proof density.
REAL reviews only; hides if none.
Home reviews rich panel. The home `quotes` slot.
Home-only; admin embed → real suds_reviews, with an optional verified Google badge. Self-gates when no real review source exists.
Numbered "how it works". The default how-it-works; balanced.
Signal-aware claim-safe default flow (self-service vs pickup); always renders.
Compact horizontal numbered steps. Pick for a light, scannable flow (express / value).
Signal-aware default flow; always renders.
Vertical numbered timeline. Pick for a structured, sequential flow (commercial / premium).
Signal-aware default flow; always renders.
ZIP lead-in + real scheduling link. Pick as an app-style lead capture when pickup is offered (express).
Signal-gated: pickup_delivery. Never on self-service-only.
Pickup flow steps + scheduling CTA. Pick to explain the pickup process.
Signal-gated: pickup_delivery.
Punchy pickup promo card + CTA. Pick as a compact pickup highlight.
Signal-gated: pickup_delivery.
Email-capture band ahead of the footer. Pick when the client has a real list destination (WPForms form or an external signup URL).
Self-gates: renders NOTHING without a WPForms id (plugin active) or external link — never a dead form. Claim-safe default copy promises no cadence or offers.
Contact block: an inquiry FORM beside a phone/email/address/directions card. Leads the contact page; also fits about/location. The bundled "Contact Us" WPForms form auto-imports so a fresh build works out of the box.
Form column self-gates (WPForms id → external form link → nothing — never a dead form); the NAP card keeps the section useful, so it always renders. Scheduling stays a separate link CTA (suds_cta_url); this captures general inquiries, invents no contact facts.
Owner/attendant spotlight — a person-led trust surface ('meet our guides' shape). Pick on Home/About when the client supplies real people.
Self-gates on the suds_team_people repeater (empty → renders nothing). Auto-layout by count: 1 person = feature split, 2–3 = card grid. No photo → initials monogram, NEVER a stock face; role is free text (no invented credentials).
One card per published Location (name, address, phone, directions, page link; primary badged). Pick on Contact/About/Location pages for MULTI-location clients.
Signal-gated (multi_location) AND self-gates below 2 published locations — a single-location site never renders it. Real Location posts only; per-branch hours render behind a native <details> disclosure when confirmed rows exist.
Same as locations_grid but each branch card LEADS WITH THE LOCATION FEATURED IMAGE. Pick for image-led multi-location on photo-forward skins.
Same gating as locations_grid (multi_location + 2+ published locations). A location with no featured image shows the claim-safe striped "add a photo" placeholder — NEVER a fabricated photo — swapping to the real photo when set.
Compact branch list beside the primary map embed — the map-led locations variant. Pick on Contact/About/Location for MULTI-location clients on map-forward skins.
Same gating as locations_grid (multi_location + 2+ published locations). Renders the list WITHOUT the map column when no embed exists (never hides a composed locations slot). Per-branch hours render behind a native <details> disclosure when confirmed rows exist.
The /locations/ CPT-archive branch grid, riding the MAIN archive query. The default grid slot on the locations archive — compose locations_grid/photo/map to swap it (multi-location clients).
Archive-context section, NOT signal-gated: the archive always shows its branches (single-location clients keep it via the template fallback). Promoted from the hardcoded archive part (byte-identical).
Standalone photo grid from the shared interior gallery (first photo leads larger). Pick on About/Location for PHOTO-RICH clients.
Self-gates below 3 real images (the why panel covers 1–2). Renders existing client media only — never stock/placeholder padding. Photos take the archetype photo grade.
The photo gallery as a slim scroll-snap filmstrip — the compact variant for dense/technical skins. Pick on About/Location where the full grid is too heavy.
Same data + 3+-image self-gate as gallery_grid; keyboard-scrollable (focusable strip). Existing client media only.
Wash & fold explainer + photo. Pick to feature a wash & fold offering.
Signal-gated: wash_fold.
Wash & fold drop-off flow. Pick to explain the wash & fold process.
Signal-gated: wash_fold; generic flow fallback.
Reassurance strip from confirmed amenities, else generic-safe badges. Pick for a light trust row; always safe.
Always renders; generic-safe when no amenities.
Headline numbers from confirmed hero stats. Pick only when real stats are entered.
CONFIRMED only — hides if no suds_hero_stats.
Soft, claim-safe promise + call CTA. Pick for a reassurance block.
Soft promise only; never a fabricated warranty. Always renders.
Home "why choose us" rich panel (copy + benefits + interior gallery + amenities). The home `why` slot.
Home-only; always renders. Interior gallery shows a slider for 2+ photos, a single photo for one, else a placeholder.
The why-us home panel as centered intro + icon tiles + amenities, with NO media frame — pick for photo-poor clients or compact skins so the home never shows a placeholder photo box.
Shares why_panel content (single owner); the interior gallery fields stay live for the About-page gallery sections. Keeps the .s-why class so band/texture rhythm applies. `align` knob (default center) left-aligns the head + CTA to match pages whose other section heads are left-aligned.
Home service-area rich panel. The home `areas` slot.
Home-only; always renders.
The single-service main content (description, benefits, process steps, pricing) read from the CURRENT service post. Part of every service single by default.
Single-context section: reads the queried service post; composable per-type (suds_section_stack_service option) or per-post (suds_section_stack meta).
Cross-links the OTHER services from a service single. Part of every service single by default; remove per-type or per-post via composition.
Single-context section: excludes the queried service from its grid.
The single-location NAP block (address, phone, hours, map embed, amenities) read from the CURRENT location post. Part of every location single by default.
Single-context section: reads the queried location post; composable per-type (suds_section_stack_location option) or per-post (suds_section_stack meta).
The single-location photo gallery (location_gallery field, Fancybox lightbox) read from the CURRENT location post. Self-gates when the location has no gallery.
Single-context section: reads the queried location post.
Stored-value laundry-card balance check (Laundroworks/FasCard portal link) as a compact home utility band. Pick when the client uses a card system with a customer portal.
URL-gated on home:suds_cardbalance_url — hidden until the portal link is entered (never a dead CTA). Also surfaces a matching button in the footer hours column when the URL is set. Ported from the t2-laundry fork.
Brand tokens live in style.css :root — client-editable,
logo-derivable, ACF-exportable (colors & fonts). Structural knobs live in
archetypes.css [data-arch] — one value per archetype skin, so names only.
How the selector reads a section: filter by page type, drop any whose signal isn't present, then confirm needs (or rely on a claim-safe fallback).
Section appears only when this offering/condition is detected on the site.
Section appears only when this offering/condition is detected on the site.
Section appears only when this offering/condition is detected on the site.
Section appears only when this offering/condition is detected on the site.
Section appears only when this offering/condition is detected on the site.
Section appears only when this offering/condition is detected on the site.
needs)Theme Settings option field (sbs_setting)
Home-page content field (sbs_home_field)
Primary location CPT field (sbs_primary_location_field)
At least one published post of this CPT