- generationRecordClient.ts: Enhance save deduplication with payload signature — replace simple recordId-based dedup with stableJsonStringify-based signature comparison; same recordId + same signature skips save, changed payload proceeds; add buildSaveSignature covering tool/mode/title/status/prompt/taskIds/assets/config/result/metadata; store signature alongside savedAt in recentlySavedRecords map for per-turn save accuracy
- EcommercePage.tsx: Introduce EcommerceHistoryTurn interface and multi-turn conversation architecture —
- Add EcommerceHistoryTurn with full generation context (status/output/platform/market/language/ratio/requirement/images/results/counts/modules/scenes/replicateLevel); EcommerceHistoryRecord gains status/errorMessage/turns[] fields
- beginEcommerceHistoryTurn() — start a new generation turn, create or append to record, persist to localStorage immediately
- updateLocalEcommerceHistoryTurn() — real-time turn status sync (generating→done/failed) with record summary mirroring via syncRecordSummaryWithTurn()
- restoreHistoryTurnInputs() — one-click parameter restoration from failed turns for retry
- upsertCanvasNode() — insert or update canvas node by ID (dedup by turnId), alternating row layout (x: index*420, y: 0 or 160)
- Generate flow wired to turns: status callbacks update turn state; cancel sets turn to failed; results written to turn.results
- Record detail conversation panel refactored from single-message to per-turn iteration — each turn renders user message (requirement + meta + assets) and assistant message (status-aware text + progress bar during generation + result thumbnails); failed turns show "恢复参数" retry button; generating turn shows EcommerceProgressBar
- openEcommerceHistoryRecord() loads all turns as canvas nodes with distributed positions; preserves generating turn tracking via activeHistoryTurnIdRef
- History list items display status label (生成中/失败/time)
- Product set preview backdrop moved to createPortal(document.body) with z-index 4000
- pages/ecommerce.css: Bump product-set-preview-backdrop z-index from 100 to 4000 for Portal rendering layer
- ecommerce-standalone.css: Title max-width expanded to 520px with gradient text effect (background-clip:text + linear-gradient), adjusted clamp font-size and line-height, added text-shadow glow; command option row switched from flex-wrap to CSS grid (6×44px) with centered layout for consistent icon button alignment; refined button sizing/spacing across composer toolbar
- ecommerce.css: Added high-specificity overrides for image workbench entry page — title min-height and heavy font-weight (860), rounded option buttons (15px border-radius), inline reference text with ellipsis overflow; responsive breakpoints at 760px and 540px with gradient title, compact row layout, adapted font scaling for narrow viewports (+631 lines)
- dark-green.css: Introduced comprehensive typography normalization using html body #root specificity — font-family/letter-spacing reset across all elements; semantic mapping for body text (p/em/li/td), strong/b, code blocks (font-mono), icon sets (anticon/shell-icon), interactive controls (button/label/tab/chip/badge/tag/pill), headings (h1-h6 with size variants), decorative text (subtitle/desc/hint/meta/caption/empty), and numeric values (score/number/count/value/amount/price); mobile responsive headline scaling at ≤767px; all rules preserve SVG/path/use elements from font override (+177 lines)
- EcommercePage.tsx: Add typewriter animation (useTypewriter hook) for slogan text with blinking cursor; replace text-based add/delete buttons with Ant Design icons (CloudUploadOutlined, DeleteOutlined); make command history panel responsive to window width (auto-collapse ≤1180px); update button labels from generic "添加" to context-specific "上传商品图" / "上传素材"
- New useTypewriter.ts hook: Character-by-character typewriter animation with configurable speed and pause-before-loop, auto-resets on text change
- reset.css: Add comprehensive HTML/body typography baseline (font-size, text-rendering, font-smoothing, line-height); extend reset coverage to select/canvas/svg elements; add overflow-wrap:anywhere for text-bearing elements; add min-width:0 to prevent form element overflow
- primitives.css: Add reusable typography utility classes (ui-page-title, ui-section-title, ui-body-copy) with design token references
- tokens.css: Expand design token set for typography scales, font weights, and leading values
- ecommerce-standalone.css: Add 689 lines of standalone ecommerce page styles
- Page CSS (ecommerce, image-workbench, more-tools, more, script-tokens, script-tokens-v5, studio-layout): Enhanced visual styles and layout refinements across all pages
- app-shell.css: Shell-level layout and styling improvements