Commit Graph

60 Commits

Author SHA1 Message Date
浅念 8fbe638b15 fix: cache-bust workspace assets (?v=4) + guard empty entry IDs in editor links
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 14:18:30 +08:00
浅念 adcb1cc157 style: content list v4 — card-style rows with spacing, hover lift, rounded borders
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 14:12:33 +08:00
浅念 5cfa62611c style: content list v3 — colored type badges, mono routes, status dots, gradient design button
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 14:07:52 +08:00
浅念 779a682806 fix: editor preview uses replace mode so blocks fill the entire clickable area
Template content was rendering above the block canvas, pushing editable
blocks below the fold. Replace mode shows only blocks in preview,
making the full preview area clickable. Saved layout_mode unchanged.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 13:52:12 +08:00
浅念 f138bd5b6e test: page 2 now has next link (not last page at 20/page)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 13:38:21 +08:00
浅念 eee0edf021 test: update listing pagination assertions for 20/page (was 100)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 13:35:46 +08:00
浅念 4163e19f52 feat: product list pagination 20/page (was 100, all 48 fit on one page)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 13:33:52 +08:00
浅念 9af1be224d fix: hide catalog mega-menu toggle + search from trade-pro header nav
User feedback: only show configurable nav items, remove template-injected
Products dropdown and Search link.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 12:12:37 +08:00
浅念 8526231f38 fix: nav editor API calls use workspace api() signature (url, method, data)
The api() helper takes positional args, not fetch-style options object.
This caused 'not a valid HTTP method' error on save/publish.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 12:01:31 +08:00
浅念 fbda69035c style: polish workspace UI — tab/pagination/table/nav-editor refinements
- Type tabs: gradient active state, pill counts, inset shadow container
- Pagination: bordered buttons with primary next, page info with accent
- Data table: hover highlight, uppercase headers, softer shadow
- Nav editor: proper 6-col grid alignment (handle/name/route/up/down/del),
  column headers row, focused input glow, red delete hover

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 11:59:10 +08:00
浅念 0225c270ea feat: inline nav editor in workspace + styled type tabs
- 外观与设计: nav edit button opens modal directly in workspace,
  no page editor redirect needed; add/remove/reorder/edit nav items
  with save-draft + publish buttons
- 内容与页面: type tabs now use segmented-control design (active
  blue pill group with counts) instead of scattered buttons

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 11:45:16 +08:00
浅念 5e8ae60dfe feat: rebuild product detail page to match cms design (tabs/attrs/spec-table)
Task 12a: rebuild product detail to precisely match cms [slug].astro - sticky tab nav (muted bar, brand underline, single-row h-scroll) with .sf-tp-panel/.active switching via inline script (no-JS renders all panels flat); Product Details panel renders body HTML as rich-body with cms table rules (full-width, hairline borders, zebra, inline width/height override, cell div scrub); Specifications panel shows clean spec-table with two key/value pairs per row when specs exist; panel titles get the cms 3px brand underline. Breakpoints mapped cms 900/960 -> platform 900, cms 620 -> 620; product responsive rules consolidated in the 12a block and removed from the shared responsive block. Product title keeps h1 tag at cms h2 scale (2xl) per platform single-h1 contract. Note: most product.html and test edits were swept into concurrent commit 85e6d4a; this commit carries the pro.css 12a block and the h1 refinements.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 11:42:51 +08:00
浅念 85e6d4aeca feat: workspace UX — nav quick-access, content type tabs, list pagination
- 外观与设计: prominent 导航菜单 card linking to editor's siteDesign
- 内容与页面: type tab pills (全部/产品/文章/页面/...) with counts,
  replaces dropdown; content list paginated 20/page with prev/next
- Search resets page; tab click resets page

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-28 11:30:19 +08:00
浅念 df2a183dbf upgrade: adopt V8.34.1 (multi-image banner carousel + spec-table source modes)
Plain overlay (33 items, same-source lineage, zero patch replay).
Theme suites 35/35; full run 453 passed + 10 known Windows env fails
(suspect-module rerun confirms identical failure set).
Live: container 8.34.1-dev.1; hesupipe home leftover industrial-preset
blocks cleared via studio draft+publish flow — home now renders pure
trade-pro template (sf-section/Chinese blocks = 0).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 18:03:07 +08:00
浅念 391d22f1a8 feat: refine trade-pro variant pages (brand/service/faq/search/notfound)
Task 11 (layout port finale): rebuild the five thin variant pages in the
sf-tp design language, informed by upstream industrial/automotive
1.3.0/1.4.0 information architecture.

- brand: page-hero (breadcrumb Home > Brands > name, cover bg, anchor
  button) + related-product card grid (fields.brand == page title) +
  brand profile body only when authored; derived placeholder summary
  excluded, empty brands get an empty state, never fabricated intros.
- service: page-hero + 1.2/0.8 detail grid (article-body typography +
  sticky CTA card with contact/back links); empty body collapses to a
  centered solo column with the CTA card kept.
- faq: page-hero + article-body for the rich-text body (platform has no
  faq content type; sanitize strips details/summary so the typography
  layer carries it, block-driven details coexist via sf-canvas) +
  dark contact-guidance card; empty body swaps to an empty state.
- search: adopts the same platform mechanism as all four upstream
  themes (site-runtime.js ?q= client search over dist-root
  search-index.json); #sf-search/#sf-search-results/#sf-search-count
  hooks and .sf-search-page kept as JS contract, panel and injected
  result cards restyled via scoped cms-token overrides.
- notfound: branded dark-band 404 (icon macro, giant 404 h1, English
  copy, back-home + browse-products buttons); no end-cta.

CSS: Task 11 block appended to pro.css (new sf-tp-* classes only, own
900/620 media queries; shared hero/grid/typography responsive rules
come from existing 10a/10c/10d blocks; search overrides beat
factory.css by specificity without touching hooks).

Tests: test_trade_pro_variant_pages_structure covers brand fixture
(related filtering, empty forms), service/faq body-vs-empty, search
mechanism contract + noindex + index asset, 404 structure, v3 spot
checks (single h1, chrome, SVG arrows) and clean build report.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 16:32:15 +08:00
浅念 e21dbb6518 upgrade: adopt V8.33.1 — final merge, our patches upstreamed natively
V8.33.0 absorbed our entire platform patch set as native features
(discovery/env_for macro override/blocks.css priority/type-mapping fix/
frontend entries/locale override) and synced trade-pro from our remote;
V8.33.1 adds HESU PIPE industrial-theme home fixes (1.3.1).

Zero patch re-application this round — all verified native. Theme
suites 35/35; full run 428 passed + same 10 known Windows env fails
(FAILED set unchanged). Live: container 8.33.1-dev.1 healthy, hesupipe
192 entries intact, trade-pro build 203 pages 0 errors.

Patch registry retired to archive — future upgrades are plain overlay.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 14:27:17 +08:00
浅念 b5996bf2b1 docs: correct iron rule scope — process-artifact cleanup; launch checks kept separate
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 11:32:37 +08:00
浅念 1cc669ce5a docs: pre-launch cleanup iron rule — no fake/placeholder assets in production
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 11:26:02 +08:00
浅念 95982fad23 upgrade: adopt V8.32.0-dev.1 (theme preview iframe fix, editor simple mode)
Overlay 46 upstream items; full patch set re-applied (all patched files
reset by overlay regardless of upstream change status — lesson recorded).
Verified: theme suites 35/35; dual-baseline 418 passed vs pristine
389+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails).
Live: container 8.32.0-dev.1 healthy, hesupipe 192 entries intact,
trade-pro build 203 pages 0 errors.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 11:18:45 +08:00
浅念 8884e100f9 upgrade: adopt V8.31.1 (theme 1.3/1.4 redesigns, editor deep-canvas, guided launch, component library)
Overlay 190 upstream items (V8.22→8.31) preserving trade-pro theme,
registry tests, and design docs. Re-applied full patch set on identical
anchors (discovery/env_for/blocks.css/type-mapping/locale-override/
theme_color/frontend entries/test_theme_pro_v3 mods) plus compose pins.

Verified: theme suites 35/35; dual-baseline full run 415 passed vs
pristine 386+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails).
Live: container 8.31.1-dev.1 healthy, hesupipe 192 entries intact,
trade-pro build 203 pages 0 errors.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 09:43:17 +08:00
浅念 a63548c645 feat: port cms header/footer chrome visuals + mobile drawer into trade-pro
Task 10j: reshape the platform chrome DOM (sf-site-head/pro-header/
pro-navigation/pro-mega/pro-footer) into the cms Header.astro/Footer.astro
design via a pure CSS layer in trade-pro pro.css (--pro-* token bridge +
scoped 0,2,0 overrides): sticky glass header, right-aligned semibold nav
with brand underline hover, white dropdown cards with desktop hover/focus
reveal (>=1025px only; drawer semantics below), cms button CTA, dark
four-column-style footer with hairline copyright bar, cms wrap geometry.

Mobile drawer reuses the upstream V8.21.3 four-theme mechanism verbatim
(commercial.css locked styles + pro.js generic [data-pro-menu]/
#pro-navigation hooks trade-pro already emits); mobile_tabs is
template-driven so trade-pro gains the render block (English labels,
data-mobile-open-menu opens the shared drawer).

pro.html: +footer_nav-gated <h3>Quick Links</h3> (cms column heading),
+mobile tabs block. No DOM restructuring elsewhere; site_design data flow
(announcement/CTA/search/footer/mobile_tabs) and pro.js hooks intact.

Tests: +test_trade_pro_chrome_layout (structure/hooks/EN fallback nav/
css evidence/drawer assets + safe-area/mobile_tabs publish cycle).
35 passed in theme suite; full run 364 passed + same 10 known infra fails.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 17:53:14 +08:00
浅念 87ce104d7e feat: port cms standard layout into trade-pro
Task 10h (last regular layout). Design sources: cms applications.astro +
support.astro (generic content pages). Common form = PageHero (eyebrow/h1/
lead + in-page anchor button + cover bg) then content area.

- The structured sections in both sources (application card grid,
  FeatureGrid bands, anchor nav strip, doc cards, FAQ) are HESU dictionary
  content, not layout - not ported (fake data across sites). The platform
  standard page content is the rich-text body: section structure is carried
  by the body's own h2/img/tables (10g decision), typeset via the 10d
  sf-tp-article-body layer double-attached with sf-tp-standard-body.
- Empty body hides the body section and the hero anchor button (cms
  isRichAbout ternary); empty cover/summary hide bg/lead independently.
- Breadcrumb Home > title per platform page-level convention (10e/10f);
  support's trailing Cta stays covered by pro.html pro-end-cta.
- Zero new CSS rules: applications.astro itself ships no scoped styles and
  the template is pure composition (10c hero / 10b breadcrumb / 10a
  section-head / theme.css baselines); decision documented in pro.css.
- Test test_trade_pro_standard_layout_structure: build-flow page entry
  asserts hero/body containers; bootstrap /services/ page (meta.
  page_template='standard') verifies the template is not route-bound
  (explicit meta beats route-prefix inference) and the empty-data hiding.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 17:25:21 +08:00
浅念 0ec826bd4b feat: port cms case layout into trade-pro
Task 10g: rewrite pages/case.html from the thin 1-line variant to the cms
projects/[slug].astro design (pixel baseline dist/hesupipe/en/projects/):
PageHero (breadcrumb Home > Cases > title, cover bg) + 1.2fr/0.8fr detail
grid (overview block with location/industry rows + rich body via the 10d
typography layer; sticky side column with main photo, 3-col gallery tiles
and Results card) + Recommended Products + Other Projects (groups['case']
minus self), all empty-data sections hidden. Results points come from the
open fields.results convention (semicolon/newline separated); cms
dictionary fallback copy is never ported (fake data across sites).

Listing case branch (10c evaluation): core form (hero + cols-3 cards +
pagination) already matches cms projects list; only the hero copy voice
differed, so listing.html gains a case-aware eyebrow/lead fallback
(OUR PROJECTS). cms-specific tabs (no data source) and the FEATURED CASE
STUDY band (HESU-static dictionary content) stay unported, documented in
the template header.

Adds test_trade_pro_case_layout_structure (build-flow: gallery/results
structure, related-case dedup, empty-data hiding, /cases/ hero voice).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 16:59:52 +08:00
浅念 882b8cb1ec feat: port cms contact layout into trade-pro (info/form/no-fake-submit)
Task 10f. contact.html rebuilt from contact.astro + LeadForm.astro:
PageHero (breadcrumb/cover bg) -> 0.85/1.25 info+form-card grid ->
rich body section (body only). No-fake-submit dual form: configured
HTTPS form_endpoint renders external form (name/email/message +
pro-honeypot, 10b contract); unconfigured renders no <form> at all,
guidance card with real mailto when footer_email exists. Contact
items render only with real fields (email mailto; no fabricated
phone/address), cms map band dropped (no address data source).
CSS appended to pro.css with own 900/620 media blocks; new test
test_trade_pro_contact_layout_structure covers both shapes.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 16:34:28 +08:00
浅念 7d7e98adfa feat: port cms about layout into trade-pro
Task 10e: rewrite pages/about.html from the 2-row thin variant to the
full cms about page design (about.astro, pixel baseline
dist/hesupipe/en/about/): page hero with breadcrumb + cover backdrop +
in-page anchor button, company intro two-col with derived stats bar,
rich body (gated on body), advantages grid, dark mission band with
gallery backdrop and glass feature cards, gallery-driven facility card
grid (hidden when empty), certifications grid.

Data mapping: about page = ordinary page entry; cms dict-only stats and
factory copy have no platform fields, so stats reuse the 10a home
derivation (products/categories/brands/cases counts, hidden when all
empty) and facility cards are driven by page.cover + fields.gallery
(make_context gallery, deduped, cover first); markFloatImages is not
ported (sanitize strips class attributes, same conclusion as 10d) and
the body renders through body_copy + the 10d sf-tp-article-body
typography layer via dual classing.

CSS lands in pro.css under sf-tp-about-* reusing the 10a/10b/10c
components (two-col, stats, feature/card grids, section head, page
hero, breadcrumb); responsive collapse comes from the existing 10a/10c
media blocks, with about-specific 900/620 rules in a dedicated block
(767 intentionally empty, covered by 10c page-hero).

Tests: test_trade_pro_about_layout_structure drives a data-rich /about/
(PATCHed bootstrap entry with cover/summary/rich body/gallery + product
and post entries) and an empty custom-route about page
(meta.page_template), asserting structure, data mapping, and empty-data
section hiding.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:58:30 +08:00
浅念 f15ea85db4 docs: fix specificity notation in 10d css comment (review minor 1)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:38:23 +08:00
浅念 598f4695dd feat: port cms article detail layout into trade-pro + review minors
- article hero/meta/rich-body/author card/next-story/related sidebar
  per cms news/[slug] design; .pro-article-hero contract preserved
- review minors: back-link & CTA render even with 1-2 posts only;
  specificity comment notation corrected to (0,3,1)/(0,2,1)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:37:04 +08:00
浅念 1eddcf9136 feat: port cms article detail layout into trade-pro (hero/body/related)
Task 10d: rewrite trade-pro article.html from the thin pro-article
skeleton to the cms news/[slug].astro design (pixel baseline
dist/hesupipe/en/news/<slug>/):

- hero reuses the 10c sf-tp-page-hero component (cover as bg image +
  brand-soft overlay) with the breadcrumb inside; the platform contract
  class .pro-article-hero stays on the hero section and the pro-base
  centered/giant-h1 skeleton is flattened by specificity in pro.css
- meta row (category pill - publish_date - author), rich-text body via
  body_copy with a cms rich-body typographic layer, divider, author
  card, next-story navigation
- related band below the content: More News side box (120px thumb rows,
  3 items, self and next-story excluded) + dark side CTA + back link,
  1fr+300px grid collapsing at 900/620
- date field is meta.fields.publish_date (blueprints post definition),
  rendered raw as YYYY-MM-DD
- new responsive rules live in the 10d media blocks appended at the end
  of pro.css to avoid the 10c source-order cascade trap; the 620 hero
  h1 compact size is re-declared at the same specificity because the
  10d no-media h1 reset (0,4,0) outranks the 10c 620 rule (0,3,0)
- tests: test_trade_pro_article_layout_structure builds a site with a
  cover/date/rich-body post plus 4 other posts and asserts hero/meta/
  body/author/next/related structure, .pro-article-hero presence, no
  bare arrow characters

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 15:04:07 +08:00
浅念 ea2ac339e0 fix: listing review round + compose web build-timeout passthrough
- listing grid collapses at 900/620 (source-order fix), route-substring
  kind fallback gated to empty non-category listings, section-head shows
  item/page counts, Popular reads linked, category h1 assertions
- compose: SITEFORGE_BUILD_TIMEOUT_SECONDS now passed to web service
  (enqueue side reads it — upstream gap found during mirror builds)
- chore: ignore runtime state files

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 14:32:10 +08:00
浅念 8f8dfd19e5 fix: listing review round — responsive grid collapse, branch fallback, test assertions
Quality review fixes for Task 10c (2 Important + 5 Minor):
- [I1] sf-tp-card-grid--listing now collapses to 2 cols at 900px and
  compact gap at 620px: the 3-col declaration sits after the 10a media
  blocks in source order, so the fold rules must live in the new 10c
  media blocks to win at equal specificity
- [I2] tp_post_like trusts the first listing item's content type when
  the list is non-empty; the route-substring fallback now only applies
  to empty listings of kind=='listing' — /categories/post-sales-service/
  style slugs can no longer flip a product category page into the news
  branch
- [M3] empty-state negative assertions check the rendered attribute
  string, not the selector literal (previously always true)
- [M4] catalogue section-head intro is now an item/page count instead
  of duplicating the hero lead
- [M5] Popular reads entries link to the posts (same data as Latest,
  no analytics source on the platform)
- [M6] both /categories/pumps/ pagination pages assert exactly one h1
- [M7] side-panel sticky top uses --sf-tp-space-24

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 14:26:34 +08:00
浅念 9ea8369e2b feat: port cms listing layout into trade-pro (kind-branched cards/filters/pagination)
Task 10c. listing.html (category.html now includes it) replaces the thin
pro-inner-hero variant with the cms list designs:
- product-like listings (product/vehicle/brand/case/service) get the
  products/[...page].astro form: ported PageHero, 260px sticky category
  side panel, 3-col sf-tp-card grid reusing the 10a card components
- post-like listings (/news/, /post/) get the news/[...page].astro form:
  1fr+310px two-col layout, horizontal news rows (290px media + tag/
  title/summary/Read more), three aside boxes (Latest/Popular/count)
- pagination is the cms Pagination window (first/last + current-2..+2,
  ellipsis collapse) with arrow-left/arrow-right SVG icons and
  builder-consistent URLs (page 1 = section root)
- platform filter contract kept: .pro-filter-panel stays the immediate
  previous sibling of .pro-filter-scope (pro.js previousElementSibling
  lookup); cards/rows carry .pro-card + data-brand/data-category
- empty sections hide filters/grid/pagination behind a friendly empty
  state (noindex scaffold pages)

Test: test_trade_pro_listing_layout_structure drives a real build with
105 imported products + 3 posts, asserting both branches, static
pagination on /categories/pumps/ pages 1-2, contract adjacency, and
no bare arrow glyphs.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 14:06:15 +08:00
浅念 1f2e7529a2 docs: patch registry for V8_21_3 base
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 12:32:12 +08:00
浅念 601451f22b upgrade: adopt V8.21.3 (V8.13→8.21.3: P5 SFTP/S3, P6 multilingual, editor overhaul, enterprise hardening)
Overlay ~150 upstream items onto our V8.12 base, preserving trade-pro
theme, registry tests, and design docs. Re-applied our patch set
(discovery/env_for/blocks.css/type-mapping/theme_color/frontend entries,
test_theme_pro_v3 mods) — all anchors survived upstream evolution.

New platform enhancement (fixes upgrade-introduced regression):
multilingual.site_locale now honors settings_json.locale, plus
PUT /api/i18n/sites/{id}/locale — standalone English sites get
<html lang='en'> under the V8.15 locale-rewrite pipeline.

compose: adopt V8.21.3 (image 8.21.3-dev.1, /api/ready probes, MySQL/S3
env) with project name pinned to siteforge-v8-10 (data volumes).

Tests: 356 passed / 11 failed — all 11 confirmed pre-existing in
pristine V8.21.3 on this host (10 upstream Windows env + our build test
now green after locale fix). Patch registry updated in plan doc.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 12:31:03 +08:00
浅念 257c89e159 fix: product inquiry honeypot hidden + review minors (10b quality round)
- .pro-honeypot hidden under .sf-theme-trade-pro scope (was visible:
  pro-base hide rule needs .pro-inquiry ancestor, new form lacks it)
- drop redundant .sf-tp-photo class on placeholder branch (dual
  aspect-ratio, shadow asymmetry)
- spec table filters 'gallery' rows (string-form gallery leaked as a row)
- comment documents pro.js sibling-node constraint on gallery markup

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 11:43:52 +08:00
浅念 e017d3a809 fix: home visual feedback round — soft bg for features, branded placeholder, plan 10j
- advantages section gains section--soft (white cards were invisible on white)
- .pro-art placeholder redesigned: brand gradient + initials + small kind
  label, ring ornament hidden (was heavy gray block)
- plan: new Task 10j (port cms header/footer chrome visuals) per user
  feedback that overall look should match cms
- verified live: mirror build 7f1e8c47f0c4 (374/384 real images pulled,
  203 pages, 0 errors)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 11:00:13 +08:00
浅念 5ea0c8c5e8 feat: port cms product detail layout into trade-pro (gallery/specs/inquiry)
Rewrite pages/product.html from the 3-row skeleton to the cms
[slug].astro design: breadcrumb -> gallery (main + scrolling thumbs,
reusing the platform pro.js data-gallery-image hooks, zero new JS) +
summary column (eyebrow/h1/lead/brand+model/actions) -> flattened
Product details panel -> Specifications table from fields (hidden when
empty) -> related products on the home card grid -> inquiry section
(left contact info, right external form only when form_endpoint is
configured, CTA to /contact/ otherwise).

Component CSS lands in pro.css under .sf-theme-trade-pro with
900/620 breakpoints; stale .pro-specs tint rules removed (other
themes keep their pro-base skeleton); cross-theme skeleton assertion
in test_theme_pro_v3.py now excludes trade-pro; new
test_trade_pro_product_layout_structure covers the build output.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 10:17:31 +08:00
浅念 c318829ff3 feat: port cms home layout into trade-pro (hero/features/cards/cta + reveal JS)
Task 10a (Phase 3 first layout task). home.html now mirrors the cms
astro-site-runtime homepage section sequence: full-bleed hero (single
active slide; the platform has no multi-slide config, so the carousel
dots/JS are not ported), trustbar, two-col about with floating stats,
soft products band (4-card grid), dark applications band (2x2 case
tiles), advantages feature grid, soft news band (3-card grid), and the
closing cta band. Data maps to SiteForge context (page.cover/summary,
showcase, cases, stories, category/brand counts); empty sections hide
instead of rendering shells. All new component classes are sf-tp-*
prefixed and compose on the Task 8 base utilities in theme.css
(.wrap/.section/.eyebrow/.icon-circle/.sf-tp-btn).

CSS: the five cms components' scoped styles (PageHero, FeatureGrid,
CardGrid, Cta, SectionHead + the inline homepage bands) are extracted
into pro.css as the sf-tp-* component layer, tokens rewritten to
--sf-tp-*, breakpoints 900/767/620 preserved. theme.css accordingly
drops the superseded generic .cards/.card/.feature mobile baselines
and the .pro-home-hero em bridge, and retargets the dark-surface ghost
button hook from .cta-band to .sf-tp-cta.

Reveal: cms uses data-reveal everywhere; a ~15-line inline script at
the pro.html tail adds html.js + an IntersectionObserver that toggles
is-visible (the reduced-motion/no-JS exemptions already live in
theme.css from Task 8).

Tests: test_theme_registry gains test_trade_pro_home_layout_structure
(preview-render contract: sf-tp-hero, card grid, feature grid, cta,
no pro-industrial-hero residue, reveal script). The distinct-markup
tripwire in test_theme_pro_v3 is legitimately updated 4 -> 5 (renamed
to drop the stale "four"): with trade-pro now carrying its own
sf-tp-hero class, five themes yield five distinct hero signatures,
which is what the test always meant to enforce.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 09:23:30 +08:00
浅念 1dd510285a polish: icon sizing hardened for cross-browser (review I-1/M2/M3/M4)
- .sf-tp-icon CSS width/height (Safari doesn't support var() in SVG
  presentation attributes); --sm variant class replaces size= call sites
- search icon centered via translateY, decoupled from input height
- bare-arrow test: full charset (→←↗↘⌕▾) + line-level › whitelist
- new test: site.html tp_arrow must stay in sync with macro library path

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 09:00:50 +08:00
浅念 22b614118b feat: SVG icon macro library replaces bare text arrows in trade-pro
Task 9 (new design, not a cms port): _professional_components.html gains
an icon(name, size, cls) macro — 10 inline line-style glyphs (arrow-right,
arrow-left, chevron-down, check, phone, mail, location, download, search,
quote), 24x24 viewBox, stroke=currentColor, stroke-width 1.5, round
caps/joins, decorative aria-hidden + focusable=false, default size
var(--sf-tp-icon-size-md, 20px), unknown names fall back to arrow-right.
Every glyph is a single <path> so the d attribute needs no |safe.

All bare text arrows (->, <-, ↗, ▾, ⌕) in the macro library, pro.html,
site.html and pages/* are replaced with macro calls (site.html keeps a
self-contained copy of the arrow glyph because its rendering envs cannot
import the macro library); the filters macro search box gains an inline
search icon; footer links gain small arrows. theme.css adds .sf-tp-icon
alignment, in-button icon spacing, and search-box icon positioning.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:35:52 +08:00
浅念 afecc10aad fix: scope trade-pro element baselines to body class (review I-1/I-2/I-3)
- body/h1-h4/p/a/:focus-visible/label/input/details/summary now under
  .sf-theme-trade-pro so they win the cascade over platform pro-base.css
  (cms typography actually applies now)
- same scoping inside the 620px mobile block to keep overrides effective
- data-reveal gated behind html.js + comment states Task 10 JS dependency

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:22:41 +08:00
浅念 0859893e65 feat: port cms design tokens and base styles into trade-pro theme.css
Full port of astro-site-runtime tokens.css (183 tokens, V2 bright-blue)
and base.css (element baseline, layout utilities, forms, FAQ, reveal
motion, 620px mobile block) into the trade-pro theme. All cms variables
renamed with the --sf-tp- prefix keeping semantic names; button system
rebuilt as sf-tp-btn with sm/lg sizes and ghost/outline/round variants
so platform custom.css (.btn/.primary/.request/.button/.nav-btn) can
never restyle it. Phase-2 short token aliases (--sf-tp-primary etc.)
and .pro-* bridge rules retained, now driven by the cms tokens.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 08:07:34 +08:00
浅念 fbce5ecc1f docs: Phase 2 acceptance record — hesupipe on trade-pro, 203 pages, all gates green
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:59:49 +08:00
浅念 a59e46c10c fix: trade-pro workspace card description and preview colors (review round)
- design() desc map gains trade-pro entry (was rendering literal 'undefined')
- workspace.css: .theme-preview.trade-pro / .site-icon.trade-pro brand colors

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:57:23 +08:00
浅念 2527f7ced9 feat: register trade-pro in theme color map and all six frontend entry points
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:51:27 +08:00
浅念 2a2f943bf4 fix: trade-pro review fixes — drop shadow blocks.css, English presets, 7-item fallback nav
- remove themes/trade-pro/blocks.css (52-byte placeholder shadowed the
  platform 7KB block stylesheet via copy_blocks_css) and drop it from
  manifest styles; Phase 3 brings real component styles
- page-presets.json: all editor/bootstrap copy translated to trade B2B
  English; ids, block types, structure and hrefs identical to industrial
- fallback nav widened to all 7 default sections (Brands/Cases restored)
  so the documented false-positive window only relabels, never drops
  coverage; comment added next to the tp_needs_en_nav set
- test anchors '>Products<' on the built home page

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:40:49 +08:00
浅念 5797638caf feat: trade-pro skeleton theme package (Phase 2)
Fifth built-in theme: English-first international B2B skeleton registered
via manifest discovery, builds real sites end-to-end. pro.html derives
from industrial with lang=en, href-set value-comparison English fallback
nav (header + footer), sf-tp-* button classes and hard-coded #0b3d91
theme-color until the map entry lands. pages/ ships all 14 kinds; macro
library is an English passthrough copy pending the Phase 3 cms port.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 18:19:30 +08:00
浅念 702253f387 polish: copy_blocks_css minors + record editor dual-source observation
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:58:05 +08:00
浅念 960f7b1002 feat: theme-level blocks.css takes priority over platform asset
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:49:12 +08:00
浅念 712ccac058 polish: env_for hardening per code review (M1-M3)
- env_for validates theme against THEMES whitelist (defense in depth)
- degraded single-path envs are no longer cached
- tests: unknown-theme rejection, real macro shadowing semantics,
  degraded branch path + no-cache

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:45:40 +08:00
浅念 67b469d56d feat: per-theme Jinja env enables theme-level macro override
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:33:05 +08:00