feat: enhance ecommerce UI with typewriter animation, icon buttons, responsive layout, and refined design tokens

- 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
This commit is contained in:
2026-06-11 11:31:39 +08:00
parent c367198385
commit bbea5d1e58
14 changed files with 1963 additions and 15 deletions
+61
View File
@@ -30,6 +30,10 @@
white-space: nowrap;
}
.event-strip > * {
min-width: 0;
}
.web-shell[data-theme="dark"] .event-strip {
border-color: rgba(var(--accent-rgb), 0.2);
background: var(--bg-panel);
@@ -185,6 +189,7 @@
display: flex;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
min-width: 0;
gap: 8px;
}
@@ -1012,6 +1017,18 @@
}
@media (max-width: 640px) {
.event-strip {
justify-content: flex-start;
gap: 8px;
overflow-x: auto;
padding-inline: 12px 40px;
scrollbar-width: none;
}
.event-strip::-webkit-scrollbar {
display: none;
}
.brand-lockup__name {
font-size: 14px;
}
@@ -1030,3 +1047,47 @@
justify-content: space-between;
}
}
@media (max-width: 480px) {
.web-topbar {
gap: 8px;
padding-inline: 10px;
}
.brand-lockup {
flex: 1 1 auto;
gap: 8px;
}
.brand-lockup__name {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
}
.web-topbar__actions {
flex: 0 1 auto;
justify-content: flex-end;
}
.creator-button,
.beta-apply-button {
display: none;
}
.cookie-consent {
width: calc(100vw - 20px);
right: 10px;
bottom: 10px;
padding: 12px;
}
.cookie-consent__actions {
flex-wrap: wrap;
}
.cookie-consent__actions a,
.cookie-consent__actions button {
flex: 1 1 auto;
}
}