merge: resolve EcommercePage.tsx conflict, integrate master into profile-account-polish

Keep master's EcommercePage.tsx (has more complete upload logic from prior conflict resolution). Accept all other master changes including canvas tool panels, task lifecycle, and workbench updates.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 14:05:39 +08:00
37 changed files with 3182 additions and 130 deletions
+632 -5
View File
@@ -2410,6 +2410,48 @@
border-color: rgba(239, 68, 68, 0.6);
}
.web-shell[data-ui-theme="dark-green"] .ai-chat-failed-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 10px;
}
.web-shell[data-ui-theme="dark-green"] .ai-chat-failed-actions button {
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 32px;
padding: 6px 12px;
border: 1px solid rgba(148, 163, 184, 0.28);
border-radius: 6px;
background: rgba(15, 23, 42, 0.62);
color: rgba(226, 232, 240, 0.92);
font-size: 12px;
cursor: pointer;
}
.web-shell[data-ui-theme="dark-green"] .ai-chat-failed-actions button:hover {
border-color: rgba(56, 189, 248, 0.42);
background: rgba(8, 47, 73, 0.45);
}
.web-shell[data-ui-theme="dark-green"] .ai-chat-failed-actions__release {
color: #fbbf24;
}
.web-shell[data-ui-theme="dark-green"] .ai-chat-task-billing-note {
margin-top: 10px;
padding: 8px 10px;
border: 1px solid rgba(45, 212, 191, 0.22);
border-radius: 6px;
background: rgba(13, 148, 136, 0.08);
color: rgba(204, 251, 241, 0.86);
font-size: 12px;
line-height: 1.6;
white-space: pre-line;
}
.web-shell[data-ui-theme="dark-green"] .ai-generation-pending-card__bar,
.web-shell[data-ui-theme="dark-green"] .ai-generation-pending-card.is-video .ai-generation-pending-card__bar {
position: absolute;
@@ -4951,6 +4993,332 @@
color: var(--accent);
}
/* Auth page: refined SaaS entry surface, preserving current auth behavior and OSS assets. */
.web-shell[data-ui-theme="dark-green"] .auth-page {
grid-template-columns: minmax(0, 1.55fr) minmax(400px, 0.9fr);
background: var(--dg-page);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase {
background: #0d0d0f;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__video {
opacity: 0.48;
filter: saturate(1.08) contrast(1.04);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__video-overlay {
align-items: center;
justify-content: center;
padding: clamp(36px, 6vw, 76px);
background:
linear-gradient(90deg, rgba(13, 13, 15, 0.86), rgba(13, 13, 15, 0.46) 58%, rgba(13, 13, 15, 0.72)),
linear-gradient(180deg, rgba(13, 13, 15, 0.28), rgba(13, 13, 15, 0.92));
text-align: left;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase-content {
display: grid;
gap: 14px;
width: min(620px, 100%);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__brand-row {
display: flex;
align-items: center;
gap: 16px;
min-width: 0;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__brand {
color: var(--accent);
font-size: 64px;
line-height: 0.96;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__tagline {
max-width: 480px;
color: var(--fg-muted);
font-size: 22px;
line-height: 1.45;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__features {
justify-content: flex-start;
gap: 10px;
margin-top: 2px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__features span {
border-color: rgba(255, 255, 255, 0.12);
background: rgba(255, 255, 255, 0.06);
color: var(--fg-body);
backdrop-filter: blur(12px);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase-stats {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
width: min(520px, 100%);
margin-top: 10px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase-stats span {
display: grid;
gap: 4px;
min-width: 0;
padding: 14px;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: var(--radius-sm);
background: rgba(16, 18, 20, 0.58);
color: var(--fg-soft);
backdrop-filter: blur(14px);
font-size: 12px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase-stats strong {
color: var(--fg-body);
font-size: 14px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-panel {
align-items: center;
padding: clamp(28px, 4vw, 48px);
border-left-color: rgba(255, 255, 255, 0.08);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.025), transparent),
var(--bg-surface);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-inner {
gap: 20px;
max-width: 420px;
padding: 0;
border: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-head {
gap: 7px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__logo {
width: 54px;
height: 54px;
margin-bottom: 2px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: var(--radius-md);
background: rgba(255, 255, 255, 0.035);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__title {
font-size: 24px;
line-height: 1.2;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__subtitle {
color: var(--fg-soft);
line-height: 1.5;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__mode-tabs {
gap: 4px;
padding: 4px;
border: 1px solid rgba(255, 255, 255, 0.065);
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, 0.022);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__mode-tabs button {
min-height: 38px;
padding: 0 12px;
border: 0;
border-radius: 9px;
font-weight: 700;
transition: background var(--transition-fast), color var(--transition-fast);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__mode-tabs button.is-active {
background: rgba(var(--accent-rgb), 0.13);
color: var(--accent);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs button {
min-height: 42px;
padding: 0 8px;
border-color: rgba(255, 255, 255, 0.07);
background: rgba(255, 255, 255, 0.018);
font-size: 12px;
font-weight: 600;
transition: border-color var(--transition-fast), background var(--transition-fast), color var(--transition-fast);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs button .anticon {
font-size: 14px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs button.is-active {
border-color: rgba(var(--accent-rgb), 0.42);
background: rgba(var(--accent-rgb), 0.1);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form {
gap: 14px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field {
gap: 7px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field > span {
color: var(--fg-muted);
font-weight: 700;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field input,
.web-shell[data-ui-theme="dark-green"] .auth-page__phone-row {
border-color: rgba(255, 255, 255, 0.075);
background: rgba(255, 255, 255, 0.026);
transition: border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field input {
min-height: 44px;
padding: 0 14px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field input:focus,
.web-shell[data-ui-theme="dark-green"] .auth-page__phone-row:focus-within {
border-color: rgba(var(--accent-rgb), 0.55);
background: var(--bg-elevated);
box-shadow: 0 0 0 3px rgba(var(--accent-rgb), 0.08);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field--error input,
.web-shell[data-ui-theme="dark-green"] .auth-page__field--error .auth-page__phone-row {
border-color: rgba(255, 90, 95, 0.64);
box-shadow: 0 0 0 3px rgba(255, 90, 95, 0.08);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__sms-row {
gap: 10px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__sms-btn {
min-height: 44px;
border-color: rgba(var(--accent-rgb), 0.42);
background: rgba(var(--accent-rgb), 0.08);
font-weight: 700;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__sms-btn:disabled {
background: rgba(255, 255, 255, 0.018);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__submit {
min-height: 46px;
padding: 0 16px;
border-radius: var(--radius-sm);
font-size: 15px;
font-weight: 800;
transition: background var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__submit:hover {
transform: translateY(-1px);
box-shadow: 0 12px 28px rgba(var(--accent-rgb), 0.16);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__notice {
border-color: rgba(255, 90, 95, 0.28);
background: rgba(255, 90, 95, 0.09);
line-height: 1.45;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-box {
display: grid;
gap: 12px;
padding: 14px;
border: 1px solid rgba(255, 255, 255, 0.075);
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, 0.022);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-title {
margin: 0;
color: var(--fg-body);
font-size: 13px;
font-weight: 800;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-input {
width: 100%;
min-height: 44px;
padding: 0 14px;
border: 1px solid rgba(255, 255, 255, 0.075);
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, 0.026);
color: var(--fg-body);
outline: none;
transition: border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-input:focus {
border-color: rgba(var(--accent-rgb), 0.55);
background: var(--bg-elevated);
box-shadow: 0 0 0 3px rgba(var(--accent-rgb), 0.08);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-actions {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-cancel,
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-confirm {
min-height: 38px;
border-radius: var(--radius-sm);
font-size: 13px;
font-weight: 750;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-cancel {
border: 1px solid rgba(255, 255, 255, 0.075);
background: rgba(255, 255, 255, 0.026);
color: var(--fg-muted);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__forgot-confirm {
border: 1px solid rgba(var(--accent-rgb), 0.42);
background: rgba(var(--accent-rgb), 0.12);
color: var(--accent);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__agreement {
line-height: 1.55;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__divider {
margin-top: 2px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__social-btn {
width: 42px;
height: 42px;
background: rgba(255, 255, 255, 0.018);
}
.web-shell[data-ui-theme="dark-green"] .profile-page {
height: 100%;
overflow-y: auto;
@@ -5077,6 +5445,12 @@
color: #fff;
box-shadow: none;
font-size: 11px;
opacity: 0;
transition: opacity 0.2s;
}
.web-shell[data-ui-theme="dark-green"] .profile-page__avatar-ring:hover .profile-page__avatar-edit {
opacity: 1;
}
.web-shell[data-ui-theme="dark-green"] .profile-page__avatar-edit:hover {
@@ -6370,6 +6744,14 @@
.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-edit {
width: 82px;
height: 82px;
justify-content: flex-start;
padding-left: 30px;
opacity: 0;
transition: opacity 0.2s;
}
.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-ring:hover .profile-page__avatar-edit {
opacity: 1;
}
.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-badge {
@@ -6808,6 +7190,7 @@
.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__avatar-edit {
width: 72px;
height: 72px;
padding-left: 24px;
}
.web-shell[data-ui-theme="dark-green"] .profile-page--dashboard .profile-page__counts {
@@ -8472,6 +8855,134 @@
color: var(--accent);
}
@media (max-width: 900px) {
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar {
top: 70px;
right: 12px;
left: 12px;
max-width: none;
overflow-x: auto;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-zoom-controls {
bottom: 14px;
left: 12px;
}
}
@media (max-width: 560px) {
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
align-items: center;
gap: 7px;
min-height: 82px;
padding: 8px;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__identity {
grid-column: 1 / 4;
max-width: none;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__status,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__autosave-status {
display: none;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__rename {
grid-column: 4;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__recent {
grid-column: 1;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__export {
grid-column: 2;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__save {
grid-column: 3;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__publish {
grid-column: 4;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar :is(
.studio-canvas-project-bar__rename,
.studio-canvas-project-bar__recent,
.studio-canvas-project-bar__export,
.studio-canvas-project-bar__save,
.studio-canvas-project-bar__publish
) {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 5px;
width: 100%;
min-width: 0;
min-height: 32px;
padding: 0 7px;
border-radius: 10px;
font-size: 11px;
font-weight: 780;
line-height: 1;
white-space: nowrap;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__rename::after {
content: "编辑";
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__recent span,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__export span,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__publish span,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__save span {
display: inline;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__recent span,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__export span,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__publish span {
width: 0;
max-width: 0;
overflow: hidden;
font-size: 0;
opacity: 0;
pointer-events: none;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__recent::after {
font-size: 11px;
content: "最近";
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__export::after {
font-size: 11px;
content: "导出";
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__publish::after {
font-size: 11px;
content: "提交";
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .studio-canvas-project-bar__recent em {
display: inline-flex;
min-width: 16px;
height: 16px;
align-items: center;
justify-content: center;
padding: 0 4px;
border-radius: 999px;
background: rgba(var(--accent-rgb), 0.16);
color: var(--accent);
font-size: 10px;
}
}
/* Responsive floating navigation: prevent squeeze/warp on narrow workspaces. */
.web-shell[data-ui-theme="dark-green"] .floating-nav {
flex-shrink: 0;
@@ -8902,21 +9413,43 @@
@media (max-width: 900px) {
.web-shell[data-ui-theme="dark-green"] .auth-page {
grid-template-columns: 1fr;
grid-template-rows: 200px 1fr;
grid-template-rows: 180px minmax(0, 1fr);
overflow-y: auto;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-panel {
padding: 24px 20px;
align-items: flex-start;
padding: 22px 20px 36px;
border-top: 1px solid var(--border-weak);
border-left: 0;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__video-overlay {
align-items: flex-start;
justify-content: center;
padding: 22px 24px;
text-align: left;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase-content {
gap: 9px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__brand {
font-size: 32px;
font-size: 34px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__tagline {
font-size: 16px;
font-size: 15px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__showcase-stats {
display: none;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-inner {
max-width: 520px;
margin: 0 auto;
}
.web-shell[data-ui-theme="dark-green"] .profile-page__body {
@@ -8926,9 +9459,82 @@
}
@media (max-width: 560px) {
.web-shell[data-ui-theme="dark-green"] .auth-page {
grid-template-rows: 132px minmax(0, 1fr);
}
.web-shell[data-ui-theme="dark-green"] .auth-page__video-overlay {
padding: 16px 18px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__brand-row {
align-items: flex-start;
flex-direction: column;
gap: 6px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__brand {
font-size: 28px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__tagline {
font-size: 13px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__features {
gap: 6px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__features span {
padding: 4px 8px;
font-size: 11px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-panel {
padding: 14px 14px 28px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__form-inner {
gap: 16px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__logo {
width: 46px;
height: 46px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__title {
font-size: 21px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 6px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs button {
min-height: 38px;
padding: 0 4px;
font-size: 10px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__auth-tabs button .anticon {
font-size: 13px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__field input,
.web-shell[data-ui-theme="dark-green"] .auth-page__sms-btn {
min-height: 42px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__sms-row {
gap: 8px;
}
.web-shell[data-ui-theme="dark-green"] .auth-page__sms-btn {
padding: 0 10px;
font-size: 12px;
}
.web-shell[data-ui-theme="dark-green"] .profile-page__body {
@@ -9052,6 +9658,27 @@
}
/* Canvas SaaS polish: refined production-tool surfaces without changing canvas behavior. */
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .web-shell__content,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .web-shell__page {
padding-bottom: 0;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .web-shell__page {
overflow: hidden;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .canvas-page,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .canvas-page .workspace-page-shell__content,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .canvas-page .studio-tool-layout--canvas,
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .canvas-page .studio-canvas {
min-height: 0;
height: 100%;
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .canvas-page .studio-tool-layout--canvas-empty {
grid-template-rows: minmax(0, 1fr);
}
.web-shell[data-ui-theme="dark-green"][data-view="canvas"] .canvas-page .studio-canvas {
background-image:
radial-gradient(circle at 18% 8%, rgba(var(--accent-rgb), 0.055), transparent 30%),